面向对象程序设计寒假作业3
这个作业属于哪个课程 | 面向对象程序设计2020 |
---|---|
这个作业要求在哪里 | 面向对象程序设计寒假作业3 |
这个作业的目标 | 1.继续完成作业二的编程题。2.优化架构,思考代码的拓展性,比如我需要增加其他功能,如选择,循环语句怎么办。3.思考:可以参考现有的编程语言,把这些语言的内容加入。如选择、循环语句、函数、或者扩大数字范围,支持负数等。 |
作业正文 | 编程题 |
其他参考文献 | 正文中将会出现 |
编程题
改善编程题的初步思考有以下几方面:
1.改进该编程可以进行负十到负一的运算和转化(个人感觉这个改进还算比较简单,难的应该在更高位数的运算和转化)。
if(i>=0) print_numberTransformChinese(i);
else{
printf("负");
print_numberTransformChinese(abs(i)) ;
}
2.增加了关于乘除的部分,然后我用了很笨的方法,如下。
int sum(int a,int b,int c,char d[],char e[])
{
int s;
if(strcmp(d,"增加")==0)s=a+b;
else if(strcmp(d,"减少")==0) s=a-b;
else if(strcmp(d,"乘以")==0) s=a*b;
else if(strcmp(d,"除以")==0) s=a/b;
if(strcmp(e,"增加")==0)s=s+c;
else if(strcmp(e,"减少")==0) s=s-c;
else if(strcmp(e,"乘以")==0) s=s*c;
else if(strcmp(e,"除以")==0) s=s/c;
return s;
}
3.改进它可以进行两位数的运算和转化,例如:十几,几十或者几十几。
借鉴了已交作业的同学,我去了解了一下strncpy函数,这对我对该编程的功能进行优化有很大的帮助,并且要特别注意
如果source的前n个字符不含NULL字符,则结果不会以NULL字符结束。如果n<source的长度,
只是将source的前n个字符复制到destinin的前n个字符,不自动添加'\0',也就是结果destinin不包括'\0',
需要再手动添加一个'\0'。
新增了两个函数
int superTransform(char a[]);//将大于十的中文转化为数字
void print_super(int a);//用中文输出大于十的数字
具体函数如下
int superTransform(char a[])
{
int number;
char a1[3];
if(strlen(a)==4){//一个汉字两个字节,当出现两个汉字表示的数字时有一下两种情况
strncpy(a1,a,2);
a1[2]='\0';
if(strcmp(a1,"十")==0){
number=chineseTransformNumber(a1);
strncpy(a1,a+2,2);
a1[2]='\0';
number=number+chineseTransformNumber(a1);
}//当出现十几的情况
else number=chineseTransformNumber(a1)*10;
}//当出现几十的情况
else{
strncpy(a1,a,2);
a1[2]='\0';
number=chineseTransformNumber(a1)*10;
strncpy(a1,a+4,2);
a1[2]='\0';
number=number+chineseTransformNumber(a1);
}//这是出现几十几的情况
return number;
}
void print_super(int a)
{
if(a<20){
if(a%10==1)printf("十一");
else if(a%10==2)printf("十二");
else if(a%10==3)printf("十三");
else if(a%10==4)printf("十四");
else if(a%10==5)printf("十五");
else if(a%10==6)printf("十六");
else if(a%10==7)printf("十七");
else if(a%10==8)printf("十八");
else if(a%10==9)printf("十九");
}
else if(a%10==0){
if(a/10==2)printf("二十");
else if(a/10==3)printf("三十");
else if(a/10==4)printf("四十");
else if(a/10==5)printf("五十");
else if(a/10==6)printf("六十");
else if(a/10==7)printf("七十");
else if(a/10==8)printf("八十");
else if(a/10==9)printf("九十");
else if(a/10==10)printf("一百");
}
else{
print_numberTransformChinese(a/10);
printf("十");
print_numberTransformChinese(a%10);
}
}
我写的代码都太浅显了应该能比较容易懂,两位数的输出我分成了三种情况来转化:十几、几十、几十几。
接下来就是补充上次没有做成功的脚本们
编译脚本
最后一张图片一不小心命名错误了,应该是编译脚本。是我粗心了
将.txt的文本改为后缀为.bat,要设置为ANSI的编码格式,再次点开.bat的文件,我的钱包.cpp就编译为钱包.exe。
测试脚本
单元测试
chineseTransformNumber函数测试
superTransform函数测试
sum函数测试
print_numberTransformChinese函数测试
print_super函数测试
最终测试
两位数的运算和转化成功实现。
出现负数的运算和转化基本成功实现,关于负数部分我只编写到负十到负一的范围。
加减乘除的运算和转化成功实现。