这个作业属于哪个课程 | 【面向对象程序设计寒假作业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),这样可以对输入的数值进行判断,然后再进行运算后,对最终的数值返回。这样就可以实现乘法运算了。
至于其他各位大佬早就实现的输入数为几十的问题,我目前还没有什么想法。至于其他的扩展我也还没有想法,后续会再去努力。
反思
这三次的作业,其实绝大部分都是我原先都不会的,虽然到最后我也没有将作业真正做得好,但是我在这三次作业中学到了很多的新知识,学会了如何使用命令行和脚本语言(虽然只是粗略浅的使用)等,但毕竟是一个进步。新学期马上就开始了,再努力!