码迷,mamicode.com
首页 > 其他好文 > 详细

四则运算系统

时间:2015-04-09 21:30:30      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

题目       

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

需求分析:

        ●基本功能

              ●实现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 #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:   {   printf("\n\n\n"); answer();    }    break;
 27             case  2:   {   printf("\n\n\n"); Ranswer();  }     break;
 28             case  3:   {   printf("\n\n\n"); evaluate();   }   break;
 29             case  4:   {   printf("\n\n\n"); reform();  }      break;
 30             case  0:   {   printf("\n您已退出四则运算系统,谢谢支持!\n\n");key=0;}
 31         }
 32     }
 33 }
 34 
 35 
 36 void division(int *s1,int *s2,int *s3)
 37 {
 38     int i,b=1,c,jg;         
 39     int cs[20]={0},sy,sr;         
 40     srand( (unsigned)time( NULL ) );
 41     fa: sy=rand()%100;
 42     if(sy==0)   goto fa;
 43     for(i=1;i<=sy;i++)         
 44     {    
 45         if(sy%i==0)  {  cs[b]=i;  b++;}
 46         else  continue;
 47     }                          
 48     c=rand()%b;            
 49     if(c==0)  c=c+1;
 50     sr=cs[c];
 51     jg=sy/sr;
 52     *s1=sy;                    
 53     *s2=sr;
 54     *s3=jg;
 55 }
 56 
 57 
 58 void calculate()
 59 {    
 60     int p;                    
 61     int i,gh;                 
 62     printf("欢迎来到四则运算测试系统!\n\n您将进行的是100以内数字的四则运算!Are you ready?Go!\n\n");
 63     srand( (unsigned)time( NULL ) ); 
 64     
 65     
 66     for(i=0;i<10;i++)
 67     {
 68         sy[i]=rand()%100;              
 69         sr[i]=rand()%100;              
 70         p=rand()%4;                   
 71         
 72         if(p==0)                    
 73         {    fh[i]=+; jg[i]=sy[i]+sr[i]; }        
 74         else  if(p==1)                  
 75         {    fh[i]=-;  
 76         if(sy[i]<sr[i]) { gh=sy[i]; sy[i]=sr[i];sr[i]=gh; }  
 77             jg[i]=sy[i]-sr[i];                  
 78         }    
 79         else  if(p==2)                  
 80         {   fh[i]=*; jg[i]=sy[i]*sr[i]; }                   
 81         else  if(p==3)
 82         {   
 83             fh[i]=/;                  
 84             division(&sy[i],&sr[i],&jg[i]);  
 85         }
 86         printf("第%2d题: %2d %c %2d =  ",i+1,sy[i],fh[i],sr[i]);  
 87 
 88         scanf("%d",&jd[i]);              
 89         if(jd[i]==jg[i])  fs+=10;        
 90         }                                    
 91     printf("\n测试结束!\n\n");    
 92 }
 93 
 94    
 95 char menu()
 96 {
 97    char  c=0;                    
 98    printf("\n************ 四则运算测试系统 **************\n\n\n");
 99    printf("          1.显示答卷        2.错题正解\n\n");
100    printf("          3.系统评估        4.错题重做\n\n");
101    printf("          0.退出系统\n\n"); 
102    printf("\n********************************************");
103    printf("\n请输入选项(0-4):");      
104    do
105    {   scanf("%c",&c);   }          
106    while(!(c>=0&&c<=4));              
107    return c;                        
108 }
109 
110 
111 void evaluate()
112 {
113     printf("您的成绩是%d分.\n",fs);  
114     switch(fs)                                      
115     {  case  100: printf("Very good!不要骄傲哦!\n");  break;
116        case  90:  printf("优秀!恭喜您取得了好成绩!\n");  break;
117        case  80:
118        case  70:  printf("良好!请继续努力,下次取得更好的成绩!\n");  break;
119        case  60:  printf("及格!成绩不太理想哟!再接再励吧!\n");  break;
120        case  50:
121        case  40:
122        case  30:
123        case  20:
124        case  10:  printf("多花点功夫吧,不然你会后悔的!!\n");  break;
125        case  0:   printf("太差劲了!再不努力的话,会后悔的哦!再做一次吧!!!!\n");  break;
126     }
127     printf("\n\n");
128 }           
129 
130 
131 void answer()
132 {
133     int j;
134     printf("您的答卷为:\n");
135     for(j=0;j<10;j++)
136         printf("%2d %c %2d = %2d\n",sy[j],fh[j],sr[j],jd[j]);
137     printf("\n\n");
138 }
139 
140 
141 void Ranswer()
142 {
143     int k;
144     printf("您答错的题的正确答案为:\n");
145     for(k=0;k<10;k++)
146     {   if(jd[k]==jg[k])   continue;
147         else
148         {
149             printf("%2d %c %2d = %2d\n",sy[k],fh[k],sr[k],jg[k]);
150         }
151     }
152     printf("\n\n");
153 }
154 
155 
156 void reform()
157 {
158     int m,n;
159     printf("以下是您做错的题,请重做:\n");
160     for(m=0;m<10;m++)                      
161         if(jd[m]==jg[m])    continue;       
162         else  
163         {   printf("%2d %c %2d =",sy[m],fh[m],sr[m]);
164             scanf("%d",&jd[m]);
165             if(jd[m]==jg[m])  printf("恭喜!您做对了!\n");
166             else                                        
167             {   
168                 for(n=0;n<3;n++)
169                 {  printf("仍未做对!您只有%d次机会了哦:   ",2-n);
170                       printf("%2d %c %2d =",sy[m],fh[m],sr[m]);
171                           scanf("%d",&jd[m]);                         
172                           if(jd[m]==jg[m])   { printf("恭喜!您做对了!\n");  break;}
173                 }
174             
175              }                                       
176         }                                                
177     printf("\n\n");
178 }

 程序截图:

 技术分享

技术分享技术分享技术分享技术分享技术分享

分析与总结:

         ●PSP耗时与总结

PSP Personal Software Process Stage Time(h) Time(%)
●Design ●具体设计 5 10.6
●Coding ●具体编码 23 49
●Code Review ●代码复审 4 8.5
●Test ●测试(自测,修改代码) 12 25.5

●Postmortem & Process

Improvement Plan

●事后总结,并提出过程改进计划 3 6.4

 

 

 

 

 

 

 

         ●分析

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

                ●当编写错题正解的子函数时发现每一次产生的随机数是不同的,不知道如何去记录之前的数据,后来问了老师也翻阅了资料才勉强做出来,还需要多理解。

         ●总结

                ●设计理念来源于曾经看过的一篇文章。编写代码的时间太长,而且是咨询老师,翻阅资料,拼拼凑凑才写出来的。测试时也错误百出,花了十多个小时才将它们弄出来。

四则运算系统

标签:

原文地址:http://www.cnblogs.com/zj326681/p/4409794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!