小学生数学算数游戏
题目要求:
1
、实现一个小型的算术游戏
CAI
软件系统,要求具有友好的界面设计(良好的人
、实现一个小型的算术游戏
CAI
软件系统,要求具有友好的界面设计(良好的人
机交互),操作方便,帮助小学生进行一位数(初级)或两位数(高级)的四则运算。
2
、主界面给出游戏规则,提示小学生可以选择加、减、乘和除四则运算的任一种运
、主界面给出游戏规则,提示小学生可以选择加、减、乘和除四则运算的任一种运
算进行挑战。游戏开始,屏幕上随机出现两个数(一位数),提示小学生给出答案,答
错了请求重新输入,每题只有
5
次答题机会,机会用完后直接进入下一题。
5
次答题机会,机会用完后直接进入下一题。
3
、统计得分,达到一定分数值(如:
95
分以上)后可进级,即进行两位数计算的
、统计得分,达到一定分数值(如:
95
分以上)后可进级,即进行两位数计算的
挑战。同样,可设置试题数目上限(如:一共
50
题),完成
50
题得分不及格者,提醒
50
题),完成
50
题得分不及格者,提醒
其
“
好好学习
”
。
“
好好学习
”
。
4
、相关知识点:面向过程结构化程序设计思想,子函数的设计,菜单设计,分支
/
、相关知识点:面向过程结构化程序设计思想,子函数的设计,菜单设计,分支
/
循环结构设计,随机函数
rand()
应用,程序结束函数
exit()
应用,清屏函数应用等。
rand()
应用,程序结束函数
exit()
应用,清屏函数应用等。
5
、提供程序测试方案,程序功能强弱可以因人而异,但程序必须经得起各种测试数
、提供程序测试方案,程序功能强弱可以因人而异,但程序必须经得起各种测试数
据的考验。
注:出现差值为负数或除不尽时,直接跳到下一题。
分析:
代码分为以下模块:
1.加法模块:add()
2.减法模块:sub()
3.除法模块:divi()
4.乘法模块:mult()
5.菜单模块:menu()
6.判断模块:trial()
思路:
(1)前四个函数需要在结尾处加入判断模块的引用。
(2)这里的等级用来取余获取随机数,所以低等级是10,高等级是100。
(3)菜单模块用与用户进行人机交互。
#include<stdio.h>
#include <stdlib.h>
void add(int level);
void sub(int level);
void mult(int level);
void divi(int level);
void trial(int score, int level);
void menu(int level);
int main()
{
printf("欢迎来到计算练习系统!!!n");
menu(10);
return 0;
}
//菜单界面
void menu(int level)
{
int flag = 1, choice;
while (flag)
{
printf("******** 菜单 *********n");
printf("* 1.加法运算 *n");
printf("* 2.减法运算 *n");
printf("* 3.乘法运算 *n");
printf("* 4.除法运算 *n");
printf("***********************n");
printf("请输入对应序号并回车开始游戏:n");
scanf("%d", &choice);
switch (choice)
{
case 1:
add(level);
flag = 0;
break;
case 2:
sub(level);
flag = 0;
break;
case 3:
mult(level);
flag = 0;
break;
case 4:
divi(level);
flag = 0;
break;
default:
printf("请输入正确的序号!!!n");
break;
}
}
}
//加法运算
void add(int level)
{
int doing, bedone, result, score = 0;
for (int i = 0; i < 50; i++)
{
printf("请输入以下算式的结果:n");
//如果升级了,将数值设置为2位数
if (level == 100)
{
do
{
doing = rand() % level, bedone = rand() % level;
} while (doing < 10 || bedone < 10);
}
else
doing = rand() % level, bedone = rand() % level;
printf("%d + %d =", doing, bedone);
for (int n = 5; n > 0; n--)
{
scanf("%d", &result);
if (result == (doing + bedone))
{
printf("答对了,真不戳!n");
score += 2;
break;
}
else
{
if ((n - 1) > 0)
{
printf("答案错误!!!n你还有%d次机会n请输入正确答案:n", (n - 1));
}
}
}
}
//调用判分函数
trial(score, level);
}
//减法
void sub(int level)
{
int doing, bedone, result, score = 0;
for (int i = 0; i < 50; i++)
{
printf("请输入以下算式的结果:n");
//如果升级了,将数值设置为2位数
if (level == 100)
{
do
{
doing = rand() % level, bedone = rand() % level;
} while (doing < 10 || bedone < 10 || bedone - doing < 0);
}
else
//没升级前
do
{
doing = rand() % level, bedone = rand() % level;
} while (bedone - doing < 0);
printf("%d - %d =", bedone, doing);
for (int n = 5; n > 0; n--)
{
scanf("%d", &result);
if (result == (bedone - doing))
{
printf("答对了,真不戳!n");
score += 2;
break;
}
else
{
if ((n - 1) > 0)
{
printf("答案错误!!!n你还有%d次机会n请输入正确答案:n", (n - 1));
}
}
}
}
//调用判分函数
trial(score, level);
}
//乘法
void mult(int level)
{
int doing, bedone, result, score = 0;
for (int i = 0; i < 50; i++)
{
printf("请输入以下算式的结果:n");
//如果升级了,将数值设置为2位数
if (level == 100)
{
do
{
doing = rand() % level, bedone = rand() % level;
} while (doing < 10 || bedone < 10);
}
else
doing = rand() % level, bedone = rand() % level;
printf("%d * %d =", doing, bedone);
for (int n = 5; n > 0; n--)
{
scanf("%d", &result);
if (result == (doing * bedone))
{
printf("答对了,真不戳!n");
score += 2;
break;
}
else
{
if ((n - 1) > 0)
{
printf("答案错误!!!n你还有%d次机会n请输入正确答案:n", (n - 1));
}
}
}
}
//调用判分函数
trial(score, level);
}
//除法
void divi(int level)
{
double doing, bedone, score = 0;
int result;
for (int i = 0; i < 50; i++)
{
printf("请输入以下算式的结果:n");
//如果升级了,将数值设置为2位数
if (level == 100)
{
do
{
doing = rand() % level, bedone = rand() % level;
} while (doing < 10 || bedone < 10);
}
else
doing = rand() % level, bedone = rand() % level;
//让结果为正整数 分母不为零
do
{
doing = rand() % level, bedone = rand() % level;
} while ((bedone / doing) - (int)(bedone / doing) > 0 || doing == 0);
printf("%.0f / %.0f =", bedone, doing);
for (int n = 5; n > 0; n--)
{
scanf("%d", &result);
if (result == (int)(bedone / doing))
{
printf("答对了,真不戳!n");
score += 2;
break;
}
else
{
if ((n - 1) > 0)
printf("答案错误!!!n你还有%d次机会n请输入正确答案:n", (n - 1));
}
}
}
//调用判分函数
trial(score, level);
}
//判分函数
void trial(int score, int level)
{
//判断是否升级
if (level == 10)
{
if (score >= 95)
{
int choicelevel, choiced = 0;
system("cls");
printf("你已经很棒了,是否进入下一等级的测试?n是请输入1,返回主菜单请输入0,结束请按-1:n");
while (!choiced)
{
scanf("%d", &choicelevel);
switch (choicelevel)
{
case 1:
menu(100);
break;
case 0:
menu(10);
break;
case -1:
exit(0);
default:
system("cls");
printf("请输入正确的数值:");
break;
}
}
}
if (score < 60)
{
system("cls");
printf("你的分数为:%d,不及格!nn要好好学习啊!nnnnnn", score);
menu(10);
}
else if (score < 95)
{
system("cls");
printf("你的分数为:%d,成绩良好!nn但还差%d分才能进阶噢!nnnnnn", score, 10 - score);
menu(10);
}
}
if (level == 100)
{
if (score >= 95)
{
system("cls");
printf("你已经很棒了快去试试其它运算吧!nnnn");
menu(100);
}
else if (score > 60)
{
system("cls");
printf("你的分数为:%d,成绩良好!nn但离优秀还有一定距离!nnnnnn", score);
menu(100);
}
else if (score > 0)
{
system("cls");
printf("你的分数为:%d,不及格!nn要好好学习啊!nnnnnn", score);
menu(100);
}
}
}