本次作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2166
我的github远程仓库的地址:https://github.com/LinsenLiang/Aika
一、题目要求:
具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:23 - 3 * 4 = 11
扩展要求:
1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。
2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。
二、个人软件过程耗时估计与统计表
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
Planning | 计划 | 4 | 6 |
· Estimate | 估计这个任务需要多少时间 | 4 | 6 |
Development | 开发 | 10 | 13 |
· Analysis | 需求分析 (包括学习新技术) | 1 | 1 |
· Design Review | 设计复审 | 1 | 1 |
· Coding Standard | 代码规范 | 1 | 1 |
· Design | 具体设计 | 1 | 1 |
· Coding | 具体编码 | 4 | 6 |
· Code Review | 代码复审 | 1 | 1 |
· Test | 测试(自我测试,修改代码,提交修改) | 1 | 2 |
三、实现
1 #include<stdio.h> 2 #include<time.h> 3 #include<stdlib.h> 4 5 int testNum; //题目个数 6 int num1,num2,num3; //四则运算的三个数值 7 int result; //四则运算正确答案 8 int userAnswer; //用户答案 9 int score = 0; //用户回答正确个数 10 int operator1,operator2; //运算符 11 12 void inputTestNum(); //获取题目个数 13 void test(); //题目 14 void Answer(int result); //获取用户答案 15 void randomNumber(); //随机产生1~99的整数 16 void randomOperator(); //随机产生1~4的整数 17 void resultCheck(int ret); //判断产生答案是否是负数 18 int main() 19 { 20 inputTestNum(); 21 printf(" "); 22 test(); 23 printf("正确率:%d%%",score*100/testNum); 24 }
四、实现过程中的问题
1.式子运算结果不能为负数(这和判断方法有关,预计是把所有情况分开判断,后来发现不能解决某些情况的判断,只能通过result结果判断正负,导致很多时候循环很难结束,得不到合适的运算式子)
比如:两个运算符均为减号时,由于三个数都是0~100间的随机整数,num2+num3的值很容易比num1大,然后重新生成三个随机数,判断结果是否为负数,一直循环,直到生成的随机数的差满足不为负数的条件。
2.代码优化程度不够,打不到预计的效果。
五、运行结果