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;
}