软件工程课堂练习--四则运算(三)
一、设计思路
题目:可以答题并判断对错,最后显示做对几道题。
思路:在原来的基础上又添加了用户在系统上可选择直接答题模块,思路上上次的四则运算(二)大致相同,不过又添加了几个函数,经过调用实现操作。
二、程序代码
1 #include "stdafx.h" 2 #include "stdio.h" 3 #include "time.h" 4 #include "stdlib.h" //随机器函数头文件 5 6 int truenum=0; int falsenum=0; 7 8 9 void operation(int num,int numvalue,int judear,int judemd,int linenum) 10 { 11 switch(judemd) 12 { 13 case 0:{ 14 int x,y; 15 if(judear==0){ 16 srand((int)time(0)); 17 for(int i=1;i<=num;i++) //出题数量 18 { 19 20 int a=rand()%numvalue; 21 int b=rand()%numvalue; 22 23 x=1+rand()%10; //随机产生10种类型的题目 24 switch (x) 25 { 26 case 1: 27 { 28 printf("%d+%d=",a,b); 29 break; 30 } 31 case 2: 32 { 33 printf("%d-%d=\t",a,b); 34 35 break; 36 } 37 case 3: 38 { 39 printf("-%d+%d=\t",a,b); 40 41 break; 42 } 43 case 4: 44 { 45 printf("%d+(-%d)=\t",a,b); 46 47 break; 48 } 49 case 5: 50 { 51 printf("-%d+(-%d)=\t",a,b); 52 53 break; 54 } 55 case 6: 56 { 57 printf("-%d-%d=\t",a,b); 58 59 break; 60 } 61 case 7: 62 { 63 printf("%d-(-%d)=\t",a,b); 64 65 break; 66 } 67 case 8: 68 { 69 printf("-%d-(-%d)=\t",a,b); 70 71 break; 72 } 73 case 9: 74 { 75 printf("%d*%d=\t",a,b); 76 77 break;} 78 case 10: { 79 if (b!=0) 80 {printf("%d/%d=\t",a,b);} 81 else 82 { 83 b=b+1; 84 printf("%d/%d=\t",a,b); 85 86 } 87 break; 88 } 89 default:{"输出有误!";} 90 } 91 if(i%linenum==0) 92 { 93 printf("\n"); 94 } 95 } 96 97 98 } 99 else if(judear==1) 100 { 101 srand((int)time(0)); 102 for(int i=1;i<=num;i++) 103 { 104 105 106 int a=rand()%numvalue; 107 int b=rand()%numvalue; 108 109 y=1+rand()%4; //随机产生四种不同的题目 110 switch (y) 111 { 112 case 1: 113 { 114 printf("%d+%d= \t",a,b); 115 116 break; 117 } 118 case 2: 119 { 120 printf("%d-%d= \t",a,b); 121 122 break; 123 } 124 case 3: 125 { 126 printf("%d*%d= \t",a,b); 127 128 break; 129 } 130 case 4: { 131 if (b!=0) 132 {printf("%d/%d= \t",a,b);} 133 else 134 { 135 b=b+1; 136 printf("%d/%d= \t",a,b); 137 138 } 139 break; 140 } 141 default:{printf("输出有误!");} 142 } 143 } 144 if(i%linenum==0) 145 {printf("\n");} 146 147 } 148 else 149 printf("出错!"); 150 break; 151 default:{printf("出错!");} 152 } 153 case 1:{ 154 int q,w; 155 if(judear==0) 156 { 157 srand((int)time(0)); 158 for(int i=1;i<=num;i++) 159 { 160 161 int a=rand()%numvalue; 162 int b=rand()%numvalue; 163 164 q=1+rand()%8; //随机产生8种不同的题型 165 switch (q) 166 { 167 case 1: 168 { 169 printf("%d+%d= \t",a,b); 170 171 break; 172 } 173 case 2: 174 { 175 printf("%d-%d= \t",a,b); 176 177 break; 178 } 179 case 3: 180 { 181 printf("-%d+%d= \t",a,b); 182 183 break;} 184 case 4: 185 { 186 printf("%d+(-%d)= \t",a,b); 187 188 break;} 189 case 5: 190 { 191 printf("-%d+(-%d)=\t",a,b); 192 193 break;} 194 case 6: 195 { 196 printf("-%d-%d= \t",a,b); 197 198 break; 199 } 200 case 7: 201 { 202 printf("%d-(-%d)= \t",a,b); 203 204 break; 205 } 206 case 8: 207 { 208 printf("-%d-(-%d)=\t",a,b); 209 210 break; 211 } 212 default:{"输出有误!";} 213 } 214 if(i%linenum==0) 215 { 216 printf("\n"); 217 } 218 } 219 220 } 221 else if(judear==1) 222 { 223 srand((int)time(0)); 224 for(int i=1;i<=num;i++) 225 { 226 227 228 int a=rand()%numvalue; 229 int b=rand()%numvalue; 230 231 w=1+rand()%2; //随机产生2种不同的题型 232 switch (w) 233 { 234 case 1: 235 { 236 printf("%d+%d= \t",a,b); 237 238 break; 239 } 240 case 2: 241 { 242 printf("%d-%d= \t",a,b); 243 244 break; 245 } 246 default:{"输出有误!";} 247 } 248 if(i%linenum==0) 249 { 250 printf("\n"); 251 } 252 } 253 254 255 } 256 else 257 printf("出错!"); 258 } 259 } 260 261 262 } 263 264 265 void add(int num1,int num2) 266 { 267 int userresult,truresult; 268 scanf("%d",&userresult); 269 truresult=num1+num2; 270 if(truresult==userresult) 271 { 272 printf(" √"); 273 truenum++; 274 } 275 else if(truresult!=userresult) 276 { 277 printf(" ×"); 278 falsenum++; 279 } 280 printf("\n"); 281 282 } 283 284 void sub(int num1,int num2) 285 { 286 int userresult,truresult; 287 scanf("%d",&userresult); 288 truresult=num1-num2; 289 if(truresult==userresult) 290 { 291 printf(" √"); 292 truenum++; 293 } 294 else if(truresult!=userresult) 295 { 296 printf(" ×"); 297 falsenum++; 298 } 299 printf("\n"); 300 301 } 302 303 void mul(int num1,int num2) 304 { 305 int userresult,truresult; 306 scanf("%d",&userresult); 307 truresult=num1*num2; 308 if(truresult==userresult) 309 { 310 printf(" √"); 311 truenum++; 312 } 313 else if(truresult!=userresult) 314 { 315 printf(" ×"); 316 falsenum++; 317 } 318 printf("\n"); 319 320 } 321 322 void division(int num1,int num2) 323 { 324 int userresult,truresult; 325 scanf("%d",&userresult); 326 truresult=num1/num2; 327 if(truresult==userresult) 328 { 329 printf(" √"); 330 truenum++; 331 } 332 else if(truresult!=userresult) 333 { 334 printf(" ×"); 335 falsenum++; 336 } 337 338 } 339 340 341 342 343 void answoperation(int num,int numvalue,int judear,int judemd,int linenum) 344 { 345 switch(judemd) 346 { 347 case 0:{ 348 int x,y; 349 if(judear==0){ 350 srand((int)time(0)); 351 for(int i=1;i<=num;i++) //出题数量 352 { 353 354 int a=rand()%numvalue; 355 int b=rand()%numvalue; 356 357 x=1+rand()%10; //随机产生10种类型的题目 358 switch (x) 359 { 360 case 1: 361 { 362 printf("%d+%d=",a,b); 363 add(a,b); 364 break; 365 } 366 case 2: 367 { 368 printf("%d-%d=",a,b); 369 sub(a,b); 370 break; 371 } 372 case 3: 373 { 374 printf("-%d+%d=",a,b); 375 add(-a,b); 376 break; 377 } 378 case 4: 379 { 380 printf("%d+(-%d)=",a,b); 381 add(a,-b); 382 break; 383 } 384 case 5: 385 { 386 printf("-%d+(-%d)=",a,b); 387 add(-a,-b); 388 break; 389 } 390 case 6: 391 { 392 printf("-%d-%d=",a,b); 393 sub(-a,b); 394 break; 395 } 396 case 7: 397 { 398 printf("%d-(-%d)=",a,b); 399 sub(a,-b); 400 break; 401 } 402 case 8: 403 { 404 printf("-%d-(-%d)=",a,b); 405 sub(-a,-b); 406 break; 407 } 408 case 9: 409 { 410 printf("%d*%d=",a,b); 411 mul(a,b); 412 break;} 413 case 10: { 414 if (b!=0) 415 { 416 printf("%d/%d=",a,b); 417 division(a,b); 418 } 419 else 420 { 421 b=b+1; 422 printf("%d/%d=",a,b); 423 division(a,b); 424 425 } 426 break; 427 } 428 default:{"输出有误!";} 429 } 430 if(i%linenum==0) 431 { 432 printf("\n"); 433 } 434 } 435 436 437 } 438 else if(judear==1) 439 { 440 srand((int)time(0)); 441 for(int i=1;i<=num;i++) 442 { 443 444 445 int a=rand()%numvalue; 446 int b=rand()%numvalue; 447 448 y=1+rand()%4; //随机产生四种不同的题目 449 switch (y) 450 { 451 case 1: 452 { 453 printf("%d+%d=",a,b); 454 add(a,b); 455 break; 456 } 457 case 2: 458 { 459 printf("%d-%d=",a,b); 460 sub(a,b); 461 break; 462 } 463 case 3: 464 { 465 printf("%d*%d=",a,b); 466 mul(a,b); 467 468 break; 469 } 470 case 4: { 471 if (b!=0) 472 { 473 printf("%d/%d=",a,b); 474 division(a,b); 475 } 476 else 477 { 478 b=b+1; 479 printf("%d/%d=",a,b); 480 division(a,b); 481 } 482 break; 483 } 484 default:{printf("输出有误!");} 485 } 486 } 487 if(i%linenum==0) 488 {printf("\n");} 489 490 } 491 else 492 printf("出错!"); 493 494 break; 495 default:{printf("出错!");} 496 497 } 498 case 1:{ 499 int q,w; 500 if(judear==0) 501 { 502 srand((int)time(0)); 503 for(int i=1;i<=num;i++) 504 { 505 506 int a=rand()%numvalue; 507 int b=rand()%numvalue; 508 509 q=1+rand()%8; //随机产生8种不同的题型 510 switch (q) 511 { 512 case 1: 513 { 514 printf("%d+%d=",a,b); 515 add(a,b); 516 break; 517 } 518 case 2: 519 { 520 printf("%d-%d=",a,b); 521 sub(a,b); 522 break; 523 } 524 case 3: 525 { 526 printf("-%d+%d=",a,b); 527 add(-a,b); 528 break;} 529 case 4: 530 { 531 printf("%d+(-%d)=",a,b); 532 add(a,-b); 533 break;} 534 case 5: 535 { 536 printf("-%d+(-%d)=",a,b); 537 add(-a,-b); 538 break;} 539 case 6: 540 { 541 printf("-%d-%d=",a,b); 542 sub(-a,b); 543 break; 544 } 545 case 7: 546 { 547 printf("%d-(-%d)=",a,b); 548 sub(a,-b); 549 break; 550 } 551 case 8: 552 { 553 printf("-%d-(-%d)=",a,b); 554 sub(-a,-b); 555 break; 556 } 557 default:{"输出有误!";} 558 } 559 if(i%linenum==0) 560 { 561 printf("\n"); 562 } 563 } 564 565 } 566 else if(judear==1) 567 { 568 srand((int)time(0)); 569 for(int i=1;i<=num;i++) 570 { 571 572 573 int a=rand()%numvalue; 574 int b=rand()%numvalue; 575 576 w=1+rand()%2; //随机产生2种不同的题型 577 switch (w) 578 { 579 case 1: 580 { 581 printf("%d+%d=",a,b); 582 add(a,b); 583 break; 584 } 585 case 2: 586 { 587 printf("%d-%d=",a,b); 588 sub(a,b); 589 break; 590 } 591 default:{"输出有误!";} 592 } 593 if(i%linenum==0) 594 { 595 printf("\n"); 596 } 597 } 598 599 600 } 601 else 602 printf("出错!"); 603 } 604 } 605 606 607 } 608 609 610 void print() 611 { 612 int num,numvalue,judear,judemd,linenum,answer; //变量含义分别为出题数目、数值范围、判断有无负数、判断有无乘除、输出列数、直接作答 613 614 printf("请输入出题数目:"); 615 scanf("%d",&num); 616 printf("请输入要输出的题目列数(多少题一组):"); 617 scanf("%d",&linenum); 618 printf("加减有无负数?请输入【0/1】表示【是/否】:"); 619 scanf("%d",&judear); 620 while(judear!=0 && judear!=1) //判断用户是否按要求输入 621 { 622 printf("sorry!输入错误,请按要求输入:"); 623 scanf("%d",&judear); 624 } 625 printf("请输入出题的范围绝对值(不考虑小数请输入整数):00-"); 626 scanf("%d",&numvalue); 627 printf("出题是否含有乘除法?请输入【0/1】表示【是/否】:"); 628 scanf("%d",&judemd); 629 while(judear!=0 && judear!=1) //判断用户是否按要求输入 630 { 631 printf("sorry!输入错误,请按要求输入:"); 632 scanf("%d",&judemd); 633 } 634 printf("是否要在此系统上直接运算?请输入【0/1】表示【是/否】:"); 635 scanf("%d",&answer); 636 while(answer!=0 && answer!=1) //判断用户是否按要求输入 637 { 638 printf("sorry!输入错误,请按要求输入:"); 639 scanf("%d",&answer); 640 } 641 if (answer==1) 642 { 643 operation(num,numvalue,judear,judemd,linenum); //调用operation函数 644 } 645 else if(answer==0) 646 { 647 answoperation(num,numvalue,judear,judemd,linenum); //调用answ-operation函数 648 } 649 650 } 651 652 653 654 655 int main(int argc, char* argv[]) 656 { 657 658 printf(" 四则运算出题系统 \n"); 659 print(); 660 printf("最后计算正确%d道题,错误%d道题\n",truenum,falsenum); 661 printf("\n"); 662 return 0; 663 }
三、运行结果
其他功能和上篇发的内容相同,此处就不在贴图啦
四、心得体会
由于一开始写四则运算时没想太多,就是想着把这个简简单单的快完成就好了,所以写的程序的扩展性不好,导致后面在一点点的加功能时自己乱,读者看着更乱,虽然功能都实现了,但是代码显得没有条理,所以我想以后再遇到为题时不要先急着下手,要先想想大体思路以及框架,这样在操作起来后就会有条理,思路不乱了程序敲起来也会更顺手吧,对于编程我真的算是一个初学者了,和大伙分享一下我的经验教训吧。
五、psp0级
周活动项目计划总结表+时间记录日志+缺陷记录志
一、项目计划总结:
表1 周活动总结表
姓名:曹美娜 日期:2015.03.15
日期/任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
|
|
|
|
|
|
周一 |
300 |
|
45 |
|
|
|
345 |
周二 |
300 |
|
80 |
|
|
|
380 |
周三 |
100 |
|
100 |
|
|
|
200 |
周四 |
300 |
115 |
60 |
|
|
|
475 |
周五 |
|
|
|
|
|
|
|
周六 |
|
|
|
|
|
|
|
周总计 |
|
|
|
|
|
|
总计 |
800 |
268 |
95 |
|
|
|
1163 |
平均 |
800 |
268 |
95 |
|
|
|
1163 |
最大 |
800 |
268 |
95 |
|
|
|
1163 |
最小 |
800 |
268 |
95 |
|
|
|
1163 |
表2 时间记录日志
学生 曹美娜 日期 2015.03.19
教师 王建民 课程 软件工程
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3/18 |
10:40 |
12:13 |
|
93 |
结队编程 |
|
3/19 |
17:00 |
18:20 |
|
80 |
编写四则运算程序 |
|
3/20 |
|
|
|
|
阅读梦断代码 |
|
|
|
|
|
|
看书 |
|
表3 缺陷记录日志
学 生 曹美娜
日 期 2015.03.19
教 员 王建民
程序号
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/18 |
0 |
|
结队编程 |
编译 |
1分钟 |
|
将输出语句写到内循环中 |
||||||
3/19 |
1 |
|
编程 |
编译 |
2分钟 |
|
全局变量应用不正确 |