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字(不包含代码)。
题目要求:
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:
一
翻译过来就是 输入汉字,用汉字进行变量定义和赋初值、代替数进行加减运算。
(数据范围定在0~99。0~10的数直接表示。11~19的数用“十x”表示。20~99的数用“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");
}
}
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 函数
}
思考:
1.加入负数情况
若输入的汉字前有负,可以先将汉字转为阿拉伯数字。
再判断增加减少,进而转到cum函数进行计算。
以上就是我第三次作业的全部内容。