2301_79595117 2023-10-09 17:16 采纳率: 0%
浏览 31

c语言解答小学数学测试题

题目:小学数学测验题生成程序
实验要求:
从键盘输入题目数量N(3<N<=50),随机生成N道小学数学计算题,要求至少自定义2个函数,实现如下功能:
按照生成的顺序输出生成的N道题目,至少包含加、减、乘、除法运算各一题,且每种运算题目数量随机,总数为N;
模拟两个或更多个学生做该测验题,分别输出每个学生的做题情况(包括题目,结果以及对错的判定)、总的得分率以及加减乘除每种类型题目的得分率。
注意事项:
a)    不考虑混合运算,加减乘除运算的题目每道题只考虑两个操作数情况即可;如x+y、x-y、x*y、x/y形式;
b)    任何运算的结果必须是大于等于0且小于100;
c)    除法运算结果不能出现小数,只能写商几余几的形式(如5/2答案只能是商2余1,而不能是2.5;输入输出时如何表示商2余1自定,比如可以直接输出2 1表示。),且被除数需要大于除数。
提示:生成随机数函数为rand和srand函数。

  • 写回答

3条回答 默认 最新

  • Leodong. 2023-10-09 17:22
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    解析:首先需要生成N道题目,每种运算题目数量随机,至少包含加、减、乘、除法运算各一题。然后模拟两个或更多个学生做该测验题,分别输出每个学生的做题情况(包括题目,结果以及对错的判定)、总的得分率以及加减乘除每种类型题目的得分率。

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void generate_question(int n, int op1, int op2, int result[], char question[]) {
        switch (op) {
            case 1:
                question[0] = '+';
                question[1] = '\0';
                result[0] = op1 + op2;
                break;
            case 2:
                question[0] = '-';
                question[1] = '\0';
                result[0] = op1 - op2;
                break;
            case 3:
                question[0] = '*';
                question[1] = '\0';
                result[0] = op1 * op2;
                break;
            case 4:
                question[0] = '/';
                question[1] = '\0';
                int quotient = op1 / op2;
                int remainder = op1 % op2;
                result[0] = quotient;
                if (remainder * 10 + 5 <= 100) {
                    result[1] = remainder * 10 + 5;
                } else {
                    result[1] = 0;
                }
                break;
        }
    }
    
    void generate_questions(int n, int num_ops[], int results[], char questions[][]) {
        srand(time(NULL));
        for (int i = 0; i < n; i++) {
            int op1 = rand() % 100;
            int op2 = rand() % 100;
            int op = rand() % 4 + 1;
            num_ops[i] = op;
            results[i] = 0;
            generate_question(1, op1, op2, &results[i], questions[i]);
        }
    }
    
    void student_test(char questions[][], int num_students, int scores[]) {
        for (int i = 0; i < num_students; i++) {
            for (int j = 0; j < num_questions; j++) {
                printf("%s ", questions[j][0]);
                int op1, op2;
                sscanf(questions[j] + 1, "%d %d", &op1, &op2);
                int result;
                switch (questions[j][0]) {
                    case '+':
                        result = op1 + op2;
                        break;
                    case '-':
                        result = op1 - op2;
                        break;
                    case '*':
                        result = op1 * op2;
                        break;
                    case '/':
                        int quotient, remainder;
                        quotient = op1 / op2;
                        remainder = op1 % op2;
                        result = quotient;
                        if (remainder * 10 + 5 <= 100) {
                            result += remainder * 10 + 5;
                        } else {
                            result += 0;
                        }
                        break;
                }
                printf(" %d", result);
                if (result == questions[j][2]) {
                    printf(" 正确
    ");
                    scores[i]++;
                } else {
                    printf(" 错误
    ");
                }
            }
            printf("
    ");
        }
    }
    
    int main() {
        int n;
        printf("请输入题目数量N(3<N<=50):");
        scanf("%d", &n);
        if (n < 3 || n > 50) {
            printf("输入错误!
    ");
            return 1;
        }
        char questions[n][2];
        int num_questions = 0;
        generate_questions(n, num_questions, num_questions, questions);
        int scores[n];
        student_test(questions, n, scores);
        printf("正确率:");
        for (int i = 0; i < n; i++) {
            printf("%.2f%%", (float)scores[i] / num_questions * 100);
        }
        printf("
    ");
        return 0;
    }
    

    这段代码首先定义了一个generate_question函数用于生成题目,然后定义了一个generate_questions函数用于生成题目数组。接着定义了一个student_test函数用于模拟学生做题并计算得分。最后在main函数中调用这些函数完成任务。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论

报告相同问题?

问题事件

  • 创建了问题 10月9日