随机生成30道四则运算题3—用户可以参与答题,并且有错误提示和计数

一、题目要求:

     让程序能接受用户输入答案,并判定对错。最后给出总共对/错的数量。

二、设计思路;

    在二的基础上添加答题并判断正误和计数的功能。

三、程序源代码  

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

 

四、结果截图

   

       

       

        

四、总结与心得体会

 

这次试验是在项目二的基础上进一步完善的答题系统,在按照用户的难度需求随机生成的30道题目中,用户答题时,会对结果的正误做出判断与提示,用户可以清楚地看到;在答题结束时,会对用户答题的结果做出统计,便于用户掌握信息。

在完成的实验的过程中,基本没什么问题,就是在代码的格式上有点不美观,完善后就是上面所展示的。

五、项目进展记录 

       周活动项目计划总结表+时间记录日志+缺陷记录

       一、项目计划总结:

                                                                      表1  周活动总结表

                                              姓名:黄亚萍                                    日期:2015.03.17

日期/任务

听课

编写程序

阅读课本

准备考试

 

总结

日总计

周二 3.17

90

         

90

周三 3.18

             

周四 3.19

 

105

     

30

135

周五 3.20

90

   

       

90

周六 3.21

             

周日 3.22

             

周总计

180

105

     

30

315

 

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

 

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

 

总计

315

           

平均

45

           

最大

135

           

最小

0

           

 

                          以前每个周的累计时间

 

总计

             

平均

             

最大

             

最小

             

 

                    二、时间记录日志:

                                                                   表2  时间记录日志

                                                  学生  黄亚萍                      日期  2015.03.17          

                                                  教师  王建民                      课程  软件工程            

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/19

1634

1819

 

105

编程、调试

 
 

1840

1910

 

30

总结工作

 

 

                  三、缺陷记录日志:

 

                                                                          表3  缺陷记录日志         

                                  学  生      黄亚萍                 

                                  日  期     2015.03.17                    

                                  教  员      王建民                 

                                  程序号        3                    

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3/19

1

漏写转行字符

编辑代码

代码调试

1733

 

描述:漏写转行字符,使得四则运算生成式打印的格式杂乱无章,修改之后得出预期的结果。

 

 

 

posted @ 2015-03-19 18:46  快乐宝贝hyp  阅读(255)  评论(0编辑  收藏  举报