个人作业1--四则运算题目生成程序
coding地址
https://coding.net/u/lianyg/p/firstsubject/git/tree/master
一、题目要求
1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
2.运算符为 +, −, ×, ÷
3.并且要求能处理用户的输入,并判断对错,打分统计正确率。
4.要求能处理用户输入的真分数, 如 1/2, 5/12 等
5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
二、实现步骤
1.需求分析:
自动生成题目,整数与整数,分数与分数,整数与分数,并判断输入的答案是否正确,并得出正确率。
2.功能设计:
随机数生成,随机产生题目,校对答案。
3.设计实现:
生成随机数
int getrandom(int n){ int random=rand()%n; return random+1; }
检查是不是最简的分数
int check(int a,int c){ for(int i=2;i<=a;i++) { if(a%i==0&&c%i==0){ return 0; break; } } return 1; }
创造题目的函数
void create_sub(){ cout<<endl; string yunsuanfu; int change1,change2; int x,y; int q1,q2,q3,q4; int answer,reply; int a,c=-1; char b; change1=getrandom(4); switch(change1) { case 1:yunsuanfu='+';break; case 2:yunsuanfu='-';break; case 3:yunsuanfu='*';break; case 4:yunsuanfu="÷";break; } change2=getrandom(2); switch(change2){ case 1:{ x=getrandom(100); y=getrandom(100); cout<<x<<yunsuanfu<<y<<"="; if(change1==1) { cin>>reply; answer=x+y; if(answer==reply) { cout<<"right"; right_num++; } else{ cout<<"wrong"; } } else if(change1==2) { cin>>reply; answer=x-y; if(answer==reply) { cout<<"right"; right_num++; } else{ cout<<"wrong"; } } else if(change1==3) { cin>>reply; answer=x*y; if(answer==reply) { cout<<"right"; right_num++; } else{ cout<<"wrong"; } } else{//除法 cin>>a; b=cin.get(); if(b!='\n'){ cin>>c; } if(c==0) { cout<<"wrong"; break; } else if(c!=-1) { if(check(a,c)==0){ cout<<"wrong"; break; } } answer=x/y; if((c==-1&&answer==a)||(c!=-1&&(answer==a/c))){ cout<<"right"; right_num++; } /*cin>>a;b=cin.get(); if(b!='\n') { cin>>c; }*/ } };break; case 2:{ q1=getrandom(100); q2=getrandom(100); q3=getrandom(100); q4=getrandom(100); cout<<"("<<q1<<"/"<<q2<<")"<<yunsuanfu<<"("<<q3<<"/"<<q4<<")"<<"="; if(change1==1) { cin>>a; b=cin.get(); if(b!='\n'){ cin>>c; } answer=(q1*q4+q3*q2)/(q2*q4); if(c==-1&&answer==a) { cout<<"right"; right_num++; } else if(c!=-1&&answer==(a/c)&&check(a,c)==1) { cout<<"right"; right_num++; } else { cout<<"wrong"; } } else if(change1==2) { cin>>a; b=cin.get(); if(b!='\n'){ cin>>c; } answer=(q1*q4-q3*q2)/(q2*q4); if(c==-1&&answer==a) { cout<<"right"; right_num++; } else if(c!=-1&&answer==(a/c)&&check(a,c)==1) { cout<<"right"; right_num++; } else { cout<<"wrong"; } } else if(change1==3) { cin>>a; b=cin.get(); if(b!='\n'){ cin>>c; } answer=(q1*q3)/(q2*q4); if(c==-1&&answer==a) { cout<<"right"; right_num++; } else if(c!=-1&&answer==(a/c)&&check(a,c)==1) { cout<<"right"; right_num++; } else { cout<<"wrong"; } } else{ cin>>a; b=cin.get(); if(b!='\n'){ cin>>c; } answer=(q1*q4)/(q2*q3); if(c==-1&&answer==a) { cout<<"right"; right_num++; } else if(c!=-1&&answer==(a/c)&&check(a,c)==1) { cout<<"right"; right_num++; } else { cout<<"wrong"; } } };break; } /*system("pause");*/ }
三、psp
Personal Software Process Stages |
Estimated Time(min) |
Actual Time (min) |
计划 |
5 |
5 |
·任务估计 |
5 |
5 |
开发 |
100 |
200 |
·需求分析 (包括学习新技术) |
15 |
8 |
·生成设计文档 |
5 |
6 |
·设计复审 |
5 |
3 |
·代码规范 |
1 |
1 |
·具体设计 |
5 |
8 |
·具体编码 |
60 |
100 |
·代码复审 |
5 |
2 |
·测试(自我测试,修改代码,提交修改) |
10 |
20 |
报告 |
30 |
25 |
·测试报告 |
10 |
20 |
·计算工作量 |
5 |
5 |
·提出过程改进计划 |
5 |
0 |
四、运算结果:
五、总结
代码写的还是有些没弄好的,像从控制台输入参数,觉得并未写清楚,好像是要在int main()里添加别的东西完成,还有就是整数和分数的运算并未做出来,只做了整数与整数,分数于分数的运算,并且代码中的一段创造函数的代码过长,等等缺陷。还有一个是写代码时,没有太多注解。
posted on 2017-03-06 22:17 vanspumakappa 阅读(275) 评论(4) 编辑 收藏 举报