#include<iostream>#include<stdlib.h>#include<ctime>#include<conio.h>usingstd::cin;usingstd::cout;usingstd::endl;//计算式数量intconstNum=10;//计算式中最大数intconstMaxNum=10;enumenOp{Add,Subtract,Multiply,Divide};//加法intaddFun(intleft,intright){returnleft+right;}//减法intsubFun(intleft,intright){returnleft-right;}//乘法intmulFun(intleft,intright){returnleft*right;}//除法intdivFun(intleft,intright){returnleft/right;}//将枚举类型转换为字符类型,以便输出。charenum2char(enOpop){switch(op){caseAdd:return'+';caseSubtract:return'-';caseMultiply:return'x';caseDivide:return'/';}return'';}//计算生成表达式的正确结果。intmyResult(intleft,intright,enOpop){switch(op){caseAdd:returnaddFun(left,right);caseSubtract:returnsubFun(left,right);caseMultiply:returnmulFun(left,right);caseDivide:returndivFun(left,right);}return0;}//检查生成计算式的正确与否。其中减法结果不能为负数,除法结果不能为小数。boolcheckFormula(intleft,intright,enOpop){switch(op){caseAdd:returntrue;caseSubtract:{if(left<right)returnfalse;returntrue;}caseMultiply:returntrue;caseDivide:{if(double(left/right)!=double(double(left)/double(right)))returnfalse;returntrue;}}returnfalse;}//依据给定操作符,生成符合条件的表达式。voidgetFormula(int*left,int*right,enOpop){//srand(time(NULL));for(;;){*left=1+rand()%MaxNum;*right=1+rand()%MaxNum;if(checkFormula(*left,*right,op))break;}}intmain(){//操作符左值intleft[Num];//操作符右值intright[Num];//用户输入计算结果intresult[Num];//操作符+-*/enOpoper[Num];//正确答案个数intanswerRight=0;cout<<"正在生成,请稍等。"<<endl;//随机种子srand(time(NULL));//开始生成计算表达式。for(inti=0;i<Num;i++){//srand((unsigned)time(NULL));//操作符oper[i]=enOp(rand()%4);getFormula(&left[i],&right[i],oper[i]);}cout<<"生成计算式完成,开始答题!"<<endl;//输出表达式,让用户答题for(inti=0;i<Num;i++){//输出表达式cout<<"第"<<i+1<<"题:n";cout<<left[i]<<''<<enum2char(oper[i])<<''<<right[i]<<"=";//获取用户答案cin>>result[i];//比对用户答案是否正确,正确输出right,answerRigth加一,否则输出notcorrect。if(result[i]==myResult(left[i],right[i],oper[i])){cout<<"Right!n";answerRight++;}else{cout<<"Notcorrect!n";}}//全部答题完毕,输出正确答案个数及得分。cout<<"终止答题,共"<<Num<<"题,每题10分,答对"<<answerRight<<"题,得分:"<<answerRight*10<<"分。";//屏幕停止。getch();return0;}