面向对象程序设计寒假作业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个字符,不自动添加'',也就是结果destinin不包括'',
需要再手动添加一个''。

新增了两个函数

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]='';
   	if(strcmp(a1,"十")==0){
   		number=chineseTransformNumber(a1);
   	strncpy(a1,a+2,2);
   	a1[2]='';
   	number=number+chineseTransformNumber(a1);
		}//当出现十几的情况
   	else number=chineseTransformNumber(a1)*10;
   }//当出现几十的情况
	else{
		strncpy(a1,a,2);
   	a1[2]='';
   	number=chineseTransformNumber(a1)*10;
   	strncpy(a1,a+4,2);
   	a1[2]='';
   	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函数测试

最终测试


两位数的运算和转化成功实现。

出现负数的运算和转化基本成功实现,关于负数部分我只编写到负十到负一的范围。

加减乘除的运算和转化成功实现。

原文地址:https://www.cnblogs.com/ponynice/p/12297209.html