zoukankan      html  css  js  c++  java
  • 四则运算2.0版

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 main() 
      4 { 
      5     printf("
    	欢迎使用四则运算练习软件
    ");
      6     printf("	说明:如果进行分数运算,用户需输入最简(约分后)的答案!!
    ");
      7     printf("	格式为  5/6
    ");
      8     Chioce();
      9 }
     10 //----------------------------------------------------------------------------------------------------
     11 Chioce()
     12 {
     13     int ch1=0;
     14     printf("	1.整数运算
    	2.分数运算
    	请选择:");
     15     scanf("%d",&ch1);
     16     if(ch1==1)
     17     {
     18         ZhengShuYunSuan();    
     19     }
     20     FenShuYunSuan();
     21     return 0;
     22 }
     23 //---------------------------------------------------------------------------------------------------
     24 ZhengShuYunSuan()                  //整数运算
     25 {  
     26     int ranswer=0;                 //正确答案  
     27     int uanswer=0;                 //用户输入的答案  
     28     int t=0,n=0,m=0;               //临时变量  
     29     char op;                       //运算类别  
     30     int num1=0;                    //操作数1  
     31     int num2=0;                    //操作数2
     32     int ch=1,count=0;
     33     
     34     while(1)
     35     {
     36         if(count==10)
     37         {
     38             printf("	在10道练习里你做对了%d题! 
    ",n);
     39             printf("	1.继续练习
    	2.退出
    	请选择:");
     40             scanf("%d",&ch);
     41             if(ch==2)
     42             {
     43                 printf("	谢谢使用!");
     44                 exit (0);
     45             }
     46             
     47             count=0;
     48             n=0;
     49             Chioce();
     50         }
     51         srand(time(NULL));                                    //初始化随机数  
     52         num1=rand()%10;                                       //取0-9之间的随机数  
     53         num2=rand()%10;  
     54         m=rand()%4+1;  
     55         switch(m)  
     56         {  
     57         case 1:    
     58             op='+';  
     59             break;
     60         case 2:  
     61             op='-'; 
     62             break;
     63         case 3:  
     64             op='*';    
     65             break;
     66         case 4:  
     67             op='/';  
     68             break; 
     69         }                                               //加入一条防止"不够减"的语句,当选择减法且num1小于num2时不够减
     70                                                         //不够减的时候,用临时变量交换两个操作数 
     71         if((op=='-') && (num1<num2)) 
     72         {   
     73             t=num1; 
     74             num1=num2;
     75             num2=t;  
     76         }
     77                                                         //防止"除数为0"的程序漏洞 
     78                                                         //当num2被随机取值到0时,就将num2强制置为1
     79                                                         //做除法时,将num1的值强制赋值给num1*num2,防止不能整除  
     80         if(op=='/')  
     81         {   
     82             if(num2==0)
     83             {    
     84                 num2=1;  
     85             }   
     86             num1=num1*num2; 
     87         }                                               //防止num1不能被num2整除的语句
     88                                                         //输出测试题本身、提示用户输入  
     89         printf("	%d%c%d=",num1,op,num2);  
     90         while(!(scanf("%d",&uanswer)))
     91         {
     92             printf("
    	非法输入,请重新输入答案:");
     93             fflush(stdin);
     94         }
     95                                                         //程序计算正确结果  
     96         switch(op) 
     97         {  
     98         case '+':   ranswer=num1+num2;   break;
     99         case '-':   ranswer=num1-num2;   break;
    100         case '*':   ranswer=num1*num2;   break;
    101         case '/':   ranswer=num1/num2;   break;  
    102         } 
    103         if(uanswer==ranswer) 
    104         {   
    105             printf("		做对了!
    ");  
    106             n++;                                        //正确题数加1
    107         }  
    108         else
    109         {   
    110             printf("		做错了!
    ");  
    111         } 
    112         count++;                                        //题数加1
    113     }
    114     return 0;
    115 }
    116 //--------------------------------------------------------------------------------------------------
    117 FenShuYunSuan()                                       //真分数
    118 {
    119     int a=0,b=0,c=0,d=0;                              //分别为第一、二个分数的分子分母
    120     int x=0,y=0,z=0,ux=0,uy=0,uz=0;                   //系统运算的结果和用户输入的结果
    121     int n=0,t=0,i=0,m=0;
    122     char op,uop;    
    123     int ch=0,count=0;
    124     
    125     while(1)
    126     {
    127         if(count==10)
    128         {
    129             printf("
    	在10道练习里你做对了%d题! 
    ",n);
    130             printf("	1.继续练习
    	2.退出
    	请选择:");
    131             scanf("%d",&ch);
    132             if(ch==2)
    133             {
    134                 exit (0);
    135             }
    136             
    137             count=0;
    138             n=0;
    139             Chioce();
    140         }
    141         srand(time(NULL));                              //获取四个随机整数
    142         a=rand()%10+1;            
    143         b=rand()%10+1;
    144         c=rand()%10+1;
    145         d=rand()%10+1;
    146         
    147         
    148         
    149         if(a>b)                                       //两个if保证分数为真分数,即分母大于分子
    150         {
    151             t=a;
    152             a=b;
    153             b=t;
    154         }
    155         if(c>d)
    156         {
    157             t=c;
    158             c=d;
    159             d=t;
    160         }
    161         srand(time(NULL));
    162         m=rand()%4+1;                                 //随机获取运算符
    163         switch(m)                                     //确定运算符后系统直接计算答案
    164         {
    165         case 1:
    166             op='+';
    167             x=a*d+b*c;
    168             y=b*d;
    169             break;
    170             
    171         case 2:
    172             op='-';
    173             if((a*d<b*c) && (a!=c))                   //if是避免两分数相减是得到的结果是负数
    174             {
    175                 t=a;
    176                 a=c;
    177                 c=t;
    178                 t=b;
    179                 b=d;
    180                 d=t;
    181             }
    182             x=a*d-b*c;
    183             y=b*d;
    184             break;
    185             
    186         case 3:
    187             op='*';
    188             x=a*c;
    189             y=b*d;
    190             break;
    191             
    192         case 4:
    193             op='/';
    194             x=a*d;
    195             y=b*c;
    196             break;
    197         }
    198         
    199         if(x>y)                                        //将系统得到的结果进行约分到最简式
    200         {
    201             i=y;
    202         }
    203         else
    204         {
    205             i=x;
    206         }
    207         
    208         while(i>1)
    209         {
    210             if((x%i==0)&&(y%i==0))
    211             {
    212                 x=x/i;
    213                 y=y/i;
    214                 continue;
    215             }
    216             i--;
    217         }
    218         printf("
    	%d/%d %c %d/%d=",a,b,op,c,d);
    219         if(y==1)                                       //提示用户输入答案是分三种情况,1.分母为1时用户要输入一个整数
    220         {                                              //2.分子分母相同时用户要输入一个整数
    221             z=x;                                       //3.分子分母不同时用户要输入一个分数的格式--(12/13)
    222             while(!(scanf("%d",&uz)))                  //4.并且判断答案的对错
    223             {
    224                 printf("
    	非法输入,请重新输入答案:");
    225                 fflush(stdin);
    226             }
    227             if(z==uz)
    228             {
    229                 printf("		答对了!!");
    230                 n++;
    231             }
    232             else
    233             {
    234                 printf("		答错了!!");
    235             }
    236         }
    237         else if(x==y)
    238         {
    239             z=1;
    240             
    241             while(!(scanf("%d",&uz)))
    242             {
    243                 printf("
    	非法输入,请重新输入答案:");
    244                 fflush(stdin);
    245             }
    246             if(z==uz)
    247             {
    248                 printf("		答对了!!");
    249                 n++;
    250             }
    251             else
    252             {
    253                 printf("		答错了!!");
    254             }
    255             
    256         }
    257         else
    258         {
    259             
    260             while(!(scanf("%d%c%d",&ux,&uop,&uy)))
    261             {
    262                 printf("
    	非法输入,请重新输入答案:");
    263                 fflush(stdin);
    264             }
    265             if((x==ux)&&(y==uy))
    266             {
    267                 printf("		答对了!!");
    268                 n++;
    269             }
    270             else
    271             {
    272                 printf("		答错了!!");
    273             }
    274         }
    275         count++;
    276     }
    277 }

          本次按老师的要求,把真分数的功能添加进去了,老师要求的是和运算,但为了方便,我将加减乘除都添加进去了,即菜单2,菜单1和第一次的博客实现的功能一样。真分数的运算不能说是很难,就是分数在约分时会有点困难,还有最后答案是一个分数还是整数也要判断,再提示用户输入。

  • 相关阅读:
    layer 弹出层 回调函数调用 弹出层页面 函数
    jquery 封装页面之间获取值
    ZTree 获取选中的项
    动态拼接SQL 语句
    翻译-使用Spring调用SOAP Web Service
    分享最新的博客到LinkedIn Timeline
    翻译-使用Spring WebService生成SOAP Web Service
    在Gradle中使用jaxb的xjc插件
    Gradle中的buildScript代码块
    健身4个月总结
  • 原文地址:https://www.cnblogs.com/ouqifeng/p/4376802.html
Copyright © 2011-2022 走看看