小学生测验

1. 设计一个简单的算术游戏程序,可随机生成10道四则运算题目,题目中的数字和操作符均为随机生成。

2. 每道题目有3次机会可以输入答案,每次输入答案后,程序会判断答案是否正确,并给出相应的提示。

3. 程序根据用户的回答情况,给出相应的得分,得分规则如下:

    - 在第一次输入时,正确得10分;

    - 在第二次输入时,正确得7分;

    - 在第三次输入时,正确得5分;

    - 三次均错误,0分。

4. 当用户完成所有的题目后,程序会统计用户得分,并给出相应的评价,评价标准如下:

    - 分数大于等于90分,评价为“SMART!”;

    - 分数大于等于80分,评价为“GOOD!”;

    - 分数大于等于70分,评价为“OK!”;

    - 分数大于等于60分,评价为“PASS!”;

    - 分数小于60分,评价为“TRY AGAIN!”。

5. 在程序设计中需要使用C语言,需要使用循环结构、条件分支和随机数等基本概念和语法。

6. 要求程序具有良好的用户交互性,能够向用户输出题目,接收用户的输入,并给出相应的提示和评价。

2 设计

2.1 总体设计:(包括系统总体设计框架和系统功能模块图)

本算术游戏程序的总体设计框架如下:

1. 设置随机数种子;

2. 使用随机数生成0-25范围内的两个整数和一个操作符,生成10个不重复的题目;

3. 让用户依次输入答案,每次输入后判断答案是否正确,并计分;

4. 显示用户得分和评价。

2.2 详细设计:(包括主要功能模块的算法设计思路以及对应的工作流程图)

算法设计思路:

1. 设置随机数种子;

2. 使用for循环生成10个不重复的题目;

3. 在每一轮循环中,使用rand()函数随机生成0-25范围内的两个整数及一个操作符,根据操作符计算正确答案;

4. 让用户输入答案,并在用户输入3次错误后显示正确答案;

5. 对每一轮循环中用户的答案进行判定,并根据答题次数和正确性计分;

6. 输出用户总得分和对应的评价等信息。

主要功能模块的工作流程图如下:

算术游戏程序

┌────────────┐                     

│   设置随机数种子       │   

└────────────┘

         │

         ▼

┌────────────┐   

│        初始化          │   

└────────────┘

         │

         ▼

┌────────────┐

│   生成10道算术题目    │

└────────────┘

         │

         ▼

┌────────────┐  

│   让用户输入答案       │

│  显示答案的正确性      │

│  奖励对应的分数        │

└────────────┘

         │

         ▼

┌────────────┐

│ 统计用户得分和评价     │

└────────────┘

         │

         ▼

┌────────────┐

│       退出程序         │

└────────────┘

3 调试分析过程(分点阐述课程设计步骤,包括对程序调试过程中存在问题的思考:列出主要问题的出错现象、出错原因、解决方法及效果等,可适当的包含结果截图)

程序调试过程中遇到的主要问题是输入错误的情况。当程序让用户输入答案时,如果输入的不是一个数字,或者输入的数字不是正确答案,程序会提示答案不正确。然而,如果用户再次输入错误的数字,程序会进入无限循环。

该问题的出错现象是程序进入无限循环,没有给用户再次输入正确答案的机会。经过调试发现,这是由于程序在输出"答案不正确,请重新输入。"后,没有继续读取用户输入,导致下一次循环仍然读取到错误的答案。

4 程序测试与结果(包括测试数据、测试输出结果;使用图片和文字叙述实验结果,并对这些结果进行适当分析)

测试数据:

程序运行后,会出现10道数学运算题目,用户需输入答案。答对一道得分数不同。最后输出得分和评价等级。

测试输出结果:

分析:

通过本次测试,我们可以看到程序已经运行正常,生成了10道随机的数学运算题目,且用户能够输入答案。程序会根据用户答题情况,进行不同的加分,并最后输出得分和评级结果。因此,本程序能够对用户进行简单的数学训练,并有一定的评测结果。

5 结论

(基于课程设计的实验结果和分析,得出结论。例如课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地方需要改进?课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容)

根据代码分析,这是一个简单的数学测试程序,随机生成两个数字,然后根据随机生成的运算符来计算结果,并让用户输入答案,最终根据正确和错误的情况给予不同的分数和评价。

这个代码比较简单,实现了基本功能,并且包括了一些简单的优化,比如给不同的答案输入次数赋予不同的分数,以此来提高程序的交互性和趣味性。然而,也有一些需要改进的地方:

1. 只能进行加减运算,可以考虑增加更多的运算类型,比如乘法和除法。

2. 程序没有进行输入检查,如果用户输入非数字字符或者空格会导致程序崩溃,可以增加一些输入检查的代码来避免这种情况的发生。

3. 程序没有提供退出功能,如果用户突然想要退出程序,只能直接关闭窗口,可以加入一个退出选项。

在课程设计过程中,我学习了C语言的基础语法、流程控制和函数等知识。通过实现这个程序,我更深入地了解了随机数、数组和指针等一些常用的C语言库函数,并且在编写代码的过程中也加强了我的逻辑思考和问题解决能力。

总体上,这个课程设计提高了我的编程能力和对C语言的理解,我认为对我的学习非常有帮助。希望在今后的课程设计中,能够增加更多的实践内容和进一步巩固理论知识,并鼓励学生自由发挥,挑战更难的难度。

6附录

(附录:完整源程序代码,含必要的注释。)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#pragma warning(disable : 4996)

int main() {
       int i, j, num1, num2, answer1, answer2, score = 0;
    char op;
    for (i = 1; i <= 10; i++) {
        // 生成题目
        num1 = rand() % 25; // 生成0-25之间的整数
        num2 = rand() % 25;  //
        // 随机生成“+”“-”
        char op = rand() % 2 == 0 ? '+' : '-';
        if (op== 0) {
            op = '+';
            answer1 = num1 + num2;
        }
        else {
            op = '-';
            if (num2 > num1) {
                int num3 = num2;
                num2 = num1;
                num1 = num3;
            }
                answer1 = num1 - num2;
        }
        printf("(%d) %d %c %d = ", i, num1, op, num2);
        // 让用户输入答案
        for (j = 0; j < 3; j++) {
            scanf("%d", &answer2);
            if (answer2 == answer1) {
                if (j == 0) {
                    score += 10;
                }
                else if (j == 1) {
                    score += 7;
                }
                else {
                    score += 5;
                }
                printf("恭喜你,答对了!\n");
                break;
            }
            else {
                printf("答案不正确,请重新输入。");
            }
        }
        if (j == 3) {
            printf("正确答案为%d。\n", answer1);
        }
    }
    // 显示成绩
    printf("你的得分是%d分。\n", score);
    if (score >= 90) {
        printf("SMART!\n");
    }
    else
        if (score >= 80) {
        printf("GOOD!\n");
    }
    else
        if (score >= 70) {
        printf("OK!\n");
    }
    else
        if (score >= 60) {
        printf("PASS!\n");
    }
    else {
        printf("TRY AGAIN!\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值