随机产生30到四则运算题 2

(一)设计思路

       设计要求:

             1.题目避免重复

             2.可定制(数量/打印方式)

             3.可以控制下列参数:是否有乘除法、数值范围、加减有无负数、除法有无余数

       设计思路:

             1.用数组对每次产生的结果进行存储,将下一个运算产生式与前面的所有产生式进行比对,如果重复则重新产生新的产生式,直至达到要求;

             2.由用户自行输入所要题目的份数,打印方式自行设定(每行有1/2/3/4/5个运算式);

             3.控制参数:

              (1)数值范围根据用户需求,自己设定;

              (2)进行是否有乘除法的选择,提醒用户12代表有或无乘除法进行选择(if条件判断);

              (3)当有乘除法参与运算时,用if判断题目中有无余数产生的运算式;注意除法运算中除数不能为0,当除数等于0时,应继续随机产生除数,

                  直至除数不为0

              (4)有无负数类似于(1)(2),用if条件判断进行判断;

              (5)在设定数值范围后,产生随机数时,范围应+1,例如,随机产生一个0-100的随机数,代码为:a=rand()%100+1),否则随机数的范围

                   缺最大值100

(二)程序源代码

 

  1 // ruanjian2.cpp : Defines the entry point for the console application.
  2 //
  3 
  4 
  5 #include "stdafx.h"
  6 #include <iostream>
  7 #include <math.h>
  8 #include <time.h>
  9 using namespace std;
 10 
 11 void display1(int k,int x,int y,int m,int shuzhi)     //含有加减乘除法
 12 {
 13     if(m==0)
 14         cout<<"("<<k<<")"<<x<<" + "<<y<<" = "<<"	";
 15     if(m==1)
 16         cout<<"("<<k<<")"<<x<<" - "<<y<<" = "<<"	";
 17     if(m==2)
 18         cout<<"("<<k<<")"<<x<<" x "<<y<<" = "<<"	";
 19     if(m==3)
 20     {
 21         if(y==0)
 22         {
 23             do
 24             {
 25                 while(y!=0)
 26                 {
 27                     y=rand()%(shuzhi+1);
 28                 }
 29             }while( y==0 );
 30         }
 31         else
 32         {
 33             cout<<"("<<k<<")"<<x<<" / "<<y<<" = "<<"	";
 34         }
 35     }
 36 }
 37 
 38 void display2(int k,int x,int y,int m,int shuzhi)     //含有加减
 39 {
 40     if(m==0)
 41         cout<<"("<<k<<")"<<x<<" + "<<y<<" = "<<"	";
 42     if(m==1)
 43         cout<<"("<<k<<")"<<x<<" - "<<y<<" = "<<"	";
 44 }
 45 int main()
 46 {
 47     int number;     //number表示订制的题的份数
 48     int xuanze;     //xuanze用来做判断是否有乘除法,0表示无,1表示有
 49     int shuzhi;     //shuzhi表示参与运算的数值范围,比如0-100等
 50     int fushu;      //fushu表示运算结果是否存在负数的情况,0表示无,1表示有
 51     //在自然数中,只有减法结果可能有负数存在
 52     int yushu;      //fushu表示运算结果有无余数,0表示无,1表示有
 53     int geshu;      //geshu表示每行打印的运算式的个数
 54 
 55     int a[30],b[30],m1[30],m2[30];
 56     srand( (unsigned)time( NULL ) ); 
 57 
 58     cout<<endl;
 59     cout<<"                         $ 欢迎来到答题订制系统 $"<<endl;
 60     cout<<endl;
 61     cout<<"     在负数和余数的判断时,0表示无,1表示有,其他数值则默认为1"<<endl;
 62     cout<<"Start:"<<endl;
 63     cout<<"     请输入订制的份数:";
 64     cin>>number;
 65     cout<<endl;
 66 
 67     cout<<"     请输入数值范围:0-";
 68     cin>>shuzhi;
 69     cout<<endl;
 70 
 71     
 72     
 73 
 74     for(int k=1;k<=number;k++)
 75     {
 76         cout<<"-----------------------------------------------------------------------------"<<endl;
 77         cout<<endl;
 78         cout<<""<<k<<"份题如下:"<<endl;
 79         cout<<"*****************************************************************************"<<endl;
 80         cout<<endl;
 81         cout<<"                 是否含有乘除法(0表示无,1表示有),请选择:                  "<<endl;
 82         cout<<endl;
 83         cout<<"                 请输入每行打印的个数(1|2|3|4|5):"<<endl;
 84         cout<<endl;
 85         cout<<"*****************************************************************************"<<endl;
 86 
 87         cout<<endl;
 88         cout<<"每行的个数:";
 89         cin>>geshu;
 90         cout<<endl;
 91 
 92         cout<<"我的选择:";
 93         cin>>xuanze;      
 94         cout<<endl;
 95 
 96         if(xuanze==1)
 97         {
 98             cout<<"*****************************************************************************"<<endl;
 99             cout<<endl;
100             cout<<"          1 是否含可能有负数的结果(0表示无,1表示有),请输入你的选择:"<<endl;
101             cout<<endl;
102             cout<<endl;
103             cout<<"          2 是否含可能有余数的结果(0表示无,1表示有),请输入你的选择:"<<endl;
104             cout<<endl;
105             cout<<"*****************************************************************************"<<endl;
106             cout<<endl;
107             cout<<"对1的选择(0/1):";
108             cin>>fushu;
109             cout<<endl;
110 
111             cout<<"对2的选择(0/1):";
112             cin>>yushu;
113             cout<<endl;
114 
115             cout<<"-----------------------------------------------------------------------------"<<endl;
116             cout<<endl;
117             for(int i=1;i<=30;i++)
118             {
119                 a[i]=rand()%(shuzhi+1);
120                 b[i]=rand()%(shuzhi+1);
121                 m1[i]=rand()%4;
122 
123                 for(int j=1;j<=i-1;j++)
124                 {
125                     if(a[i]==a[j]&&b[i]==b[j]&&m1[i]==m1[j])
126                     {
127                         do
128                         {
129                             a[i]=rand()%(shuzhi+1);
130                              b[i]=rand()%(shuzhi+1);
131                         }while(a[i]==a[j]&&b[i]==b[j]&&m1[i]==m1[j]);
132                     }
133                 }
134                 if((fushu==1&&m1[i]==1)||(yushu==1&&m1[i]==3))
135                 {
136                     display1(i,a[i],b[i],m1[i],shuzhi);
137                 }
138                 else if(yushu==0&&m1[i]==3)
139                 {
140                     if(a[i]%b[i]==0)
141                     {
142                         display1(i,a[i],b[i],m1[i],shuzhi);
143                     }
144                     else
145                     {
146                         do
147                         {
148                             a[i]=rand()%(shuzhi+1);
149                             b[i]=rand()%(shuzhi+1);
150                             while(b[i] == 0)
151                             {
152                                 b[i]=rand()%(shuzhi+1);
153                             }
154                         }while( a[i]%b[i]!=0 );
155                             display1(i,a[i],b[i],m1[i],shuzhi);
156                     }
157                 }
158                 else if(fushu==0&&m1[i]==1)
159                 {
160                     if(a[i]>=b[i])
161                     {
162                         display1(i,a[i],b[i],m1[i],shuzhi);
163                     }
164                     else
165                     {
166                         do
167                         {
168                             a[i]=rand()%(shuzhi+1);
169                             b[i]=rand()%(shuzhi+1);
170                         }while(a[i]<b[i]);
171                             display1(i,a[i],b[i],m1[i],shuzhi);
172                     }
173                 }
174                 else 
175                 {
176                     display1(i,a[i],b[i],m1[i],shuzhi);
177                 }
178                 if(i%geshu==0)
179                 {
180                     cout<<endl;
181                 }
182                 if(i==30)
183                 {
184                     cout<<endl;
185                 }
186             }                    
187         }
188         else if(xuanze==0)         //没有乘除法存在,只需要判断有无负数结果产生
189         {
190             cout<<"*****************************************************************************"<<endl;
191             cout<<endl;
192             cout<<"          是否含可能有负数的结果(0表示无,1表示有),请输入你的选择:"<<endl;
193             cout<<endl;
194             cout<<"*****************************************************************************"<<endl;
195             cout<<endl;
196             cout<<"我的选择:";
197             cin>>fushu;
198 
199             cout<<"-----------------------------------------------------------------------------"<<endl;
200             cout<<endl;
201             for(int i=1;i<=30;i++)
202             {
203                 a[i]=rand()%(shuzhi+1);
204                 b[i]=rand()%(shuzhi+1);
205                 m2[i]=rand()%2;
206 
207                 for(int j=1;j<=i-1;j++)
208                 {
209                     if(a[i]==a[j]&&b[i]==b[j]&&m2[i]==m2[j])
210                     {
211                         do
212                         {
213                             a[i]=rand()%(shuzhi+1);
214                              b[i]=rand()%(shuzhi+1);
215                         }while(a[i]==a[j]&&b[i]==b[j]&&m2[i]==m2[j]);
216                     }
217                 }
218                 if(fushu==0)
219                 {
220                     if(a[i]>=b[i])
221                     {
222                         display2(i,a[i],b[i],m2[i],shuzhi);
223                     }
224                     else             //当没有负数结果时,应是a>=b,条件不满足时,则系统再随机生成俩随机数,条件满足时进行输出
225                     {
226                         do
227                         {
228                             a[i]=rand()%(shuzhi+1);
229                             b[i]=rand()%(shuzhi+1);
230                         }while(a[i]<b[i]);
231                         display2(i,a[i],b[i],m2[i],shuzhi);
232                     }    
233                 }
234                 else
235                 {
236                     display2(i,a[i],b[i],m2[i],shuzhi);
237                 }
238                 if(i%geshu==0)
239                 {
240                     cout<<endl;
241                 }
242                    if(i==30)
243                 {
244                     cout<<endl;
245                 }
246             }
247         }
248         else
249         {
250             cout<<"*****************************************************************************"<<endl;
251             cout<<endl;
252             cout<<"                       输入错误,请重新输入!"<<endl;
253             cout<<endl;
254             cout<<"*****************************************************************************"<<endl;
255             cout<<endl;
256             k=k-1;
257         }
258         cout<<"-----------------------------------------------------------------------------"<<endl;
259         cout<<endl;
260         cout<<"--------------$----------------$---------------$--------------$--------------"<<endl;
261     }
262     cout<<endl;
263     cout<<"                $ 感谢您使用答题订制系统,欢迎下次再来 $"<<endl;
264     cout<<endl;
265 
266     return 0;
267 }

 

