心欲呐喊

博客园 首页 新随笔 联系 订阅 管理

目录

  • 结对对象
  • 任务要求
  • 分工说明
  • 设计思路
  • 遇到的问题
  • 源代码
  • 运行成果
  • 总结

 

结对对象

  •  姓名:   侯熙磊  
  •  班级:  土1603-1班、
  •  学号:  20160672

  •  简介: 性别男。爱好下象棋,踢足球。在组内负责程序修改和测试,一般都是有很多BUG的,还要改进一下,显得更加美观。

 

任务要求

  •  实现在线答题。
  •  答题结束后,可以判断对错。
  •  并将错题的结果保存起来。

分工说明

 

  • 黄睿麒:前期大部分代码的编写,中期文件处理的代码实现,后期软件图标的设计,解决了负数和正负数计算分开问题、将答题过程导出保存TXT文件、统计错题给出百分制分数的及格和不及格问题。
  • 侯熙磊:前期小部分代码的编写文件处理和测试类的思路提供,后期修改和完善代码内容和规范。提供了两个数运算时正负时除数不为零的代码;测试代码和选择正数运算时,除法有负数的BUG修复;测试代码和BUG提出和修改。

 

设计思路

     本次实验运用选择和循环将运算分开简化。首先将所需四则运算中的负数分割出来,运用switch和case进行选择。在生成随机数时运用srand配合rand()生成真随机数,和运算符号。出题和答案则使用if选择和for循环进行这次难点在我看来是在将数据输出上,运用fprintf()函数将所需结果导入到txt格式文件中。

源代码

