目录
- 结对对象
- 任务要求
- 分工说明
- 设计思路
- 遇到的问题
- 源代码
- 运行成果
- 总结
结对对象
- 姓名: 侯熙磊
- 班级: 土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函数,导致出的题目每次都是一样的也就是伪随机数,最后百度上查到原因和解决方法才改好。
运行结果
总结
写程序时必须要细心,不能输错一个字符标点。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。这次代码编写在反反复复检查排错修改中给了手残的我很大的教训。