zoukankan      html  css  js  c++  java
  • C语言编程—自动生成四则运算升级版

      1 #include<stdio.h>
      2 #include<time.h>
      3 struct fenshu
      4 {
      5     int fenzi;
      6     int fenmu;
      7 }Fenshu[100];
      8 int suiji(int x)
      9 {
     10     x=rand()%100;
     11     return x;
     12 }
     13 double Suiji(int x)
     14 {
     15     x=rand()%100;
     16     return x;
     17 }
     18 main()
     19 {
     20     int a,b,i,j,k,x,y,daan,grade=0;
     21     double c,d,e,f; //小数
     22     float g,h;
     23     int l,m,n,o,p,r,s,t;
     24     printf("\t\t\t欢迎使用本系统\n");
     25     while (1)
     26     {
     27         srand((int)time(0));
     28         //使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒)
     29         printf("------1:整数 2:小数 3:真分数 4:用户出题模式 5:分数统计 0:退出------");
     30         printf("\n");
     31         scanf("%d",&j);
     32         switch(j)
     33         {
     34         case 1:
     35              printf("请选择: 1:加法运算 2:减法运算 3:乘法运算 4:除法运算\n");
     36              scanf("%d",&k);
     37              switch(k)
     38              {
     39              case 1:
     40                  while (1)
     41                  {
     42                     a=suiji(x)+1;
     43                     b=suiji(y)+1;
     44                     printf("%d+%d=",a,b);    
     45                     scanf("%d",&daan);
     46                     if (a+b==daan) {
     47                         printf("\n 恭喜你,答对了!\n");
     48                         grade=grade+10; }
     49                     else if (daan==-1)   //输入-1退出
     50                        break;
     51                     else{
     52                         printf("\n 很抱歉,答错了!\n");
     53                         continue;
     54                     }
     55                  }
     56                    printf("\n");
     57                  break;
     58              case 2:
     59                  while (1)
     60                  {
     61                     a=suiji(x)+1;
     62                     b=suiji(y)+1;
     63                     if (a>b)    //这里强制被减数比减数大
     64                     {
     65                         printf("%d-%d=",a,b);}
     66                        scanf("%d",&daan); 
     67                     if (a-b==daan) {
     68                         printf("\n 恭喜你,答对了!\n");
     69                         grade=grade+10; }
     70                     else if (daan==-1)
     71                        break;
     72                     else{
     73                             printf("\n 很抱歉,答错了!\n");
     74                             continue;
     75                     }
     76                  }
     77                  printf("\n");
     78                  break;
     79              case 3:
     80                  while (1)
     81                  {
     82                     a=suiji(x)+1;
     83                     b=suiji(y)+1;
     84                     printf("%d*%d=",a,b);
     85                     scanf("%d",&daan);
     86                     if (a*b==daan) {
     87                         printf("\n 恭喜你,答对了!\n");
     88                         grade=grade+10; }
     89                     else if (daan==-1)
     90                        break;
     91                     else{
     92                             printf("\n 很抱歉,打错了!\n");
     93                             continue;
     94                     }
     95                  }
     96                  printf("\n");
     97                  break;
     98              case 4:
     99                  while (1)
    100                  {
    101                       a=suiji(x)+1;
    102                     b=suiji(y)+1;
    103                     if (a<b) {
    104                         printf("%d÷%d=",a,b);   } 
    105                     scanf("%f",&h);
    106                     g=(float)a/b;
    107                     if (h==g) {
    108                         printf("恭喜你,答对了!\n");
    109                         grade=grade+10;  }
    110                     else if (daan=-1)
    111                         break;
    112                     else {
    113                         printf("\n 很抱歉,答错了!\n");
    114                         continue;
    115                     }
    116                  } 
    117                  printf("\n");
    118                  break;
    119              }
    120              break;
    121       case 2:
    122           printf("请选择: 1:加法运算 2:减法运算 3:乘法运算 4:除法运算\n");
    123           scanf("%d",&k);
    124           switch(k)
    125           {
    126           case 1:
    127                   for (i=0;i<30;i++)
    128                   {
    129                      c=Suiji(x)+1;
    130                      d=Suiji(y)+1;
    131                      e=Suiji(x)*0.01;
    132                      f=Suiji(y)*0.01;
    133                      printf("%2.2f+%2.2f=\t",c+e,d+f);
    134                   }
    135                     printf("\n");
    136                   break;
    137           case 2:
    138                   for (i=0;i<30;i++)
    139                   {
    140                      c=Suiji(x)+1;
    141                      d=Suiji(y)+1;
    142                      e=Suiji(x)*0.01;
    143                      f=Suiji(y)*0.01;
    144                      printf("%2.2f-%2.2f=\t",c+e,d+f);
    145                   }
    146                     printf("\n");
    147                   break;
    148           case 3:
    149                   for (i=0;i<30;i++)
    150                   {
    151                      c=Suiji(x)+1;
    152                      d=Suiji(y)+1;
    153                      e=Suiji(x)*0.01;
    154                      f=Suiji(y)*0.01;
    155                      printf("%2.2f*%2.2f=\t",c+e,d+f);
    156                   }
    157                     printf("\n");
    158                   break;
    159           case 4:
    160                   for (i=0;i<30;i++)
    161                   {
    162                      c=Suiji(x)+1;
    163                      d=Suiji(y)+1;
    164                      e=Suiji(x)*0.01;
    165                      f=Suiji(y)*0.01;
    166                      printf("%2.2f/%2.2f=\t",c+e,d+f);
    167                   }
    168                     printf("\n");
    169                   break;
    170           }
    171           break;
    172       case 3:
    173            printf("请选择: 1:加法运算 2:减法运算 3:乘法运算 4:除法运算\n");
    174            scanf("%d",&k);
    175            switch(k)
    176            {
    177             case 1:
    178                for (i=0;i<30;i++)
    179                {
    180                    Fenshu[i].fenzi=suiji(x)+1;
    181                    Fenshu[i].fenmu=suiji(y)+1;
    182                    Fenshu[i+1].fenzi=suiji(x)+1;
    183                    Fenshu[i+1].fenmu=suiji(y)+1;
    184                    if (Fenshu[i].fenzi<Fenshu[i].fenmu && Fenshu[i+1].fenzi<Fenshu[i+1].fenmu)   //把真分数筛选出来
    185                        printf("%d/%d+%d/%d=\t ",Fenshu[i].fenzi,Fenshu[i].fenmu,Fenshu[i+1].fenzi,Fenshu[i+1].fenmu);
    186                }
    187                printf("\n");
    188                break;
    189             case 2:
    190                for (i=0;i<30;i++)
    191                {
    192                    Fenshu[i].fenzi=suiji(x)+1;
    193                    Fenshu[i].fenmu=suiji(y)+1;
    194                    Fenshu[i+1].fenzi=suiji(x)+1;
    195                    Fenshu[i+1].fenmu=suiji(y)+1;
    196                    if (Fenshu[i].fenzi<Fenshu[i].fenmu && Fenshu[i+1].fenzi<Fenshu[i+1].fenmu)   
    197                        printf("%d/%d-%d/%d=\t ",Fenshu[i].fenzi,Fenshu[i].fenmu,Fenshu[i+1].fenzi,Fenshu[i+1].fenmu);
    198                }
    199                printf("\n");
    200                break;
    201             case 3:
    202                for (i=0;i<30;i++)
    203                {
    204                    Fenshu[i].fenzi=suiji(x)+1;
    205                    Fenshu[i].fenmu=suiji(y)+1;
    206                    Fenshu[i+1].fenzi=suiji(x)+1;
    207                    Fenshu[i+1].fenmu=suiji(y)+1;
    208                    if (Fenshu[i].fenzi<Fenshu[i].fenmu && Fenshu[i+1].fenzi<Fenshu[i+1].fenmu)   
    209                        printf("%d/%d*%d/%d=\t ",Fenshu[i].fenzi,Fenshu[i].fenmu,Fenshu[i+1].fenzi,Fenshu[i+1].fenmu);
    210                }
    211                printf("\n");
    212                break;
    213             case 4:
    214                for (i=0;i<30;i++)
    215                {
    216                    Fenshu[i].fenzi=suiji(x)+1;
    217                    Fenshu[i].fenmu=suiji(y)+1;
    218                    Fenshu[i+1].fenzi=suiji(x)+1;
    219                    Fenshu[i+1].fenmu=suiji(y)+1;
    220                    if (Fenshu[i].fenzi<Fenshu[i].fenmu && Fenshu[i+1].fenzi<Fenshu[i+1].fenmu)   
    221                        printf("%d/%d÷%d/%d=\t ",Fenshu[i].fenzi,Fenshu[i].fenmu,Fenshu[i+1].fenzi,Fenshu[i+1].fenmu);
    222                }
    223                printf("\n");
    224                break;
    225            }
    226            break;
    227         case 4:
    228             while (1)  //     a/c+b/d = (ad+bc)/cd
    229             {
    230                 printf("请输入两个真分数(用逗号分开 两个分数用空格隔开):");
    231                 scanf("%d,%d %d,%d",&m,&n,&o,&p);
    232                 
    233                 printf("下列是加法运算:\n");   //r是最大公约数
    234                 if ((m*p+o*n)>(n*p)) {r=m*p+o*n; s=n*p;}
    235                   else {r=n*p; s=m*p+o*n;}
    236                 t=s;
    237                 while (t!=0)
    238                 {
    239                     t=r%s;
    240                     r=s;
    241                     s=t;
    242                 }
    243                 printf("%d/%d+%d/%d=%d/%d\n",m,n,o,p,(m*p+o*n)/r,(n*p)/r);
    244                 
    245                 printf("下列是减法运算:\n");
    246                 if ((m*p-o*n)>(n*p)) {r=m*p+o*n; s=n*p;}
    247                   else {r=n*p; s=m*p-o*n;}
    248                 t=s;
    249                 while (t!=0)
    250                 {
    251                     t=r%s;
    252                     r=s;
    253                     s=t;
    254                 }
    255                 printf("%d/%d-%d/%d=%d/%d\n",m,n,o,p,(m*p-o*n)/r,(n*p)/r);
    256                 
    257                 printf("下列是乘法运算:\n");
    258                 if ((m*o)>(n*p)) {r=m*o; s=n*p;}
    259                   else {r=n*p; s=m*o;}
    260                 t=s;
    261                 while (t!=0)
    262                 {
    263                     t=r%s;
    264                     r=s;
    265                     s=t;
    266                 }
    267                 printf("%d/%d*%d/%d=%d/%d\n",m,n,o,p,(m*o)/r,(n*p)/r);
    268 
    269                 printf("下列是除法运算:\n");
    270                 if ((m*p)>(n*o)) {r=m*p; s=n*o;}
    271                   else {r=n*o; s=m*p;}
    272                 t=s;
    273                 while (t!=0)
    274                 {
    275                     t=r%s;
    276                     r=s;
    277                     s=t;
    278                 }
    279                 printf("%d/%d÷%d/%d=%d/%d\n",m,n,o,p,(m*p)/r,(n*o)/r);
    280                 break;
    281             }
    282             break;
    283         case 5:
    284               printf("\n 你获得的分数为%d\n",grade);
    285               break;
    286         case 0:
    287               exit(0);
    288               break;
    289         }
    290    }
    291 }

    感想:这个程序写出来感觉不难,但是如果要更好的话,还要继续努力。通过写这个程序,我学习到了语句:srand((int)time(0));。这条语句可以把当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒),要是没有的话,会发现每一次运行的结果都一样,即“不是随机的随机”,显然不是我们想要的。四则运算题目,需要产生随机数,那么问题来了,产生的是整数还是小数?想产生哪个区间的整数,就用rand()对几求余加1,例如想在1到100之间取整,那么可以rand()%100+1。还有,小数部分,首先要想到的是小数点后几位,我总结出了通式:(rand()%10x)*10-x。得之老师给我们布置了升级版的题目,马上就动脑并开始做了。判断正确与否设置在了整数那,小数和分数不做设置,本程序的精华在于两个真分数的四则运算,虽然还有些小瑕疵,但是对于我来说已经是一种进步了,继续加油吧!

  • 相关阅读:
    02-NSArray、NSSet、NSDictionary 集合类
    01-结构体NSRange、NSPoint、NSSize、NSRect、及NSString简介
    13-Objective-C特有语法:协议protocol
    12-Objective-C特有语法:(高效率)block数据类型
    Xcode编译器特性:ARC(Automatic Reference Counting)
    11-Objective-C特有语法:内存管理总结
    10-Objective-C特有语法:Category、类对象、description、SEL、NSLog输出增强
    09-Objective-C特有语法:万能指针id及构造方法
    通配符 正则常用对比
    window 远程登录linux
  • 原文地址:https://www.cnblogs.com/yuhancheng/p/4368410.html
Copyright © 2011-2022 走看看