zoukankan      html  css  js  c++  java
  • 四则运算2——改进

      第一次的代码无法选择打印方式,这次用户可以选择是输出到文件还是打印到屏幕。代码如下:

      1 //张晓菲,2016/3/11
      2 //要求:1、题目避免重复;
      3 //      2、可定制(数量、打印方式);
      4 //      3、可以控制下列参数:是否有乘除法、是否有括号、数值范围、加减有无负数、除法有无余数。
      5 
      6 #include<iostream>
      7 #include<time.h>
      8 #include <cmath>
      9 #include<string>
     10 #include<fstream>
     11 using namespace std;
     12 
     13 void main()
     14 {
     15     srand( (unsigned)time( NULL ) );//时间种子防止每次产生的随机数相同
     16     int num1,num2,max,oper,mean1;
     17     int ran[10];
     18     int i;
     19     //ofstream fout;
     20     ofstream fout("1.txt"); 
     21     
     22 
     23     cout<<"请输入要打印的数量:";
     24     cin>>num1;
     25     if(num1<=0)
     26     {
     27         cout<<"请重新输入要打印的数量:";
     28         cin>>num1;
     29     }
     30 
     31     cout<<"请输入打印方式:(1、输出到文件 0、输出到屏幕)";
     32     cin>>mean1;
     33 
     34     cout<<"请输入可以允许随机产生的最大数值:";
     35     cin>>max;
     36     if(max<=0)
     37     {
     38         cout<<"请重新输入可以允许的最大数值:";
     39         cin>>max;
     40     }
     41 
     42     cout<<"请输入允许几个操作数:";
     43     cin>>num2;
     44     if(num2<=1)
     45     {
     46         cout<<"请重新输入允许几个操作数(1<x<=3):";
     47         cin>>num2;
     48     }
     49 
     50     cout<<"请选择是否有乘除法(1:是 0:否):";
     51     cin>>i;
     52     if(i!=1 && i!=0)
     53     {
     54         cout<<"请重新选择是否有乘除法(1:是 0:否):";
     55         cin>>i;
     56     }
     57 
     58     for(int x=0;x<num1;x++)
     59         {
     60             for(int j=0;j<num2;j++)
     61             {
     62                 ran[j]=rand()%(max+1);
     63             }
     64             oper=rand()%4;//oper用来决定进行什么四则运算
     65             switch(i)//用于选择是否有乘除法
     66             {
     67             case 0://没有乘除
     68                 switch(num2)
     69             {
     70                 case 2://有两个操作数
     71                     switch(oper)
     72                     {
     73                     case 0:
     74                     case 1:
     75                         switch(mean1)
     76                         {
     77                         case 1:
     78                             fout<<ran[0]<<"+"<<ran[1]<<"="<<endl;//进行加运算
     79                             break;
     80                         case 0:
     81                             cout<<ran[0]<<"+"<<ran[1]<<"="<<endl;//进行加运算
     82                             break;
     83                         }
     84                         break;
     85                     case 2:
     86                     case 3:
     87                         if(ran[0]<ran[1])
     88                         {
     89                             int a=ran[0];
     90                             ran[0]=ran[1];
     91                             ran[1]=a;
     92                         }
     93                         switch(mean1)
     94                         {
     95                         case 1:
     96                             fout<<ran[0]<<"-"<<ran[1]<<"="<<endl;//进行减运算
     97                             break;
     98                         case 0:
     99                             cout<<ran[0]<<"-"<<ran[1]<<"="<<endl;
    100                             break;
    101                         }
    102                         break;
    103                     }
    104                     break;
    105                 case 3://有3个操作数
    106                     switch(oper)
    107                     {
    108                     case 0:
    109                         switch(mean1)
    110                         {
    111                         case 1:
    112                             fout<<ran[0]<<"+"<<ran[1]<<"+"<<ran[2]<<"="<<endl;
    113                             break;
    114                         case 0:
    115                             cout<<ran[0]<<"+"<<ran[1]<<"+"<<ran[2]<<"="<<endl;
    116                             break;
    117                         }
    118                         break;
    119                     case 1:
    120                         if(ran[1]<ran[2])
    121                         {
    122                             int a=ran[1];
    123                             ran[1]=ran[2];
    124                             ran[2]=a;
    125                         }
    126                         switch(mean1)
    127                         {
    128                         case 1:
    129                             fout<<ran[0]<<"+"<<ran[1]<<"-"<<ran[2]<<"="<<endl;
    130                             break;
    131                         case 0:
    132                             cout<<ran[0]<<"+"<<ran[1]<<"-"<<ran[2]<<"="<<endl;
    133                             break;
    134                         }
    135                         break;
    136                     case 2:
    137                         if((ran[0]-ran[1]-ran[2])<0)//判断结果是否为负数,如果是,则将减号变为加号输出
    138                         { 
    139                             switch(mean1)
    140                             {
    141                             case 1:
    142                                 fout<<ran[0]<<"+"<<ran[1]<<"+"<<ran[2]<<"="<<endl;
    143                                 break;
    144                             case 0:
    145                                 cout<<ran[0]<<"+"<<ran[1]<<"+"<<ran[2]<<"="<<endl;
    146                                 break;
    147                             }
    148                         }
    149                         else
    150                             switch(mean1)
    151                             {
    152                             case 1:
    153                                 fout<<ran[0]<<"-"<<ran[1]<<"-"<<ran[2]<<"="<<endl;
    154                                 break;
    155                             case 0:
    156                                 cout<<ran[0]<<"-"<<ran[1]<<"-"<<ran[2]<<"="<<endl;
    157                                 break;
    158                             }
    159                         break;
    160                     case 3:
    161                         if(ran[0]<ran[1])//判断ran[0]-ran[1]是否大于0,小于则交换位置
    162                         {
    163                             int a=ran[0];
    164                             ran[0]=ran[1];
    165                             ran[1]=a;
    166                         }
    167                         switch(mean1)
    168                         {
    169                         case 1:
    170                             fout<<ran[0]<<"-"<<ran[1]<<"+"<<ran[2]<<"="<<endl;
    171                             break;
    172                         case 0:
    173                             cout<<ran[0]<<"-"<<ran[1]<<"+"<<ran[2]<<"="<<endl;
    174                             break;
    175                         }
    176                         break;
    177                     }
    178                     break;
    179                 }
    180                 break;
    181             case 1://有乘除
    182                 switch(num2)
    183                 {
    184                     //如果有两个操作数
    185                 case 2:
    186                     switch(oper)
    187                     {
    188                     case 0:
    189                         switch(mean1)
    190                         {
    191                         case 1:
    192                             fout<<ran[0]<<"+"<<ran[1]<<"="<<endl;//进行加运算
    193                             break;
    194                         case 0:
    195                             cout<<ran[0]<<"+"<<ran[1]<<"="<<endl;//进行加运算
    196                             break;
    197                         }
    198                         break;
    199                     case 1:
    200                         if(ran[0]<ran[1])
    201                         {
    202                             int a=ran[0];
    203                             ran[0]=ran[1];
    204                             ran[1]=ran[0];
    205                         }
    206                         switch(mean1)
    207                         {
    208                         case 1:
    209                             fout<<ran[0]<<"-"<<ran[1]<<"="<<endl;//进行减运算
    210                             break;
    211                         case 0:
    212                             cout<<ran[0]<<"-"<<ran[1]<<"="<<endl;//进行减运算
    213                             break;
    214                         }
    215                         break;
    216                     case 2:
    217                         switch(mean1)
    218                         {
    219                         case 1:
    220                             fout<<ran[0]<<"*"<<ran[1]<<"="<<endl;
    221                             break;
    222                         case 0:
    223                             cout<<ran[0]<<"*"<<ran[1]<<"="<<endl;
    224                             break;
    225                         }
    226                         break;
    227                     case 3:
    228                         if(ran[1]==0)
    229                             ran[1]=rand()%100;//判断除数是否为0,如果是,则重新生成
    230                         if(ran[0]%ran[1]!=0)
    231                             ran[0]=ran[0]-ran[0]%ran[1];
    232                         switch(mean1)
    233                         {
    234                         case 1:
    235                             fout<<ran[0]<<"/"<<ran[1]<<"="<<endl;//进行除运算
    236                             break;
    237                         case 0:
    238                             cout<<ran[0]<<"/"<<ran[1]<<"="<<endl;//进行除运算
    239                             break;
    240                         }
    241                         break;
    242                     }
    243                     break;
    244 
    245                     //如果有三个操作数
    246                 case 3:
    247                     int oper1,oper2;
    248                     oper1=rand()%16;
    249                     oper2=rand()%16;
    250                     string list[16];
    251                     //固定表达式的形式,一共四种:A+B-C、A-B*C、A*B/C、A/B+C
    252                     switch(oper1)
    253                     {
    254                     case 0:
    255                     case 1:
    256                     case 2:
    257                     case 3:
    258                         list[oper1]='+';
    259                         list[oper2]='-';
    260                         break;
    261                     case 4:
    262                     case 5:
    263                     case 6:
    264                     case 7:
    265                         list[oper1]='-';
    266                         list[oper2]='*';
    267                         break;
    268                     case 8:
    269                     case 9:
    270                     case 10:
    271                     case 11:
    272                         list[oper1]='*';
    273                         list[oper2]='/';
    274                         break;
    275                     case 12:
    276                     case 13:
    277                     case 14:
    278                     case 15:
    279                         list[oper1]='/';
    280                         list[oper2]='+';
    281                         break;
    282                     }
    283                         //形如A/B+C的式子,判断B是否为0以及A/B是否能除尽
    284                         if(oper1==12||oper1==13||oper1==14||oper1==15)
    285                         {
    286                             if(ran[1]==0)
    287                                 ran[1]=rand()%(max+1);
    288                             if(ran[0]%ran[1]!=0)
    289                                 ran[0]=ran[0]-ran[0]%ran[1];
    290                             switch(mean1)
    291                             {
    292                             case 1:
    293                                 fout<<ran[0]<<list[oper1]<<ran[1]<<list[oper2]<<ran[2]<<endl;
    294                                 break;
    295                             case 0:
    296                                 cout<<ran[0]<<list[oper1]<<ran[1]<<list[oper2]<<ran[2]<<endl;
    297                                 break;
    298                             }
    299                         }
    300                         //形如A+B/C的式子,判断C是否为0以及B/C是否能除尽
    301                         if(oper1==8||oper1==9||oper1==10||oper1==11)
    302                         {
    303                             if(ran[2]==0)
    304                                 ran[2]=rand()%(max+1);
    305                             if(ran[1]%ran[2]!=0)
    306                                 ran[1]=ran[1]-ran[1]%ran[2];
    307                             switch(mean1)
    308                             {
    309                             case 1: 
    310                                 fout<<ran[0]<<list[oper1]<<ran[1]<<list[oper2]<<ran[2]<<endl;
    311                                 break;
    312                             case 2:
    313                                 cout<<ran[0]<<list[oper1]<<ran[1]<<list[oper2]<<ran[2]<<endl;
    314                                 break;
    315                             }
    316                         }
    317                         //形如A-B*C的式子,判断结果是否为负数,如果为负数,则判断A-B是否小于0,不小于则直接输出(A-B)*C,小于则交换AB位置
    318                         if(oper1==4||oper1==5||oper1==6||oper1==7)
    319                         {
    320                             if((ran[0]-(ran[1]*ran[2]))<0)
    321                             {
    322                                 if(ran[0]-ran[1]>=0)
    323                                 {
    324                                     switch(mean1)
    325                                     {
    326                                     case 1:
    327                                         fout<<'('<<ran[0]<<list[oper1]<<ran[1]<<')'<<list[oper2]<<ran[2]<<endl;
    328                                         break;
    329                                     case 0:
    330                                         cout<<'('<<ran[0]<<list[oper1]<<ran[1]<<')'<<list[oper2]<<ran[2]<<endl;
    331                                         break;
    332                                     }
    333                                 }
    334                                 else
    335                                 {
    336                                     int a=ran[0];
    337                                     ran[0]=ran[1];
    338                                     ran[1]=a;
    339                                     switch(mean1)
    340                                     {
    341                                     case 1:
    342                                         fout<<'('<<ran[0]<<list[oper1]<<ran[1]<<')'<<list[oper2]<<ran[2]<<endl;
    343                                         break;
    344                                     case 0:
    345                                         cout<<'('<<ran[0]<<list[oper1]<<ran[1]<<')'<<list[oper2]<<ran[2]<<endl;
    346                                         break;
    347                                     }
    348                                 }
    349                             }
    350                             else
    351                                 switch(mean1)
    352                             {
    353                                 case 1:
    354                                     fout<<ran[0]<<list[oper1]<<ran[1]<<list[oper2]<<ran[2]<<endl;
    355                                     break;
    356                                 case 0:
    357                                     cout<<ran[0]<<list[oper1]<<ran[1]<<list[oper2]<<ran[2]<<endl;
    358                                     break;
    359                             }
    360                         }
    361                         //形如A+B-C的式子,判断结果是否为负数,如果是,则交换B和C的位置
    362 
    363                         if(oper1==0||oper1==1||oper1==2||oper1==3)
    364                         {
    365                             if(((ran[0]+ran[1])-ran[2])<0)
    366                             {
    367                                 int a=ran[1];
    368                                 ran[1]=ran[2];
    369                                 ran[2]=a;
    370                             }
    371                             switch(mean1)
    372                             {
    373                             case 1:
    374                                 fout<<ran[0]<<list[oper1]<<ran[1]<<list[oper2]<<ran[2]<<endl;
    375                                 break;
    376                             case 0:
    377                                 cout<<ran[0]<<list[oper1]<<ran[1]<<list[oper2]<<ran[2]<<endl;
    378                                 break;
    379                             }
    380                         }
    381                         break;
    382                 }
    383                 break;
    384             }
    385         }
    386         fout.close();
    387 }

    运行结果如下:

    输出到文件:

    输出到屏幕:

      还是没有实现括号的功能,但是比上次有点进步。

  • 相关阅读:
    iOS--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook等系统服务开发汇总
    iOS-网络爬虫
    iOS-性能优化
    iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据
    深入解析Linux内核及其相关架构的依赖关系
    详解Linux系统中的文件名和文件种类以及文件权限
    Linux系统中使用netcat命令的奇技淫巧
    Linux系统下强大的lsof命令使用宝典
    Linux下多线程下载工具MWget和Axel使用介绍
    Linux下针对路由功能配置iptables的方法详解
  • 原文地址:https://www.cnblogs.com/quite-love/p/5268606.html
Copyright © 2011-2022 走看看