题目要求:
- 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
- 运算符为 +, −, ×, ÷
- 并且要求能处理用户的输入,并判断对错,打分统计正确率。
- 要求能处理用户输入的真分数, 如 1/2, 5/12 等
- 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
需求分析:
1.要求随机生成四则运算题目,要随机获取运算符及数字(包括整数和真分数)。
获取运算符:
1 char getOp()//获取随机运算符 2 { 3 char op[]={'+','-','*','/'}; 4 srand((unsigned)time(NULL)); 5 return op[rand()%4]; 6 }
获取随机数字则用rand()函数。其中整数运算控制在100内,分数控制在10内。
2.要支持真分数的运算
首先,对于一个分数运算的结果要进行约分。这里使用辗转相除法
1 int gcd(int a,int b)//辗转相除法 2 { 3 int t; 4 while(b) 5 { 6 t=a%b; 7 a=b; 8 b=t; 9 } 10 return a; 11 }
然后根据具体情况进行求解。
此处会设计到将两个char型连接。使用strcat(),其原型如下:
extern char *strcat(char *dest, const char *src);
3.要求能够处理用户的输入,并判断对错,统计正确率。
此处会涉及到字符与整数相互转换的两个函数:
当运算结果要转换为字符时:
char*itoa(int value,char*string,int radix);
当用户输入要生成的题目数时需要将输入的字符串转换为int型:
int atoi(const char *nptr);
判断对错使用的是字符串的比较函数strcmp()。这里将用户输入的答案定义为answer,将系统运算的正确结果定义为result,比较二者,相同则认为答案正确,否则答案错误显示正确答案。
1 cin>>answer; 2 if(strcmp(answer,result) == 0)//比较answer和result 3 { 4 cout<<"回答正确!"<<endl<<endl; 5 r++; 6 } 7 else 8 { 9 cout<<"回答错误!"<<endl<<"正确答案是"<<result<<endl<<endl; 10 }
还有一开始就应全局定义一个变量r,用来记录答对的题目数。总的题目数是用户自己输入的变量n。正确率则是r/n。
1 float G; 2 int n; 3 G=(float)r/(float)n; 4 cout<<endl<<"你的正确率是"<<G*100<<"%!";
4.要求能处理用户输入的真分数。
将用户的输入answer设定为char型。
char answer[10]
5.使用 -n 参数控制生成题目的个数。
1 int main(int argc,char *argv[])//argc是命令行总的参数个数;argv[]是argc个参数 2 { 3 ... 4 int n; 5 n=atoi(argv[2]);//把字符串型转换成int型 6 cout<<"-----------------------------------"<<endl; 7 cout<<"以下生成"<<n<<"道四则运算题目"<<endl; 8 cout<<"-----------------------------------"<<endl; 9 ... 10 }
测试运行:
源代码地址:https://coding.net/u/xxs24/p/homework1_xxs007/git
PSP表格:
PSP2.1 | Personal Software Process Stages | Estimated Time(min) | Actual Time (min) |
Planning | 计划 | 15 | 20 |
· Estimate | 估计这个任务需要多少时间 | 180 | 210 |
Development | 开发 | 120 | 150 |
· Analysis | 需求分析 (包括学习新技术) | 30 | 40 |
· Design Spec | 生成设计文档 | 10 | 15 |
· Design Review | 设计复审 | 5 | 6 |
· Coding Standard | 代码规范 | 5 | 8 |
· Design | 具体设计 | 30 | 40 |
· Coding | 具体编码 | 60 | 80 |
· Code Review | 代码复审 | 10 | 20 |
· Test | 测试(自我测试,修改代码,提交修改) | 15 | 20 |
Reporting | 报告 | 20 | 30 |
· | 测试报告 | 5 | 8 |
· | 计算工作量 | 5 | 8 |
· | 并提出过程改进计划 | 5 | 8 |
总结:
本次实验是软件工程课程的第一次作业,由于编程能力较弱,本着想提高自己编程能力的想法,通过帮助粗略的完成本次实验。不过有个缺憾就是,本想将自动生成的题目一次性全部显示在屏幕上,但是由于无法处理用户的输入而放弃这个思路。在完成本次作业的过程中,遇到的问题有,处理分数,后来经过百度知道分数的处理可以用辗转相除法。还有使用 -n 参数控制生成题目的个数,也知道了可以使用atoi函数。还有一些函数的用法,都经过了一番研究之后才明白。
希望下次实验能够将时间把握在预估时间内,也可以在设计过程中,做一些简单的笔记,这样以后运用起来会更加的得心应手。