复制代码
  1 #include <stdio.h> 
  2 #include <stdlib.h>
  3 #include <time.h>
  4 int main()
  5  { 
  6     FILE *fpt;
  7     fpt = fopen("四则运算.txt","w");
  8     fprintf(fpt,"四则运算在线答题错题记录\n");
  9     int k,n,m,i,s,j,g,h;
 10     n=5;
 11     float score=0;
 12     int a,b;
 13     int answers[1000]={0},user_answer[1000]={0};
 14     a=0;
 15     b=0; 
 16     printf("\n请输入数字类型(1.正数 2.正负数) -1或其他数字为退出程序: ");
 17     scanf("%d",&h);
 18     fprintf(fpt,"\n请输入数字类型(1.正数 2.正负数) -1或其他数字为退出程序:  %d ",h);
 19     
 20     
 21     switch(h)
 22     {
 23     case 1:
 24         {
 25             printf("请输入题目数(1-1000)");
 26             scanf("%d",&k);    
 27             if (k<1||k>1000)   
 28             { 
 29                 printf("\n超出允许范围\n"); 
 30                 printf("请再次输入题目数\n"); 
 31                 scanf("%d",&k); 
 32             } 
 33             printf("请选择出题方式:0.加法 1.减法 2.乘法 3.除法 4.随机\n");
 34             scanf("%d",&m); 
 35             if (m<0||m>4)   
 36             { 
 37                 printf("\n出题方式选择错误\n"); 
 38                 printf("请再次输入出题方式前序号\n"); 
 39                 scanf("%d",&m); 
 40             } 
 41             printf("\n********************开始答题************************\n");  
 42             fprintf(fpt,"\n********************开始答题************************\n");  
 43             srand((int)time(0));
 44             for (i=0;i<k;i++)
 45             {  
 46                 a=rand()%100;   
 47                 b=rand()%100;
 48                 while(a<-100||a>100||b<-100||b>100)   
 49                 {    
 50                     a=rand()%201-100;   
 51                     b=rand()%201-100;
 52                 }
 53                 a=a;
 54                 b=b;
 55                 if(m==4)    
 56                     n=rand()%4;  
 57                 if (m==0||n==0)                              
 58                 {    
 59                     printf("\n第%d题:%d+%d=",i+1,a,b);
 60                     fprintf(fpt,"\n第%d题:%d+%d=",i+1,a,b);
 61                     scanf("%d",&user_answer[i]);
 62                     answers[i]=a+b;  
 63                 }   
 64                 if (m==1||n==1)
 65                 {   
 66                     if (a>b)  
 67                     {   
 68                         printf("\n第%d题:%d-%d=",i+1,a,b);
 69                         fprintf(fpt,"\n第%d题:%d-%d=",i+1,a,b);
 70                         scanf("%d",&user_answer[i]);    
 71                         answers[i]=a-b;  
 72                     } 
 73                     else   
 74                     {       
 75                         printf("\n第%d题:%d-%d=",i+1,b,a);
 76                         fprintf(fpt,"\n第%d题:%d-%d=",i+1,b,a); 
 77                         scanf("%d",&user_answer[i]);  
 78                         answers[i]=b-a;
 79                     } 
 80                 }
 81                 if (m==2||n==2)    
 82                 {    
 83                     printf("\n第%d题:%d*%d=",i+1,a,b); 
 84                     fprintf(fpt,"\n第%d题:%d*%d=",i+1,a,b); 
 85                     scanf("%d",&user_answer[i]);   
 86                     answers[i]=a*b;   
 87                 } 
 88                 if (m==3||n==3)  
 89                 {      
 90                     s=a*b;        
 91                     while(s<-100||s>100||a==0)   
 92                     {
 93                         a=rand()%100;   
 94                         b=rand()%100;
 95                         s=a*b;
 96                     }   
 97                     printf("\n第%d题:%d/%d=",i+1,s,a);
 98                     fprintf(fpt,"\n第%d题:%d/%d=",i+1,s,a);
 99                     scanf("%d",&user_answer[i]);
100                     answers[i]=s/a;
101                 } 
102             } 
103             printf("\n答题结果和正确答案:\n");  
104             fprintf(fpt,"\n答题结果和正确答案:\n");  
105             for (i=0;i<k;i++)                                                  
106             { 
107                 if (user_answer[i]==answers[i]) 
108                 { 
109                     printf("%d:正确 %d\n",i+1,answers[i]);
110                     fprintf(fpt,"%d:正确 %d\n",i+1,answers[i]);
111                     score++; 
112                 }
113                 else printf("%d:错误 %d\n",i+1,answers[i]);
114                 fprintf(fpt,"%d:错误 %d\n",i+1,answers[i]);
115             }  
116             score=100*score/k;  
117             printf("\n总得分(百分制):%f\n",score);
118             fprintf(fpt,"\n总得分(百分制):%f\n",score);
119             if (score<60) {printf("很遗憾!你的分数不及格,继续努力\n"); 
120             fprintf(fpt,"很遗憾!你的分数不及格,继续努力\n"); 
121             }
122             else 
123             {
124                 printf("恭喜!你的成绩合格\n"); 
125                 fprintf(fpt,"恭喜!你的成绩合格\n"); 
126             }
127             printf("*****************************************************\n");
128             fprintf(fpt,"*****************************************************\n");
129             fclose(fpt);
130             printf("继续答题请输入任意数字\n结束请点击右上角关闭程序\n");
131             scanf("%d",&g);
132             return main();
133 }
134 case 2:
135     {
136         printf("请输入题目数(1-1000)");
137         scanf("%d",&k);    
138         if (k<1||k>1000)   
139         { 
140             printf("\n超出允许范围\n"); 
141             printf("请再次输入题目数\n"); 
142             scanf("%d",&k); 
143         } 
144         printf("请选择出题方式:0.加法 1.减法 2.乘法 3.除法 4.随机\n");
145         scanf("%d",&m); 
146         if (m<0||m>4)   
147         { 
148             printf("\n出题方式选择错误\n"); 
149             printf("请再次输入出题方式前序号\n"); 
150             scanf("%d",&m); 
151         } 
152         printf("\n********************开始答题************************\n");  
153         fprintf(fpt,"\n********************开始答题************************\n");  
154         srand((int)time(0));
155         for (i=0;i<k;i++)
156         {  
157             a=rand()%201-100;   
158             b=rand()%201-100;
159             while(a<-100||a>100||b<-100||b>100)   
160             {    
161                 a=rand()%201-100;   
162                 b=rand()%201-100;
163             }
164             a=a;
165             b=b;
166             if(m==4)    
167                 n=rand()%4;  
168             if (m==0||n==0)                              
169             {    
170                 printf("\n第%d题:%d+%d=",i+1,a,b);
171                 fprintf(fpt,"\n第%d题:%d+%d=",i+1,a,b);
172                 scanf("%d",&user_answer[i]);
173                 answers[i]=a+b;  
174             }   
175             if (m==1||n==1)
176             {   
177                 if (a>b)  
178                 {   
179                     printf("\n第%d题:%d-%d=",i+1,a,b);
180                     fprintf(fpt,"\n第%d题:%d-%d=",i+1,a,b);
181                     scanf("%d",&user_answer[i]);    
182                     answers[i]=a-b;  
183                 } 
184                 else   
185                 {       
186                     printf("\n第%d题:%d-%d=",i+1,b,a);
187                     fprintf(fpt,"\n第%d题:%d-%d=",i+1,b,a); 
188                     scanf("%d",&user_answer[i]);  
189                     answers[i]=b-a;
190                 }
191             }
192             if (m==2||n==2)    
193             {    
194                 printf("\n第%d题:%d*%d=",i+1,a,b); 
195                 fprintf(fpt,"\n第%d题:%d*%d=",i+1,a,b); 
196                 scanf("%d",&user_answer[i]);   
197                 answers[i]=a*b;   
198             } 
199             if (m==3||n==3)  
200             {      
201                 s=a*b;        
202                 while(s<-100||s>100||a==0)   
203                 {
204                     a=rand()%201-100;   
205                     b=rand()%201-100;
206                     s=a*b;
207                 }   
208                 printf("\n第%d题:%d/%d=",i+1,s,a);
209                 fprintf(fpt,"\n第%d题:%d/%d=",i+1,s,a);
210                 scanf("%d",&user_answer[i]);
211                 answers[i]=s/a;
212             } 
213         } 
214         printf("\n答题结果和正确答案:\n");  
215         fprintf(fpt,"\n答题结果和正确答案:\n");  
216         for (i=0;i<k;i++)                                                  
217         { 
218             if (user_answer[i]==answers[i]) 
219             { 
220                 printf("%d:正确 %d\n",i+1,answers[i]);
221                 fprintf(fpt,"%d:正确 %d\n",i+1,answers[i]);
222                 score++; 
223             } 
224             else printf("%d:错误 %d\n",i+1,answers[i]);
225             fprintf(fpt,"%d:错误 %d\n",i+1,answers[i]);
226         }  
227         score=100*score/k;  
228         printf("\n总得分(百分制):%f\n",score);
229         fprintf(fpt,"\n总得分(百分制):%f\n",score);
230         if (score<60) {printf("很遗憾!你的分数不及格,继续努力\n"); 
231         fprintf(fpt,"很遗憾!你的分数不及格,继续努力\n"); 
232         }
233         else 
234         {
235             printf("恭喜!你的成绩合格\n"); 
236             fprintf(fpt,"恭喜!你的成绩合格\n");
237         }
238         printf("*****************************************************\n");
239         fprintf(fpt,"*****************************************************\n");
240         fclose(fpt);
241         printf("继续答题请输入任意数字\n结束请点击右上角关闭程序\n");
242         scanf("%d",&g);
243         return main();
244      }
245      while(h!=-1);
246 }
247 }
复制代码

 

 

 

遇到的问题

 

     本程序在刚开始调试时有许多错误,出现过不能运行、不能随机出现四则运算、不会输出正确结果、选择乘法却出现减法等等问题。耗费时间最多是在于运用fprintf函数上,之前没使用过用的时候就抓麻了。在生成随机数的时侯最开始忘记使用srand函数,导致出的题目每次都是一样的也就是伪随机数,最后百度上查到原因和解决方法才改好。

 

运行结果

     

        

       

       

 

 

 

 

总结

      写程序时必须要细心,不能输错一个字符标点。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。这次代码编写在反反复复检查排错修改中给了手残的我很大的教训。

posted on 2018-10-28 15:44  心欲呐喊  阅读(277)  评论(0编辑  收藏  举报