四则运算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 }

运行结果如下:

输出到文件:

输出到屏幕:

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

原文地址:https://www.cnblogs.com/quite-love/p/5268606.html