小学四则运算2.0

 

1 //信1301-1班 张鹏宇 四则运算
  2 /*代码结构如下:
  3 (——表示之后还有分类,否则是直接输出)
  4 减法没有负数——
  5     没有乘除法——
  6         有括号
  7         无括号
  8     有乘除法——
  9         除法没有余数
 10         除法余数不作要求
 11 减法负数不做要求——
 12     没有乘除法——
 13         有括号
 14         无括号
 15     有乘除法——
 16         除法没有余数
 17         除法余数不作要求
 18 
 19 说明:
 20 1,负数部分:先产生所有符号,存在数组,扫描,设置标志位flag=1
 21               当前符号为+时:下一个符号为+或-,则产生一个随机数,并做+运算,将结果存在一个数组中,将“num1+num2”这个式子转化为字符串
 22                              下一个符号为*或/时,只产生一个随机数,并将flag置0
 23               当前符号为-时:下一个符号为+或-,则产生一个随机数,并做-运算,将结果存在一个数组中,将“num1-num2”这个式子转化为字符串
 24                              下一个符号为*或/时,只产生一个随机数,并将flag置0
 25               当前符号为*时:flag=1,则产生一个随机数,并做*运算,将结果存在一个数组中,将“num1*num2”这个式子转化为字符串
 26                              flag=0,则产生两个随机数,并做*运算,将结果存在一个数组中,将“num1*num2”这个式子转化为字符串
 27               当前符号为时/:flag=1,则产生一个随机数,并做/运算,将结果存在一个数组中,将“num1/num2”这个式子转化为字符串
 28                              flag=0,则产生两个随机数,并做/运算,将结果存在一个数组中,将“num1/num2”这个式子转化为字符串
 29               这样做考虑到优先级,存储了每一步的结果,可以保证每一步出现减法的部分都不是负数
 30               而且转化为字符串便于输出
 31 2,括号部分:用了两个变量,一个随机数看是否有括号,一个看括号位置
 32           位置的时候用了一个flag变量,保证括号成对出现
 33           而且根据符号的个数可以排除在最后一个数的时候还添加前括号,只有两个变量的时候还添加括号
 34 3,余数部分:用了一个for循环,判定是除法的时候,用num1%num2做条件
 35 4,乘除法部分:跟第一次作业类似,注意除数不为零
 36 5,数值范围:用户输入,你懂得
 37 6,定制方式:用户选择
 38 
 39 */
 40 #include<iostream>
 41 #include<stdio.h>
 42 #include<time.h>
 43 #include<fstream>
 44 #include<string.h>
 45 #include<sstream>
 46 using namespace std;
 47 
 48 void main()
 49 {
 50     int range,signbracket;
 51     int way,bracket,minus,muldiv,div,numsign,sign;
 52     int num1,num2,num3=0,number;
 53     string Num1,Num2,Num3;
 54     int i;
 55     ofstream outfile("ZhangPY.txt",ios::out);//
 56     srand((unsigned)time(NULL));
 57     
 58     cout<<"请输入打印方式(文件打印请输入1,dos打印请输入0):";
 59     cin>>way;
 60     cout<<"请输入操作数允许最大值:                           ";
 61     cin>>range;
 62     cout<<"减法是否出现负数(不作要求请输入1,否请输入0):   ";
 63     cin>>minus;
 64     cout<<"是否有乘除法(是请输入1,否请输入0):             ";
 65     cin>>muldiv; 
 66     cout<<"请输入打印数量:                                   ";
 67     cin>>number;
 68     if(muldiv==1)
 69     {
 70         cout<<"除法是否有余数(不作要求请输入1,否请输入0):            ";
 71         cin>>div;
 72     }
 73     else
 74     {
 75         cout<<"是否有括号(是请输入1,否请输入0):               ";
 76         cin>>bracket;
 77     }
 78     for(i=0;i<number;i++)
 79     {
 80         
 81             if(minus==0)
 82             {                                                       //减法没有负数
 83                 if(muldiv==0)
 84                 {                                                   //无乘除法
 85                     numsign=rand()%9+1;    //符号数目随机 
 86                     num1=rand()%range;    //第一个变量
 87                     num3=num1;
 88                     stringstream stream;    //int转化为string
 89                     stream.clear();
 90                     stream<< num1; 
 91                     stream >> Num1;  
 92                     int sb=0;
 93                     for(int j=0;j<numsign;j++)
 94                     {   
 95                         sign=rand()%2;
 96                         if(bracket==0)
 97                             signbracket=0;
 98                         else
 99                             signbracket=rand()%2;
100                         if(sign==0)
101                         {     //+
102                             num2=rand()%range;
103                             num3=num2+num3;
104                             stringstream stream;    //int转化为string
105                             stream<< num2; 
106                             stream >> Num2; 
107                             stream.clear(); 
108                             if(signbracket==1)
109                             {
110                                 if(sb==0&&(j!=numsign-1))
111                                 {
112                                     Num1=Num1+'+'+'('+Num2;
113                                     sb=-1;
114                                 }
115                                 else if(j==numsign-1&&sb==0)
116                                     Num1=Num1+'+'+Num2;
117                                 else
118                                 {
119                                     Num1=Num1+'+'+Num2+')';
120                                     sb=0;
121                                 }
122                             }
123                             else 
124                             {
125                                 if(sb==-1&&j==numsign-1)
126                                     Num1=Num1+'+'+Num2+')';
127                                 else
128                                     Num1=Num1+'+'+Num2;    
129                             }                        
130                         }
131                         else
132                         {       //-
133                             num2=rand()%range;
134                             for(;num3-num2<0;)
135                                 num2=rand()%range;
136                             num3=num3-num2;
137                             stream<< num2; 
138                             stream >> Num2; 
139                             stream.clear();
140                             if(signbracket==1)
141                             {
142                                 if(sb==0&&(j!=numsign-1))
143                                 {
144                                     Num1=Num1+'+'+'('+Num2;
145                                     sb=-1;
146                                 }
147                                 else if(j==numsign-1&&sb==0)
148                                     Num1=Num1+'+'+Num2;
149                                 else
150                                 {
151                                     Num1=Num1+'+'+Num2+')';
152                                     sb=0;
153                                 }
154                             }
155                             else 
156                             {
157                                 if(sb==-1&&j==numsign-1)
158                                     Num1=Num1+'+'+Num2+')';
159                                 else
160                                     Num1=Num1+'+'+Num2;    
161                             }
162                         }
163                     }
164                     if(way==1)
165                     {
166                         if(!outfile)
167                         {
168                             cerr<<"open error!"<<endl;
169                             exit(1);
170                         }
171                         else
172                         outfile<<Num1<<"="<<endl;
173                     }
174                     else if(way==0)
175                         cout<<Num1<<"="<<endl;
176                 }
177 
178                 else
179                 {                                                                   //有乘除法
180                     if(div==0)
181                     {                                                         //没有余数
182                         string answer[10];     //保存乘除结果
183                         int Answer[10];
184                         int k=0;
185                         bool flag=1;
186                         int Sign[10]={0};     //保存符号
187                         numsign=rand()%9+1;    //符号数目随机
188                         for(int j=0;j<numsign;j++)
189                             Sign[j]=rand()%4;
190                         num1=rand()%range;
191                         Answer[k]=num1;
192                         stringstream stream;    //int转化为string
193                         stream.clear(); 
194                         stream<< num1; 
195                         stream >> answer[k]; 
196                         for(int j=0;j<numsign;j++)     //第一遍扫描处理乘除和加
197                         {
198                             if(Sign[j]==0)      //+
199                             {
200                                 if(Sign[j+1]==1||Sign[j+1]==0)
201                                 {
202                                     num2=rand()%range;
203                                     Answer[k]=Answer[k]+num2;
204                                     stream.clear(); 
205                                     stream<< num2; 
206                                     stream >> Num2; 
207                                     answer[k]=answer[k]+'+'+Num2;
208                                 }
209                                 else
210                                 {
211                                     num3=rand()%range;
212                                     stream.clear(); 
213                                     stream<< num3; 
214                                     stream >> Num3;  
215                                     k=k+1;
216                                     flag=0;
217                                 }
218                             }
219                             else if(Sign[j]==1)     //-
220                             {
221                                 if(Sign[j+1]==0||Sign[j+1]==1)
222                                 {
223                                     num2=rand()%range;
224                                     for(;Answer[k]<num2;)
225                                         num2=rand()%range;
226                                     Answer[k]=Answer[k]-num2;
227                                     stream.clear(); 
228                                     stream<< num2; 
229                                     stream >> Num2;  
230                                     answer[k]=answer[k]+'-'+Num2;
231                                 }
232                                 else
233                                 {
234                                     num3=rand()%range;
235                                     stream.clear(); 
236                                     stream<< num3; 
237                                     stream >> Num3; 
238                                     k=k+1;
239                                     flag=0;
240                                 }
241                             }
242                             else if(Sign[j]==2)     //*
243                             {
244                                 if(flag==1)
245                                 {
246                                     num2=rand()%range;
247                                     Answer[k]=Answer[k]*num2;
248                                     stream.clear(); 
249                                     stream<< num2; 
250                                     stream >> Num2;  
251                                     answer[k]=answer[k]+'*'+Num2;
252                                 }
253                                 else 
254                                 {
255                                     num2=rand()%range;
256                                     Answer[k]=num3*num2;
257                                     stream.clear(); 
258                                     stream<< num2; 
259                                     stream >> Num2; 
260                                     answer[k]=Num3+'*'+Num2;
261                                     flag=1;
262                                 }
263                             }
264                             else if(Sign[j]==3)     // /
265                             {
266                                 if(flag==1)
267                                 {
268                                     num2=rand()%(range)+1;
269                                     for(;Answer[k]%num2!=0;)
270                                         num2=rand()%(range)+1;
271                                     num3=Answer[k]/num2;
272                                     stream.clear(); 
273                                     stream<< num2; 
274                                     stream >> Num2; 
275                                     answer[k]=answer[k]+'/'+Num2;                            
276                                 }
277                                 else
278                                 {
279                                     num2=rand()%(range)+1;
280                                     for(;num3%num2!=0;)
281                                         num2=rand()%(range)+1;
282                                     Answer[k]=num3/num2;
283                                     stream.clear(); 
284                                     stream<< num2; 
285                                     stream >> Num2; 
286                                     answer[k]=Num3+'/'+Num2;
287                                     flag=1;
288                                 }
289                             }
290                         }
291                         
292                         num3=Answer[0];
293                         Num1=answer[0];
294                         for(int j=1;j<k;j++)      //处理合并
295                         {
296                             sign=rand()%2;
297                             if(sign==0)
298                             {
299                                 num3=num3+Answer[j];
300                                 Num1=Num1+'+'+answer[j];
301                             }
302                             else
303                             {
304                                 for(;num3<Answer[j];)
305                                 {
306                                     num3=num3+Answer[j];
307                                     Num1=Num1+'+'+answer[j];
308                                 }
309                                 num3=num3-Answer[j];
310                                 Num1=Num1+'-'+answer[j];
311                             }
312                         }
313                         if(way==1)
314                         {
315                             if(!outfile)
316                             {
317                                 cerr<<"open error!"<<endl;
318                                 exit(1);
319                             }
320                             else
321                             {
322                                 if(num1==num3)
323                                     outfile<<Num1<<"*1="<<endl;
324                                 else
325                                     outfile<<Num1<<"="<<endl;
326                             }
327                        }
328                         else {
329                             if(num1==num3)
330                                 cout<<Num1<<"*1="<<endl;
331                             else
332                                 cout<<Num1<<"="<<endl;
333                         }
334                      }
335                     
336                     else{                                                                 //余数不作要求
337                         string answer[10];     //保存乘除结果
338                         int Answer[10];
339                         int k=0;
340                         bool flag=1;
341                         int Sign[9];     //保存符号
342                         numsign=rand()%9;    //符号数目随机
343                         numsign=numsign+1;
344                         for(int j=0;j<numsign;j++)
345                             Sign[j]=rand()%4;
346                         num1=rand()%range;
347                         Answer[k]=num1;
348                         stringstream stream;    //int转化为string
349                         stream.clear(); 
350                         stream<< num1; 
351                         stream >> answer[k]; 
352                         for(int j=0;j<numsign;j++)     //第一遍扫描处理乘除和加
353                         {
354                             if(Sign[j]==0)      //+
355                             {
356                                 if(Sign[j+1]==1||Sign[j+1]==0)
357                                 {
358                                     num2=rand()%range;
359                                     Answer[k]=Answer[k]+num2;
360                                     stream.clear(); 
361                                     stream<< num2; 
362                                     stream >> Num2; 
363                                     answer[k]=answer[k]+'+'+Num2;
364                                 }
365                                 else
366                                 {
367                                     num3=rand()%range;
368                                     stream.clear(); 
369                                     stream<< num3; 
370                                     stream >> Num3;  
371                                     k=k+1;
372                                     flag=0;
373                                 }
374                             }
375                             else if(Sign[j]==1)     //-
376                             {
377                                 if(Sign[j+1]==0||Sign[j+1]==1)
378                                 {
379                                     num2=rand()%range;
380                                     for(;Answer[k]<num2;)
381                                         num2=rand()%range;
382                                     Answer[k]=Answer[k]-num2;
383                                     stream.clear(); 
384                                     stream<< num2; 
385                                     stream >> Num2;  
386                                     answer[k]=answer[k]+'-'+Num2;
387                                 }
388                                 else
389                                 {
390                                     num3=rand()%range;
391                                     stream.clear(); 
392                                     stream<< num3; 
393                                     stream >> Num3; 
394                                     k=k+1;
395                                     flag=0;
396                                 }
397                             }
398                             else if(Sign[j]==2)     //*
399                             {
400                                 if(flag==1)
401                                 {
402                                     num2=rand()%range;
403                                     Answer[k]=Answer[k]*num2;
404                                     stream.clear(); 
405                                     stream<< num2; 
406                                     stream >> Num2;  
407                                     answer[k]=answer[k]+'*'+Num2;
408                                 }
409                                 else 
410                                 {
411                                     num2=rand()%range;
412                                     Answer[k]=num3*num2;
413                                     stream.clear(); 
414                                     stream<< num2; 
415                                     stream >> Num2; 
416                                     answer[k]=Num3+'*'+Num2;
417                                     flag=1;
418                                 }
419                             }
420                             else if(Sign[j]==3)     // /
421                             {
422                                 if(flag==1)
423                                 {
424                                     num2=rand()%(range)+1;
425                                     num3=Answer[k]/num2;
426                                     stream.clear(); 
427                                     stream<< num2; 
428                                     stream >> Num2; 
429                                     answer[k]=answer[k]+'/'+Num2;                            
430                                 }
431                                 else
432                                 {
433                                     num2=rand()%(range)+1;
434                                     Answer[k]=num3/num2;
435                                     stream.clear(); 
436                                     stream<< num2; 
437                                     stream >> Num2; 
438                                     answer[k]=Num3+'/'+Num2;
439                                     flag=1;
440                                 }
441                             }
442                         }                        
443                         num3=Answer[0];
444                         Num1=answer[0];
445                         for(int j=1;j<k;j++)      //处理合并
446                         {
447                             sign=rand()%2;
448                             if(sign==0)
449                             {
450                                 num3=num3+Answer[j];
451                                 Num1=Num1+'+'+answer[j];
452                             }
453                             else
454                             {
455                                 for(;num3<Answer[j];)
456                                 {
457                                     num3=num3+Answer[j];
458                                     Num1=Num1+'+'+answer[j];
459                                 }
460                                 num3=num3-Answer[j];
461                                 Num1=Num1+'-'+answer[j];
462                             }
463                         }
464                         if(way==1)
465                         {
466                             if(!outfile)
467                             {
468                                 cerr<<"open error!"<<endl;
469                                 exit(1);
470                             }
471                             else
472                             {
473                                 if(num1==num3)
474                                     outfile<<Num1<<"*1="<<endl;
475                                 else
476                                     outfile<<Num1<<"="<<endl;
477                             }
478                        }
479                         else {
480                             if(num1==num3)
481                                 cout<<Num1<<"*1="<<endl;
482                             else
483                                 cout<<Num1<<"="<<endl;
484                         }
485                     }
486                 }
487             }
488             else{                                                                //减法不作要求
489                  if(muldiv==0)
490                  {                                                  //无乘除法
491                      int sb=0;
492                      numsign=rand()%9+1;    //符号数目随机
493                      num1=rand()%range;    //第一个变量
494                      num3=num1;
495                      stringstream stream;    //int转化为string
496                      stream<< num1; 
497                      stream >> Num1; 
498                      stream.clear();
499                      if(bracket==0)
500                             signbracket=0;
501                         else
502                             signbracket=rand()%2;
503                      for(int j=0;j<numsign;j++)
504                      {
505                         sign=rand()%2;
506                         if(sign==0)
507                         {     //+
508                             num2=rand()%range;
509                             num3=num2+num3;
510                             stringstream stream;    //int转化为string
511                             stream<< num2; 
512                             stream >> Num2; 
513                             stream.clear(); 
514                             if(signbracket==1)
515                             {
516                                 if(sb==0&&(j!=numsign-1))
517                                 {
518                                     Num1=Num1+'+'+'('+Num2;
519                                     sb=-1;
520                                 }
521                                 else if(j==numsign-1&&sb==0)
522                                     Num1=Num1+'+'+Num2;
523                                 else
524                                 {
525                                     Num1=Num1+'+'+Num2+')';
526                                     sb=0;
527                                 }
528                             }
529                             else 
530                             {
531                                 if(sb==-1&&j==numsign-1)
532                                     Num1=Num1+'+'+Num2+')';
533                                 else
534                                     Num1=Num1+'+'+Num2;    
535                             }                
536                         }
537                         else
538                         {       //-
539                             num2=rand()%range;
540                             num3=num3-num2;
541                             stream<< num2; 
542                             stream >> Num2; 
543                             stream.clear();
544                             if(signbracket==1)
545                             {
546                                 if(sb==0&&(j!=numsign-1))
547                                 {
548                                     Num1=Num1+'-'+'('+Num2;
549                                     sb=-1;
550                                 }
551                                 else if(j==numsign-1&&sb==0)
552                                     Num1=Num1+'-'+Num2;
553                                 else
554                                 {
555                                     Num1=Num1+'-'+Num2+')';
556                                     sb=0;
557                                 }
558                             }
559                             else 
560                             {
561                                 if(sb==-1&&j==numsign-1)
562                                     Num1=Num1+'-'+Num2+')';
563                                 else
564                                     Num1=Num1+'-'+Num2;    
565                             }                
566                         }
567                     }
568                     if(way==1)
569                     {
570                         if(!outfile)
571                         {
572                             cerr<<"open error!"<<endl;
573                             exit(1);
574                         }
575                         else
576                         outfile<<Num1<<"="<<endl;
577                     }
578                     else if(way==0)
579                         cout<<Num1<<"="<<endl;
580                 }
581 
582                 else
583                 {                                                                   //有乘除法
584                     if(div==0)
585                     {                                                         //没有余数
586                         string answer[10];     //保存乘除结果
587                         int Answer[10];
588                         int k=0;
589                         bool flag=1;
590                         int Sign[10]={0};     //保存符号
591                         numsign=rand()%9+1;    //符号数目随机
592                         for(int j=0;j<numsign;j++)
593                             Sign[j]=rand()%4;
594                         num1=rand()%range;
595                         Answer[k]=num1;
596                         stringstream stream;    //int转化为string
597                         stream.clear(); 
598                         stream<< num1; 
599                         stream >> answer[k]; 
600                         for(int j=0;j<numsign;j++)     //第一遍扫描处理乘除和加
601                         {
602                             if(Sign[j]==0)      //+
603                             {
604                                 if(Sign[j+1]==1||Sign[j+1]==0)
605                                 {
606                                     num2=rand()%range;
607                                     Answer[k]=Answer[k]+num2;
608                                     stream.clear(); 
609                                     stream<< num2; 
610                                     stream >> Num2; 
611                                     answer[k]=answer[k]+'+'+Num2;
612                                 }
613                                 else
614                                 {
615                                     num3=rand()%range;
616                                     stream.clear(); 
617                                     stream<< num3; 
618                                     stream >> Num3;  
619                                     k=k+1;
620                                     flag=0;
621                                 }
622                             }
623                             else if(Sign[j]==1)     //-
624                             {
625                                 if(Sign[j+1]==0||Sign[j+1]==1)
626                                 {
627                                     num2=rand()%range;
628                                     Answer[k]=Answer[k]-num2;
629                                     stream.clear(); 
630                                     stream<< num2; 
631                                     stream >> Num2;  
632                                     answer[k]=answer[k]+'-'+Num2;
633                                 }
634                                 else
635                                 {
636                                     num3=rand()%range;
637                                     stream.clear(); 
638                                     stream<< num3; 
639                                     stream >> Num3; 
640                                     k=k+1;
641                                     flag=0;
642                                 }
643                             }
644                             else if(Sign[j]==2)     //*
645                             {
646                                 if(flag==1)
647                                 {
648                                     num2=rand()%range;
649                                     Answer[k]=Answer[k]*num2;
650                                     stream.clear(); 
651                                     stream<< num2; 
652                                     stream >> Num2;  
653                                     answer[k]=answer[k]+'*'+Num2;
654                                 }
655                                 else 
656                                 {
657                                     num2=rand()%range;
658                                     Answer[k]=num3*num2;
659                                     stream.clear(); 
660                                     stream<< num2; 
661                                     stream >> Num2; 
662                                     answer[k]=Num3+'*'+Num2;
663                                     flag=1;
664                                 }
665                             }
666                             else if(Sign[j]==3)     // /
667                             {
668                                 if(flag==1)
669                                 {
670                                     num2=rand()%(range)+1;
671                                     for(;Answer[k]%num2!=0;)
672                                         num2=rand()%(range)+1;
673                                     num3=Answer[k]/num2;
674                                     stream.clear(); 
675                                     stream<< num2; 
676                                     stream >> Num2; 
677                                     answer[k]=answer[k]+'/'+Num2;                            
678                                 }
679                                 else
680                                 {
681                                     num2=rand()%(range)+1;
682                                     for(;num3%num2!=0;)
683                                         num2=rand()%(range)+1;
684                                     Answer[k]=num3/num2;
685                                     stream.clear(); 
686                                     stream<< num2; 
687                                     stream >> Num2; 
688                                     answer[k]=Num3+'/'+Num2;
689                                     flag=1;
690                                 }
691                             }
692                         }                        
693                         num3=Answer[0];
694                         Num1=answer[0];
695                         for(int j=1;j<k;j++)      //处理合并
696                         {
697                             sign=rand()%2;
698                             if(sign==0)
699                             {
700                                 num3=num3+Answer[j];
701                                 Num1=Num1+'+'+answer[j];
702                             }
703                             else
704                             {
705                                 num3=num3-Answer[j];
706                                 Num1=Num1+'-'+answer[j];
707                             }
708                         }
709                         if(way==1)
710                         {
711                             if(!outfile)
712                             {
713                                 cerr<<"open error!"<<endl;
714                                 exit(1);
715                             }
716                             else
717                             {
718                                 if(num1==num3)
719                                     outfile<<Num1<<"*1="<<endl;
720                                 else
721                                     outfile<<Num1<<"="<<endl;
722                             }
723                        }
724                         else 
725                             cout<<Num1<<"="<<endl;                        
726                     }                    
727                     else
728                     {                                                                 //余数不作要求
729                         string answer[10];     //保存乘除结果
730                         int Answer[10];
731                         int k=0;
732                         bool flag=1;
733                         int Sign[9];     //保存符号
734                         numsign=rand()%9;    //符号数目随机
735                         numsign=numsign+1;
736                         for(int j=0;j<numsign;j++)
737                             Sign[j]=rand()%4;
738                         num1=rand()%range;
739                         Answer[k]=num1;
740                         stringstream stream;    //int转化为string
741                         stream.clear(); 
742                         stream<< num1; 
743                         stream >> answer[k]; 
744                         for(int j=0;j<numsign;j++)     //第一遍扫描处理乘除和加
745                         {
746                             if(Sign[j]==0)      //+
747                             {
748                                 if(Sign[j+1]==1||Sign[j+1]==0)
749                                 {
750                                     num2=rand()%range;
751                                     Answer[k]=Answer[k]+num2;
752                                     stream.clear(); 
753                                     stream<< num2; 
754                                     stream >> Num2; 
755                                     answer[k]=answer[k]+'+'+Num2;
756                                 }
757                                 else
758                                 {
759                                     num3=rand()%range;
760                                     stream.clear(); 
761                                     stream<< num3; 
762                                     stream >> Num3;  
763                                     k=k+1;
764                                     flag=0;
765                                 }
766                             }
767                             else if(Sign[j]==1)     //-
768                             {
769                                 if(Sign[j+1]==0||Sign[j+1]==1)
770                                 {
771                                     num2=rand()%range;
772                                     Answer[k]=Answer[k]-num2;
773                                     stream.clear(); 
774                                     stream<< num2; 
775                                     stream >> Num2;  
776                                     answer[k]=answer[k]+'-'+Num2;
777                                 }
778                                 else
779                                 {
780                                     num3=rand()%range;
781                                     stream.clear(); 
782                                     stream<< num3; 
783                                     stream >> Num3; 
784                                     k=k+1;
785                                     flag=0;
786                                 }
787                             }
788                             else if(Sign[j]==2)     //*
789                             {
790                                 if(flag==1)
791                                 {
792                                     num2=rand()%range;
793                                     Answer[k]=Answer[k]*num2;
794                                     stream.clear(); 
795                                     stream<< num2; 
796                                     stream >> Num2;  
797                                     answer[k]=answer[k]+'*'+Num2;
798                                 }
799                                 else 
800                                 {
801                                     num2=rand()%range;
802                                     Answer[k]=num3*num2;
803                                     stream.clear(); 
804                                     stream<< num2; 
805                                     stream >> Num2; 
806                                     answer[k]=Num3+'*'+Num2;
807                                     flag=1;
808                                 }
809                             }
810                             else if(Sign[j]==3)     // /
811                             {
812                                 if(flag==1)
813                                 {
814                                     num2=rand()%(range)+1;
815                                     num3=Answer[k]/num2;
816                                     stream.clear(); 
817                                     stream<< num2; 
818                                     stream >> Num2; 
819                                     answer[k]=answer[k]+'/'+Num2;                            
820                                 }
821                                 else
822                                 {
823                                     num2=rand()%(range)+1;
824                                     Answer[k]=num3/num2;
825                                     stream.clear(); 
826                                     stream<< num2; 
827                                     stream >> Num2; 
828                                     answer[k]=Num3+'/'+Num2;
829                                     flag=1;
830                                 }
831                             }
832                         }                        
833                         num3=Answer[0];
834                         Num1=answer[0];
835                         for(int j=1;j<k;j++)      //处理合并
836                         {
837                             sign=rand()%2;
838                             if(sign==0)
839                             {
840                                 num3=num3+Answer[j];
841                                 Num1=Num1+'+'+answer[j];
842                             }
843                             else
844                             {
845                                 for(;num3<Answer[j];)
846                                 num3=num3-Answer[j];
847                                 Num1=Num1+'-'+answer[j];
848                             }
849                         }
850                         if(way==1)
851                         {
852                             if(!outfile)
853                             {
854                                 cerr<<"open error!"<<endl;
855                                 exit(1);
856                             }
857                             else
858                             {
859                                 if(num1==num3)
860                                     outfile<<Num1<<"*1="<<endl;
861                                 else
862                                     outfile<<Num1<<"="<<endl;
863                             }
864                        }
865                         else 
866                             cout<<Num1<<"="<<endl;
867                     }
868                 }
869             }        
870         }
871        
872     }

 

 

 

