找回密码
 立即注册
首页 业界区 安全 结对编程项目展示:小学数学四则运算生成器 ...

结对编程项目展示:小学数学四则运算生成器

越蔓蔓 2025-6-1 18:18:38
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
您需要登录后才可以回帖 登录 | 立即注册