码迷,mamicode.com
首页 > 其他好文 > 详细

四则运算2

时间:2015-03-15 19:38:42      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

一、设计思想

  1.由于程序的功能要求较多,可以划分为多个模块实现,便于多个功能的组合

  2.将小数使用生成多个随机数进行拼接的方式实现

  3.为避免重复可以生成三个数组分别存放算数式的三个部分,依次比较

  4.

二.源程序

  1 #include <iostream>
  2 #include<time.h>
  3 using namespace std;
  4 int main()
  5 {
  6     srand(time(NULL));
  7     int     ph[10];                                            //建立捕获数组,用以存放输入的选则  
  8     int Pway,num1,num2;                       //用来表示打印方式
  9     int i,j;
 10     int judge;
 11     do
 12     {
 13         cout<<"*********************欢迎登录答题系统*********************";
 14         cout<<"1.题目定制        2.打印方式"<<endl;
 15         cout<<"3.算数类型        4.输出数量"<<endl;
 16         printf("以下均用0表示输入“否”,用1表示输入“是”\n");
 17         printf("请输入要打印的题目数量:");
 18         scanf("%d",&ph[0]);                      //a[0]存放打印题的数量
 19         printf("请输入打印的方式(列数):");
 20         scanf("%d",&ph[1]);                                    //a[1]代表输入的列数
 21         printf("请输入是否有乘除法:");
 22         scanf("%d",&ph[2]);                                          //a[2]代表有无乘除法
 23         printf("请输入数值范围:");
 24         scanf("%d",&ph[3]);
 25         printf("请输入加减是否有负数:");
 26         scanf("%d",&ph[4]);
 27         printf("请输入间隔数:");
 28         scanf("%d",&ph[6]);
 29         if(ph[2] == 1)
 30         {
 31             printf("请输入除法的算式中是否有余数出现(0/1):");
 32             scanf("%d",&ph[5]);
 33         }
 34         for(i=0; i<ph[0]; i++)
 35         {
 36             num1 = rand()%(ph[3]+1);
 37             num2 = rand()%(ph[3]+1);
 38             switch(ph[2])
 39             {
 40             case 0:                         //如果没有乘除法
 41                 Pway = rand()%2;            //构造随机函数,输出只有加减法的运算
 42                 if(Pway == 0)                //加法
 43                 {
 44                     printf("<%d>%d+%d=\t",i+1,num1,num2);
 45                     if((i+1)%ph[1] == 0)
 46                     {
 47                         printf("\n");
 48                         if(ph[6]!=0)                          //ph[6]表示每行间隔的数量
 49                         {
 50                             for(j = 0;j<ph[6];j++)
 51                             {
 52                                 printf("\n");
 53                             }
 54                         }
 55                     }
 56                 }
 57                 else
 58                 {
 59                     if(ph[4] == 0)                   //如果不允许出现负数
 60                     {
 61                         if(num1<num2)                //确定被减数大于减数    
 62                         {
 63                             i = i-1;
 64                         }
 65                         else
 66                         {
 67                             printf("<%d>%d-%d=\t",i+1,num1,num2);
 68                             if((i+1)%ph[1] == 0)              //判断是否换行
 69                             {
 70                                 printf("\n");
 71                                 if(ph[6]!=0)                         //ph[6]表示每行间隔的数量
 72                                 {
 73                                     for(j = 0;j<ph[6];j++)
 74                                     {
 75                                         printf("\n");
 76                                     }
 77                                 }
 78                             }
 79                         }
 80                     }
 81                     else                             //如果允许出现负数
 82                     {
 83                         printf("<%d>%d-%d=\t",i+1,num1,num2);
 84                         if((i+1)%ph[1] == 0)              //判断是否换行
 85                         {
 86                             printf("\n");
 87                             if(ph[6]!=0)                         //ph[6]表示每行间隔的数量
 88                             {
 89                                 for(j = 0;j<ph[6];j++)
 90                                 {
 91                                     printf("\n");
 92                                 }
 93                             }
 94                         }
 95                     }
 96                 }
 97                 break;
 98             case 1:                                   //有乘除法的输出
 99                 Pway = rand()%4;
100                 switch(Pway)                
101                 {
102                 case 0:                                     //加法
103                     printf("<%d>%d+%d=\t",i+1,num1,num2);
104                     if((i+1)%ph[1] == 0)
105                     {
106                         printf("\n");
107                         if(ph[6]!=0)                       //ph[6]表示每行间隔的数量
108                         {
109                             for(j = 0;j<ph[6];j++)
110                             {
111                                 printf("\n");
112                             }
113                         }
114                     }
115                     break;
116                 case 1:
117                     if(ph[4] == 0)
118                     {
119                         if(num1<num2)                //确定被减数大于减数,其他的控制如上述减法的控制
120                         {
121                             i = i-1;
122                         }
123                         else
124                         {
125                             printf("<%d>%d-%d=\t",i+1,num1,num2); 
126                             if((i+1)%ph[1] == 0)
127                             {
128                                 printf("\n");
129                                 if(ph[6]!=0)                   //ph[6]表示每行间隔的数量   
130                                 {
131                                     for(j = 0;j<ph[6];j++)
132                                     {
133                                         printf("\n");
134                                     }
135                                 }
136                             }
137                         }
138                     }
139                     else
140                     {
141                         printf("<%d>%d-%d=\t",i+1,num1,num2);
142                         if((i+1)%ph[1] == 0)
143                         {
144                             printf("\n");
145                             if(ph[6]!=0)                            //ph[6]表示每行间隔的数量
146                             {
147                                 for(j = 0;j<ph[6];j++)
148                                 {
149                                     printf("\n");
150                                 }
151                             }
152                         }
153                     }
154                     break;
155                 case 2:                                //乘法
156                     printf("<%d>%d×%d=\t",i+1,num1,num2);
157                     if((i+1)%ph[1] == 0)
158                     {
159                         printf("\n");
160                         if(ph[6]!=0)                              //ph[6]表示每行间隔的数量
161                         {
162                             for(j = 0;j<ph[6];j++)
163                             {
164                                 printf("\n");
165                             }
166                         }
167                     }
168                     break;
169                 case 3:                                //除法
170                     if(num2 == 0)                       //除数不能为零
171                     {
172                         i = i - 1;
173                     }
174                     else
175                     {
176                         if(ph[5] == 1)                 //判断选择是否有余数,如果能有余数
177                         {
178                             printf("<%d>%d÷%d=\t",i+1,num1,num2);
179                             if((i+1)%ph[1] == 0)
180                             {
181                                 printf("\n");
182                                 if(ph[6]!=0)                         //ph[6]表示每行间隔的数量
183                                 {
184                                     for(j = 0;j<ph[6];j++)
185                                     {
186                                         printf("\n");
187                                     }
188                                 }
189                             }
190                         }
191                         else                          //如果不能有余数
192                             if(num1%num2!=0)
193                             {
194                                 i = i-1;
195                             }
196                             else
197                             {
198                                 printf("<%d>%d÷%d=\t",i+1,num1,num2);
199                                 if((i+1)%ph[1] == 0)
200                                 {
201                                     printf("\n");
202                                     if(ph[6]!=0)                                   //ph[6]表示每行间隔的数量
203                                     {
204                                         for(j = 0;j<ph[6];j++)
205                                         {
206                                             printf("\n");
207                                         }
208                                     }
209                                 }
210                             }
211                     }
212                     break;
213                 default:
214                     printf("出错!\n");
215                     break;
216                 }
217                 break;
218             default:
219                 printf("出错!\n");
220                 break;
221             }
222         }
223         printf("\n");
224         printf("是否继续打印:");
225         scanf("%d",&judge);
226     }while(judge == 1);
227     return 0;
228 }

三.运行结果

  技术分享

技术分享

 

四.感想

  其实一个稍微大点的程序都是有许多的小功能模块搭建起来的,把一个大的问题细分成多个小问题,一个一个的解决,会发现事情没有想象的那么复杂。

           
           
           
           
           
           
           
           
           

四则运算2

标签:

原文地址:http://www.cnblogs.com/KaliLinux/p/4340133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!