#include<stdio.h>
#include<time.h>
void main()
{
int maxNum,quesNum,mathCnt,num1,num2,temp;
int opChar,opNum1,opNum2,answer,result,rightCnt;
char yesOrNo;
//生成随机种子
srand(time(NULL));
//重复执行,直到不愿继续
do{
//(1)设置上限及题目个数
printf("请先输入运算数的范围上限:");
while(scanf("%d",&maxNum)!=1) while(getchar()!='\n');//解决输入错误的问题
printf("请输入一轮运算的题目个数:");
while(scanf("%d",&quesNum)!=1) while(getchar()!='\n');
printf("下面将依次给出%d个算式,请输入你的答案后回车!\n",quesNum);
//(2)依次自动给出quesNum个算术运算算式
for(mathCnt=1;mathCnt<=quesNum;mathCnt++)
{ //(2-1)随机生成两个运算数
num1=rand()%maxNum;
num2=rand()%maxNum;
//使num1保存较大的数,
if(num1<num2)
{//num1、num2互换
temp=num1;
num1=num2;
num2=temp;
}
//(2-2)生成运算符,根据运算符确定运算数及运算结果
switch(rand()%5)
{
case 0:opChar='+';
opNum1=num2;
opNum2=num1-num2;
answer=num1;
break;
case 1:opChar='-';
opNum1=num1;
opNum2=num2;
answer=num1-num2;
break;
case 2:opChar='*';
answer=num1*num2;
while(answer>=maxNum)
{
num1--;
answer=num1*num2;
}
opNum1=num1;
opNum2=num2;
break;
case 3:opChar='/';
opNum1=num1-num1%num2;
opNum2=num2;
answer=opNum1/num2;
break;
case 4:opChar='%';
opNum1=num1;
opNum2=num2;
answer=num1%num2;
break;
}
//(2-3)输出算式
printf("(%d) %d %c %d = ? ", mathCnt,opNum1,opChar,opNum2);
//(2-4)接收键盘输入
while(scanf("%d",&result)!=1)while(getchar()!='\n');
//(2-5)评判结果
if(answer==result)
{
printf("恭喜你,答对了,你真棒!\n");
rightCnt++;
}
else
printf("很遗憾,答错了,加油哦!\n");
}
//(3)结果统计
printf("\n宝贝一共做对了%d道题!\n",rightCnt);
printf("%d\n",10*rightCnt/quesNum);
switch(10*rightCnt/quesNum) //注意学习这里的处理方式
{
case 10:
case 9:printf("你真的很厉害哦!\n");break;
case 8:printf("你做的挺好的!\n");break;
case 7:printf("你也不错的啦!下次一定会更好的!\n");break;
case 6:printf("加油吧,一定会有进步的!\n");break;
default:printf("遇到事情不能坐以待毙!多练习一定会好起来的!\n");
}
//(4)是否继续
printf("\n你还要继续吗!输入Y或y,继续,否则,结束程序:");
getchar();
yesOrNo=getchar();
}while(yesOrNo=='Y'||yesOrNo=='y');
//(5)说再见
printf("\n记得下次见哦!\n");
}
小学生口算练习
最新推荐文章于 2025-05-09 21:45:00 发布