• 四则运算升级版


    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    int cc,i,n,z;//操作数
    int count;//题目数目
    int max,min;//数据的最大值、最小值
    int dt=0;//记录做对题目的数目
    int shu[4];
    char fh[4]={'+','-','*','/'};
    void zhengshu();
    void fenshu();
    int main(void)
    {
        int xz;//操作数
        srand((unsigned)time(NULL));
    
        printf("输入题目题数!--");//输入题目总数
        scanf("%d",&count);
    
        printf("是否有乘除法!(1/否,2/是.)--");//决定是否产生乘除法
        scanf("%d",&cc);
    
        printf("数值范围!(1 100)--");//输入数值范围
        scanf("%d %d",&min,&max);
    
    
        printf("
    请选择!");
        printf("
    1)整数运算.");
        printf("
    2)分数运算.--");
        scanf("%d",&xz);
    
        if(xz==1)
        {
            zhengshu();
        }
        else
        {
            fenshu();
        }
        printf("
    一共%d道题,答对%d道题!
    ",count,dt);
        
    }
    void zhengshu()
    {
        int x=0,y=0;//用户输入答案、正确答案
        int fz0,fm0;//已约分正确分子、分母
        int fz,fm;//用户输入分子、分母
        int jlfz,jlfm;//操作数
        int ys;
        char ch;
        for(i=0;i<count;i++)
        {
            for(n=0;n<2;n++)//生成等式
            {
                shu[n]=rand()%(max-min+1)+min;
                printf(" %d ",shu[n]);
                if(n<1)
                {
                    z=rand()%(cc*2);
                    printf("%c",fh[z]);
                }
                else
                {
                    printf("=");
                }
            }
            switch(z)//算数正确答案
            {
            case 0:
                y=shu[0]+shu[1];
                break;
            case 1:
                y=shu[0]-shu[1];
                break;
            case 2:
                y=shu[0]*shu[1];
                break;
            case 3:
                y=shu[0]/shu[1];
                break;
            default:
                break;
            }
            if(z==3)
            {
                jlfz=shu[0];//约分
                jlfm=shu[1];
            
                while(shu[1]!=0)        
                {            
                    ys=shu[0]%shu[1];
                    shu[0]=shu[1];
                    shu[1]=ys;
                }        
                fz0=jlfz/shu[0];
                fm0=jlfm/shu[0];
                if(fm0<0)        
                {        
                    fz0=fz0*-1;
                    fm0=fm0*-1;        
                }
    
                scanf("%d%c%d",&fz,&ch,&fm);
                if(fz==fz0&&fm==fm0)        
                {            
                    printf("答对了!
    ");
                    dt++;
                }
                else
                {
                    printf("答错了!
    ");
                }
            }
            else
            {
                scanf("%d",&x);
                if(x==y)
                {
                    printf("答对了!
    ");
                    dt++;
                }
                else        
                {
                printf("答错了!
    ");
                }
            }
        }
    }
    void fenshu()
    {
        int fz,fm;//用户输入分子、分母
        int fz0,fm0;//已约分正确分子、分母
        int fz1,fm1;//未约分正确分子、分母
        int jlfz,jlfm;//操作数
        int temp,ys;//操作数
        char ch;
        for(i=0;i<count;i++)
        {
            for(n=0;n<4;n++)//产生四个随机数
            {
                shu[n]=rand()%(max-min+1)+min;
            }
            if(shu[0]>shu[1])//确保分母大于分子
            {
                temp=shu[1];
                shu[1]=shu[0];
                shu[0]=temp;
            }
    
            if(shu[2]>shu[3])//确保分母大于分子
            {
                temp=shu[3];
                shu[3]=shu[2];
                shu[2]=temp;
            }
            z=rand()%(cc*2);
    
            switch(z)
            {
            case 0:
                fz1=shu[0]*shu[3]+shu[1]*shu[2];
                fm1=shu[1]*shu[3];
                break;
            case 1:
                fz1=shu[0]*shu[3]-shu[1]*shu[2];
                fm1=shu[1]*shu[3];
                break;
            case 2:
                fz1=shu[0]*shu[2];
                fm1=shu[1]*shu[3];
                break;
            case 3:
                fz1=shu[0]*shu[3];
                fm1=shu[1]*shu[2];
                break;
            default:
                break;
            }
    
            jlfz=fz1;//约分
            jlfm=fm1;
            while(fm1!=0)
            {
                ys=fz1%fm1;
                fz1=fm1;
                fm1=ys;
            }
            fz0=jlfz/fz1;
            fm0=jlfm/fz1;
            if(fm0<0)
            {
                fz0=fz0*-1;
                fm0=fm0*-1;
            }
            
    
            printf("%d/%d %c %d/%d = ",shu[0],shu[1],fh[z],shu[2],shu[3]);//打印分式
            printf("----|%d/%d|----",fz0,fm0);
            scanf("%d%c%d",&fz,&ch,&fm);
            if(fz==fz0&&fm==fm0)
            {
                printf("答对了!
    ");
                dt++;
            }
            else
            {
                printf("答错了!
    ");
            }
    
        }
    }

    这是实验一的升级版,在编程时遇到的主要问题是分数很难去判断,不过到后面,自己仔细琢磨和参考资料还是搞定了。

  • 相关阅读:
    hibernate关联关系映射
    java单例模式
    HTML如何给table添加滚动条
    jquery的几种ajax方式对比
    JQuery Selectors 方法说明
    jQuery遍历对象/数组/集合
    Jquery常用函数
    【刷题】【省选】ZJOI2017_仙人掌_LOJ2250/Luogu3687_圆方树/dp计数/树形dp
    【学习笔记】圆方树学习笔记
    【模板】【刷题】差分与前缀和_LuoguP5488_多项式
  • 原文地址:https://www.cnblogs.com/linhaixin/p/4410477.html
Copyright © 2020-2023  润新知