四则运算题目生成程序(基于控制台)
2017-03-06 12:48 c_xx 阅读(293) 评论(1) 编辑 收藏 举报源代码地址:https://git.coding.net/c_xx/02.git
题目描述:
- 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
- 运算符为 +, −, ×, ÷
- 并且要求能处理用户的输入,并判断对错,打分统计正确率。
- 要求能处理用户输入的真分数, 如 1/2, 5/12 等
- 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目:Myapp.exe -n 10
需求分析:
- 支持整数及真分数的四则运算;
- 能够处理用户的输入并判断对错从而得出正确率;
- 使用-num参数控制生成题目的个数。
功能设计:
- 随机产生四则运算符;
- 随机产生整数或真分数四则运算;
- 对分数结果实现约分运算;
- 根据用户需求确定出题数目;
- 处理用户输入并判断正误,计算正确率。
代码说明:
为了实现需求,共设计了4个功能函数,分别是:
char Operator() //随机选取运算符
int maxNumber(int k, int l) //辗转相除法求最大公约数函数
void integer() //整数运算
void fraction() //真分数运算
char Operator() //随机选取运算符 { char op; srand(time(0)); int i=rand()%4+1; switch(i) { case 1: return '+'; case 2: return '-'; case 3: return '*'; case 4: return '/'; } }
int maxNumber(int k, int l) //辗转相除法求最大公约数函数 { while(k%l!=0){ int t=k%l; k=l; l=t; } return l; }
void integer() //整数运算 { int g; int x,y; char op; srand(time(0)); x=rand()%100+1; y=rand()%100+1; op=Operator(); cout<<x<<op<<y<<"="<<endl; cout<<"请输入运算结果:"; if(op=='+') //整数“+”运算 { cin>>g; if(g==x+y) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<x+y<<endl<<endl; mistake++; } } else if(op=='-') //整数“-”运算 { cin>>g; if(g==x-y) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<x-y<<endl<<endl; mistake++; } } else if(op=='*') //整数“*”运算 { cin>>g; if(g==x*y) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<x*y<<endl<<endl; mistake++; } } else if(op=='/') //整数“/”运算 { cin>>result; element=x; denominator=y; maxNum=maxNumber(element,denominator); element=element/maxNum; denominator=denominator/maxNum; if(denominator!=1) { sprintf_s(answer, "%d/%d",element ,denominator); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } else { sprintf_s(answer, "%d",element); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } } }
void fraction() //真分数运算 { srand(time(NULL)); memset(result,0, sizeof(result)); memset(answer,0, sizeof(answer)); int a,b,c,d; a=rand()%100+1; b=rand()%100+1; c=rand()%100+1; d=rand()%100+1; char op; while(a<=b||c<=d) { a=rand()%100+1; b=rand()%100+1; c=rand()%100+1; d=rand()%100+1; } op=Operator(); cout<<"("<<b<<"/"<<a<<")"<<op<<"("<<d<<"/"<<c<<")"<<"="<<endl; cout<<"请输入运算结果:"; cin>>result; if(op=='+') //分数“+”运算 { element=(b*c)+(a*d); denominator=a*c; maxNum=maxNumber(element,denominator); element=element/maxNum; denominator=denominator/maxNum; if(denominator!=1) { sprintf_s(answer, "%d/%d",element ,denominator); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } else { sprintf_s(answer, "%d",element); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } } else if(op=='-') //分数“-”运算 { element=(b*c)-(a*d); denominator=a*c; maxNum=maxNumber(element,denominator); element=element/maxNum; denominator=denominator/maxNum; if(denominator!=1) { sprintf_s(answer, "%d/%d",element ,denominator); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } else { sprintf_s(answer, "%d",element); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } } else if(op=='*') //分数“*”运算 { element=b*d; denominator=a*c; maxNum=maxNumber(element,denominator); element=element/maxNum; denominator=denominator/maxNum; if(denominator!=1) { sprintf_s(answer, "%d/%d",element ,denominator); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } else { sprintf_s(answer, "%d",element); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } } else if(op=='/') //分数“/”运算 { element=b*c; denominator=a*d; maxNum=maxNumber(element,denominator); element=element/maxNum; denominator=denominator/maxNum; if(denominator!=1) { sprintf_s(answer, "%d/%d",element ,denominator); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } else { sprintf_s(answer, "%d",element); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } } }
测试运行:
PSP展示:
|||||
|:--|:--|:--|:--|
|**PSP2.1**|**Personal Software Process Stages**|**Time (%) Senior Student(/hour)**|**Time (%)(/hour)**|
|· Planning|计划|2|1.5|
|· Estimate|估计这个任务需要多少时间|38|49|
|· Analysis|需求分析 (包括学习新技术)|2|2.5|
|· Coding Standard|代码规范|0.5|0.5|
|· Design|具体设计|1.5|2|
|· Coding|具体编码|30|40|
|· Test|测试(自我测试,修改代码,提交修改)|1|1|
|Reporting|报告|1|1.5|
|:--|:--|:--|:--|
|**PSP2.1**|**Personal Software Process Stages**|**Time (%) Senior Student(/hour)**|**Time (%)(/hour)**|
|· Planning|计划|2|1.5|
|· Estimate|估计这个任务需要多少时间|38|49|
|· Analysis|需求分析 (包括学习新技术)|2|2.5|
|· Coding Standard|代码规范|0.5|0.5|
|· Design|具体设计|1.5|2|
|· Coding|具体编码|30|40|
|· Test|测试(自我测试,修改代码,提交修改)|1|1|
|Reporting|报告|1|1.5|