zoukankan      html  css  js  c++  java
  • 面向对象程序设计寒假作业3

    作业描述 详情
    这个作业属于哪个课程 2020面向对象程序设计
    这个作业要求在哪里 面向对象程序设计寒假作业3
    这个作业的目标 1.继续完成编程题
    2.发布博客
    作业正文 面向对象程序设计寒假作业3
    其他参考文献

    编程题(请使用C语言或者C++完成以下题目):

    • 继续完成作业二的编程题。
    • 优化架构,思考代码的拓展性,比如我需要增加其他功能,如选择,循环语句怎么办。
    • 思考:可以参考现有的编程语言,把这些语言的内容加入。如选择、循环语句、函数、或者扩大数字范围,支持负数等。

    编程题要求:

    1.读题,提取出题目的要求。
    2.分解需求,把需求分解为几个你觉得不太相关的模块。
    3.思考每个模块怎么写,可以从简单的模块开始写。
    4.对于不会的问题进行查阅资料。
    5.对于每一个模块设计测试用例。
    6.详细记录下以上每一步,并写在博客中。
    7.不要求完全做出来,但要求记录详细。
    8.建议博客长度不少于1000字(不包含代码)。

    解释

    • 单元测试:对每一个函数进行测试,这代表了你需要把代码分到不同的文件,使用不同的主函数切换测试/运行。
    • 编译脚本:运行该脚本后无需任何输入就能自动编译全部代码,并输出编译结束的代码。
    • 测试脚本:运行该脚本后可以自动的编译并运行所有测试样例,并输出测试结果。

    解题

    - 编译脚本

    • 运行该脚本后无需任何输入就能自动编译全部代码,并输出编译结束的代码。

    - 单元测试/测试脚本

    (第二次作业的时候理解错测试脚本的意思了,这次补一下)

    运行该脚本后可以自动的编译并运行所有测试样例,并输出测试结果

    对于可以运行所有测试样例,我用循环限定输入次数来限制输出,要是不限制会无限输出

    • 0-10中文输入转换为阿拉伯数字
    #include<stdio.h>
    #include<string.h>
    int changeToTen (char num_zt[100]);//处理零到十的输入的转化 
     int main()
     {
     	char a[100];
     	int b,i;
     	printf("这里是零到十转换测试
    ");
     	freopen("0-10输入转换.txt","r",stdin);
     	for(i=0;i<11;i++)
     	{
     		scanf("%s",a);
     		b=changeToTen(a);
     	 if(b==0)
    	printf("0 right
    ");
    	else if(b==1)
    	printf("1 right
    ");
    	else if(b==2)
    	printf("2 right
    ");
    	else if(b==3)
    	printf("3 right
    ");
    	else if(b==4)
    	printf("4 right
    ");  
    	else if(b==5)
    	printf("5 right
    ");
    	else if(b==6)
    	printf("6 right
    ");
    	else if(b==7)
    	printf("7 right
    ");
    	else if(b==8)
    	printf("8 right
    ");
    	else if(b==9)
    	printf("9 right
    ");
    	else if(b==10)
    	printf("10 right
    ");
    	else
    	printf("error
    ");
    }
     }
      int changeToTen (char num_zt[100])//处理零到十的输入的转化 
     {
     	
     	if(strcmp(num_zt,"零")==0)return 0;
    	else if(strcmp(num_zt,"一")==0)return 1; 
    	else if(strcmp(num_zt,"二")==0)return 2;
    	else if(strcmp(num_zt,"三")==0)return 3;
    	else if(strcmp(num_zt,"四")==0)return 4;  
    	else if(strcmp(num_zt,"五")==0)return 5;
    	else if(strcmp(num_zt,"六")==0)return 6;
    	else if(strcmp(num_zt,"七")==0)return 7;
    	else if(strcmp(num_zt,"八")==0)return 8;
    	else if(strcmp(num_zt,"九")==0)return 9;
    	else if(strcmp(num_zt,"十")==0)return 10;
     }
    
    • 效果

    • 整十,十几的中文输入转换为阿拉伯数字

    #include<stdio.h>
    #include<string.h>
    int changeAboutTen (char num_ten[100]); //处理整十和十几的输入
     int changeToTen (char num_zt[100]);//处理零到十的输入的转化
     int main()
     {
     	char a[100];
     	int b,i;
     	freopen("整十,十几输入.txt","r",stdin); 
     	printf("这是整十,十几的测试
    ");
     	for(i=0;i<4;i++)
     	{
     		scanf("%s",a);
     		b=changeAboutTen(a);
     		if(b>=10&&b<=20||b%10==0&&b>20)
     		printf("%d right
    ",b);
     		else
     		printf("error
    ");
    	}
     }
      int changeAboutTen (char num_ten[100])//处理整十和十几的输入 
     {
     	char second_num[100];
     	int num;
    	strncpy(second_num,num_ten+2,2);//复制后两个字符,即第二个汉字  
    	num_ten[2]='';//保留第一个汉字,去除第二个汉字 
    	second_num[2]='';//切记要加! 
    	if(changeToTen(num_ten)==10)//判断第一个汉字是否是十 
    	num=10+changeToTen(second_num);//如果是十几 
    	else
    	num=10*changeToTen(num_ten);//如果是整十 
    	return num; 
     }
     int changeToTen (char num_zt[100])//处理零到十的输入的转化 
     {
     	
     	if(strcmp(num_zt,"零")==0)return 0;
    	else if(strcmp(num_zt,"一")==0)return 1; 
    	else if(strcmp(num_zt,"二")==0)return 2;
    	else if(strcmp(num_zt,"三")==0)return 3;
    	else if(strcmp(num_zt,"四")==0)return 4;  
    	else if(strcmp(num_zt,"五")==0)return 5;
    	else if(strcmp(num_zt,"六")==0)return 6;
    	else if(strcmp(num_zt,"七")==0)return 7;
    	else if(strcmp(num_zt,"八")==0)return 8;
    	else if(strcmp(num_zt,"九")==0)return 9;
    	else if(strcmp(num_zt,"十")==0)return 10;
     }
    

    • 其他两位数中文输入转换为阿拉伯数字
    #include<stdio.h>
    #include<string.h>
    int changeOthers (char num_oth[100]); //处理其他两位数的输入
     int changeToTen (char num_zt[100]);//处理零到十的输入的转化
     int main()
     {
     	char a[100];
     	int b,i;
     	printf("这里是其他两位数的转换测试
    ");
     	freopen("其他两位数处理.txt","r",stdin);
     	for(i=0;i<4;i++)
     	{
     		scanf("%s",a);
     		b=changeOthers(a);
     		if(b>10&&b%10!=0&&b<=99)
     		printf("%d right
    ",b);
     		else
     		printf("error
    ");
    	}
     }
     int changeToTen (char num_zt[100])//处理零到十的输入的转化 
     {
     	
     	if(strcmp(num_zt,"零")==0)return 0;
    	else if(strcmp(num_zt,"一")==0)return 1; 
    	else if(strcmp(num_zt,"二")==0)return 2;
    	else if(strcmp(num_zt,"三")==0)return 3;
    	else if(strcmp(num_zt,"四")==0)return 4;  
    	else if(strcmp(num_zt,"五")==0)return 5;
    	else if(strcmp(num_zt,"六")==0)return 6;
    	else if(strcmp(num_zt,"七")==0)return 7;
    	else if(strcmp(num_zt,"八")==0)return 8;
    	else if(strcmp(num_zt,"九")==0)return 9;
    	else if(strcmp(num_zt,"十")==0)return 10;
     }
     int changeOthers (char num_oth[100])//处理其他两位数输入 
     {
     	char first_num[100],third_num[100];
     	int num;
     	strncpy(first_num,num_oth,2);//取第一个汉字,即十位数 
     	first_num[2]='';//切记要 !
     	strncpy(third_num,num_oth+4,2);//取第三个汉字,即个位数 
     	third_num[2]='';//切记要 !
    	num=changeToTen(first_num)*10+changeToTen(third_num);
    	return num; 
     }
    
    • 效果

    • 0-10阿拉伯数字转换为中文输出

    #include<stdio.h>
    #include<string.h>
    char printToTen(int single_D);//处理输出0-10 
     int main()
     {freopen("0-10输出处理.txt","r",stdin);
     	char a[100];
     	int b,i;
     	printf("这里是输出零到十的测试
    ");
     		for(i=0;i<10;i++)
     		{
     			scanf("%d",&b);
    		 	printToTen(b);
    		 	printf("
    ");
    		 }
     		return 0;
     }
     char printToTen(int single_D)//处理输出0-10 
     { 
     		if(single_D==0)printf("零 pass");
    	else if(single_D==1)printf("一 pass");
    	else if(single_D==2)printf("二 pass");
    	else if(single_D==3)printf("三 pass");
    	else if(single_D==4)printf("四 pass");
    	else if(single_D==5)printf("五 pass");
    	else if(single_D==6)printf("六 pass");
    	else if(single_D==7)printf("七 pass");
    	else if(single_D==8)printf("八 pass");
    	else if(single_D==9)printf("九 pass");
    	else if(single_D==10)printf("十 pass");
    }
    
    • 效果

    • 其他两位数阿拉伯数字转中文输出
    #include<stdio.h>
    #include<string.h>
    char printTwoDigits(int two_D);//处理输出两位数 
    char printUnitsDigits (int units_D);//处理输出两位数中的个位数
     int main()
     {
     	char a[100];
     	int b,i;
     	printf("这里是输出其他两位数的测试
    ");
     	freopen("其他两位数输出.txt","r",stdin);
     		for(i=0;i<4;i++)
     		{
     			scanf("%d",&b);
    		 	printTwoDigits(b);
    		 	printf("
    ");
    		 }
     	return 0;
     }
     char printTwoDigits(int two_D)//处理输出两位数 
    {
    		 int tens_digit,units_digit;
     		units_digit=two_D%10;//取出它的个位数 
     		two_D=two_D/10;
     		tens_digit=two_D;        //取出它的十位数 
     		 if(tens_digit==1)printf("一十");//对十位数处理 
    	else if(tens_digit==2)printf("二十");
    	else if(tens_digit==3)printf("三十");
    	else if(tens_digit==4)printf("四十");  
    	else if(tens_digit==5)printf("五十");
    	else if(tens_digit==6)printf("六十");
    	else if(tens_digit==7)printf("七十");
    	else if(tens_digit==8)printf("八十");
    	else if(tens_digit==9)printf("九十");
    	else if(tens_digit==10)printf("一百"); 
    	if(units_digit!=0)printf("%s",printUnitsDigits (units_digit));//如果不是整十,则另外输出个位数 
    
    	 }	
    char printUnitsDigits (int units_D)//处理输出两位数中的个位数 
    {
    	if(units_D==1)printf("一");
    	else if(units_D==2)printf("二");
    	else if(units_D==3)printf("三");
    	else if(units_D==4)printf("四");  
    	else if(units_D==5)printf("五");
    	else if(units_D==6)printf("六");
    	else if(units_D==7)printf("七");
    	else if(units_D==8)printf("八");
    	else if(units_D==9)printf("九");
    }
    
    • 效果

    • 增加减少转换

    #include<stdio.h>
    #include<string.h>
     int Calculate(int num,char ope[100],int cha_num);//处理加减乘除转化 
     int main()
     {
     	char a[100];
     	int b,c,i;
     	printf("这里是计算的测试
    ");
    	 freopen("加减转换.txt","r",stdin);
     		for(i=0;i<4;i++)
     		{
     			scanf("%d %s %d",&b,a,&c);
    		 	printf("%d
    ",Calculate(b,a,c));
    		 }
     	return 0;
     }
     int Calculate(int num,char ope[100],int cha_num)//处理加减乘除转化 
     {
     	if(strcmp(ope,"增加")==0)
        num=num+cha_num;
    	if(strcmp(ope,"减少")==0)
    	num=num-cha_num;
    	if(strcmp(ope,"乘以")==0)
    	num=num*cha_num;
    	if(strcmp(ope,"除以")==0)
    	num=num/cha_num;
    	return num;
     }
    

    • 遇到的问题:没想到这次作业还是遇到了问题,而且这个问题比较尴尬,我还以为设置了一次ANSI编码就会默认都是ANSI,然而我的电脑并没有,后来自然导致我的中文输入到里头都是乱码,测试始终不成功,在不经意的一查,才发现不是ANSI,耽搁了好久。/(ㄒoㄒ)/~~

    • 总代码测试


    思考

    • 扩大数字范围
      • 目前还没想出什么更好的办法,我想到的方法是,对于输入的中文数字处理是继续用strlen()测输入的中文字符的长度,从而判断是几位数的输入,再用strcpy把每一位数单独出来转换为阿拉伯数字,最后再合成一个数字。对于输出的话,跟原先的做法的区别也就是,比如输出三位数,那就多了“一百”,“五百”这样的开头,输出四位数,则在开头加上“一千”“两千”罢了。其实感觉跟我原先的做法没有什么大区别,只是增加了几个函数。
    • 增加负数
      • 这个我的想法,对于输入,判断如果有“负”字就先把后面的中文字符复制到一个新的字符串里,利用中文转换阿拉伯数字的函数转换成阿拉伯数字,再在前面加一个负号即可,输出时判断如果小于零,就在输出时在前面加“负”字即可
  • 相关阅读:
    使用Dundas控件在web应用上展现多维数据集
    silverlight for olap version milestone 07 updated!
    版本管理客户端工具
    多维数据集数据聚合性能笔记
    关于生成一个随机数组
    Silverlight Dashboards and gauges from codeplex
    在Silverlight下用Visifire显示多维数据集中的数据
    用所能用
    在Vista配置SSAS通过HTTP远程连接的方法.
    手术日记
  • 原文地址:https://www.cnblogs.com/2002ljy/p/12295197.html
Copyright © 2011-2022 走看看