1. 要求能够让用户输入,并能判断其对错,和统计对的数目
2.构思: 每道题过河在swich语句中分支内部加入判断吗,对正确的输出对,并设一个变量来统计对的数目。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 #include <iomanip> 5 #include <iostream> 6 #include <conio.h> 7 using namespace std; 8 9 10 11 int main(void) 12 { 13 srand((unsigned)time(NULL)); //本地时间为种子 14 int a[100]; 15 int b[100]; 16 int c[100]; 17 int d[100]; 18 int num; 19 int j; 20 int count; 21 char choice; 22 int jiange; 23 int range; 24 char zhengfu; 25 int sum = 0; 26 char ch = ‘\r‘; 27 int k; 28 29 //printf("please input num for type : "); 30 //scanf_s("%d", &num); 31 //printf("please input num for the sum of task : "); 32 //scanf_s("%d", &count); 33 //printf("chose have(y) or not(n) Multiplication and division:"); 34 //scanf_s("%c", &choice); 35 //printf("please input num for jiange :"); 36 //scanf_s("%d", &jiange); 37 cout << "输入每行题目数 : "; 38 cin >> num; 39 cout << "输入题目数 : "; 40 cin >> count; 41 cout << "是否支持乘除(y/n):"; 42 cin >> choice; 43 cout << "输入题与题的间隔 :"; 44 cin >> jiange; 45 cout << "输入生成题目的范围 :"; 46 cin >> range; 47 cout << "选择加减是否有正负数(y/n) : "; 48 cin >> zhengfu; 49 50 51 for (int i = 0; i < count; i++) 52 { 53 54 if (zhengfu == ‘n‘) //判断正负 55 { 56 a[i] = rand() % range; //产生随机数 57 b[i] = rand() % range; 58 59 60 if (choice == ‘y‘) //选择是否有乘除; 61 { 62 c[i] = rand() % 4; //产生随机符号0到3分别代表四则运算 63 64 if (i == 0) //a[0],b[0]的特殊情况; 65 { 66 printf("%-4d", a[i]); 67 switch (c[i]) 68 { 69 case 0: 70 printf("+"); 71 break; 72 case 1: 73 printf("-"); 74 break; 75 case 2: 76 printf("*"); 77 break; 78 case 3: 79 printf("/"); 80 break; 81 } 82 printf("%4d =", b[i]); 83 cin >> d[i]; 84 85 //for (k = 0; k < 6; k++) 86 //{ 87 // ch = getche(); 88 // if (ch == ‘\r‘) 89 // break; 90 //} 91 switch (c[i]) 92 { 93 case 0: 94 if (a[i] + b[i] == d[i]) 95 { 96 cout << "答对了"<<endl; 97 sum++; 98 } 99 break; 100 case 1: 101 if (a[i] - b[i] == d[i]) 102 { 103 cout << "答对了"<<endl; 104 sum++; 105 } 106 break; 107 case 2: 108 if (a[i] * b[i] == d[i]) 109 { 110 cout << "答对了"<<endl; 111 sum++; 112 } 113 break; 114 case 3: 115 if (a[i] / b[i] == d[i]) 116 { 117 cout << "答对了"<<endl; 118 sum++; 119 } 120 break; 121 } 122 123 124 //for (j = 0; j < jiange; j++) //数据间的间隔 125 //{ 126 // printf(" "); 127 //} 128 } 129 else //一般情况 130 { 131 for (int k = 0; k < i; k++) 132 { 133 if (a[k] == a[i] && b[k] == b[i] && c[k] == c[i]) 134 { 135 i--; 136 break; 137 } 138 else 139 { 140 if (k == i - 1) //比较到最后一个数时 141 { 142 printf("%-4d", a[i]); 143 switch (c[i]) 144 { 145 case 0: 146 printf("+"); 147 break; 148 case 1: 149 printf("-"); 150 break; 151 case 2: 152 printf("*"); 153 break; 154 case 3: 155 printf("/"); 156 break; 157 } 158 printf("%4d =", b[i]); 159 scanf_s("%d", &d[i]); 160 switch (c[i]) 161 { 162 case 0: 163 164 if (a[i] + b[i] == d[i]) 165 { 166 cout << "答对了"<<endl; 167 sum++; 168 } 169 break; 170 case 1: 171 172 if (a[i] - b[i] == d[i]) 173 { 174 cout << "答对了"<<endl; 175 sum++; 176 } 177 break; 178 case 2: 179 180 if (a[i] * b[i] == d[i]) 181 { 182 cout << "答对了"<<endl; 183 sum++; 184 } 185 break; 186 case 3: 187 188 if (a[i] / b[i] == d[i]) 189 { 190 cout << "答对了"<<endl; 191 sum++; 192 } 193 break; 194 } 195 196 /*for (j = 0; j < jiange; j++) 197 { 198 printf(" "); 199 }*/ 200 } 201 } 202 } 203 } 204 //if ((i + 1) % num == 0) //控制每行的题数 205 // printf("\n"); 206 } 207 else //无乘除 208 { 209 c[i] = rand() % 2; //产生随机符号0到3分别代表四则运算 210 211 if (i == 0) //i ==0 特殊情况 212 { 213 printf("%-4d", a[i]); 214 switch (c[i]) 215 { 216 case 0: 217 printf("+"); 218 break; 219 case 1: 220 printf("-"); 221 break; 222 } 223 printf("%4d =", b[i]); 224 225 scanf_s("%d", &d[i]); 226 switch (c[i]) 227 { 228 case 0: 229 230 if (a[i] + b[i] == d[i]) 231 { 232 cout << "答对了"<<endl; 233 sum++; 234 } 235 break; 236 case 1: 237 238 if (a[i] - b[i] == d[i]) 239 { 240 cout << "答对了"<<endl; 241 sum++; 242 } 243 break; 244 245 } 246 247 for (j = 0; j < jiange; j++) 248 { 249 printf(" "); 250 } 251 } 252 else //无乘除一般情况 253 { 254 for (int k = 0; k < i; k++) 255 { 256 if (a[k] == a[i] && b[k] == b[i] && c[k] == c[i]) 257 { 258 i--; 259 break; 260 } 261 else 262 { 263 if (k == i - 1) //比较到最后一个数时 264 { 265 printf("%-4d", a[i]); 266 switch (c[i]) 267 { 268 case 0: 269 printf("*"); 270 break; 271 case 1: 272 printf("/"); 273 break; 274 } 275 printf("%4d =", b[i]); 276 277 scanf_s("%d", &d[i]); 278 switch (c[i]) 279 { 280 case 0: 281 282 if (a[i] + b[i] == d[i]) 283 { 284 cout << "答对了"<<endl; 285 sum++; 286 } 287 break; 288 case 1: 289 290 if (a[i] - b[i] == d[i]) 291 { 292 cout << "答对了"<<endl; 293 sum++; 294 } 295 break; 296 } 297 298 /*for (j = 0; j < jiange; j++) 299 { 300 printf(" "); 301 }*/ 302 } 303 } 304 } 305 } 306 /*if ((i + 1) % num == 0) 307 printf("\n");*/ 308 } 309 } 310 else //有正负 311 { 312 if (choice == ‘y‘) //选择是否有乘除; 313 { 314 a[i] = rand() % (2 * range + 1) - range; //产生随机数 315 b[i] = rand() % (2 * range + 1) - range; 316 c[i] = rand() % 4; //产生随机符号0到3分别代表四则运算 317 318 if (i == 0) //a[0],b[0]的特殊情况; 319 { 320 printf("%-4d", a[i]); 321 switch (c[i]) 322 { 323 case 0: 324 printf("+"); 325 break; 326 case 1: 327 printf("-"); 328 break; 329 case 2: 330 printf("*"); 331 break; 332 case 3: 333 printf("/"); 334 break; 335 } 336 printf("%4d =", b[i]); 337 338 scanf_s("%d", &d[i]); 339 switch (c[i]) 340 { 341 case 0: 342 343 if (a[i] + b[i] == d[i]) 344 { 345 cout << "答对了"<<endl; 346 sum++; 347 } 348 break; 349 case 1: 350 351 if (a[i] - b[i] == d[i]) 352 { 353 cout << "答对了"<<endl; 354 sum++; 355 } 356 break; 357 case 2: 358 359 if (a[i] * b[i] == d[i]) 360 { 361 cout << "答对了"<<endl; 362 sum++; 363 } 364 break; 365 case 3: 366 367 if (a[i] / b[i] == d[i]) 368 { 369 cout << "答对了"<<endl; 370 sum++; 371 } 372 break; 373 } 374 375 376 /* for (j = 0; j < jiange; j++) 377 { 378 printf(" "); 379 }*/ 380 } 381 else //一般情况有正负 382 { 383 for (int k = 0; k < i; k++) 384 { 385 if (a[k] == a[i] && b[k] == b[i] && c[k] == c[i]) 386 { 387 i--; 388 break; 389 } 390 else 391 { 392 if (k == i - 1) //比较到最后一个数时 393 { 394 printf("%-4d", a[i]); 395 switch (c[i]) 396 { 397 case 0: 398 printf("+"); 399 break; 400 case 1: 401 printf("-"); 402 break; 403 case 2: 404 printf("*"); 405 break; 406 case 3: 407 printf("/"); 408 break; 409 } 410 printf("%4d =", b[i]); 411 412 scanf_s("%d", &d[i]); 413 switch (c[i]) 414 { 415 case 0: 416 417 if (a[i] + b[i] == d[i]) 418 { 419 cout << "答对了"<<endl; 420 sum++; 421 } 422 break; 423 case 1: 424 425 if (a[i] - b[i] == d[i]) 426 { 427 cout << "答对了"<<endl; 428 sum++; 429 } 430 break; 431 case 2: 432 433 if (a[i] * b[i] == d[i]) 434 { 435 cout << "答对了"<<endl; 436 sum++; 437 } 438 break; 439 case 3: 440 441 if (a[i] / b[i] == d[i]) 442 { 443 cout << "答对了"<<endl; 444 sum++; 445 } 446 break; 447 } 448 449 /*for (j = 0; j < jiange; j++) 450 { 451 printf(" "); 452 }*/ 453 } 454 } 455 } 456 } 457 /*if ((i + 1) % num == 0) 458 printf("\n");*/ 459 } 460 else 461 { 462 c[i] = rand() % 2; //产生随机符号0到3分别代表四则运算 463 464 if (i == 0) 465 { 466 printf("%-4d", a[i]); 467 switch (c[i]) 468 { 469 case 0: 470 printf("+"); 471 break; 472 case 1: 473 printf("-"); 474 break; 475 } 476 printf("%4d =", b[i]); 477 478 scanf_s("%d", &d[i]); 479 switch (c[i]) 480 { 481 case 0: 482 483 if (a[i] + b[i] == d[i]) 484 { 485 cout << "答对了"<<endl; 486 sum++; 487 } 488 break; 489 case 1: 490 491 if (a[i] - b[i] == d[i]) 492 { 493 cout << "答对了"<<endl; 494 sum++; 495 } 496 break; 497 } 498 499 for (j = 0; j < jiange; j++) 500 { 501 printf(" "); 502 } 503 } 504 else 505 { 506 for (int k = 0; k < i; k++) 507 { 508 if (a[k] == a[i] && b[k] == b[i] && c[k] == c[i]) 509 { 510 i--; 511 break; 512 } 513 else 514 { 515 if (k == i - 1) //比较到最后一个数时 516 { 517 printf("%-4d", a[i]); 518 switch (c[i]) 519 { 520 case 0: 521 printf("+"); 522 break; 523 case 1: 524 printf("-"); 525 break; 526 } 527 printf("%4d =", b[i]); 528 529 scanf_s("%d", &d[i]); 530 switch (c[i]) 531 { 532 case 0: 533 534 if (a[i] + b[i] == d[i]) 535 { 536 cout << "答对了"<<endl; 537 sum++; 538 } 539 break; 540 case 1: 541 542 if (a[i] - b[i] == d[i]) 543 { 544 cout << "答对了"<<endl; 545 sum++; 546 } 547 break; 548 549 } 550 551 /*for (j = 0; j < jiange; j++) 552 { 553 printf(" "); 554 }*/ 555 } 556 } 557 } 558 } 559 /*if ((i + 1) % num == 0) 560 printf("\n");*/ 561 } 562 563 } 564 565 566 } 567 cout << "对的题目数为 " <<sum << endl; 568 system("pause"); //暂停程序运行; 569 return 0; 570 }
截图:
3.bug:原来我是想让一行能输出几道题,但是最后对scanf或者cin输入就自动跳到下一行,后来我用getche()函数也没能实现最后避免自动到一行,最后还发现除法遇到0就报错了。
4.总结:遇到很多问题有些看上去特变小,就是解决不了,还是对现阶段的知识学习的不够,对get()类函数不了解。本次试验让我了解了getchar(),getche();getch()等等。
原文:http://www.cnblogs.com/mtant/p/4355873.html