c语言,这两个代码的目的是同一个,但是第一个对,第二个是错的,为什么?
本帖最后由 Echo_晨星 于 2021-4-24 21:58 编辑我们老师年纪比较大,这个代码的写法可能比较老。。。将就看吧,我学的就是这样滴
是要写一个可以循环的给小学生训练四则运算的
第一个代码可以运行,但第二个一运行就弹出:Press any key to continue
两个代码主要是首个for循环有点不一样,第二个是我第一遍写的,当时想用k做一个中介(虽说好像画蛇添足了,现在改成dowhile了),但就是不明白为什么第二个有什么不对。
顺便还有一个问题,就是这个除法不好搞,case 4:比如我写的这个,1/2=0是对的,而不是0.5,我也试着改浮点型啥的,反正各种改,就是不对,再如1/3=1.333333这种改成浮点型也不能让小学生算到后六位吧
我学校才开c半个学期,尽量用基础的,
在此先多谢指教!
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
void main()
{
int a,b,c,d,n,x=0,k;
float rate;
srand((unsigned)time(NULL));
for(rate=0;rate-0.75<0;)
{
for(n=0;n<10;n++)
{
a=rand()%10+1;
b=rand()%10+1;
d=rand()%4+1;
switch(d)
{
case 1:
printf("%d+%d=?\n请输入你的答案:",a,b);
scanf("%d",&c);
if(c==a+b)
{
printf("正确\n");
x++;
}
else
printf("错了\n");break;
case 2:
printf("%d-%d=?\n请输入你的答案:",a,b);
scanf("%d",&c);
if(c==a-b)
{
printf("正确\n");
x++;
}
else
printf("错了\n");break;
case 3:
printf("%d*%d=?\n请输入你的答案:",a,b);
scanf("%d",&c);
if(c==a*b)
{
printf("正确\n");
x++;
}
else
printf("错了\n");break;
case 4:
printf("%d/%d=?\n请输入你的答案:",a,b);
scanf("%d",&c);
if(c==a/b)
{
printf("正确\n");
x++;
}
else
printf("错了\n");break;
}
}
printf("************\n你的总分为:%d\n\n你的正确率为:%.2f%%\n",x*10,(float)x/n*100);
rate=(float)x/n;
if(rate-0.75<0) printf("************请再试一次吧************\n");
}
}
*******************************************************************************************************************
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
void main()
{
int a,b,c,d,n,x=0,k;
float rate;
srand((unsigned)time(NULL));
for(k=0;k=0;)
{
for(n=0;n<10;n++)
{
a=rand()%10+1;
b=rand()%10+1;
d=rand()%4+1;
switch(d)
{
case 1:
printf("%d+%d=?\n请输入你的答案:",a,b);
scanf("%d",&c);
if(c==a+b)
{
printf("正确\n");
x++;
}
else
printf("错了\n");break;
case 2:
printf("%d-%d=?\n请输入你的答案:",a,b);
scanf("%d",&c);
if(c==a-b)
{
printf("正确\n");
x++;
}
else
printf("错了\n");break;
case 3:
printf("%d*%d=?\n请输入你的答案:",a,b);
scanf("%d",&c);
if(c==a*b)
{
printf("正确\n");
x++;
}
else
printf("错了\n");break;
case 4:
printf("%d/%d=?\n请输入你的答案:",a,b);
scanf("%d",&c);
if(c==a/b)
{
printf("正确\n");
x++;
}
else
printf("错了\n");break;
}
}
printf("************\n你的总分为:%d\n\n你的正确率为:%.2f%%\n",x*10,(float)x/n*100);
rate=(float)x/n;
if(rate-0.75>0)
{
k=1;
printf("************请再试一次吧************\n");
}
}
}
有没有人
啊 顶
本帖最后由 henkuderen 于 2021-4-25 17:39 编辑
一: for(k=0;k=0;)应该使用 for(k=0;k!=1;)才能执行循环,
二:除法的话,商应该使用浮点数保存,你这里的a,b变量都为整形,除法会只保留整数部分,所以可以:
float c=0.0,tmp=0.0;
tmp=(float)a/(float)b;
验证除法结果是否正确,可以使用abs(c-tmp))<=0.01,自行约束误差在几位小数,
三:我将c定义为float型,则在结果输入时使用scanf(%f,&c),
四:添加提醒,说明除法运算精确到小数点后几位,:printf("%d/%d=?\n请输入你的答案(保留2位小数):",a,b);
五:可以考虑使用取余运算,要求输入除法的余数,判断余数是否正确
页:
[1]