• 作业:随机四则运算


          这个作业难度还是比较低的。

          先从两个方面开始考虑:第一是生成整数(考虑到是小学的作业,整数设定在100以内)的四则运算,第二是生成真分数(考虑是小学的作业,真分数的分子和分母都只用一位数)的四则运算。

          生成整数运算很简单,用srand和rand生成两个数字,显示出来,并在系统内部计算,同时让小学生写出答案,最后将小学生的答案与正确答案相比,最后判定正确。加法和乘法就不用多说,减法的话,生成整数之后还要判定两个数的大小,以免相减之后出现负数;除法的答案,用商和余数的方法。

          生成分数运算,随机两个数,两个数组成一个分数,当然,要是真分数的话得判定分子与分母的大小,大的是分母。真分数的四则运算也就那样,其实最重要的还是内部的答案化简,利用辗转相除法把得到的分数两个数进行化简,最后才能和小学生给出的答案相比判定。

          主函数使用switch函数,利用随机数来随机产生八种算式。

          原代码如下:

    ====================================================================

    #include <stdio.h>
    #include <time.h> 
    #include <stdlib.h> 
    
    int shuzi() //随机100以内的数字
    {
          int a;
          a=rand()%100;
          return a;
    }
    
    int shuzi1() //随机10以内的数字
    {
          int a;
          a=rand()%10;
          return a;
    }
    
    int fenshuzi() //随机10以内不为0的数字
    {
          int a=11;
    
          loop: a=rand()%10;
    
          if(a==0)
          goto loop;
    
    
          return a;
    }
    
    
    int jiafa() //整数加法
    {
    
          int a,b;
          a=shuzi();
          b=shuzi();
          printf("%d+%d=",a,b);
          int c,d;
          c=a+b;
          scanf("%d",&d);
          if(d==c)
                printf("正确!
    ");
          else 
                printf("错误!
    ");
          return 0;
    }
    
    
    int jianfa() //整数减法
    {
    
          int a,b,k;
          a=shuzi();
          b=shuzi();
          if(a<b)
          {
                k=a;
                a=b;
                b=k;
          }
          printf("%d-%d=",a,b);
          int c,d;
          c=a-b;
          scanf("%d",&d);
          if(d==c)
                printf("正确!
    ");
          else 
                printf("错误!
    "); 
          return 0;
    }
    
    int chufa() //整数除法
    {
    
          int a,b;
          a=shuzi();
          b=shuzi();
          printf("%d÷%d=",a,b);
          int c,d,f,g;
          c=a/b;
          f=a%b;
          scanf("%d",&d);
          printf("余:");
          scanf("%d",&g);
          if(d==c&g==f)
                printf("正确!
    ");
          else 
                printf("错误!
    "); 
          return 0;
    
    }
    
    int chengfa() //整数乘法
    { 
          int a,b;
          a=shuzi();
          b=shuzi();
          printf("%dx%d=",a,b);
          int c,d;
          c=a*b;
          scanf("%d",&d);
          if(d==c)
                printf("正确!
    ");
          else 
                printf("错误!
    "); 
          return 0;
    }
    
    int gcd(int n,int m) //分数化简
    {
          int temp,r;
          if(n<m)
          {
                temp=n;
                n=m;
                m=temp;
          }
          while(m!=0)
          { 
                r=n%m;
                n=m;
                m=r; 
          }
    return n;
    }
    
    int fenshujiafa() //分数加法
    {
          int a,b,c,d,i,j;
          a=fenshuzi();
          b=fenshuzi();
          if(a>b)
          {
                i=a;
                a=b;
                b=i;
          }
    
    
          c=fenshuzi();
          d=fenshuzi();
          if(c>d)
          {
                i=c;
                c=d;
                d=i;
          }
    
          printf("%d/%d + %d/%d =
     ",a,b,c,d);
    
          a=a*d;
          c=c*b;
          b=b*d;
          d=b;
    
          int fenzi,fenmu,fenzi1,fenmu1;
          fenzi=a+c;
          fenmu=b;
    
          fenzi1=fenzi;
          fenmu1=fenmu;
    
     
    
          fenzi=fenzi1/gcd(fenzi1,fenmu1);
          fenmu=fenmu1/gcd(fenzi1,fenmu1);
    
     
    
          scanf("%d",&i);
          printf("---
     ");
          scanf("%d",&j);
    
     
    
          if((i==fenzi)&(j==fenmu))
                printf("正确!
    ");
          else
                printf("错误!
    ");
    
          return 0;
    }
    
    int fenshujianfa() //分数减法
    {
          int a,b,c,d,i,j;
          a=fenshuzi();
          b=fenshuzi();
          if(a>b)
          {
                i=a;
                a=b;
                b=i;
          }
    
    
          c=fenshuzi();
          d=fenshuzi();
          if(c>d)
          {
          i=c;
          c=d;
          d=i;
          }
    
          float god,pig,god1,pig1;
          god=a;
          pig=b;
          god1=c;
          pig1=d;
          god=god/pig;
          god1=god1/pig1;
          if(god<god1)
          {
                i=a;
                a=c;
                c=i;
                i=b;
                b=d;
                d=i;
          }
    
          printf("%d/%d - %d/%d =
     ",a,b,c,d);
    
          a=a*d;
          c=c*b;
          b=b*d;
          d=b;
    
          int fenzi,fenmu,fenzi1,fenmu1;
          fenzi=a-c;
          fenmu=b;
    
          fenzi1=fenzi;
          fenmu1=fenmu;
    
     
    
          fenzi=fenzi1/gcd(fenzi1,fenmu1);
          fenmu=fenmu1/gcd(fenzi1,fenmu1);
    
          scanf("%d",&i);
          printf("---
     ");
          scanf("%d",&j);
    
     
    
          if((i==fenzi)&(j==fenmu))
                printf("正确!
    ");
          else
                printf("错误!
    ");
    
          return 0;
    
    }
    
    int fenshuchufa() //分数除法
    {
          int a,b,c,d,i,j;
          a=fenshuzi();
          b=fenshuzi();
          if(a>b)
          {
                i=a;
                a=b;
                b=i;
          }
    
    
          c=fenshuzi();
          d=fenshuzi();
          if(c>d)
          {
                i=c;
                c=d;
                d=i;
          }
    
          printf("%d/%d ÷ %d/%d =
     ",a,b,c,d);
    
          i=c;
          c=d;
          d=i;
    
          int fenzi,fenmu,fenzi1,fenmu1;
          fenzi=a*c;
          fenmu=b*d;
    
          fenzi1=fenzi;
          fenmu1=fenmu;
    
     
    
          fenzi=fenzi1/gcd(fenzi1,fenmu1);
          fenmu=fenmu1/gcd(fenzi1,fenmu1);
    
     
    
          scanf("%d",&i);
          printf("---
     ");
          scanf("%d",&j);
    
     
    
          if((i==fenzi)&(j==fenmu))
                printf("正确!
    ");
          else
                printf("错误!
    ");
    
          return 0;
    }
    
    int fenshuchengfa() //分数乘法
    {
          int a,b,c,d,i,j;
          a=fenshuzi();
          b=fenshuzi();
          if(a>b)
          {
                i=a;
                a=b;
                b=i;
          }
    
    
          c=fenshuzi();
          d=fenshuzi();
          if(c>d)
          {
                i=c;
                c=d;
                d=i;
          }
    
          printf("%d/%d X %d/%d =
     ",a,b,c,d);
    
    
          int fenzi,fenmu,fenzi1,fenmu1;
          fenzi=a*c;
          fenmu=b*d;
    
          fenzi1=fenzi;
          fenmu1=fenmu;
    
     
    
          fenzi=fenzi1/gcd(fenzi1,fenmu1);
          fenmu=fenmu1/gcd(fenzi1,fenmu1);
    
    
          scanf("%d",&i);
          printf("---
     ");
          scanf("%d",&j);
    
     
    
          if((i==fenzi)&(j==fenmu))
                printf("正确!
    ");
          else
                printf("错误!
    ");
    
          return 0;
          }
    
     
    
    int main()
    {
    
          srand(time(0));
          int i,j;
          
    
          for(j=0;j<30;j++)
          {
          i=shuzi1();
              i=i%8;
                switch (i)
                {
                      case 0: {jiafa(); break;}
                      case 1: {jianfa(); break;} 
                      case 2: {chufa(); break;} 
                      case 3: {chengfa(); break;} 
                      case 4: {fenshujiafa(); break;}
                      case 5: {fenshujianfa(); break;} 
                      case 6: {fenshuchufa(); break;} 
                      case 7: {fenshuchengfa(); break;} 
                      default : printf("error 
    ");
                }
    
          }
    
    
          return 0;
    }

     

    ========================================================================

    因为不是很熟练,所以代码难免冗长,排版不是很干净

    运行效果如下:

    如果正确会提示正确,错误会提示错误,出三十道题目,直到结束为止。

    除法的答案要求分别写出得数和余数,真分数的运算要求先输入分子后输入分母。

  • 相关阅读:
    马走日
    扩号匹配问题
    八皇后
    流感传染
    迷宫
    棋盘问题
    JAVA-初步认识-第二章-字符类型的运算续
    JAVA-初步认识-第二章-算术运算符1知识点整理
    JAVA-初步认识-第二章-算术运算符1
    JAVA-初步认识-第二章-类型运算细节
  • 原文地址:https://www.cnblogs.com/mohaozhong/p/5261296.html
Copyright © 2020-2023  润新知