题目要求:
(1)随机生成5道四则运算题,题目的类型自加,减,乘,除中任意混合出题(即5道题目中有各种类型的题目),每个题目的2个整数是20以内的随机数,题目显示在屏幕上,由用户输入答案(如下图所示)。
(2)程序判断用户输入的答案是否正确,统计答题的正确率。运行结束时,询问是否继续练习,如果回答“Y”则继续进行练习,如果回答“N”则退出练习。
(3)把每次所做的题目和答题的准确率输出在屏幕上,同时也把每次的运行结果保存到result.txt文本文件中。
随机生成数函数:srand((unsigned)time(NULL));
生成随机数在[a,b]范围内:a=rand()%(b-a+1)+a;
生成的数在0-20以内:a=rand()%21;
但是由于在除法中除数不可以为0,生成随机数范围应该在1-20:a=rand()%20+1;
加法,减法,乘法函数:
int add()
{
int a,b,c;
srand((unsigned)time(NULL));
a=rand()%21;
b=rand()%21;
printf("%d+%d=",a,b);
scanf("%d",&c);
if(c==a+b)
return 1;
else
return 0;
}
int sub()
{
int a,b,c;
srand((unsigned)time(NULL));
a=rand()%21;
b=rand()%21;
printf("%d-%d=",a,b);
scanf("%d",&c);
if(c==a-b)
return 1;
else
return 0;
}
int mul()
{
int a,b,c;
srand((unsigned)time(NULL));
a=rand()%21;
b=rand()%21;
printf("%d*%d=",a,b);
scanf("%d",&c);
if(c==a*b)
return 1;
else
return 0;
}
除法函数中:由于会出现2/3,4/7之类除不尽的,要判断输入的与正确结果是否相同
方法一:让二者相减的绝对值小于某个数时判定为相等:
if(fabs(c-div(a,c))<=1e-2;
方法二:四舍五入(注意类型转换)
temp=((double)a/b+0.005)*100;
p=(double)temp/100;
要将每次的运行结果保存到result.txt文本文件中:
FILE *fp=fopen("result.txt","a");
fprintf(fp,"%d*%d=%d\n",a,b,c);
fclose(fp);
每次生成五道题目可以利用for循环+switch
int main()
{
int i,s,score,x=1;
char ch;
FILE *fp=fopen("result.txt","w");
printf("计算练习,电脑随机生成5道题目\n二十以内加减乘除(四舍五入保留二位小数),请答题:\n");
fprintf(fp,"计算练习,电脑随机生成5道题目\n二十以内加减乘除(四舍五入保留二位小数),请答题:\n");
fclose(fp);
while(x)
{
score=0;
for(i=1;i<=5;i++)
{
srand((unsigned)time(NULL));
s=rand()%4+1;
switch(s)
{
case 1:score=score+add(); break;
case 2:score=score+sub(); break;
case 3:score=score+mul(); break;
case 4:score=score+divv(); break;
}
}
FILE *fp=fopen("result.txt","a");
printf("正确率为%d%%\n",score*20);
printf("是否继续,如果是输入Y,否则输入N:\n");
fprintf(fp,"正确率为%d%%\n",score*20);
fprintf(fp,"是否继续,如果是输入Y,否则输入N:\n");
fflush(stdin);
ch=getchar();
if(ch=='N')
x=0;
fprintf(fp,"%c\n",ch);
fclose(fp);
}
return 0;
}