• 四则运算系统(周娟、郑倩)


    组员:周娟、郑倩

    题目       

            请编写一个能自动生成小学四则运算题目的 “软件”。让程序能接受用户输入答案,并判断对错,最后统计错题数及正确的题数。

    需求分析:

            ●基本功能

                  ●实现-100到100以内的加法

                  ●实现-100到100以内的减法

                  ●实现-100到100以内的乘法

                  ●实现100以内的除法

            ●扩展功能

                  ●显示答卷

                  ●错题正解

                  ●系统评估

                  ●错题重做

                  ●退出系统

            ●新增功能

                  ●在之前的四则运算基础上,新增了负数(负整数最小不小于-100)参与加、减、乘的计算,并且有负数出现时,将其加括号显示。

    设计:

            ●程序由主函数和七个子函数构成

            ●主函数功能:首先调用calculate子函数,让运用者进入系统做题,题目随机产生(具体实现由相应子函数完成),共10道题。其次对已完成的试卷进行菜单处理(1表示显示答卷,2表示错题正解,3表示系统评估,4表示错题重做,0表示退出系统)       

           ●子函数包括void division(int *s1,int *s2,int *s3);void calculate();char menu();void evaluate();void answer();void Ranswer();void reform();分别用于计算除法、随机产生数学题给用户计算、制作菜单、系统作出评价、显示答卷、错题正解、错题重做。

    代码实现:

     1.cc.cpp文件

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <time.h>
      4 #include <ctype.h> 
      5 
      6 int sy[10],sr[10],jd[10],jg[10];                                                                       
      7 int fs=0;                 
      8 char fh[10];               
      9 
     10 void division(int *s1,int *s2,int *s3);
     11 void calculate();
     12 char menu();
     13 void evaluate();
     14 void answer();
     15 void Ranswer();
     16 void reform();
     17 
     18 void main()
     19 {
     20     int key=1;
     21     calculate();
     22     while(key)
     23     {
     24         switch(menu())
     25         {
     26         case  '1':  
     27             {  
     28                 printf("
    
    
    ");
     29                 answer();   
     30             }   
     31             break;
     32         case  '2':  
     33             {  
     34                 printf("
    
    
    ");
     35                 Ranswer();  
     36             }     
     37             break;
     38         case  '3':  
     39             {   
     40                 printf("
    
    
    ");
     41                 evaluate(); 
     42             }  
     43             break;
     44         case  '4':  
     45             {  
     46                 printf("
    
    
    ");
     47                 reform();
     48             }     
     49             break;
     50         case  '0':   
     51             {   
     52                 printf("
    您已退出四则运算系统,谢谢支持!
    
    ");
     53                 key=0;
     54             }
     55         }
     56     }
     57 }
     58 
     59 
     60 void division(int *s1,int *s2,int *s3)
     61 {
     62     int i,b=1,c,jg;         
     63     int cs[20]={0},sy,sr;         
     64     srand( (unsigned)time( NULL ) );
     65 fa: sy=rand()%100;
     66     if(sy==0)   
     67     {
     68         goto fa;
     69     }
     70     for(i=1;i<=sy;i++)         
     71     {    
     72         if(sy%i==0)  
     73         {  
     74             cs[b]=i;  b++;
     75         }
     76         else  continue;
     77     }                          
     78     c=rand()%b;            
     79     if(c==0)  
     80     {
     81         c=c+1;
     82     }
     83     sr=cs[c];
     84     jg=sy/sr;
     85     *s1=sy;                    
     86     *s2=sr;
     87     *s3=jg;
     88 }
     89 
     90 
     91 void calculate()
     92 {    
     93     int p;                    
     94     int i,gh;                 
     95     printf("欢迎来到四则运算测试系统!
    
    您将进行四则运算!Are you ready?Go!
    
    ");
     96     srand( (unsigned)time( NULL ) ); 
     97     
     98     
     99     for(i=0;i<10;i++)
    100     {
    101         sy[i]=rand()%201-100;              
    102         sr[i]=rand()%201-100;             
    103         p=rand()%4;                   
    104         
    105         if(p==0)                    
    106         {    
    107             fh[i]='+';
    108             if(sy[i]<0&&sr[i]>0)
    109             {
    110                 jg[i]=(sy[i])+sr[i];
    111             }
    112             else if(sy[i]>0&&sr[i]<0)
    113             {
    114                 jg[i]=sy[i]+(sr[i]);
    115             }
    116             else if(sy[i]<0&&sr[i]<0)
    117             {
    118                 jg[i]=(sy[i])+(sr[i]);
    119             }
    120             else
    121             {
    122                 jg[i]=sy[i]+sr[i]; 
    123             }
    124         }        
    125         else  if(p==1)                  
    126         {
    127             fh[i]='-'; 
    128             if(sy[i]<0&&sr[i]>0)
    129             {
    130                 jg[i]=(sy[i])-sr[i];
    131             }
    132             else if(sy[i]>0&&sr[i]<0)
    133             {
    134                 jg[i]=sy[i]-(sr[i]);
    135             }
    136             else if(sy[i]<0&&sr[i]<0)
    137             {
    138                 jg[i]=(sy[i])-(sr[i]);
    139             }
    140             else
    141             {
    142                 jg[i]=sy[i]-sr[i];
    143             }
    144         }
    145         else  if(p==2)                  
    146         {   fh[i]='*'; 
    147         if(sy[i]<0&&sr[i]>0)
    148         {
    149             jg[i]=(sy[i])*sr[i];
    150         }
    151         else if(sy[i]>0&&sr[i]<0)
    152         {
    153             jg[i]=sy[i]*(sr[i]);
    154         }
    155         else if(sy[i]<0&&sr[i]<0)
    156         {
    157             jg[i]=(sy[i])*(sr[i]);
    158         }
    159         else
    160         {
    161             jg[i]=sy[i]*sr[i];
    162         } 
    163         }                   
    164         else  if(p==3)
    165         {   
    166             fh[i]='/';                  
    167             division(&sy[i],&sr[i],&jg[i]);  
    168         }
    169         if(sy[i]<0&&sr[i]<0)
    170         {
    171             printf("第%2d题:(%2d) %c (%2d) = ",i+1,sy[i],fh[i],sr[i]);
    172         }
    173         if(sy[i]<0&&sr[i]>0)
    174         {
    175             printf("第%2d题:(%2d) %c %2d = ",i+1,sy[i],fh[i],sr[i]);
    176         }
    177         if(sy[i]>0&&sr[i]<0)
    178         {
    179             printf("第%2d题:%2d %c (%2d) = ",i+1,sy[i],fh[i],sr[i]);
    180         }
    181         if(sy[i]>0&&sr[i]>0)
    182         {
    183             printf("第%2d题:%2d %c %2d = ",i+1,sy[i],fh[i],sr[i]);
    184         }
    185         scanf("%d",&jd[i]);              
    186         if(jd[i]==jg[i]) 
    187         {
    188             fs+=10;
    189         }
    190     }                                    
    191     printf("
    测试结束!
    
    ");    
    192 }
    193 
    194 
    195 char menu()
    196 {
    197     char  c='0';                    
    198     printf("
    ************ 四则运算测试系统 **************
    
    
    ");
    199     printf("          1.显示答卷        2.错题正解
    
    ");
    200     printf("          3.系统评估        4.错题重做
    
    ");
    201     printf("          0.退出系统
    
    "); 
    202     printf("
    ********************************************");
    203     printf("
    请输入选项(0-4):");      
    204     do
    205     {   scanf("%c",&c);   }          
    206     while(!(c>='0'&&c<='4'));              
    207     return c;                        
    208 }
    209 
    210 
    211 void evaluate()
    212 {
    213     printf("您的成绩是%d分.
    ",fs);  
    214     switch(fs)                                      
    215     {  case  100: printf("Very good!不要骄傲哦!
    ");  break;
    216        case  90:  printf("优秀!恭喜您取得了好成绩!
    ");  break;
    217        case  80:
    218        case  70:  printf("良好!请继续努力,下次取得更好的成绩!
    ");  break;
    219        case  60:  printf("及格!成绩不太理想哟!再接再励吧!
    ");  break;
    220        case  50:
    221        case  40:
    222        case  30:
    223        case  20:
    224        case  10:  printf("多花点功夫吧,不然你会后悔的!!
    ");  break;
    225        case  0:   printf("太差劲了!再不努力的话,会后悔的哦!再做一次吧!!!!
    ");  break;
    226     }
    227     printf("
    
    ");
    228 }           
    229 
    230 
    231 void answer()
    232 {
    233     int j;
    234     printf("您的答卷为:
    ");
    235     for(j=0;j<10;j++)
    236     {
    237         if(sy[j]<0&&sr[j]<0&&jd[j]<0)
    238         {
    239             printf("(%2d) %c (%2d) = (%2d)
    ",sy[j],fh[j],sr[j],jd[j]);
    240         }
    241         if(sy[j]<0&&sr[j]<0&&jd[j]>0)
    242         {
    243             printf("(%2d) %c (%2d) = %2d
    ",sy[j],fh[j],sr[j],jd[j]);
    244         }
    245         if(sy[j]<0&&sr[j]>0&&jd[j]<0)
    246         {
    247             printf("(%2d) %c %2d = (%2d)
    ",sy[j],fh[j],sr[j],jd[j]);
    248         }
    249         if(sy[j]>0&&sr[j]<0&&jd[j]<0)
    250         {
    251             printf("%2d %c (%2d) = (%2d)
    ",sy[j],fh[j],sr[j],jd[j]);
    252         }
    253         if(sy[j]>0&&sr[j]>0&&jd[j]<0)
    254         {
    255             printf("%2d %c %2d = (%2d)
    ",sy[j],fh[j],sr[j],jd[j]);
    256         }
    257         if(sy[j]>0&&sr[j]<0&&jd[j]>0)
    258         {
    259             printf("%2d %c (%2d) = %2d
    ",sy[j],fh[j],sr[j],jd[j]);
    260         }
    261         if(sy[j]<0&&sr[j]>0&&jd[j]>0)
    262         {
    263             printf("(%2d) %c %2d = %2d
    ",sy[j],fh[j],sr[j],jd[j]);
    264         }
    265         if(sy[j]>0&&sr[j]>0&&jd[j]>0)
    266         {
    267             printf("%2d %c %2d = %2d
    ",sy[j],fh[j],sr[j],jd[j]);
    268         }
    269     }
    270     printf("
    
    ");
    271 }
    272 
    273 
    274 void Ranswer()
    275 {
    276     int k;
    277     printf("您答错的题的正确答案为:
    ");
    278     for(k=0;k<10;k++)
    279     {   
    280         if(jd[k]==jg[k])  
    281         {
    282             continue;
    283         }
    284         else
    285         {
    286             if(sy[k]<0&&sr[k]<0&&jg[k]<0)
    287             {
    288                 printf("(%2d) %c (%2d) = (%2d)
    ",sy[k],fh[k],sr[k],jg[k]);
    289             }
    290             if(sy[k]<0&&sr[k]<0&&jg[k]>0)
    291             {
    292                 printf("(%2d) %c (%2d) = %2d
    ",sy[k],fh[k],sr[k],jg[k]);
    293             }
    294             if(sy[k]<0&&sr[k]>0&&jg[k]<0)
    295             {
    296                 printf("(%2d) %c %2d = (%2d)
    ",sy[k],fh[k],sr[k],jg[k]);
    297             }
    298             if(sy[k]>0&&sr[k]<0&&jg[k]<0)
    299             {
    300                 printf("%2d %c (%2d) = (%2d)
    ",sy[k],fh[k],sr[k],jg[k]);
    301             }
    302             if(sy[k]>0&&sr[k]>0&&jg[k]<0)
    303             {
    304                 printf("%2d %c %2d = (%2d)
    ",sy[k],fh[k],sr[k],jg[k]);
    305             }
    306             if(sy[k]>0&&sr[k]<0&&jg[k]>0)
    307             {
    308                 printf("%2d %c (%2d) = %2d
    ",sy[k],fh[k],sr[k],jg[k]);
    309             }
    310             if(sy[k]<0&&sr[k]>0&&jg[k]>0)
    311             {
    312                 printf("(%2d) %c %2d = %2d
    ",sy[k],fh[k],sr[k],jg[k]);
    313             }
    314             if(sy[k]>0&&sr[k]>0&&jg[k]>0)
    315             {
    316                 printf("%2d %c %2d = %2d
    ",sy[k],fh[k],sr[k],jg[k]);
    317             }
    318             
    319         }
    320     }
    321     printf("
    
    ");
    322 }
    323 
    324 
    325 void reform()
    326 {
    327     int m,n;
    328     printf("以下是您做错的题,请重做:
    ");
    329     for(m=0;m<10;m++)                      
    330         if(jd[m]==jg[m]) 
    331         {
    332             continue;  
    333         }
    334         else  
    335         {  
    336             if(sy[m]<0&&sr[m]<0)
    337             {
    338                 printf("(%2d) %c (%2d) = ",sy[m],fh[m],sr[m]);
    339             }
    340             if(sy[m]<0&&sr[m]>0)
    341             {
    342                 printf("(%2d) %c %2d = ",sy[m],fh[m],sr[m]);
    343             }
    344             if(sy[m]>0&&sr[m]<0)
    345             {
    346                 printf("%2d %c (%2d) = ",sy[m],fh[m],sr[m]);
    347             }
    348             if(sy[m]>0&&sr[m]>0)
    349             {
    350                 printf("%2d %c %2d = ",sy[m],fh[m],sr[m]);
    351             }
    352             scanf("%d",&jd[m]);
    353             if(jd[m]==jg[m]) 
    354             {
    355                 printf("恭喜!您做对了!
    ");
    356             }
    357             else                                        
    358             {   
    359                 for(n=0;n<3;n++)
    360                 {  printf("仍未做对!您只有%d次机会了哦:   ",2-n);
    361                 if(sy[m]<0&&sr[m]<0)
    362                 {
    363                     printf("(%2d) %c (%2d) = ",sy[m],fh[m],sr[m]);
    364                 }
    365                 if(sy[m]<0&&sr[m]>0)
    366                 {
    367                     printf("(%2d) %c %2d = ",sy[m],fh[m],sr[m]);
    368                 }
    369                 if(sy[m]>0&&sr[m]<0)
    370                 {
    371                     printf("%2d %c (%2d) = ",sy[m],fh[m],sr[m]);
    372                 }
    373                 if(sy[m]>0&&sr[m]>0)
    374                 {
    375                     printf("%2d %c %2d = ",sy[m],fh[m],sr[m]);
    376                 }
    377                 
    378                 scanf("%d",&jd[m]);                         
    379                 if(jd[m]==jg[m])   
    380                 { 
    381                     printf("恭喜!您做对了!
    ");  break;
    382                 }
    383                 }
    384                 
    385             }                                       
    386         }                                                
    387         printf("
    
    ");
    388 }

     2.cc.h文件 

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <time.h>
     4 #include <ctype.h>
     5 
     6 int sy[10],sr[10],jd[10],jg[10]; 
     7 int fs=0; 
     8 char fh[10];
     9 
    10 void division(int *s1,int *s2,int *s3);
    11 void calculate();
    12 char menu();
    13 void evaluate();
    14 void answer();
    15 void Ranswer();
    16 void reform();

     程序截图:

     

    分析与总结:

             ●PSP耗时与总结

    PSP Personal Software Process Stage Time(h) Time(%)
    ●Design ●具体设计 5 9.7
    ●Coding ●具体编码 26 50.5
    ●Code Review ●代码复审 5 9.7
    ●Test ●测试(自测,修改代码) 12 23.3

    ●Postmortem & Process

    Improvement Plan

    ●事后总结,并提出过程改进计划 3.5 6.8

             ●分析

                    ●针对四则运算的计算,采用随机数产生参与运算的数和运算符(见代码101-102行),每一次自动生成10道数学题目,运算完成后进入菜单选项,对答卷做相应的操作。

                    ●对于加法、减法和乘法新增的负数参与计算。

             ●总结

                    ●在原代码的基础上新增负数功能的时候,小组二人认真讨论,精诚合作,在一个小时左右将代码完善,调整缩进,使其符合代码规范。但是,对于单元测试我们还是不懂,看书也不明白该怎么做。

  • 相关阅读:
    保研练习题(5)
    保研练习题(4)
    保研练习题(3)
    保研练习题(2)
    保研练习题(1)
    基于邻接矩阵的拓扑排序--升级版
    基于邻接矩阵的拓扑排序
    vue 父组件调用子组件的函数
    vue 子组件调用父组件的函数
    JS 打乱数组顺序
  • 原文地址:https://www.cnblogs.com/zj326681/p/4409794.html
Copyright © 2020-2023  润新知