题目
试编写-程序给小朋友做加法测试。依次出10道题,每次随机产生2个10以内的整数,在屏幕上显示算式"+=” (为刚才随机产生的加数, +为运试编写-程序给小朋友做加法测试。依次出10道题,每次随机产生2个10以内的整数,在屏幕上显示算式"+*=” (*为刚才随机产生的加数, +为运算)。在算式后面小朋友从键盘输入答案。程序对小朋友输入的答案做判断,如果正确加10分,如果错误,提示错误并再显示刚才的题目重新做答,每道题最多有3次机会,第二次答对得5分,第三次答对得2分,三次没有答对不得分,进入下一题。十题全部完成后显示总得分。
思路
首先要求相加的两个数字要是0到10的整数,需要用到随机函数,利用随机函数产生随机数,相加确定结果后进行判断,再利用判断(if)和选择(switch)设计一个计分板函数,满足随同一题答题次数的上升而加分逐次减少,最多三次尝试机会,分数最低为0。
知识储备
1:产生随机数的随机函数
伪随机数的周期一般很大,该题需要的随机数数量远小于一个周期,利用rand()函数产生随机数,因为需要十对随机数所以用系统时钟进行随机数种子的重置,当然也可以一次性产生10对随机数。但是后者需要定义的变量较多。
2:if和else(判断)switch和case(选择)
具体代码
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<time.h>
int judge()
{
int i,j,k,m,n,x,y=0,z;
printf("********************************\n");Sleep(500);//休眠会使打印的像动画
printf("欢迎使用小朋友加法测试系统:\n");Sleep(500);
printf("规则:一共十道题满分100分,每道题最多可以答3次,\n第一次答对给10分,第二次第三次依次给5分,2分\n");Sleep(500);
printf("如果准备好答题请按回车键开始");
getchar();
for(m=1;m<=10;m++)
{
x=0; //用来纪录答错次数每次重新答题进行清零操作
srand((unsigned) (time(NULL)));//随机生成的0到9的随机数
i=rand()%10;
j=rand()%10;
k=i+j;
for(;;)
{
printf("第%d题,%d+%d=?请输入答案:",m,i,j);Sleep(500);
scanf("%d",&n);
if(k==n)
{
printf("恭喜你,答对了!请看下一题\n");Sleep(500);
switch(x) //计分板,进行计分
{
case 0:
y+=10;
break;
case 1:
y+=5;
break;
case 2:
y+=2;
break;
}
}
else
{
x++;
printf("很遗憾,答错了,你还剩%d次机会\n",3-x);Sleep(500);
}
if(x==3)
{
printf("很遗憾,你已经答错了三次,机会已经用完,请看下一题\n");Sleep(500);
}
printf("当前得分%d\n",y);
if(k==n||x==3)
{
break;
}
}
}
printf("小朋友你的最终得分是%d分,\n肥肠不错的成绩,要继续努力哦!",y);
}
int main()
{
system("color 0a");//变色代码绿色
judge();
system("pause");//编译环境为vs2010需要暂停
return 0;
}
结果示例
以上就是解决这个问题的全部,同理要想增加复杂度可以加入加减乘除运算或者扩大随机数的取值范围。有什么问题可以联系博主一起讨论,拜拜ヾ(•ω•`)o