Echo_晨星 发表于 2021-4-24 21:57:06

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");
                }
        }
}

Echo_晨星 发表于 2021-4-25 09:36:23

有没有人

Echo_晨星 发表于 2021-4-25 09:37:45


henkuderen 发表于 2021-4-25 17:37:51

本帖最后由 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]
查看完整版本: c语言,这两个代码的目的是同一个,但是第一个对,第二个是错的,为什么?