• 实验一 小学四则运算修改版


     #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    int n;//记录输入的题目个数
    int a,b,c,da;//a,b分别代表第一,第二操作数,c代表得数,da代表输入的答案
    float score=0;//记录总分数
    float j,k,L;//分别计算答对的分数
    float lv;//计算答对的概率
    //进行加法运算
    void jia()
    {
        int i;
        j=k=0;
        lv=0;
        printf(" 欢迎使用,以下是加法运算 ");
        printf("请输入题目数:");
        fflush( stdin );
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            a=rand()%100;
            b=rand()%100;
            c=a+b;
            printf(" %d+%d=? ",a,b);
            printf("请输入你的答案(答对一题5分):");
            fflush( stdin );
            scanf("%d",&da);
             if(da==c)  //判断答案是否正确
             {
                printf(" 恭喜你,答对了! ");
                j=j+5;

             }
            else
            {
                printf(" 抱歉,你答错了!你还有一次机会 ");
                printf(" %d+%d=? ",a,b);
                printf("请输入你的答案:");
                fflush( stdin );
                scanf("%d",&da);

                if(da==c)
                {
                    printf(" 恭喜你,答对了! ");
                    k=k+5;
                }
                else  printf(" 抱歉,你又答错了,正确答案是:%d+%d=%d ",a,b,c);
            }
        }
        score=j+k;
        lv=(score/(5*n))*100;
        printf(" 加法运算中所得的分数为%.f分 答对概率为百分之%.2f ",score,lv);
    }
    //进行减法运算
    void jian()
    {
        int i,temp;//temp是中间变量
        j=k=0;
        lv=0;
        printf(" 欢迎使用,以下是减法运算 ");
        printf("请输入题目数:");
        fflush( stdin );
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            a=rand()%100;
            b=rand()%100;
            if(a<b)//保证得出的数不是负数
            {
                temp=a;
                a=b;
                b=temp;
            }
            c=a-b;
            printf(" %d-%d=? ",a,b);
            printf("请输入你的答案:");
            fflush( stdin );
            scanf("%d",&da);
            if(da==c)
            {
                printf(" 恭喜你,答对了! ");
                j=j+5;
            }
            else
            {
                printf(" 抱歉,你答错了,你还有一次机会 ");
                printf(" %d-%d=? ",a,b);
                printf("请输入你的答案:");
                fflush( stdin );
                scanf("%d",&da);
                if(da==c)
                {
                    printf(" 恭喜你,答对了! ");
                    k=k+5;
                }
                else  printf(" 抱歉,你又答错了,正确答案为:%d-%d=%d ",a,b,c);

            }
        }
        score=(j+k);
        lv=(score/(5*n))*100;
        printf(" 减法运算中所得的分数为%.f分 答对概率为百分之%.2f ",score,lv);
    }
    //进行乘法运算
    void chen()
    {
        int i;
        j=k=0;
        lv=0;
        printf(" 欢迎使用,以下是乘法题 ");
        printf(" 请输入题目数:");
        fflush( stdin );
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            a=rand()%100;
            b=rand()%100;
            c=a*b;
            printf(" %d*%d=? ",a,b);
            printf("请输入答案:");
            fflush( stdin );
            scanf("%d",&da);
            if(da==c)
            {
                printf(" 恭喜你,答对了! ");
                j=j+5;
            }
            else
            {
                printf(" 抱歉,你答错了,你还有一次机会! ");
                printf(" %d*%d=? ",a,b);
                printf("请输入答案:");
                fflush( stdin );
                scanf("%d",&da);
                if(da==c)
                {
                    printf(" 恭喜你,答对了! ");
                    k=k+5;
                }
                else  printf(" 抱歉,又答错了,正确答案为:%d*%d=%d ",a,b,c);
            }
        }
        score=j+k;
        lv=(score/(5*n))*100;            
        printf(" 乘法运算中所得的分数为%.f分 答对概率为百分之%.2f ",score,lv); 
    }

    //进行除法运算
    void chu()
    {
        int i;
        char dn;//用以保存除法运算符
        float an;//用以保存除法运算得出的答案
        int fenzi,fenmu;//fenzi是分子,fenmu是分母
        j=k=L=0;
        lv=0;
        printf(" 欢迎使用,以下是除法题 ");
        printf("请输入题数:");
        fflush( stdin );
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            a=rand()%100;
            b=rand()%99+1;//使得随机出现的数不会有0,保证了除数不会出现0情况,即不会出现无意义的情况
            c=a/b;
            if(a%b==0)  //判断数能否除尽,若a对b求余为0,则说明除得尽,以整数形式输入,否则则为除不尽,提示以分数输入
            {
                   printf(" %d/%d=? ",a,b);
                   printf(" 请输入你的答案:");
                   fflush( stdin );
                   scanf("%f",&an);
                if(an==c)
                {
                    printf("恭喜你,答对了! ");
                    j=j+5;
                }
                else
                {
                       printf("抱歉,你答错了,你还有一次机会! ");
                       printf(" %d/%d=? ",a,b);
                       printf(" 请输入你的答案:");
                       fflush( stdin );
                       scanf("%f",&an);
                       if(an==c)  
                       {
                           printf("恭喜你,答对了! ");
                           k=k+5;
                       }
                       else  printf("抱歉,你又答错了,正确答案为:%d/%d=%d ",a,b,c);
                }
            }
            else
            {
                //dn='/';//dn保存除法运算符
                printf(" %d/%d=? ",a,b);
                printf(" 请输入你的答案(请以分数形式输入) ");
                printf(" 请输入分子:");
                fflush( stdin );
                scanf("%d",&fenzi);
                printf("请输入分母:");
                fflush( stdin );
                scanf("%d",&fenmu);
                if(fenzi/fenmu==a/b)
                {
                    printf("恭喜你,答对了! ");
                    L=L+5;
                }
                 
                else
                    printf("抱歉,你答错了,正确答案为:%d/%d=%d ",a,b,c);
            }
        }
        score=(j+k+L);
        lv=(score/(5*n))*100;
        printf(" 除法运算中所得的分数为%.f分 中奖率为百分之%.2f ",score,lv);
    }
    int selectmenu()
    {
        int choice;
        do
        {
            printf(" 1:加法运算 ");
            printf(" 2:减法运算 ");
            printf(" 3:乘法运算 ");
            printf(" 4:除法运算 ");
            printf(" 5:谢谢使用 ");
            printf("请选择(1-5):");
            fflush( stdin );
            scanf("%d",&choice);
            while(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5)
            {
                printf("不存在该选项,请重新选择(1-5):");
                fflush(stdin);        //清空输入缓存区,否则字符会一直留在缓存区,使程序进入一个死循环
                scanf("%d",&choice);
            }
        }while((choice<0)||(choice>6));
        system("cls");    //清楚屏幕
        return choice;
    }
    void main()
    {

        int choice;
        srand((unsigned)time(NULL));//随机产生0-99之间的随机数
        while(1)
        {
            switch(choice)
            {
            case 1:
                jia();                            
                break;
            case 2:
                jian();                                 
                break;
            case 3:
                chen();                             
                break;
            case 4:
                chu();
                break;
            case 5:    
                printf("谢谢使用");
                exit(0);

            }
            choice=selectmenu();
        }

    结果:

    总结:

    1、解决了在菜单选择中如果输入的是字符的时候会提示出错,用的是fflush()函数,由于要清除的是存在缓冲区内的字符,因此用fflush(stdin),

    stdin就是标准输入,一般就是指键盘输入到缓冲区里的东西,scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:

    ① 遇空格、“回车”、“跳格”键;

    ② 遇宽度结束;

    ③ 遇非法输入;

    scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中 解决就要在scanf()函数之后加个fflush(stdin)。

    2、解决了上一回没有解决的问题:当出现结果除不尽的情况时,用户输入的数没有以分数形式输入时,不知如何设置提示输入错误,尝试用while语句来判断时,如果输入整型,无论结果是否对都会提示对了

    解决办法:将分数分开来输入,依次提示输入分子与分母。

  • 相关阅读:
    【转】随机函数的rand、srand用法
    realloc,malloc,calloc函数的区别
    c语言中time相关函数
    C语言strdup函数
    c语言strtod()函数的用法
    (转)从拜占庭将军问题谈谈为什么pow是目前最好的共识机制
    Linux命令行编辑快捷键
    少走弯路的10条忠告
    centos6下升级git版本的操作记录
    (转)Ctrl+H 浪潮Raid配置文档
  • 原文地址:https://www.cnblogs.com/LHYwin/p/4381603.html
Copyright © 2020-2023  润新知