缺陷:1,乘除加括号有的时候会出bug,会出现缺少右括号或者两个运算符在一起的情况,应该是控制条件出错了,不过调试的很长时间,没有办法保证完全正确,偶尔会有bug
2,输出算式的时候会出现,一个随机数=,的情况,循环条件的问题,多次调试未果,添加了一个条件结构弄了一个伪随机,这个做的不太好
3,添加的括号数目随机,位置随机,但是没有办法出现嵌套,也没有思路,想过用栈,不过最终没有成型,不知道具体怎么实现
4,查重,最后所有的算式都转化成了string类型,想过用string类型的数组保存所有结果外进行查重,不过代码太长了,加了几次数组,会出现结构错误,最后删除了
5,没有做分数的,不知道dos怎么输出分数,之前的分数是用除法形式输出的,这次加括号加除法二者会重复,随意没有加分数

项目计划纪录(单位:h):
  听课 编写程序 阅读相关书籍 网上查找资料 日总结
周一 2 3
周二

周三

0
周四
周五 8
周六
周日
周总计 19  27 
时间记录日志(单位:min):
日期 开始时间 结束时间 中断时间 净时间 活动 备注
星期一 14:00 15:50  10   100 听课 软件工程
  19:00 20:00  60 看书  构建之法
星期二 19:00 20:00  60  编程 四则运算
星期三 15:00 18:00 20  160  编程
  19:30 22:00 20  130  编程  四则运算
星期四 14:00 15:50  10  100  听课 四则运算
  19:30 22:30  30  150  看书  
星期五 9:00 9:50  50  看书 构建之法
  20:00 22:00  20  100  编程   
星期六 9:00 10:00  60 看书 构建之法
  15:00 16:00 60 编程 写博客 构建之法

posted on 2016-03-07 10:35  foorever_宇  阅读(297)  评论(2)    收藏  举报

导航