一、项目简介

1、项目名称:小学生300道运算水平测试

2、团队人员:2352606
2352608

3、项目概述:这是一个利用c++程序语言完成的小学生运算测试,在测试中我们设定当学生“准备好的时候”,系统会自动随机生成300道运算题目并显示,通过学生的输入与答案的校对,累计得分,从而对学生运算水平进行合理评级,判断是否加试,并给出相关建议。

二、项目源代码
1、第一部分:随机生成题目

点击查看代码
#include <iostream>
#include <random>
#include <ctime>
#include <string>
#include <sstream>
using namespace std;

const int TOTAL_QUESTIONS = 300;      // 总题目数量
const int QUESTIONS_PER_ROUND = 10;   // 每次显示的题目数量
const int MAX_QUESTIONS = 10;         // 每次最多生成的题目数量
int score = 0;                        // 得分统计
int questionCount = 0;                // 已答题数统计

//题目
struct Question {
    string text;
    int answer;
};

//回1到100之间的随机整数
int getRandomNumber() {
    return rand() % 100 + 1;
}

//获取四则运算符
char getOperator() {
    static const char ops[] = {'+', '-', '*', '/'};
    return ops[rand() % 4];
}

int calculate(int a, char op, int b) {
    switch (op) {
        case '+': return a + b;
        case '-': return a - b;
        case '*': return a * b;
        case '/': return a / b;
        default: return 0;
    }
}

2、第二部分:进行测试核对答案

点击查看代码
int generateQuestions(int grade, int count, Question questions[]) {
    int generated = 0;
    
    while (generated < count) {
        int a = getRandomNumber();
        int b = getRandomNumber();
        char op = getOperator();
        
        // 处理除法特殊情况
        if (op == '/') {
            b = max(1, b);
            a = a / b * b;
        }
        
        int result = calculate(a, op, b);
        
        // 确保结果在0-1000之间
        if(result < 0 || result > 1000) continue;
        string question;
        if(grade == 1){
            //三年级题目格式: 数字 运算符 数字 =
            question = to_string(a) + string(1, op) + to_string(b) + "=";
        }
        else{
            //四年级题目: 三个数两个运算符,可能含括号
            int c = getRandomNumber();
            char op2 = getOperator();
            if (op2 == '/') c = max(1, c);
            
            bool hasParentheses = (rand() % 2 == 0);
            if (hasParentheses) {
                // 带括号的运算: (a op1 b) op2 c
                int firstResult = calculate(a, op, b);
                result = calculate(firstResult, op2, c);
                question = "(" + to_string(a) + string(1, op) + 
                          to_string(b) + ")" + string(1, op2) + to_string(c) + "=";
            } else {
                // 不带括号的运算,考虑运算符优先级
                if ((op == '+' || op == '-') && (op2 == '*' || op2 == '/')) {
                    // 先计算乘除
                    int secondResult = calculate(b, op2, c);
                    result = calculate(a, op, secondResult);
                } else {
                    // 从左到右计算
                    int firstResult = calculate(a, op, b);
                    result = calculate(firstResult, op2, c);
                }
                question = to_string(a) + string(1, op) + 
                          to_string(b) + string(1, op2) + to_string(c) + "=";
            }
        }
        
        questions[generated].text = question;
        questions[generated].answer = result;
        generated++;
    }
    
    return generated;
}

3、第三部分:准备部分

点击查看代码
void prepare(){
    cout << "准备好了吗孩子们?" << endl;
    cout << "1. 准备好了" << endl;
    cout << "2. 再准备一下" << endl;
    
    int choice;
    cout << "你的选择是:";
    cin >> choice;
    
    if (choice == 2) {
        cout << "好的,等你准备好了再来!" << endl;
        prepare();
    }
}

4、第四部分:评级及给出相关建议

点击查看代码
void evaluate() {
    double percentage = questionCount > 0 ? 
                       (static_cast<double>(score) / questionCount * 100) : 0;
    
    cout << "\n你的得分是: " << score << "/" << questionCount 
         << " (" << percentage << "%)" << endl;
    
    if (questionCount == 0) {
        cout << "你还没有回答任何题目!" << endl;
        return;
    }

    if (score == questionCount) {
        cout << "满分!!!!!" << endl;
        cout << "你简直就是数学神童!!!!!" << endl;
    } else if (percentage >= 90) {
        cout << "优秀!!!" << endl;
        cout << "不要得个优秀就骄傲,丢几分的原因是什么,你与满分同学的差距是什么,自己好好想想" << endl;
    } else if (percentage >= 75) {
        cout << "良好" << endl;
        cout << "孩子还需努力哈,要不要再练一套提升自己" << endl;
        cout << "1. 我要努力提升自己" << endl;
        cout << "2. 我放弃我自己了" << endl;
        
        int choice;
        cin >> choice;
        if (choice == 1) {
            cout << "很好!再来一套题:" << endl;
            score = 0;
            questionCount = 0;
        } else {
            cout << "菜还不愿意多练哈" << endl;
        }
    } else if (percentage >= 60) {
        cout << "合格" << endl;
        cout << "天天在干嘛呢,嗯?赶紧再练练" << endl;
        cout << "自动生成新题目..." << endl;
        score = 0;
        questionCount = 0;
    } else {
        cout << "不合格" << endl;
        cout << "回家吧孩子回家吧" << endl;
        cout << "但在此之前,再做一套题:" << endl;
        score = 0;
        questionCount = 0;
    }
}

