软件工程课堂练习--四则运算(三)

一、设计思路

题目:可以答题并判断对错,最后显示做对几道题。

      思路:在原来的基础上又添加了用户在系统上可选择直接答题模块,思路上上次的四则运算(二)大致相同,不过又添加了几个函数,经过调用实现操作。

二、程序代码

  1 #include "stdafx.h"
  2 #include "stdio.h"
  3 #include "time.h"
  4 #include "stdlib.h"      //随机器函数头文件
  5 
  6 int truenum=0;    int falsenum=0;
  7 
  8 
  9 void operation(int num,int numvalue,int judear,int judemd,int linenum)
 10 {
 11         switch(judemd)
 12         {
 13                 case 0:{
 14                     int x,y;
 15                     if(judear==0){
 16                     srand((int)time(0));
 17                     for(int i=1;i<=num;i++)          //出题数量
 18                     {
 19                                         
 20                         int a=rand()%numvalue;    
 21                         int b=rand()%numvalue;
 22 
 23                         x=1+rand()%10;     //随机产生10种类型的题目    
 24                         switch (x)                                
 25                         {
 26                             case 1: 
 27                                 {
 28                                     printf("%d+%d=",a,b);
 29                                     break;
 30                                 }
 31                             case 2:
 32                                 {
 33                                     printf("%d-%d=	",a,b);
 34                                     
 35                                     break;
 36                                 }
 37                             case 3:
 38                                 {
 39                                     printf("-%d+%d=	",a,b);
 40                                     
 41                                     break;
 42                                 }
 43                             case 4: 
 44                                 {
 45                                     printf("%d+(-%d)=	",a,b);
 46                                 
 47                                     break;
 48                                 }
 49                             case 5:
 50                                 {
 51                                     printf("-%d+(-%d)=	",a,b);
 52                                 
 53                                     break;
 54                                 }
 55                             case 6: 
 56                                 {
 57                                     printf("-%d-%d=	",a,b);
 58                                 
 59                                     break;
 60                                 }
 61                             case 7:
 62                                 {
 63                                     printf("%d-(-%d)=	",a,b);
 64                                 
 65                                     break;
 66                                 }
 67                             case 8: 
 68                                 {
 69                                     printf("-%d-(-%d)=	",a,b);
 70                                     
 71                                     break;
 72                                 }
 73                             case 9:
 74                                 {
 75                                     printf("%d*%d=	",a,b);
 76                                 
 77                                     break;}
 78                             case 10: {
 79                                 if (b!=0)
 80                                 {printf("%d/%d=	",a,b);}
 81                                 else
 82                                 {    
 83                                     b=b+1;
 84                                     printf("%d/%d=	",a,b);
 85                                 
 86                                 }
 87                                 break;
 88                                     }
 89                             default:{"输出有误!";}
 90                         }
 91                             if(i%linenum==0)
 92                                 {
 93                                     printf("
");
 94                                 }
 95                     }
 96                     
 97 
 98                     }
 99                     else if(judear==1)
100                     {
101                         srand((int)time(0));
102                         for(int i=1;i<=num;i++)
103                         {
104                             
105                                 
106                             int a=rand()%numvalue;    
107                             int b=rand()%numvalue;
108 
109                             y=1+rand()%4;     //随机产生四种不同的题目    
110                             switch (y)                                
111                             {
112                                 case 1: 
113                                     {
114                                         printf("%d+%d=    	",a,b);
115                                     
116                                         break;
117                                     }
118                                 case 2: 
119                                     {
120                                         printf("%d-%d=    	",a,b);
121                                     
122                                         break;
123                                     }
124                                 case 3: 
125                                     {
126                                         printf("%d*%d=    	",a,b);
127                                     
128                                         break;
129                                     }
130                                 case 4: {
131                                     if (b!=0)
132                                     {printf("%d/%d=    	",a,b);}
133                                     else
134                                     {    
135                                         b=b+1;
136                                         printf("%d/%d=    	",a,b);
137                                         
138                                     }
139                                     break;
140                                         }
141                                 default:{printf("输出有误!");}
142                             }        
143                         }
144                         if(i%linenum==0)
145                         {printf("
");}
146                         
147                     }
148                     else 
149                         printf("出错!");
150                        break;
151                        default:{printf("出错!");}
152                        }
153                 case 1:{
154                     int q,w;
155                     if(judear==0)
156                     {
157                         srand((int)time(0));
158                         for(int i=1;i<=num;i++)
159                         {
160                             
161                             int a=rand()%numvalue;    
162                             int b=rand()%numvalue;
163 
164                             q=1+rand()%8;         //随机产生8种不同的题型    
165                             switch (q)                                
166                             {
167                             case 1: 
168                                 {
169                                     printf("%d+%d=    	",a,b);
170                                 
171                                     break;
172                                 }
173                             case 2:
174                                 {
175                                     printf("%d-%d=    	",a,b);
176                                 
177                                     break;
178                                 }
179                             case 3: 
180                                 {
181                                     printf("-%d+%d=   	",a,b);
182                                 
183                                     break;}
184                             case 4:
185                                 {
186                                     printf("%d+(-%d)= 	",a,b);
187                                 
188                                     break;}
189                             case 5: 
190                                 {
191                                     printf("-%d+(-%d)=	",a,b);
192                                 
193                                     break;}
194                             case 6: 
195                                 {
196                                     printf("-%d-%d=   	",a,b);
197                                 
198                                     break;
199                                 }
200                             case 7: 
201                                 {
202                                     printf("%d-(-%d)= 	",a,b);
203                                 
204                                     break;
205                                 }
206                             case 8: 
207                                 {
208                                     printf("-%d-(-%d)=	",a,b);
209                                     
210                                     break;
211                                 }
212                             default:{"输出有误!";}
213                             }
214                                 if(i%linenum==0)
215                                 {
216                                     printf("
");
217                                 }
218                         }
219                         
220                     }
221                     else if(judear==1)
222                     {
223                         srand((int)time(0));
224                         for(int i=1;i<=num;i++)
225                         {
226                         
227                                 
228                             int a=rand()%numvalue;    
229                             int b=rand()%numvalue;
230 
231                             w=1+rand()%2;     //随机产生2种不同的题型    
232                             switch (w)                                
233                             {
234                                 case 1: 
235                                     {
236                                         printf("%d+%d=    	",a,b);
237                                         
238                                         break;
239                                     }
240                                 case 2: 
241                                     {
242                                         printf("%d-%d=    	",a,b);
243                                     
244                                         break;
245                                     }
246                                 default:{"输出有误!";}
247                             }    
248                                 if(i%linenum==0)
249                                 {
250                                     printf("
");
251                                 }
252                         }
253                         
254 
255                     }
256                     else 
257                         printf("出错!");
258                        }
259                     }
260 
261                        
262         }
263 
264 
265 void add(int num1,int num2)
266 {    
267     int userresult,truresult;
268     scanf("%d",&userresult);
269     truresult=num1+num2;
270     if(truresult==userresult)
271     {
272         printf("");
273         truenum++;
274     }
275     else if(truresult!=userresult)
276     {
277         printf("  ×");
278         falsenum++;
279     }
280     printf("
");
281  
282 }
283 
284 void sub(int num1,int num2)
285 {
286     int userresult,truresult;
287     scanf("%d",&userresult);
288     truresult=num1-num2;
289     if(truresult==userresult)
290     {
291         printf("");
292         truenum++;
293     }
294     else if(truresult!=userresult)
295     {
296         printf("  ×");
297         falsenum++;
298     }
299     printf("
");
300 
301 }
302  
303 void mul(int num1,int num2)
304 {
305     int userresult,truresult;
306     scanf("%d",&userresult);
307     truresult=num1*num2;
308     if(truresult==userresult)
309     {
310         printf("");
311         truenum++;
312     }
313     else if(truresult!=userresult)
314     {
315         printf("  ×");
316         falsenum++;
317     }
318         printf("
");
319 
320 }
321 
322 void division(int num1,int num2)
323 {
324     int userresult,truresult;
325     scanf("%d",&userresult);
326     truresult=num1/num2;
327     if(truresult==userresult)
328     {
329         printf("");
330         truenum++;
331     }
332     else if(truresult!=userresult)
333     {
334         printf("  ×");
335         falsenum++;
336     }
337 
338 }
339 
340 
341 
342 
343 void answoperation(int num,int numvalue,int judear,int judemd,int linenum)
344 {
345     switch(judemd)
346         {
347                 case 0:{
348                     int x,y;
349                     if(judear==0){
350                     srand((int)time(0));
351                     for(int i=1;i<=num;i++)          //出题数量
352                     {
353                                         
354                         int a=rand()%numvalue;    
355                         int b=rand()%numvalue;
356 
357                         x=1+rand()%10;     //随机产生10种类型的题目    
358                         switch (x)                                
359                         {
360                             case 1: 
361                                 {
362                                     printf("%d+%d=",a,b);
363                                     add(a,b);
364                                     break;
365                                 }
366                             case 2:
367                                 {
368                                     printf("%d-%d=",a,b);
369                                     sub(a,b);
370                                     break;
371                                 }
372                             case 3:
373                                 {
374                                     printf("-%d+%d=",a,b);
375                                     add(-a,b);
376                                     break;
377                                 }
378                             case 4: 
379                                 {
380                                     printf("%d+(-%d)=",a,b);
381                                     add(a,-b);
382                                     break;
383                                 }
384                             case 5:
385                                 {
386                                     printf("-%d+(-%d)=",a,b);
387                                     add(-a,-b);
388                                     break;
389                                 }
390                             case 6: 
391                                 {
392                                     printf("-%d-%d=",a,b);
393                                     sub(-a,b);
394                                     break;
395                                 }
396                             case 7:
397                                 {
398                                     printf("%d-(-%d)=",a,b);
399                                     sub(a,-b);
400                                     break;
401                                 }
402                             case 8: 
403                                 {
404                                     printf("-%d-(-%d)=",a,b);
405                                     sub(-a,-b);
406                                     break;
407                                 }
408                             case 9:
409                                 {
410                                     printf("%d*%d=",a,b);
411                                     mul(a,b);
412                                     break;}
413                             case 10: {
414                                 if (b!=0)
415                                 {
416                                     printf("%d/%d=",a,b);
417                                     division(a,b);
418                                 }
419                                 else
420                                 {    
421                                     b=b+1;
422                                     printf("%d/%d=",a,b);
423                                     division(a,b);
424                                 
425                                 }
426                                 break;
427                                     }
428                             default:{"输出有误!";}
429                         }
430                             if(i%linenum==0)
431                                 {
432                                     printf("
");
433                                 }
434                     }
435                     
436 
437                     }
438                     else if(judear==1)
439                     {
440                         srand((int)time(0));
441                         for(int i=1;i<=num;i++)
442                         {
443                             
444                                 
445                             int a=rand()%numvalue;    
446                             int b=rand()%numvalue;
447 
448                             y=1+rand()%4;     //随机产生四种不同的题目    
449                             switch (y)                                
450                             {
451                                 case 1: 
452                                     {
453                                         printf("%d+%d=",a,b);
454                                         add(a,b);
455                                         break;
456                                     }
457                                 case 2: 
458                                     {
459                                         printf("%d-%d=",a,b);
460                                         sub(a,b);
461                                         break;
462                                     }
463                                 case 3: 
464                                     {
465                                         printf("%d*%d=",a,b);
466                                         mul(a,b);
467                                     
468                                         break;
469                                     }
470                                 case 4: {
471                                     if (b!=0)
472                                     {
473                                         printf("%d/%d=",a,b);
474                                         division(a,b);
475                                     }
476                                     else
477                                     {    
478                                         b=b+1;
479                                         printf("%d/%d=",a,b);
480                                         division(a,b);
481                                     }
482                                     break;
483                                         }
484                                 default:{printf("输出有误!");}
485                             }        
486                         }
487                         if(i%linenum==0)
488                         {printf("
");}
489                         
490                     }
491                     else 
492                         printf("出错!");
493                     
494                        break;
495                        default:{printf("出错!");}
496 
497                        }
498                 case 1:{
499                     int q,w;
500                     if(judear==0)
501                     {
502                         srand((int)time(0));
503                         for(int i=1;i<=num;i++)
504                         {
505                             
506                             int a=rand()%numvalue;    
507                             int b=rand()%numvalue;
508 
509                             q=1+rand()%8;         //随机产生8种不同的题型    
510                             switch (q)                                
511                             {
512                             case 1: 
513                                 {
514                                     printf("%d+%d=",a,b);
515                                     add(a,b);
516                                     break;
517                                 }
518                             case 2:
519                                 {
520                                     printf("%d-%d=",a,b);
521                                     sub(a,b);
522                                     break;
523                                 }
524                             case 3: 
525                                 {
526                                     printf("-%d+%d=",a,b);
527                                     add(-a,b);
528                                     break;}
529                             case 4:
530                                 {
531                                     printf("%d+(-%d)=",a,b);
532                                     add(a,-b);
533                                     break;}
534                             case 5: 
535                                 {
536                                     printf("-%d+(-%d)=",a,b);
537                                     add(-a,-b);
538                                     break;}
539                             case 6: 
540                                 {
541                                     printf("-%d-%d=",a,b);
542                                     sub(-a,b);
543                                     break;
544                                 }
545                             case 7: 
546                                 {
547                                     printf("%d-(-%d)=",a,b);
548                                     sub(a,-b);
549                                     break;
550                                 }
551                             case 8: 
552                                 {
553                                     printf("-%d-(-%d)=",a,b);
554                                     sub(-a,-b);
555                                     break;
556                                 }
557                             default:{"输出有误!";}
558                             }
559                                 if(i%linenum==0)
560                                 {
561                                     printf("
");
562                                 }
563                         }
564                         
565                     }
566                     else if(judear==1)
567                     {
568                         srand((int)time(0));
569                         for(int i=1;i<=num;i++)
570                         {
571                         
572                                 
573                             int a=rand()%numvalue;    
574                             int b=rand()%numvalue;
575 
576                             w=1+rand()%2;     //随机产生2种不同的题型    
577                             switch (w)                                
578                             {
579                                 case 1: 
580                                     {
581                                         printf("%d+%d=",a,b);
582                                         add(a,b);
583                                         break;
584                                     }
585                                 case 2: 
586                                     {
587                                         printf("%d-%d=",a,b);
588                                         sub(a,b);
589                                         break;
590                                     }
591                                 default:{"输出有误!";}
592                             }    
593                                 if(i%linenum==0)
594                                 {
595                                     printf("
");
596                                 }
597                         }
598                         
599 
600                     }
601                     else 
602                         printf("出错!");
603                        }
604                     }
605             
606 
607 }        
608 
609         
610 void print()
611 {
612     int num,numvalue,judear,judemd,linenum,answer;  //变量含义分别为出题数目、数值范围、判断有无负数、判断有无乘除、输出列数、直接作答
613 
614     printf("请输入出题数目:");
615     scanf("%d",&num);
616     printf("请输入要输出的题目列数(多少题一组):");
617     scanf("%d",&linenum);
618     printf("加减有无负数?请输入【0/1】表示【是/否】:");
619     scanf("%d",&judear);
620     while(judear!=0 && judear!=1)                          //判断用户是否按要求输入
621     {
622         printf("sorry!输入错误,请按要求输入:");
623         scanf("%d",&judear);
624     }
625     printf("请输入出题的范围绝对值(不考虑小数请输入整数):00-");
626     scanf("%d",&numvalue);
627     printf("出题是否含有乘除法?请输入【0/1】表示【是/否】:");
628     scanf("%d",&judemd);
629     while(judear!=0 && judear!=1)                         //判断用户是否按要求输入
630     {
631         printf("sorry!输入错误,请按要求输入:");
632         scanf("%d",&judemd);
633     }
634     printf("是否要在此系统上直接运算?请输入【0/1】表示【是/否】:");
635         scanf("%d",&answer);
636     while(answer!=0 && answer!=1)                         //判断用户是否按要求输入
637     {
638         printf("sorry!输入错误,请按要求输入:");
639         scanf("%d",&answer);
640     }
641     if (answer==1)
642     {
643         operation(num,numvalue,judear,judemd,linenum);           //调用operation函数
644     }
645     else if(answer==0)
646     {
647        answoperation(num,numvalue,judear,judemd,linenum);                       //调用answ-operation函数
648     }
649 
650 }        
651         
652     
653 
654 
655 int main(int argc, char* argv[])
656 {
657     
658     printf("                         四则运算出题系统                      
");
659     print();
660     printf("最后计算正确%d道题,错误%d道题
",truenum,falsenum);
661     printf("
");
662     return 0;
663 }

三、运行结果

其他功能和上篇发的内容相同,此处就不在贴图啦

四、心得体会

 由于一开始写四则运算时没想太多,就是想着把这个简简单单的快完成就好了,所以写的程序的扩展性不好,导致后面在一点点的加功能时自己乱,读者看着更乱,虽然功能都实现了,但是代码显得没有条理,所以我想以后再遇到为题时不要先急着下手,要先想想大体思路以及框架,这样在操作起来后就会有条理,思路不乱了程序敲起来也会更顺手吧,对于编程我真的算是一个初学者了,和大伙分享一下我的经验教训吧。

五、psp0级

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

一、项目计划总结:

                                                                                表1  周活动总结表

                                    姓名:曹美娜                           日期:2015.03.15

日期/任务

听课

编写程序

阅读课本

准备考试

日总计

周日

周一 

300

45

345

周二

300

80

380

周三

100

100

200

周四

300

115

60

475

周五

周六

周总计

 

总计

800

268

95

1163

平均

800

268

95

1163

最大

800

268

95

1163

最小

800

268

95

1163

                                                                                         表2  时间记录日志

                                   学生  曹美娜                      日期  2015.03.19           

                                   教师  王建民                      课程  软件工程            

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/18

10:40

12:13

93

结队编程

3/19

17:00

18:20

80

编写四则运算程序

3/20

阅读梦断代码

看书

                                                                                       表3  缺陷记录日志         

                                  学  生      曹美娜                 

                                  日  期     2015.03.19                    

                                  教  员      王建民                 

                                  程序号                             

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3/18

0

结队编程

编译

1分钟

将输出语句写到内循环中

3/19

1

编程

编译

2分钟

全局变量应用不正确

原文地址:https://www.cnblogs.com/caomeina/p/4351363.html