1.小组成员名单:2352332、2352326
2.需求分析与功能亮点:
小学教师每周需生成 300道 四则运算练习题,程序实现以下核心功能:
题目生成:
生成 A op1 B op2 C 形式的表达式,其中 A, B, C 为 1~100 的随机整数,op1 和 op2 从 [+ - * /] 中随机选择。
结果合法性控制:
答案必须为 0~1000 的整数,超出范围自动重新生成。
避免负数(如 A < B 时不生成 A - B)。
避免小数(除法必须整除,如 A % B == 0)。
题目唯一性:使用哈希集合 set 存储题目字符串,确保无重复。
交互式界面:
实时验证答案正确性,反馈 yes/wrong 并显示正确答案。
动态统计正确率(正确数/总题数),进度条显示当前题号。
控制台界面美化(光标定位、颜色高亮)。
3.代码展示:
点击查看代码[code]#include #include #include #include #include #include #include #include #include #include using namespace std;// 光标static void SetPos(int x, int y){ COORD pos = { x,y }; HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hout, pos);}// 字体颜色(2:绿色,11:青蓝色,12:红色,13:紫色,14:淡黄色,15:白色)static int color(int c){ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); return 0;}class question {private: int A = 0; int B = 0; int C = 0; int Answer = 1001; int op1 = 0; int op2 = 0; char operation[4] = { '+','-','*','/' }; // 计算表达式结果,考虑运算优先级 int calculate() { int temp1; if (op1 == 2 || op1 == 3) { switch (op1) { case 2: temp1 = A * B; break; case 3: if (B == 0) return 1001; temp1 = A / B; break; } switch (op2) { case 0: return temp1 + C; case 1: return temp1 - C; case 2: return temp1 * C; case 3: if (C == 0) return 1001; return temp1 / C; } } else { switch (op2) { case 2: return A + op1 == 0 ? B * C : B * (-C); case 3: if (C == 0) return 1001; return A + op1 == 0 ? B / C : B / (-C); default: temp1 = op1 == 0 ? A + B : A - B; return op2 == 0 ? temp1 + C : temp1 - C; } } return 1001; } // 将题目转换为字符串,方便存储和比较 string toString() const { string str = to_string(A) + operation[op1] + to_string(B) + operation[op2] + to_string(C); return str; }public: // Getter 方法 int getA() const { return A; } int getB() const { return B; } int getC() const { return C; } int getOp1() const { return op1; } int getOp2() const { return op2; } const char* getOperation() const { return operation; } question(const set& existingQuestions) { static bool seedSet = false; if (!seedSet) { srand(static_cast(time(nullptr))); seedSet = true; } string questionStr; do { while (Answer > 1000 || Answer < 0) { A = rand() % 100 + 1; B = rand() % 100 + 1; C = rand() % 100 + 1; op1 = rand() % 4; op2 = rand() % 4; // 避免出现负数结果 if ((op1 == 1 && A < B) || ((op1 == 0 || op1 == 1) && op2 == 1 && (A + B < C))) continue; // 避免出现小数结果 if ((op1 == 3 && A % B != 0) || (op2 == 3 && ((op1 == 0 || op1 == 1) && (A + B) % C != 0) || (op1 == 2 && A * B % C != 0))) continue; Answer = calculate(); } questionStr = toString(); } while (existingQuestions.find(questionStr) != existingQuestions.end()); SetPos(45, 7); color(6); cout |