四则运算(3)--答题小系统
一、实验题目
在之前的基础上做一个小答题系统,要求:
1.可以判断对错;
2.可以统计做对的和做错的个数。
二、设计思路
判断对错就是将用户输入的数和正确的值相比较,正确输出√,错误输出×;
统计个数就是设置两个全局变量,让它去统计对错的个数。
三、源代码
1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "time.h" 4 int correct=0;//声明全局变量correct 5 int wrong=0;//声明全局变量wrong 6 int Add(int num1,int num2) 7 { 8 int uresult,cresult; 9 scanf("%d",&uresult); 10 cresult=num1+num2; 11 if(cresult==uresult) 12 { 13 printf("\t√"); 14 correct++; 15 } 16 else 17 { 18 printf("\t×"); 19 wrong++; 20 } 21 return 0; 22 } 23 int Sub(int num1,int num2) 24 { 25 int uresult,cresult; 26 scanf("%d",&uresult); 27 cresult=num1-num2; 28 if(cresult==uresult) 29 { 30 printf("\t√"); 31 correct++; 32 } 33 else 34 { 35 printf("\t×"); 36 wrong++; 37 } 38 return 0; 39 } 40 int Mult(int num1,int num2) 41 { 42 int uresult,cresult; 43 scanf("%d",&uresult); 44 cresult=num1*num2; 45 if(cresult==uresult) 46 { 47 printf("\t√"); 48 correct++; 49 } 50 else 51 { 52 printf("\t×"); 53 wrong++; 54 } 55 return 0; 56 } 57 int Divi(int num1,int num2) 58 { 59 double uresult,cresult; 60 scanf("%g",&uresult); 61 cresult=num1/num2; //取整 62 if(cresult==uresult) 63 { 64 printf("\t√"); 65 correct++; 66 } 67 else 68 { 69 printf("\t×"); 70 wrong++; 71 } 72 return 0; 73 } 74 int SetQuestion(int cheng,int number,int line,int plural,int scope,int konghang) 75 { 76 int num1,num2,oper,i; 77 srand(time(NULL)); //i为循环次数 78 printf("我们提供一下功能: \n"); 79 printf(" 1.题目的数值范围(暂不支持小数)\n"); 80 printf(" 2.题目的数量 \n"); 81 printf(" 3.打印时每行题的数量 \n"); 82 printf(" 4.答案中会不会出现负数的结果 \n"); 83 printf(" 5.题目中是否会出现乘除运算 \n"); 84 printf(" 6.打印时每行的间隔 \n"); 85 printf("请输入数值范围:"); 86 scanf("%d",&scope); 87 printf("请选择出题数量:"); 88 scanf("%d",&number); //oper为题目数量 89 printf("请输入每行题的数量:"); 90 scanf("%d",&line); //line为每行题的数量 91 printf("答案是否有负数(1为有,0为没有):"); 92 scanf("%d",&plural); //plural是否是负数 93 while(plural!=0 && plural!=1) //判断用户是否按要求输入 94 { 95 printf("sorry!输入错误,请按要求输入:"); 96 scanf("%d",&plural); 97 } 98 99 printf("是否有乘除运算(1为有,0为没有):"); 100 scanf("%d",&cheng); 101 while(cheng!=0 && cheng!=1) //判断用户是否按要求输入 102 { 103 printf("sorry!输入错误,请按要求输入:"); 104 scanf("%d",&cheng); 105 } 106 printf("中间有几个空行:"); 107 scanf("%d",&konghang); 108 if(cheng==1) 109 { 110 if(plural==0) 111 { 112 for(i=1;i<=number;i++) 113 { 114 num1=rand()%scope; 115 num2=rand()%scope; 116 oper=rand()%4; 117 printf("(%d)",i); 118 switch(oper) 119 { 120 case 0: 121 printf("%d+%d=\t",num1,num2); 122 break; 123 case 1: 124 if(num1>=num2) 125 printf("%d-%d=\t",num1,num2); 126 else 127 printf("%d-%d=\t",num2,num1); 128 break; 129 case 2: 130 printf("%d*%d=\t",num1,num2); 131 break; 132 case 3: 133 if(num2==0) 134 printf("%d/%d=\t",num2,num1); 135 else 136 printf("%d/%d=\t",num1,num2); 137 break; 138 default: 139 { 140 printf("出错啦~~~"); 141 } 142 } 143 if(i%line==0) 144 { 145 for(int p=1;p<=konghang;p++) 146 { 147 printf("\n"); 148 } 149 } 150 } 151 152 } 153 else 154 { 155 for(i=1;i<=number;i++) 156 { 157 num1=rand()%scope; 158 num2=rand()%scope; 159 oper=rand()%4; 160 printf("(%d)",i); 161 switch(oper) 162 { 163 case 0: 164 printf("%d+%d=\t",num1,num2); 165 break; 166 case 1: 167 printf("%d-%d=\t",num1,num2); 168 break; 169 case 2: 170 printf("%d*%d=\t",num1,num2); 171 break; 172 case 3: 173 if(num2==0) 174 printf("%d/%d=\t",num2,num1); 175 else 176 printf("%d/%d=\t",num1,num2); 177 break; 178 default: 179 { 180 printf("出错啦~~~"); 181 } 182 } 183 if(i%line==0) 184 { 185 for(int p=1;p<=konghang;p++) 186 { 187 printf("\n"); 188 } 189 } 190 } 191 } 192 193 } 194 else 195 { 196 if(plural==0) 197 { 198 for(i=1;i<=number;i++) 199 { 200 num1=rand()%scope; 201 num2=rand()%scope; 202 oper=rand()%2; 203 printf("(%d)",i); 204 switch(oper) 205 { 206 case 0: 207 printf("%d+%d=\t",num1,num2); 208 break; 209 case 1: 210 if(num1>=num2) 211 printf("%d-%d=\t",num1,num2); 212 else 213 printf("%d-%d=\t",num2,num1); 214 break; 215 default: 216 { 217 printf("出错啦~~~"); 218 } 219 } 220 if(i%line==0) 221 { 222 for(int p=1;p<=konghang;p++) 223 { 224 printf("\n"); 225 } 226 } 227 } 228 229 } 230 else 231 { 232 for(i=1;i<=number;i++) 233 { 234 num1=rand()%scope; 235 num2=rand()%scope; 236 oper=rand()%2; 237 printf("(%d)",i); 238 switch(oper) 239 { 240 case 0: 241 printf("%d+%d=\t",num1,num2); 242 break; 243 case 1: 244 printf("%d-%d=\t",num1,num2); 245 break; 246 default: 247 { 248 printf("出错啦~~~"); 249 } 250 } 251 if(i%line==0) 252 { 253 for(int p=1;p<=konghang;p++) 254 { 255 printf("\n"); 256 } 257 } 258 } 259 } 260 261 } 262 printf("\n"); 263 264 return 0; 265 } 266 267 int AnswerQuestion(int cheng,int number,int line,int plural,int scope,int konghang){ 268 int num1,num2,oper,i; 269 srand(time(NULL)); 270 //a,b为运算数,c为选择哪个运算符,i为循环次数 271 printf("我们提供一下功能: \n"); 272 printf(" 1.题目的数值范围(暂不支持小数)\n"); 273 printf(" 2.题目的数量 \n"); 274 printf(" 3.答案中会不会出现负数的结果 \n"); 275 printf(" 4.题目中是否会出现乘除运算 \n"); 276 printf(" 5.打印时每行的间隔 \n"); 277 printf("请输入数值范围:"); 278 scanf("%d",&scope); 279 printf("请选择出题数量:"); 280 scanf("%d",&number); 281 printf("答案是否有负数(1为有,0为没有):"); 282 scanf("%d",&plural); //plural是否是负数 283 while(plural!=0 && plural!=1) //判断用户是否按要求输入 284 { 285 printf("sorry!输入错误,请按要求输入:"); 286 scanf("%d",&plural); 287 } 288 289 printf("是否有乘除运算(1为有,0为没有):"); 290 scanf("%d",&cheng); 291 while(cheng!=0 && cheng!=1) //判断用户是否按要求输入 292 { 293 printf("sorry!输入错误,请按要求输入:"); 294 scanf("%d",&cheng); 295 } 296 printf("中间有几个空行:"); 297 scanf("%d",&konghang); 298 if(cheng==1) 299 { 300 if(plural==0) 301 { 302 for(i=1;i<=number;i++) 303 { 304 num1=rand()%scope; 305 num2=rand()%scope; 306 oper=rand()%4; 307 printf("(%d)",i); 308 switch(oper) 309 { 310 case 0: 311 printf("%d+%d=",num1,num2); 312 Add(num1,num2); 313 break; 314 case 1: 315 if(num1>=num2) 316 { 317 printf("%d-%d=",num1,num2); 318 Sub(num1,num2); 319 } 320 else 321 { 322 printf("%d-%d=",num2,num1); 323 Sub(num2,num1); 324 } 325 break; 326 case 2: 327 printf("%d*%d=",num1,num2); 328 Mult(num1,num2); 329 break; 330 case 3: 331 if(num2==0) 332 { 333 printf("%d/%d=",num2,num1); 334 Divi(num2,num1); 335 } 336 else 337 { 338 printf("%d/%d=",num1,num2); 339 Divi(num1,num2); 340 } 341 break; 342 default: 343 { 344 printf("出错啦~~~"); 345 } 346 } 347 for(int p=1;p<=konghang;p++) 348 { 349 printf("\n"); 350 } 351 } 352 353 } 354 else 355 { 356 for(i=1;i<=number;i++) 357 { 358 num1=rand()%scope; 359 num2=rand()%scope; 360 oper=rand()%4; 361 printf("(%d)",i); 362 switch(oper) 363 { 364 case 0: 365 printf("%d+%d=",num1,num2); 366 Add(num1,num2); 367 break; 368 case 1: 369 printf("%d-%d=",num1,num2); 370 Sub(num1,num2); 371 break; 372 case 2: 373 printf("%d*%d=",num1,num2); 374 Mult(num1,num2); 375 break; 376 case 3: 377 if(num2==0) 378 { 379 printf("%d/%d=",num2,num1); 380 Divi(num2,num1); 381 } 382 else 383 { 384 printf("%d/%d=",num1,num2); 385 Divi(num2,num1); 386 } 387 break; 388 default: 389 { 390 printf("出错啦~~~"); 391 } 392 } 393 394 for(int p=1;p<=konghang;p++) 395 { 396 printf("\n"); 397 } 398 } 399 } 400 401 } 402 else 403 { 404 if(plural==0) 405 { 406 for(i=1;i<=number;i++) 407 { 408 num1=rand()%scope; 409 num2=rand()%scope; 410 oper=rand()%2; 411 printf("(%d)",i); 412 switch(oper) 413 { 414 case 0: 415 printf("%d+%d=",num1,num2); 416 Add(num1,num2); 417 break; 418 case 1: 419 if(num1>=num2) 420 { 421 printf("%d-%d=",num1,num2); 422 Sub(num1,num2); 423 } 424 else 425 { 426 printf("%d-%d=",num2,num1); 427 Sub(num2,num1); 428 } 429 break; 430 default: 431 { 432 printf("出错啦~~~"); 433 } 434 } 435 for(int p=1;p<=konghang;p++) 436 { 437 printf("\n"); 438 } 439 } 440 441 } 442 else 443 { 444 for(i=1;i<=number;i++) 445 { 446 num1=rand()%scope; 447 num2=rand()%scope; 448 oper=rand()%2; 449 printf("(%d)",i); 450 switch(oper) 451 { 452 case 0: 453 printf("%d+%d=",num1,num2); 454 Add(num1,num2); 455 break; 456 case 1: 457 printf("%d-%d=",num1,num2); 458 Sub(num1,num2); 459 break; 460 default: 461 { 462 printf("出错啦~~~"); 463 } 464 } 465 for(int p=1;p<=konghang;p++) 466 { 467 printf("\n"); 468 } 469 } 470 } 471 472 } 473 printf("\n"); 474 475 return 0; 476 } 477 void menu() 478 { 479 printf(" 欢迎使用四则运算出题系统 \n"); 480 printf(" 1. 开始出题 \n"); 481 printf(" 2. 开始答题 \n"); 482 printf(" 0. 退出系统 \n"); 483 } 484 int main() 485 { 486 int cheng,number,line,plural,scope,konghang,percent,a,num; 487 l1: menu(); 488 printf("请选择(0-2):"); 489 scanf("%d",&a); 490 switch(a) 491 { 492 case 1: 493 SetQuestion(cheng,number,line,plural,scope,konghang); 494 printf("是否继续(1为继续,0为不继续):"); 495 scanf("%d",&num); 496 if(num==1) 497 goto l1; 498 else 499 printf("欢迎下次使用!\n"); 500 break; 501 case 2: 502 AnswerQuestion(cheng,number,line,plural,scope,konghang); 503 printf("做对了%d道题\n",correct); 504 printf("做错了%d道题\n",wrong); 505 percent=correct/(correct+wrong); 506 if(percent>=6/10) 507 { 508 printf("你太棒了!!\n"); 509 } 510 else 511 { 512 printf("不及格,你要加油啦~~~\n"); 513 } 514 printf("是否继续(1为继续,0为不继续):"); 515 scanf("%d",&num); 516 if(num==1) 517 goto l1; 518 else 519 printf("欢迎下次使用!\n"); 520 break; 521 case 0: 522 printf("欢迎下次使用!\n"); 523 break; 524 } 525 526 return 0; 527 }
四、运行结果
开始界面:
五、心得体会
在原来的基础上进行修改,比直接做简单了许多,自己也有了一定的思路,其实我们自己编写一个大程序时也可以采用这种做法,先从一个个简单的问题开始,逐步变得复杂,就不会没有头绪了;但是我的程序拓展性差,程序有很多功能无法实现。
六、PSP0表格
1.项目计划总结:
周活动总结表
姓名:袁亚姣 日期:3/22
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
30 |
|
|
|
|
30 |
周一 |
|
|
|
|
|
|
|
周二 |
400 |
|
20 |
|
|
|
420 |
周三 |
100 |
120 |
40 |
|
|
|
260 |
周四 |
300 |
|
50 |
|
|
|
250 |
周五 |
200 |
120 |
60 |
|
|
|
380 |
周六 |
|
|
30 |
|
|
|
|
周总结 |
1000 |
270 |
200 |
|
|
|
1470 |
阶段时间和效率 周数(上一次周活动表的周数+1):2
不包括上一周在内的累计时间
总计 |
1000 |
270 |
200 |
|
|
|
1470 |
平均 |
250 |
90 |
40 |
|
|
|
245 |
最大 |
400 |
120 |
60 |
|
|
|
420 |
最小 |
100 |
30 |
20 |
|
|
|
30 |
以前各周的累计时间
总计 |
900 |
230 |
140 |
|
|
|
1270 |
平均 |
900 |
230 |
140 |
|
|
|
1270 |
最大 |
900 |
230 |
140 |
|
|
|
1270 |
最小 |
900 |
230 |
140 |
|
|
|
1270 |
2.时间记录表:
学生 袁亚姣 日期 2015.03.22
教师 王建民 课程 PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
15/3/18 |
10:30 |
12:30 |
|
120 |
结对开发 |
|
15/3/20 |
20:00 |
22:30 |
30 |
120 |
四则运算(3) |
讨论 |
15/3/22 |
16:30 |
17:00 |
|
30 |
写博客 |
|
3.缺陷记录日志:
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
15/3/18 |
1 |
逻辑错误 |
编码 |
执行 |
20min |
|
描述:逻辑错误,数组的题不能出现正确答案,循环搞错了 |
||||||
15/3/20 |
2 |
|
编码 |
编译 |
30min |
|
描述:全局变量的定义放在了主函数中,导致系统不能识别; |