这个作业属于哪个课程 | 【面向对象程序设计寒假作业3】(https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10288) |
---|---|
这个作业的目标 | 1.继续完成作业二的编程题。2.优化架构,思考代码的拓展性,比如我需要增加其他功能,如选择,循环语句怎么办。3.思考:可以参考现有的编程语言,把这些语言的内容加入。如选择、循环语句、函数、或者扩大数字范围,支持负数等。 |
作业正文 | 【面向对象程序设计作业3】(https:////www.cnblogs.com/dudu340/p/12310718.html) |
【仓库地址】(https://github.com/dudu340/FZU--OOP--homework)(但是我的代码并没有编译成功,具体失败见下文) |
编程题
对于编程题的优化,我首先对于我上次作业的输出进行了调整,改为了:
# include<stdio.h> # include<string.h> int main() { int sum,m,n; int zhi(char s[15]); int zengjia(char s[15]); int jianshao(char s[15]); char *shuchu(int sum); char s1[15],s2[15],s3[15],s4[15]; char str1[15],str2[15],str3[15]; char a[15],b[15]; scanf("%s %s %s %s",s1,s2,s3,s4); sum=zhi(s4); while(1) { scanf("%s %s %s",str1,str2,str3); if(strcmp(str1,"输出")==0) break; else { if(strcmp(str2,"增加")==0) { sum=sum+zengjia(str3); } else if(strcmp(str2,"减少")==0) { sum=sum-jianshao(str3); } } } scanf("%s %s",a,b); if(strcmp(b,str2)==0) { if(sum<10) { printf("%s",*shuchu(sum)); } else { m=sum/10;n=sum%10; if(n==0) { printf("%s十",*shuchu(m)); } else { printf("%s十%s,*shuchu(m),*shuchu(n)); } } return 0; } int zhi(char s[15]) { if(strcmp(s,"零")==0) return 0; else if(strcmp(s,"一")==0) return 1; else if(strcmp(s,"二")==0) return 2; else if(strcmp(s,"三")==0) return 3; else if(strcmp(s,"四")==0) return 4; else if(strcmp(s,"五")==0) return 5; else if(strcmp(s," 六")==0) return 6; else if(strcmp(s,"七")==0) return 7; else if(strcmp(s,"八")==0) return 8; else return 9; } int zengjia(char s[15]) { if(strcmp(s,"零")==0) return 0; else if(strcmp(s,"一")==0) return 1; else if(strcmp(s,"二")==0) return 2; else if(strcmp(s,"三")==0) return 3; else if(strcmp(s,"四")==0) return 4; else if(strcmp(s,"五")==0) return 5; else if(strcmp(s," 六")==0) return 6; else if(strcmp(s,"七")==0) return 7; else if(strcmp(s,"八")==0) return 8; else return 9; } int jianshao(char s[15]) { if(strcmp(s,"零")==0) return 0; else if(strcmp(s,"一")==0) return 1; else if(strcmp(s,"二")==0) return 2; else if(strcmp(s,"三")==0) return 3; else if(strcmp(s,"四")==0) return 4; else if(strcmp(s,"五")==0) return 5; else if(strcmp(s," 六")==0) return 6; else if(strcmp(s,"七")==0) return 7; else if(strcmp(s,"八")==0) return 8; else return 9; } char *shuchu(int x) { char s1[3]="一",s2[3]="二",s3[3]="三",s4[3]="四",s5[3]="五",s6[3]="六",s7[3]="七",s8[3]="八",s9[3]="九"; if(x==1) return s1; else if(x==2) return s2; else if(x==3) return s3; else if(x==4) return s4; else if(x==5) return s5; else if(x==6) return s6; else if(x==7) return s7; else if(x==8) return s8; else return s9; }
但是这样又导致了另外一个问题的出现:
所以这个可能也告败了(但是还没想到其他的实现方法,也有可能是我的地址没有弄好,下次再试试)
接下来,就是对代码进行一定的扩展。
一、负数的输入输出
在我看来,在生活中并没有直接说输入一个负数,其实就是“减去一个正数”,所以其实我们并没有必要考虑负数的输入,只要考虑负数的输出就可以了。然后我的实现方法是先判断是大于0还是小于0,然后:
else { printf("负"); if(sum>-10) { printf("%s",*shuchu(sum)); } else { sum=-sum; m=sum/10;n=sum%10; if(n==0) { printf("%s十",*shuchu(m)); } else { printf("%s十%s",*shuchu(m),*shuchu(n)); } } }
这样做的话,我认为就可以将输出为负数的问题解决了。但是显然,我这个做法太麻烦了。其实有更简单的,只是我把正、负数的代码又复制了一遍,其实这样就可以了。
if(sum<0) { printf("负"); sum=-sum; }
二、关于乘除法的实现
我觉得乘除法的实现与加减法的实现其实相差并不多,只要我再创建两个函数来分别实现乘除法就可以了。具体实现方法如下:
int cheng(char s[15]); int chu(char s[15]); if(strcmp(str2,"乘上")==0) { sum=sum*cheng(str3); } else if(strcmp(str2,"除以")==0) { sum=sum/chu(str3); } int cheng(char s[15]) { if(strcmp(s,"零")==0) return 0; else if(strcmp(s,"一")==0) return 1; else if(strcmp(s,"二")==0) return 2; else if(strcmp(s,"三")==0) return 3; else if(strcmp(s,"四")==0) return 4; else if(strcmp(s,"五")==0) return 5; else if(strcmp(s," 六")==0) return 6; else if(strcmp(s,"七")==0) return 7; else if(strcmp(s,"八")==0) return 8; else return 9; } int chu(char s[15]) { if(strcmp(s,"零")==0) return 0; else if(strcmp(s,"一")==0) return 1; else if(strcmp(s,"二")==0) return 2; else if(strcmp(s,"三")==0) return 3; else if(strcmp(s,"四")==0) return 4; else if(strcmp(s,"五")==0) return 5; else if(strcmp(s," 六")==0) return 6; else if(strcmp(s,"七")==0) return 7; else if(strcmp(s,"八")==0) return 8; else return 9; }
或者也可以采用另一种方法,如下所示:(仅以乘法示例)
int cheng(char s[15],int sum); sum=cheng(str3,sum); int cheng(char s[15],int sum) { int m,n; m=zhi(str3); n=m*sum; return n; }
在乘法这个函数中,对输入的数组(str3)再运用一个函数(zhi),这样可以对输入的数值进行判断,然后再进行运算后,对最终的数值返回。这样就可以实现乘法运算了。
至于其他各位大佬早就实现的输入数为几十的问题,我目前还没有什么想法。至于其他的扩展我也还没有想法,后续会再去努力。
反思
这三次的作业,其实绝大部分都是我原先都不会的,虽然到最后我也没有将作业真正做得好,但是我在这三次作业中学到了很多的新知识,学会了如何使用命令行和脚本语言(虽然只是粗略浅的使用)等,但毕竟是一个进步。新学期马上就开始了,再努力!
来源:https://www.cnblogs.com/dudu340/p/12310718.html