代码改变世界

四则运算2

2016-03-12 15:59  LUXIN123  阅读(239)  评论(0编辑  收藏  举报
  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];
}
具体思路就是这些,本次实验我感觉有点难度,虽然花费很长时间,但是还是有功能没有实现,不过在写的过程中还是复习了很多以前的知识。