2020面向对象程序设计寒假作业3 题解


2020面向对象程序设计寒假作业3 题解


Markdown在线编辑器 - www.MdEditor.com
作业描述 作业详情
这个作业属于哪个课程 2020福大数计面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业3
这个作业的目标 1.继续完成编程题
2.发布博客
作业正文 见下文
其他参考文献 1、BAT 批处理脚本教程
2、C语言_来了解一下GCC编译器编译C可执行脚本的过程

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

编程题要求:

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

题目要求:

编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:

翻译过来就是 输入汉字,用汉字进行变量定义和赋初值、代替数进行加减运算。
(数据范围定在099。010的数直接表示。1119的数用“十x”表示。2099的数用“x十x表示”

分解需求:

分解为三个模块(即 exchange函数、cum函数、back函数)


exchange函数 用于将汉字转换成数字进行加减运算和输出。

int exchange(char s4[])
{
    char b[11][4]={"零","一","二","三","四","五","六","七","八","九","十"};
    for(int i=0;i<=10;i++){
    if( !strcmp(s4,b[i]) ) return i;
    }
}

cum函数 用于判断进行的运算 并据此将exchange得到的数进行正负转换 和原始数相加减。

int cum(char s3[],char s4[]){
    if( !strcmp(s3,"增加") ) { return exchange(s4); }
    if( !strcmp(s3,"减少") ) { return -exchange(s4); } 
}

back函数用于输出 将数字转换为汉字形式 并在输出时根据数据范围进行不同格式输出。

int back(int wal){
    char a[10][4]={"零","一","二","三","四","五","六","七","八","九"};
    if( wal >= 10 && wal <= 99){
        int x = wal%10;
        wal/=10;
        if(wal!=1) 
            printf("%s十%s",a[wal],a[x]);
        else    
            printf("十%s",a[x]);
    }
    else printf("%s",a[wal]);
}

###解释: - 单元测试:对每一个函数进行测试,这代表了你需要把代码分到不同的文件,使用不同的主函数切换测试/运行。 - 编译脚本:运行该脚本后无需任何输入就能自动编译全部代码,并输出编译结束的代码。 - 测试脚本:运行该脚本后可以自动的编译并运行所有测试样例,并输出测试结果。
**对 exchange函数 进行测试**
- 测试函数
int main(){
	int x,y;
	char str1[100],str2[100];
	char s[11][4] = {"零","一","二","三","四","五","六","七","八","九","十"}; 
	printf("exchange函数测试:\n");
	freopen("Test1.txt","r",stdin); 
	while (scanf ("%s",str1) != EOF){
		y = exchange(str1);
		if (!strcmp(str1,s[y]))
		printf ("%d pass\n",y);
		else printf ("error\n");
	}
}
  • 编译脚本





  • 测试脚本
    使用freopen函数,编译后自动运行



    对 cum函数进行测试:

  • 测试函数
int main(){
	int x,y;
	char str2[100];
	printf("cum函数测试:\n");
	freopen("Test2.txt","r",stdin);
		while (scanf("%s %d",str2,&x) != EOF){
			if (strcmp(str2,"增加") && strcmp(str2,"减少")) {
			printf ("error\n"); continue;
			}
			y = cum(str2,x);
			if (!strcmp(str2,"增加")){
				if (y >= 0)
				printf ("%d  pass\n",y); 
				else printf("error\n");}
			else if (!strcmp(str2,"减少")){
				if (y <= 0) 
				printf ("%d  pass\n",y); 
				else printf ("error\n"); } 
		}
	// 测试 cum 函数
}
  • 编译脚本:
    与 Test1 编译脚本类似。


    -测试脚本


对整个程序测试:


![](https://img2018.cnblogs.com/blog/1925094/202002/1925094-20200213151935422-716982975.png) ![](https://img2018.cnblogs.com/blog/1925094/202002/1925094-20200213152049957-386095753.png) ![](https://img2018.cnblogs.com/blog/1925094/202002/1925094-20200213152100457-709609668.png) ![](https://img2018.cnblogs.com/blog/1925094/202002/1925094-20200213152114182-141741357.png)

思考:

1.加入负数情况
若输入的汉字前有负,可以先将汉字转为阿拉伯数字。
再判断增加减少,进而转到cum函数进行计算。


以上就是我第三次作业的全部内容。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM