作业四:个人项目---小学四则运算
本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186
我的github远程仓库的地址:https://github.com/Ingramm/lxc
一、题目要求
像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。
具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:23 - 3 * 4 = 11。
扩展要求:
1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。
2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。
二、设计思路
开发工具:Code::Blocks
编程语言:C语言
代码主要函数:
main()函数、randomNumber(int n)函数、add(int m,int n)函数、jianfa(int m,int n)函数、chengfa(int m,int n)函数、chufa(int m,int n)函数。
代码实现思路:
用结构体定义运算式子,包含运算式子的属性。在main()函数中,用户输入式子数量后,调用randomNumber(int n)函数随机产生式子,并存入结构体变量中,然后通过switch语句来判断式子符号优先级,计算式子结果,并存入结构体变量中。最后判断用户输入的答案是否正确并给出本次做题总分。
三、主要代码
main()函数主要代码:
for(i=0;i<n;i++) { if(formula[i].m >= 2 && formula[i].n <2) { switch(formula[i].m) { case 2: sum1[i] = chengfa(formula[i].firstNumber,formula[i].secondNumber); break; case 3: sum1[i] = chufa(formula[i].firstNumber,formula[i].secondNumber); break; } switch(formula[i].n) { case 0: formula[i].sum = add(sum1[i],formula[i].thirdNumber); break; case 1: formula[i].sum = jianfa(sum1[i],formula[i].thirdNumber); break; } } else if(formula[i].n >= 2 && formula[i].m <2) { switch(formula[i].n) { case 2: sum1[i] = chengfa(formula[i].secondNumber,formula[i].thirdNumber); break; case 3: sum1[i] = chufa(formula[i].secondNumber,formula[i].thirdNumber); break; } switch(formula[i].m) { case 0: formula[i].sum = add(formula[i].firstNumber,sum1[i]); break; case 1: formula[i].sum = jianfa(formula[i].firstNumber,sum1[i]); break; } }
randomNumber(int n)函数的主要代码:
void randomNumber(int n) { int i; srand(time(NULL)); for(i=0;i<n;i++) { formula[i].firstNumber = rand()%100 + 1; formula[i].secondNumber = rand()%100 + 1; formula[i].thirdNumber = rand()%100 + 1; formula[i].m = rand()%4; switch(formula[i].m) { case 0: formula[i].fuhao1 = '+'; break; case 1: formula[i].fuhao1 = '-'; break; case 2: formula[i].fuhao1 = '*'; break; case 3: formula[i].fuhao1 = '/'; break; } formula[i].n = rand()%4; switch(formula[i].n) { case 0: formula[i].fuhao2 = '+'; break; case 1: formula[i].fuhao2 = '-'; break; case 2: formula[i].fuhao2 = '*'; break; case 3: formula[i].fuhao2 = '/'; break; } } }
运算函数代码:
int add(int m,int n) { int sum = 0; sum = m + n; return sum; } int jianfa(int m,int n) { int sum = 0; sum = m - n; return sum; } int chengfa(int m,int n) { int sum = 0; sum = m * n; return sum; } int chufa(int m,int n) { int sum = 0; sum = m / n; return sum; }
四、运行结果
五、主要问题
主要问题:本次作业主要是用结构体来实现的,用结构体来对运算式子进行保存。但做完作业后,发现其实用结构体是有弊端的,在内存资源上,结构体数组要固定给它分配内存空间,如果用不完,就会出现内存浪费的情况,而用指针来对式子进行保存,就不用预留内存空间,就比结构体要好。不过,由于本次作业做好了,只能课后再进行更改。
六、时间估计
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
Planning | 计划 | 8 | 6 |
· Estimate | 估计这个任务需要多少时间 | 12 | 10 |
Development | 开发 | 85 | 80 |
· Analysis | 需求分析 (包括学习新技术) | 8 | 10 |
· Design Spec | 生成设计文档 | 0 | 0 |
· Design Review | 设计复审 | 3 | 5 |
· Coding Standard | 代码规范 | 4 | 3 |
· Design | 具体设计 | 10 | 15 |
· Coding | 具体编码 | 30 | 30 |
· Code Review | 代码复审 | 10 | 10 |
· Test | 测试(自我测试,修改代码,提交修改) | 15 | 30 |
Reporting | 报告 | 9 | 6 |
· | 测试报告 | 5 | 9 |
· | 计算工作量 | 5 | 2 |
· | 并提出过程改进计划 | 0 |