5、第五部分:进行难度分类&&主函数

点击查看代码
int main() {
    srand(time(0));
    
    cout << "欢迎来到四则运算练习系统!" << endl;
    cout << "你的年级是:" << endl;
    cout << "1. 三年级及以下" << endl;
    cout << "2. 四年级及以上" << endl;
    
    int grade;
    cin >> grade;
    
    if (grade < 1 || grade > 2) {
        cout << "无效选择,程序退出" << endl;
        return 0;
    }
    
    prepare();
    
    bool earlyExit = false;
    
    while (questionCount < TOTAL_QUESTIONS && !earlyExit) {
        int remaining = min(QUESTIONS_PER_ROUND, TOTAL_QUESTIONS - questionCount);
        Question questions[MAX_QUESTIONS];
        int count = generateQuestions(grade, remaining, questions);
        
        cout << "\n第 " << (questionCount / QUESTIONS_PER_ROUND + 1) << " 组题目:" << endl;
        for (int i = 0; i < count; i++) {
            cout << (i + 1) << ". " << questions[i].text << endl;
        }
        
        int userAnswers[MAX_QUESTIONS];
        cout << "\n请输入你的答案(每行一个,输入q可提前结束):" << endl;
        for (int i = 0; i < count; i++) {
            cout << (i + 1) << ". ";
            string input;
            cin >> input;
            
            if (input == "q" || input == "Q") {
                earlyExit = true;
                break;
            }
            
            stringstream ss(input);
            if (!(ss >> userAnswers[i])) {
                userAnswers[i] = 0;
            }
        }
        
        if (earlyExit) {
            break;
        }
        
        cout << "\n正确答案:" << endl;
        for (int i = 0; i < count; i++) {
            bool correct = (userAnswers[i] == questions[i].answer);
            if (correct) {
                score++;
                cout << (i + 1) << ". " << questions[i].text << " " 
                     << userAnswers[i] << " √" << endl;
            } else {
                cout << (i + 1) << ". " << questions[i].text << " " 
                     << userAnswers[i] << " × (正确答案: " 
                     << questions[i].answer << ")" << endl;
            }
        }
        
        questionCount += count;
        cout << "\n当前得分: " << score << "/" << questionCount << endl;
        
        if (questionCount < TOTAL_QUESTIONS && !earlyExit) {
            cout << "\n按回车键继续下一组题目..." << endl;
            cin.ignore();
            cin.get();
        }
    }
    
    evaluate();
    
    return 0;
}

三、编程实现步骤及结果

1、通过所在年级选择难度

 如果选择三年级以下,则系统所生成的运算题目均为整数运算,不包含小数运算,难度相对较为简单;
 如果选择四年级及以上,则系统生成的运算题目则包含小数,难度相对较为复杂。

2、进行运算开始准备

选择准备好了即可开始运算,如果选择未准备好则可跳转到开头进行重新选择,直至准备好了。

3、开始抽取一组随机题目,每组十道运算题目,共计30组

输入10组答案后进行批改,然后统计得分

4、30组题目完成后显示总成绩并给出相关建议,并判断是否需要重新联系。

(1)情况一:满分

(2)情况二:优秀

(3)情况三:良好

   在这种情况下,将会跳出是否加练的选择,学生可以选择是否进行加练来提高自己的运算水平。

(4)情况四:合格

 在这种情况下,将会跳出是否加练的选择,学生可以选择是否进行加练来提高自己的运算水平。

(5)情况五:不合格

  在这种情况下,将会跳出是否加练的选择,学生可以选择是否进行加练来提高自己的运算水平。

四、项目总结

   本项目是一个基于C++开发的小学生数学运算能力智能测评系统,采用"准备就绪"触发机制,能够自动生成300道随机四则运算题目,通过实时评分和智能分析功能,对学生的答题情况进行多维度评估并给出能力等级判定。

   系统具备自适应测试特性,可根据测试结果智能判断是否需要加试,并提供个性化学习建议,同时支持测试记录的存储与分析。该工具通过标准化的数字测评方式,有效提升了运算能力评估的客观性和效率,为教师教学决策和学生自我提升提供了科学依据。

   在这次结对编程中,我们通过合作,在保证实现基本随机生成运算式子的基础上,我们增加了累计分数,评价评级,提供相关建议等多个功能。通过询问学生是否准备好,是否需要重新练习等选项操作,加强与学生之间的交流互动,从而能够更好地起到对学生运算能力评级以及对其运算能力进行更具有针对性地辅导和培养。
posted on 2025-04-17 10:38  饭中盐盐  阅读(42)  评论(0)    收藏  举报