四则运算(3)--答题小系统

一、实验题目

在之前的基础上做一个小答题系统,要求:

1.可以判断对错;

2.可以统计做对的和做错的个数。

二、设计思路

判断对错就是将用户输入的数和正确的值相比较,正确输出√,错误输出×;

统计个数就是设置两个全局变量,让它去统计对错的个数。

三、源代码

  1 #include "stdio.h"
  2 #include "stdlib.h"
  3 #include "time.h"
  4 int correct=0;//声明全局变量correct
  5 int wrong=0;//声明全局变量wrong
  6 int Add(int num1,int num2)
  7 {
  8     int uresult,cresult;
  9     scanf("%d",&uresult);
 10     cresult=num1+num2;
 11     if(cresult==uresult)
 12     {
 13         printf("\t√");
 14         correct++;
 15     }
 16     else
 17     {
 18         printf("\t×");
 19         wrong++;
 20     }
 21     return 0;
 22 }
 23 int Sub(int num1,int num2)
 24 {
 25     int uresult,cresult;
 26     scanf("%d",&uresult);
 27     cresult=num1-num2;
 28     if(cresult==uresult)
 29     {
 30         printf("\t√");
 31         correct++;
 32     }
 33     else
 34     {
 35         printf("\t×");
 36         wrong++;
 37     }
 38     return 0;
 39 }
 40 int Mult(int num1,int num2)
 41 {
 42     int uresult,cresult;
 43     scanf("%d",&uresult);
 44     cresult=num1*num2;
 45     if(cresult==uresult)
 46     {
 47         printf("\t√");
 48         correct++;
 49     }
 50     else
 51     {
 52         printf("\t×");
 53         wrong++;
 54     }
 55     return 0;
 56 }
 57 int Divi(int num1,int num2)
 58 {
 59     double uresult,cresult;
 60     scanf("%g",&uresult);
 61     cresult=num1/num2;    //取整
 62     if(cresult==uresult)
 63     {
 64         printf("\t√");
 65         correct++;
 66     }
 67     else
 68     {
 69         printf("\t×");
 70         wrong++;
 71     }
 72     return 0;
 73 }
 74 int SetQuestion(int cheng,int number,int line,int plural,int scope,int konghang)
 75 {
 76     int num1,num2,oper,i;
 77     srand(time(NULL));                //i为循环次数
 78     printf("我们提供一下功能:                  \n");
 79     printf("    1.题目的数值范围(暂不支持小数)\n");
 80     printf("    2.题目的数量                    \n");
 81     printf("    3.打印时每行题的数量            \n");
 82     printf("    4.答案中会不会出现负数的结果    \n");
 83     printf("    5.题目中是否会出现乘除运算      \n");
 84     printf("    6.打印时每行的间隔              \n");
 85     printf("请输入数值范围:");
 86     scanf("%d",&scope);
 87     printf("请选择出题数量:");
 88     scanf("%d",&number);                                   //oper为题目数量
 89     printf("请输入每行题的数量:");
 90     scanf("%d",&line);                                     //line为每行题的数量
 91     printf("答案是否有负数(1为有,0为没有):");
 92     scanf("%d",&plural);                                   //plural是否是负数
 93     while(plural!=0 && plural!=1)                          //判断用户是否按要求输入
 94      {
 95          printf("sorry!输入错误,请按要求输入:");
 96          scanf("%d",&plural);
 97      }
 98 
 99     printf("是否有乘除运算(1为有,0为没有):");
100     scanf("%d",&cheng);
101     while(cheng!=0 && cheng!=1)                          //判断用户是否按要求输入
102      {
103          printf("sorry!输入错误,请按要求输入:");
104          scanf("%d",&cheng);
105      }
106     printf("中间有几个空行:");
107     scanf("%d",&konghang);
108     if(cheng==1)
109     {
110         if(plural==0)
111         {
112             for(i=1;i<=number;i++)
113             {
114                 num1=rand()%scope;
115                 num2=rand()%scope;
116                 oper=rand()%4;
117                 printf("(%d)",i);
118                 switch(oper)
119                 {
120                 case 0:
121                     printf("%d+%d=\t",num1,num2);
122                     break;
123                 case 1:
124                     if(num1>=num2)
125                         printf("%d-%d=\t",num1,num2);
126                     else
127                         printf("%d-%d=\t",num2,num1);
128                     break;
129                 case 2:
130                     printf("%d*%d=\t",num1,num2);
131                     break;    
132                 case 3:
133                     if(num2==0)
134                         printf("%d/%d=\t",num2,num1);
135                     else
136                         printf("%d/%d=\t",num1,num2);
137                     break;
138                 default:
139                     {
140                         printf("出错啦~~~");
141                     }
142                 }
143                 if(i%line==0)
144                 {
145                     for(int p=1;p<=konghang;p++)
146                     {
147                          printf("\n");
148                     }
149                 }
150             }
151             
152         }
153     else
154     {
155         for(i=1;i<=number;i++)
156         {
157             num1=rand()%scope;
158             num2=rand()%scope;
159             oper=rand()%4;
160             printf("(%d)",i);
161             switch(oper)
162             {
163             case 0:
164                     printf("%d+%d=\t",num1,num2);
165                     break;
166                 case 1:
167                     printf("%d-%d=\t",num1,num2);
168                     break;
169                 case 2:
170                     printf("%d*%d=\t",num1,num2);
171                     break;    
172                 case 3:
173                     if(num2==0)
174                         printf("%d/%d=\t",num2,num1);
175                     else
176                         printf("%d/%d=\t",num1,num2);
177                     break;
178             default:
179                     {
180                         printf("出错啦~~~");
181                     }
182             }
183             if(i%line==0)
184                 {
185                     for(int p=1;p<=konghang;p++)
186                     {
187                          printf("\n");
188                     }
189                 }
190         }
191     }
192     
193     }
194     else
195     {
196         if(plural==0)
197         {
198         for(i=1;i<=number;i++)
199         {
200             num1=rand()%scope;
201             num2=rand()%scope;
202             oper=rand()%2;
203             printf("(%d)",i);
204             switch(oper)
205             {
206             case 0:
207                 printf("%d+%d=\t",num1,num2);
208                 break;
209             case 1:
210                 if(num1>=num2)
211                     printf("%d-%d=\t",num1,num2);
212                 else
213                     printf("%d-%d=\t",num2,num1);
214                 break;
215             default:
216                     {
217                         printf("出错啦~~~");
218                     }
219             }
220             if(i%line==0)
221                 {
222                     for(int p=1;p<=konghang;p++)
223                     {
224                          printf("\n");
225                     }
226                 }
227         }
228         
229     }
230     else
231     {
232         for(i=1;i<=number;i++)
233         {
234             num1=rand()%scope;
235             num2=rand()%scope;
236             oper=rand()%2;
237             printf("(%d)",i);
238             switch(oper)
239             {
240             case 0:
241                 printf("%d+%d=\t",num1,num2);
242                 break;
243             case 1:
244                 printf("%d-%d=\t",num1,num2);
245                 break;
246             default:
247                     {
248                         printf("出错啦~~~");
249                     }
250             }
251                 if(i%line==0)
252                 {
253                     for(int p=1;p<=konghang;p++)
254                     {
255                          printf("\n");
256                     }
257                 }
258         }
259     }
260     
261     }
262     printf("\n");
263     
264     return 0;
265 }
266 
267 int AnswerQuestion(int cheng,int number,int line,int plural,int scope,int konghang){
268     int num1,num2,oper,i;
269     srand(time(NULL));
270     //a,b为运算数,c为选择哪个运算符,i为循环次数
271     printf("我们提供一下功能:                  \n");
272     printf("    1.题目的数值范围(暂不支持小数)\n");
273     printf("    2.题目的数量                    \n");
274     printf("    3.答案中会不会出现负数的结果    \n");
275     printf("    4.题目中是否会出现乘除运算      \n");
276     printf("    5.打印时每行的间隔              \n");
277     printf("请输入数值范围:");
278     scanf("%d",&scope);
279     printf("请选择出题数量:");
280     scanf("%d",&number);                                   
281     printf("答案是否有负数(1为有,0为没有):");
282     scanf("%d",&plural);                                   //plural是否是负数
283     while(plural!=0 && plural!=1)                          //判断用户是否按要求输入
284      {
285          printf("sorry!输入错误,请按要求输入:");
286          scanf("%d",&plural);
287      }
288 
289     printf("是否有乘除运算(1为有,0为没有):");
290     scanf("%d",&cheng);
291     while(cheng!=0 && cheng!=1)                          //判断用户是否按要求输入
292      {
293          printf("sorry!输入错误,请按要求输入:");
294          scanf("%d",&cheng);
295      }
296     printf("中间有几个空行:");
297     scanf("%d",&konghang);
298     if(cheng==1)
299     {
300         if(plural==0)
301         {
302             for(i=1;i<=number;i++)
303             {
304                 num1=rand()%scope;
305                 num2=rand()%scope;
306                 oper=rand()%4;
307                 printf("(%d)",i);
308                 switch(oper)
309                 {
310                 case 0:
311                     printf("%d+%d=",num1,num2);
312                     Add(num1,num2);
313                     break;
314                 case 1:
315                     if(num1>=num2)
316                     {
317                         printf("%d-%d=",num1,num2);
318                         Sub(num1,num2);
319                     }
320                     else
321                     {
322                         printf("%d-%d=",num2,num1);
323                         Sub(num2,num1);
324                     }
325                     break;
326                 case 2:
327                     printf("%d*%d=",num1,num2);
328                     Mult(num1,num2);
329                     break;    
330                 case 3:
331                     if(num2==0)
332                     {
333                         printf("%d/%d=",num2,num1);
334                         Divi(num2,num1);
335                     }
336                     else
337                     {
338                         printf("%d/%d=",num1,num2);
339                         Divi(num1,num2);
340                     }
341                     break;
342                 default:
343                     {
344                         printf("出错啦~~~");
345                     }
346                 }
347                 for(int p=1;p<=konghang;p++)
348                 {
349                      printf("\n");
350                 }
351             }
352             
353         }
354     else
355     {
356         for(i=1;i<=number;i++)
357         {
358             num1=rand()%scope;
359             num2=rand()%scope;
360             oper=rand()%4;
361             printf("(%d)",i);
362             switch(oper)
363             {
364             case 0:
365                     printf("%d+%d=",num1,num2);
366                     Add(num1,num2);
367                     break;
368                 case 1:
369                     printf("%d-%d=",num1,num2);
370                     Sub(num1,num2);
371                     break;
372                 case 2:
373                     printf("%d*%d=",num1,num2);
374                     Mult(num1,num2);
375                     break;    
376                 case 3:
377                     if(num2==0)
378                     {
379                         printf("%d/%d=",num2,num1);
380                         Divi(num2,num1);
381                     }
382                     else
383                     {
384                         printf("%d/%d=",num1,num2);
385                         Divi(num2,num1);
386                     }
387                     break;
388             default:
389                     {
390                         printf("出错啦~~~");
391                     }
392             }
393         
394             for(int p=1;p<=konghang;p++)
395             {
396                  printf("\n");
397             }
398         }
399     }
400     
401     }
402     else
403     {
404         if(plural==0)
405         {
406         for(i=1;i<=number;i++)
407         {
408             num1=rand()%scope;
409             num2=rand()%scope;
410             oper=rand()%2;
411             printf("(%d)",i);
412             switch(oper)
413             {
414             case 0:
415                 printf("%d+%d=",num1,num2);
416                 Add(num1,num2);
417                 break;
418             case 1:
419                 if(num1>=num2)
420                 {
421                     printf("%d-%d=",num1,num2);
422                     Sub(num1,num2);
423                 }
424                 else
425                 {
426                     printf("%d-%d=",num2,num1);
427                     Sub(num2,num1);
428                 }
429                 break;
430             default:
431                     {
432                         printf("出错啦~~~");
433                     }
434             }
435             for(int p=1;p<=konghang;p++)
436             {
437                  printf("\n");
438             }
439         }
440         
441     }
442     else
443     {
444         for(i=1;i<=number;i++)
445         {
446             num1=rand()%scope;
447             num2=rand()%scope;
448             oper=rand()%2;
449             printf("(%d)",i);
450             switch(oper)
451             {
452             case 0:
453                 printf("%d+%d=",num1,num2);
454                 Add(num1,num2);
455                 break;
456             case 1:
457                 printf("%d-%d=",num1,num2);
458                 Sub(num1,num2);
459                 break;
460             default:
461                     {
462                         printf("出错啦~~~");
463                     }
464             }
465             for(int p=1;p<=konghang;p++)
466             {
467                  printf("\n");
468             }
469         }
470     }
471     
472     }
473     printf("\n");
474     
475     return 0;
476 }
477 void menu()
478 {
479     printf("       欢迎使用四则运算出题系统     \n");
480     printf("          1.    开始出题            \n");
481     printf("          2.    开始答题            \n");
482     printf("          0.    退出系统            \n");
483 }
484 int main()
485 {
486     int cheng,number,line,plural,scope,konghang,percent,a,num;
487 l1:    menu();
488     printf("请选择(0-2):");
489     scanf("%d",&a);
490     switch(a)
491     {
492     case 1:
493         SetQuestion(cheng,number,line,plural,scope,konghang);
494         printf("是否继续(1为继续,0为不继续):");
495         scanf("%d",&num);
496         if(num==1)
497             goto l1;
498         else
499             printf("欢迎下次使用!\n");
500             break;
501     case 2:
502         AnswerQuestion(cheng,number,line,plural,scope,konghang);
503         printf("做对了%d道题\n",correct);
504         printf("做错了%d道题\n",wrong);
505         percent=correct/(correct+wrong);
506         if(percent>=6/10)
507         {
508             printf("你太棒了!!\n");
509         }
510         else
511         {
512             printf("不及格,你要加油啦~~~\n");
513         }
514         printf("是否继续(1为继续,0为不继续):");
515         scanf("%d",&num);
516         if(num==1)
517             goto l1;
518         else
519             printf("欢迎下次使用!\n");
520             break;
521     case 0:
522         printf("欢迎下次使用!\n");
523         break;
524     }
525 
526     return 0;
527 }
View Code