(三)结果截图

    

           

           

           

           

 

(四)总结与心得体会

     

我的程序实现的功能为:避免重复、自己选择打印数量、自己选择打印的方式、自己确定数值范围、有无乘除法、结果是否有余数、结果是否有负数。在做本次项目的过程中,从开始的设计思路到代码的编写以及程序的调试,我花了不少的时间,从中学习到了很多的东西。

当我们拿到一个题目,首先要做的不是立马新建一个工程,打开工作空间就开始敲代码,而是先在自己的大脑做一个构思,想清楚、整理明白应如何下手,从哪里入手;其次,当我们觉得对这个项目真的一点思路都没有的时候,我们应该学会分块处理,分成一个个小模块,当把这些小模块弄好后,结合起来就是所要的结果;最后,当我们遇到问题时,一定要保持冷静的头脑,更不要轻言放弃,相信自己经过冷静的思考与理智的行为就一定能解决问题。

另外,我还注意到一个好的编程习惯所带来的好处,当代码过长时,好的编程习惯就能帮助我们很容易找出出错或者我们想要找到的位置。

 (五)项目总结及相关记录表

                   一、项目计划总结:

                                                                               表1  周活动总结表

                             姓名:黄亚萍                                                                         日期:2015.03.15

日期/任务

听课

