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

      1 #include<iostream>
      2 #include<time.h>
      3 #include<fstream>
      4 using namespace std;
      5 void yunsuanfu(int b)
      6 {    if(b==1)
      7      {
      8          cout<<"+";
      9      }
     10      if(b==2)
     11      {
     12          cout<<"-";
     13      }
     14      if(b==3)
     15      { 
     16          cout<<"*";
     17      }
     18      if(b==4)
     19      {
     20          cout<<"/";
     21      } 
     22 }
     23 void main()
     24 {    
     25      srand((unsigned)time(NULL));       //避免产生随机数时的重复
     26      int Num,j,m,n,p;                   //Num变量为运算的个数
     27      cout<<"请输入四则运算的数量:"<<endl;
     28      cin>>Num;
     29      cout<<"请选择打印方式: 1、文件输出    2、DOS界面显示"<<endl;
     30      cin>>j;
     31      int max,min;    
     32      int x,y;                       
     33      srand((unsigned)time(NULL));
     34      cout<<"一、请选择运算的数值范围:"<<endl;
     35      cout<<"最大值=";
     36      cin>>max;
     37      cout<<"最小值=";
     38      cin>>min;
     39      cout<<"二、请选择加减的结果有无负数:1、结果可以有负数     2、结果不能有负数"<<endl;
     40      cin>>n;
     41      cout<<"三、请选择是否有乘除法:  1、是    2、否"<<endl;
     42      cin>>m;
     43      cout<<"四、计算结果除法是否可以带有余数:   1、是     2、否"<<endl;
     44      cin>>p;
     45      cout<<"生成的结果为:"<<endl;
     46      int a,b,c,num[10];         //a为四则运算中操作数的个数,b用来选择输入的运算符,定义一个数组变量num[10],用来存放一个运算式中的所有的操作数
     47      if(j==1)                  //j控制输出结果的打印方式,j==1是,输出结果打印到文件当中
     48      {    
     49          ofstream outfile("wenjian.txt",ios::binary);    //定义文件的输入输出,输入到wenjian.txt中
     50          if(!outfile)                                    //文件输入的出错处理
     51            {
     52                cerr<<"open error!"<<endl;
     53            }
     54            for(x=0; x<Num;x++)         //输出四则运算算式的个数。
     55           {
     56               a=2+rand()%9;         //随机输出一个四则运算中操作数的个数。
     57               for(int i=0;i<a;i++)
     58               {
     59                  num[i]=min+rand()%max;        //生成的操作数存放在num[i]数组中,min和max用来控制操作数的范围
     60               }
     61               if(n==1)                 //n控制加减有无负数,n==1是运算结果有负数
     62               {   
     63                   if(m==1)                  //m控制是否带有乘除法,m==1为运算带有乘除法
     64                   { 
     65                      if(p==1)               //p控制除法有无余数,p==1为除法可以带有余数
     66                      {
     67                            for(int i=0;i<a-1;i++)       //输出一个四则运算
     68                            {    
     69                                 outfile<<num[i];
     70                                 b=1+rand()%4;
     71                                 if(b==1)
     72                                 {
     73                                     outfile<<"+";
     74                                 }
     75                                 if(b==2)
     76                                 {
     77                                     outfile<<"-";
     78                         
     79                                 }
     80                                 if(b==3)
     81                                 { 
     82                                     outfile<<"*";
     83                                 }
     84                                 if(b==4)
     85                                 {
     86                                     outfile<<"/";
     87                                 } 
     88                             } 
     89                                 outfile<<num[a-1];
     90                                 outfile<<"="<<"             ";
     91                      }
     92                      if(p==2)                //运算中除法结果不带有余数
     93                      {
     94                          int g[10],t;               //定义一个数组g[],用来存放随机生成的运算符
     95                          for(int i=0;i<a-1;i=i+2)      //把生成的运算符放在一个数组中,运算符的个数比操作数的个数少1
     96                          {
     97                              g[i]=1+rand()%3;
     98                              t=1+rand()%2;         //t用来选择生成的除号,避免产生连除的情况
     99                              if(t==1)          
    100                              {
    101                                  g[i+1]=4;
    102                              }
    103                              if(t==2)
    104                              {
    105                                  g[i+1]=1+rand()%3;
    106                              }
    107                          }
    108                          for(int i=0;i<a-1;i++)
    109                          {
    110                              if(g[i]==4)     //运算符是除号的情况
    111                              {
    112                                  if((num[i]>num[i+1])&&(num[i]%num[i+1]!=0))  
    113                                  {
    114                                      num[i]=num[i]-num[i]%num[i+1];
    115                                  }
    116                                  if((num[i]>num[i+1])&&(num[i]/num[i+1]==1))
    117                                   {
    118                                       num[i]=num[i+1];
    119                                   }
    120                                  if(num[i]<num[i+1])
    121                                  {
    122                                       y=num[i];
    123                                       num[i]=num[i+1];
    124                                       num[i+1]=y;
    125                                       num[i]=num[i]-num[i]%num[i+1];
    126                                   }
    127                                }
    128                            }
    129                         for(int i=0;i<a-1;i++)
    130                         {
    131                             outfile<<num[i];
    132                             if(g[i]==1)
    133                             {
    134                                 outfile<<"+";
    135                             }
    136                             if(g[i]==2)
    137                             {
    138                                 outfile<<"-";
    139                         
    140                             }
    141                             if(g[i]==3)
    142                             { 
    143                                 outfile<<"*";
    144                             }   
    145                             if(g[i]==4)
    146                             {
    147                                 outfile<<"/";
    148                             } 
    149 
    150                         }
    151                         outfile<<num[a-1];
    152                         outfile<<"="<<"         "; 
    153                   } 
    154                }
    155                if(m==2)           //运算不带有乘除法
    156                {
    157                    for(int i=0;i<a-1;i++)       
    158                   {    
    159                         outfile<<num[i];
    160                         b=1+rand()%2;
    161                         if(b==1)
    162                         {
    163                             outfile<<"+";
    164                         }
    165                         if(b==2)
    166                         {
    167                             outfile<<"-";
    168                         }
    169                     }
    170                     outfile<<num[a-1];
    171                     outfile<<" "<<"             ";
    172              }
    173          }
    174         if(n==2)                          //运算结果没有无负数
    175         {   
    176             if(m==1)                     //运算中带有乘除法
    177             {
    178                 if(p==1)                 //p判断除法有余数
    179                 {  
    180                     int g[10],t[10];
    181                     for(int i=0;i<a-1;i++)      //把生成的运算符放在一个数组中,运算符的个数比操作数的个数少1
    182                     {
    183                         g[i]=1+rand()%4;      
    184                     }
    185                     for(int i=0;i<a;i++)       //把操作数数组中的数复制一份到t[]数组中
    186                     {
    187                         t[i]=num[i];
    188                     }
    189                     for(int i=0;i<a-1;i++)
    190                     { 
    191                        if(g[i]==3)
    192                        {
    193                           t[i]=t[i]*t[i+1];
    194                           t[i+1]=t[i];
    195                        }
    196                        if(g[i]==4)
    197                        {
    198                           t[i]=t[i]/t[i+1];
    199                           t[i+1]=t[i];
    200                        }
    201                     }
    202                     for(int i=0;i<a-1;i++)
    203                     {
    204                         if(g[i]==2)
    205                         {
    206                             if(t[i]<t[i+1])
    207                             {
    208                                 g[i]=1;
    209                             }
    210                         }
    211                     }
    212                     for(int i=0;i<a-1;i++)
    213                     {
    214                         outfile<<num[i];
    215                         if(g[i]==1)
    216                         {
    217                             outfile<<"+";
    218                         }
    219                         if(g[i]==2)
    220                         {
    221                             outfile<<"-";
    222                         }
    223                         if(g[i]==3)
    224                         { 
    225                             outfile<<"*";
    226                         }   
    227                         if(g[i]==4)
    228                         {
    229                             outfile<<"/";
    230                         } 
    231 
    232                   }
    233                     outfile<<num[a-1];
    234                     outfile<<"="<<"         ";
    235             }
    236             if(p==2)   //除法没有余数,将运算结果没有负数和除法么有余数结合
    237             {
    238                 int g[10],t[10];
    239                 for(int i=0;i<a-1;i=i+2)      
    240                 {
    241                     g[i]=1+rand()%3;
    242                     c=1+rand()%2;
    243                     if(c==1)
    244                     {
    245                         g[i+1]=4;
    246                     }
    247                     if(c==2)
    248                     {
    249                         g[i+1]=1+rand()%3;
    250                     }
    251                 }
    252                 for(int i=0;i<a;i++)       
    253                 {
    254                      t[i]=num[i];
    255                 }
    256                 for(int i=0;i<a-1;i++)
    257                 { 
    258                      if(g[i]==3)
    259                      {
    260                           t[i]=t[i]*t[i+1];
    261                           t[i+1]=t[i];
    262                      }
    263                      if(g[i]==4)
    264                      {
    265                          t[i]=t[i]/t[i+1];
    266                          t[i+1]=t[i];
    267                          if((num[i]>num[i+1])&&(num[i]%num[i+1]!=0))
    268                         {
    269                             num[i]=num[i]-num[i]%num[i+1];
    270                         }
    271                          if((num[i]>num[i+1])&&(num[i]/num[i+1]==1))
    272                         {
    273                             num[i]=num[i+1];
    274                         }
    275                         if(num[i]<num[i+1])
    276                         {
    277                             y=num[i];
    278                             num[i]=num[i+1];
    279                             num[i+1]=y;
    280                             num[i]=num[i]-num[i]%num[i+1];
    281                         }
    282                     }
    283                   }
    284                   for(int i=0;i<a-1;i++)
    285                   {
    286                       if(g[i]==2)
    287                       {
    288                           if(t[i]<t[i+1])
    289                           {
    290                                 g[i]=1;
    291                           }
    292                       }
    293                   }
    294                   for(int i=0;i<a-1;i++)
    295                   {
    296                       outfile<<num[i];
    297                       if(g[i]==1)
    298                       {
    299                         outfile<<"+";
    300                       }
    301                       if(g[i]==2)
    302                      {
    303                         outfile<<"-";
    304                      }
    305                       if(g[i]==3)
    306                      { 
    307                         outfile<<"*";
    308                      }   
    309                       if(g[i]==4)
    310                      {
    311                         outfile<<"/";
    312                       } 
    313 
    314                   }
    315                   outfile<<num[a-1];
    316                   outfile<<"="<<"         ";
    317             }
    318                  
    319         }
    320         if(m==2)     //m没有乘除法,加减的运算结果没有负数
    321         {  
    322             int g[10],t[10];
    323             for(int i=0;i<a-1;i++) 
    324             {
    325                 g[i]=1+rand()%2;
    326             }
    327             for(int i=0;i<a;i++)
    328             {
    329                 t[i]=num[i];
    330             }
    331             for(int i=0;i<a-1;i++)
    332             {
    333                 if(g[i]==2)
    334                       {
    335                           if(t[i]<t[i+1])
    336                           {
    337                                 g[i]=1;
    338                           }
    339                       }
    340             }
    341             for(int i=0;i<a-1;i++)
    342             {
    343                 outfile<<num[i];
    344                 if(g[i]==1)
    345                 {
    346                     outfile<<"+";
    347                 }
    348                 if(g[i]==2)
    349                 {
    350                     outfile<<"-";
    351                         
    352                 }
    353             }
    354             outfile<<num[a-1];
    355             outfile<<"="<<"         ";
    356         }
    357     }
    358            }
    359     
    360      }
    361      if(j==2)               //输出的算式输出到DOS界面,思路和输出到文件中的相同
    362      {    
    363         for(x=0; x<Num;x++)         //输出四则运算的个数。
    364           {
    365              a=2+rand()%9;         //随机输出一个四则运算中操作数的个数。
    366              for(int i=0;i<a;i++)
    367              {
    368                  num[i]=min+rand()%max;
    369              }
    370              if(n==1)                 //n控制加减有负数
    371              {   
    372                  if(m==1)                  //m控制是否带有乘除法
    373                  { 
    374                      if(p==1)               //p控制除法有无余数
    375                      {
    376                          for(int i=0;i<a-1;i++)       //输出一个四则运算
    377                         {    
    378                             cout<<num[i];
    379                             b=1+rand()%4;
    380                             yunsuanfu(b);
    381                         } 
    382                         cout<<num[a-1]<<"="<<endl;
    383                     }
    384                     if(p==2)
    385                     {
    386                         int g[10],t;
    387                         for(int i=0;i<a-1;i=i+2)      
    388                         {
    389                              g[i]=1+rand()%3;
    390                              t=1+rand()%2;
    391                              if(t==1)
    392                              {
    393                                  g[i+1]=4;
    394                              }
    395                              if(t==2)
    396                              {
    397                                  g[i+1]=1+rand()%3;
    398                              }
    399                          }
    400                         for(int i=0;i<a-1;i++)
    401                         {
    402                              if(g[i]==4)
    403                              {
    404                                   if((num[i]>num[i+1])&&(num[i]%num[i+1]!=0))
    405                                   {
    406                                       num[i]=num[i]-num[i]%num[i+1];
    407                                   }
    408                                   if((num[i]>num[i+1])&&(num[i]/num[i+1]==1))
    409                                    {
    410                                         num[i]=num[i+1];
    411                                    }
    412                                    if(num[i]<num[i+1])
    413                                    {
    414                                        y=num[i];
    415                                        num[i]=num[i+1];
    416                                        num[i+1]=y;
    417                                        num[i]=num[i]-num[i]%num[i+1];
    418                                    }
    419                                }
    420                            }
    421                           for(int i=0;i<a-1;i++)
    422                          {
    423                             cout<<num[i];
    424                             yunsuanfu(g[i]);
    425                           }
    426                          cout<<num[a-1]<<"="<<endl;
    427                   
    428                     } 
    429               }
    430              if(m==2)
    431              {
    432                  for(int i=0;i<a-1;i++)       //输出一个四则运算
    433                 {    
    434                     cout<<num[i];
    435                     b=1+rand()%2;
    436                     yunsuanfu(b);
    437                     
    438                 }
    439                     cout<<num[a-1]<<"="<<endl;
    440             }
    441            }
    442             if(n==2)                          //n判断是加减无负数
    443             {   if(m==1)                     //m判断有乘除法
    444                  {
    445                      if(p==1)         //p判断除法有余数
    446                      {  
    447                         int g[10],t[10];
    448                         for(int i=0;i<a-1;i++)     
    449                         {
    450                             g[i]=1+rand()%4;      
    451                         }
    452                         for(int i=0;i<a;i++)     
    453                         {
    454                             t[i]=num[i];
    455                         }
    456                         for(int i=0;i<a-1;i++)
    457                         { 
    458                             if(g[i]==3)
    459                             {
    460                                 t[i]=t[i]*t[i+1];
    461                                 t[i+1]=t[i];
    462                             }
    463                             if(g[i]==4)
    464                             {
    465                                 t[i]=t[i]/t[i+1];
    466                                 t[i+1]=t[i];
    467                             }
    468                         }
    469                         for(int i=0;i<a-1;i++)
    470                         {
    471                             if(g[i]==2)
    472                             {
    473                                 if(t[i]<t[i+1])
    474                                 {
    475                                     g[i]=1;
    476                                 }
    477                             }
    478                         }
    479                         for(int i=0;i<a-1;i++)
    480                         {
    481                             cout<<num[i];
    482                             yunsuanfu(g[i]);
    483                         }
    484                         cout<<num[a-1]<<"="<<endl;
    485                   
    486                      }
    487                      if(p==2)   
    488                      {
    489                         int g[10],t[10];
    490                         for(int i=0;i<a-1;i=i+2)      
    491                         {
    492                             g[i]=1+rand()%3;
    493                             c=1+rand()%2;
    494                             if(c==1)
    495                             {
    496                                 g[i+1]=4;
    497                             }
    498                             if(c==2)
    499                             {
    500                                 g[i+1]=1+rand()%3;
    501                             }
    502                         }
    503                         for(int i=0;i<a;i++)       
    504                         {
    505                             t[i]=num[i];
    506                         }
    507                         for(int i=0;i<a-1;i++)
    508                         { 
    509                             if(g[i]==3)
    510                             {
    511                                 t[i]=t[i]*t[i+1];
    512                                 t[i+1]=t[i];
    513                             }
    514                             if(g[i]==4)
    515                             {
    516                                 t[i]=t[i]/t[i+1];
    517                                 t[i+1]=t[i];
    518                                 if((num[i]>num[i+1])&&(num[i]%num[i+1]!=0))
    519                                 {
    520                                     num[i]=num[i]-num[i]%num[i+1];
    521                                 }
    522                                 if((num[i]>num[i+1])&&(num[i]/num[i+1]==1))
    523                                 {
    524                                     num[i]=num[i+1];
    525                                 }
    526                                 if(num[i]<num[i+1])
    527                                 {
    528                                     y=num[i];
    529                                     num[i]=num[i+1];
    530                                     num[i+1]=y;
    531                                     num[i]=num[i]-num[i]%num[i+1];
    532                                 }
    533                             }
    534                         }
    535                          for(int i=0;i<a-1;i++)
    536                         {
    537                             if(g[i]==2)
    538                             {
    539                                 if(t[i]<t[i+1])
    540                                 {
    541                                     g[i]=1;
    542                                 }
    543                             }
    544                         }
    545                         for(int i=0;i<a-1;i++)
    546                         {
    547                             cout<<num[i];
    548                             yunsuanfu(g[i]);
    549                         }
    550                         cout<<num[a-1]<<"="<<endl;
    551                 
    552                      }
    553                  
    554                   }
    555                  if(m==2)     
    556                  {  
    557                      int g[10],t[10];
    558                      for(int i=0;i<a-1;i++)
    559                      {
    560                          g[i]=1+rand()%2;
    561                      }
    562                      for(int i=0;i<a;i++)
    563                      {
    564                          t[i]=num[i];
    565                      }
    566                      for(int i=0;i<a-1;i++)
    567                     {
    568                         if(g[i]==2)
    569                         {
    570                             if(t[i]<t[i+1])
    571                             {
    572                                 g[i]=1;
    573                             }
    574                         }
    575                     }
    576                      for(int i=0;i<a-1;i++)
    577                     {
    578                         cout<<num[i];
    579                         yunsuanfu(g[i]);
    580                     }
    581                     cout<<num[a-1]<<"="<<endl;
    582                 }
    583             }
    584         }
    585     }
    586 }
    587  

    实验要求:1、题目避免重复
    2、可定制(数量/打印方式)
    3、可以控制下列参数:
    * 是否有乘除法
    * 是否有括号(最多可以支持十个数参与计算)
    * 数值范围
    * 加减有无负数
    * 除法有无余数
    实验思路:本次实验我有两个功能未能完成,一个是题目避免重复,一个是带括号的计算,望老师能谅解
    我用for循环语句来选择四则运算的数量;用min+rand()%max来确定数值范围;用if选择语句来选择打印方式、是否有乘除法、加减有无负数,除法有无余数;大体的实验框架:
    选择数量和打印方式:
       选择数值范围:
         计算结果可以有负数
        {
            有乘除法
           {
        除法有余数;
        除法没有余数;
       }
        没有乘除法
       }
        计算结果没有负数
        {
          有乘除法
        {
          除法有余数,加减无负数;
          除法没有余数,加减无负数;
        }
        没有乘除法,加减无负数;

        }
    在写运算结果是否有负数时,在有乘除法的情况下,定义三个数组num[10],t[10],g[10];num[10]放操作数,num[10]=t[10],g[10]用来存放运算符,g[10]中分别用1,2,3,4,来表示+-*/,先计算乘除,将计算结果放入到t数组中,*或者/前面的t[i]和t[i+1]赋予结果,*,/计算完之后,计算+-,在计算减时,若减号前面的数小于减号后面的数,将减法变为加法
    在编写除法是否有余数时,我避免了出现连除这种情况,也是用num[]来存放操作数,g[]来存放运算符,当遇到除法时,if((num[i]>num[i+1])&&(num[i]%num[i+1]!=0))
    { num[i]=num[i]-num[i]%num[i+1];
    }
    if((num[i]>num[i+1])&&(num[i]/num[i+1]==1))
    {
    num[i]=num[i+1];
    }
    if(num[i]<num[i+1])
    {
    y=num[i];
    num[i]=num[i+1];
    num[i+1]=y;
    num[i]=num[i]-num[i]%num[i+1];
    }
    具体思路就是这些,本次实验我感觉有点难度,虽然花费很长时间,但是还是有功能没有实现,不过在写的过程中还是复习了很多以前的知识。

  • 相关阅读:
    洛谷 P1057 传球游戏
    BZOJ 1801: [Ahoi2009]chess 中国象棋
    BZOJ 1806: [Ioi2007]Miners 矿工配餐
    51nod 1276 岛屿的数量
    BZOJ 1800: [Ahoi2009]fly 飞行棋
    路由控制和视图层
    django的零碎注意点
    Django框架简介
    Bootstrap框架
    jQuery基础知识
  • 原文地址:https://www.cnblogs.com/luxin123/p/5268988.html
Copyright © 2011-2022 走看看