四、运行结果

开始界面:

五、心得体会

     在原来的基础上进行修改,比直接做简单了许多,自己也有了一定的思路,其实我们自己编写一个大程序时也可以采用这种做法,先从一个个简单的问题开始,逐步变得复杂,就不会没有头绪了;但是我的程序拓展性差,程序有很多功能无法实现。

六、PSP0表格

1.项目计划总结:

                                             周活动总结表

  姓名:袁亚姣                                    日期:3/22

日期       任务

听课

编写程序

阅读课本

准备考试

 

 

日总计

周日

 

 30

 

 

 

 

 30

周一

 

 

 

 

 

 

 

周二

 400

 

 20

 

 

 

 420

周三

 100

 120

 40

 

 

 

 260

周四

 300

 

 50

 

 

 

 250

周五

 200

 120

 60

 

 

 

 380

周六

 

 

 30

 

 

 

 

周总结

 1000

 270

 200

 

 

 

 1470

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

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

总计

 1000

 270

 200

 

 

 

 1470

平均

 250

 90

 40

 

 

 

 245

最大

 400

 120

 60

 

 

 

 420

最小

 100

 30

 20

 

 

 

 30

  以前各周的累计时间                                                                                    

总计

 900

 230

 140

 

 

 

1270 

平均

 900

 230

 140

 

 

 

1270

最大

 900

 230

 140

 

 

 

1270

最小

 900

 230

140 

 

 

 

1270

2.时间记录表:

  学生      袁亚姣                                              日期     2015.03.22   

  教师        王建民                                             课程           PSP       

日期

开始时间

结束时间

中断时间

净时间

活动

备注

 15/3/18

10:30

 12:30

 

 120

 结对开发

 

 15/3/20

 20:00

22:30

 30

 120

 四则运算(3)

 讨论

15/3/22

16:30

17:00

 

30

写博客

 

 

3.缺陷记录日志:

  

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

 15/3/18

 1

 逻辑错误

 编码

 执行

 20min

 

 描述:逻辑错误,数组的题不能出现正确答案,循环搞错了

 15/3/20

 2

 

 编码

 编译

 30min

 

 描述:全局变量的定义放在了主函数中,导致系统不能识别;

posted @ 2015-03-22 17:40  YTester  阅读(239)  评论(0编辑  收藏  举报