编写程序

阅读课本

准备考试

 

做表格

日总计

周二 3.10

90

           

周三 3.11

         

89

89

周四

 

241

       

241

周五

90

   369

       

459

周六

 

150

       

150

周日 3.15

             

周总计

180

760

     

89

1029

 

                                    阶段时间和效率                                   周数(上一次周活动总结表的周数+1):1

 

                                    不包括上一周在内的累计时间

总计

             

平均

             

最大

             

最小

             

                                         以前个周的累计时间

总计

             

平均

             

最大

             

最小

             

 

                    二、时间记录日志:

                                                                     表2  时间记录日志

 

                                    学生  黄亚萍                      日期  2015.03.10                    

                                    教师  王建民                      课程  软件工程            

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/10

           

3/11

16:04

18:05

32

89

作表格,查资料

制作记录表格,查资料

3/12

19:24

23:37

12

241

编程

编程,休息

3/13

1523

1930

30

217

编程

编程,吃饭

 

2003

2237

 

152

调试程序

 

3/14

915

1102

 

107

调试程序

 
 

1152

1235

 

43

完善界面

吃饭,完善界面

3/15

           

                 三、缺陷记录日志:

                                                                           表3  缺陷记录日志         

                                    学  生      黄亚萍                 

                                    日  期     2015.03.10                    

                                    教  员      王建民                 

                                    程序号                             

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3/10

           
 

3/11

           

描述:

3/12

 

逻辑错误

编辑代码

代码编辑

   

描述:在除法运算中,除数不等于0,当除数等于0时,重新生成随机数

3/13

 

算法错误

调试程序

调试

267

 

描述:对满足结果有无余数和负数的情况分开来讨论

3/14

 

算法错误

调试程序

调试

92

 

描述:用数组完成避免重复,注意比较的过程,对重复的处理

3/15

           

描述:

 

 

 

 

 

 

 

 

   

 

 

 

 

 

  

 

原文地址:https://www.cnblogs.com/mudanhuakai/p/4337466.html