优质解答
#include <iostream> #include <stdlib.h> #include <ctime> #include <conio.h> using std::cin; using std::cout; using std::endl; //计算式 数量 int const Num = 10; //计算式中 最大数 int const MaxNum = 10; enum enOp{Add,Subtract,Multiply,Divide}; //加法 int addFun(int left,int right) { return left + right; } //减法 int subFun(int left,int right) { return left - right; } //乘法 int mulFun(int left,int right) { return left * right; } //除法 int divFun(int left,int right) { return left / right; } //将 枚举类型转换为字符类型,以便输出。 char enum2char(enOp op) { switch (op) { case Add: return '+'; case Subtract: return '-'; case Multiply: return 'x'; case Divide: return '/'; } return ' '; } //计算生成表达式的正确结果。 int myResult(int left,int right,enOp op) { switch (op) { case Add: return addFun(left , right); case Subtract: return subFun(left , right); case Multiply: return mulFun(left , right); case Divide: return divFun(left , right); } return 0; } //检查生成计算式的正确与否。其中 减法结果不能为负数,除法结果不能为小数。 bool checkFormula(int left,int right,enOp op) { switch (op) { case Add: return true; case Subtract: { if(left < right) return false; return true; } case Multiply: return true; case Divide: { if(double(left/right) != double(double(left)/double(right))) return false; return true; } } return false; } //依据给定操作符,生成符合条件的表达式。 void getFormula(int* left,int*right,enOp op) { //srand(time(NULL)); for(;;) { *left = 1 + rand() % MaxNum; *right = 1 + rand() % MaxNum; if(checkFormula(*left,*right,op)) break; } } int main() { //操作符左值 int left[Num]; //操作符右值 int right[Num]; //用户输入计算结果 int result[Num]; //操作符 +-*/ enOp oper[Num]; //正确答案个数 int answerRight = 0; cout<<"正在生成,请稍等。"<<endl; //随机种子 srand(time(NULL)); //开始生成计算表达式。 for(int i = 0;i<Num;i++) { //srand( (unsigned)time(NULL)); //操作符 oper[i] = enOp(rand()%4); getFormula(&left[i],&right[i],oper[i]); } cout<<"生成计算式完成,开始答题!"<<endl; //输出表达式,让用户答题 for(int i = 0;i<Num;i++) { //输出表达式 cout<<"第 "<<i+1<<" 题: "; cout<<left[i]<<' '<<enum2char(oper[i])<<' '<<right[i]<< " = "; //获取用户答案 cin>>result[i]; //比对用户答案是否正确,正确输出 right,answerRigth加一,否则输出not correct。 if(result[i] == myResult(left[i],right[i],oper[i])) { cout<<"Right!"; answerRight++; } else { cout<<"Not correct!"; } } //全部答题完毕,输出正确答案个数及得分。 cout<<"终止答题,共 "<<Num<<" 题,每题 10 分 ,答对 "<<answerRight<<" 题,得分 :" <<answerRight*10<<" 分。"; //屏幕停止。 getch(); return 0; }
#include <iostream> #include <stdlib.h> #include <ctime> #include <conio.h> using std::cin; using std::cout; using std::endl; //计算式 数量 int const Num = 10; //计算式中 最大数 int const MaxNum = 10; enum enOp{Add,Subtract,Multiply,Divide}; //加法 int addFun(int left,int right) { return left + right; } //减法 int subFun(int left,int right) { return left - right; } //乘法 int mulFun(int left,int right) { return left * right; } //除法 int divFun(int left,int right) { return left / right; } //将 枚举类型转换为字符类型,以便输出。 char enum2char(enOp op) { switch (op) { case Add: return '+'; case Subtract: return '-'; case Multiply: return 'x'; case Divide: return '/'; } return ' '; } //计算生成表达式的正确结果。 int myResult(int left,int right,enOp op) { switch (op) { case Add: return addFun(left , right); case Subtract: return subFun(left , right); case Multiply: return mulFun(left , right); case Divide: return divFun(left , right); } return 0; } //检查生成计算式的正确与否。其中 减法结果不能为负数,除法结果不能为小数。 bool checkFormula(int left,int right,enOp op) { switch (op) { case Add: return true; case Subtract: { if(left < right) return false; return true; } case Multiply: return true; case Divide: { if(double(left/right) != double(double(left)/double(right))) return false; return true; } } return false; } //依据给定操作符,生成符合条件的表达式。 void getFormula(int* left,int*right,enOp op) { //srand(time(NULL)); for(;;) { *left = 1 + rand() % MaxNum; *right = 1 + rand() % MaxNum; if(checkFormula(*left,*right,op)) break; } } int main() { //操作符左值 int left[Num]; //操作符右值 int right[Num]; //用户输入计算结果 int result[Num]; //操作符 +-*/ enOp oper[Num]; //正确答案个数 int answerRight = 0; cout<<"正在生成,请稍等。"<<endl; //随机种子 srand(time(NULL)); //开始生成计算表达式。 for(int i = 0;i<Num;i++) { //srand( (unsigned)time(NULL)); //操作符 oper[i] = enOp(rand()%4); getFormula(&left[i],&right[i],oper[i]); } cout<<"生成计算式完成,开始答题!"<<endl; //输出表达式,让用户答题 for(int i = 0;i<Num;i++) { //输出表达式 cout<<"第 "<<i+1<<" 题: "; cout<<left[i]<<' '<<enum2char(oper[i])<<' '<<right[i]<< " = "; //获取用户答案 cin>>result[i]; //比对用户答案是否正确,正确输出 right,answerRigth加一,否则输出not correct。 if(result[i] == myResult(left[i],right[i],oper[i])) { cout<<"Right!"; answerRight++; } else { cout<<"Not correct!"; } } //全部答题完毕,输出正确答案个数及得分。 cout<<"终止答题,共 "<<Num<<" 题,每题 10 分 ,答对 "<<answerRight<<" 题,得分 :" <<answerRight*10<<" 分。"; //屏幕停止。 getch(); return 0; }