基于前两次四则运算的开发,再把程序扩展一下:让程序能接受用户输入答案,并判定对错,最后给出总共对/错的数量。
思路:
在原来的基础上,增加两个数组,一个保存题目的正确答案(result[ ]),另一个保存用户输入的答案,最后通过比较每个答案是否相等来判断正确与错误。
对/错的数量分别用right/wrong变量来记录。
源代码:
1 #include<iostream.h> 2 3 #include<stdlib.h> 4 5 #include<time.h> 6 7 8 9 int main() 10 11 { 12 13 srand(time(NULL)); //题目避免重复 14 15 int value1,value2,op; //两个整数,运算符 16 17 int amount,mount; //题目数量 18 19 int erji; //二级运算,即乘除法 20 21 int number; //正负数 22 23 int range; //数值范围 24 25 double result[100]; //保存题目正确答案 26 27 double answer[100]; //保存用户输入答案 28 29 int right=0; //答对题目的数量 30 31 int wrong=0; //打错题目的数量 32 33 34 35 cout<<"请定制题目的数量(填一个>0的整数):"; 36 37 cin>>amount; 38 39 while(amount<=0||amount==NULL) 40 41 { 42 43 cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):"; 44 45 cin>>amount; 46 47 } 48 49 50 51 cout<<"题目中是否有乘除法(填0为是,1为否):"; 52 53 cin>>erji; 54 55 while(erji!=0 && erji!=1) 56 57 { 58 59 cout<<"不合法!"<<endl<<"请重新输入(填0为有乘除法,1为无乘除法):"; 60 61 cin>>erji; 62 63 } 64 65 if(erji==0) 66 67 { 68 69 70 71 cout<<"题目中是否有负数(填0为是,1为否):"; 72 73 cin>>number; 74 75 while(number!=0 && number!=1) 76 77 { 78 79 cout<<"不合法!"<<endl<<"请重新输入(填0为有负数,1为无负数):"; 80 81 cin>>number; 82 83 } 84 85 if(number==0) 86 87 { 88 89 90 91 cout<<"请输入数值的最小边界(填一个<0的整数):"; 92 93 cin>>range; 94 95 while(range>=0) 96 97 { 98 99 cout<<"不合法!"<<endl<<"请重新输入(填一个<0的整数):"; 100 101 cin>>range; 102 103 } 104 105 cout<<"每行打印题目的数量(每行):"; 106 107 cin>>mount; 108 109 110 111 cout<<endl<<"共"<<amount<<"道包含乘除法、有负数参与的运算(范围:"<<range<<" ~ 0)"<<endl; 112 113 for(int i=0;i<amount;i++) 114 115 { 116 117 cout<<"("<<i+1<<")"; 118 119 value1=rand()%range+range/2; 120 121 value2=rand()%range+range/2; 122 123 op=rand()%4; 124 125 switch(op) 126 127 { 128 129 case 0: 130 131 result[i]=value1+value2; 132 133 cout<<value1<<" + "<<value2<<" ="<<" "; //加 134 135 break; 136 137 case 1: 138 139 result[i]=value1-value2; 140 141 cout<<value1<<" - "<<value2<<" ="<<" "; //减 142 143 break; 144 145 case 2: 146 147 result[i]=value1*value2; 148 149 cout<<value1<<" x "<<value2<<" ="<<" "; //乘 150 151 break; 152 153 case 3: 154 155 result[i]=(double)value1/value2; 156 157 cout<<value1<<" ÷ "<<value2<<" ="<<" "; //除 158 159 break; 160 161 } 162 163 if((i+1)%mount==0) 164 165 { 166 167 cout<<endl; 168 169 } 170 171 } 172 173 } 174 175 else 176 177 { 178 179 180 181 cout<<"请输入数值的最大边界(填一个>0的整数):"; 182 183 cin>>range; 184 185 while(range<0) 186 187 { 188 189 cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):"; 190 191 cin>>range; 192 193 } 194 195 cout<<"每行打印题目的数量(每行):"; 196 197 cin>>mount; 198 199 200 201 cout<<endl<<"共"<<amount<<"道包含乘除法、非负数的运算(范围:0 ~ "<<range<<")"<<endl; 202 203 204 205 cout<<endl; 206 207 for(int i=0;i<amount;i++) 208 209 { 210 211 cout<<"("<<i+1<<") "; 212 213 value1=rand()%range; 214 215 value2=rand()%range; 216 217 op=rand()%4; 218 219 switch(op) 220 221 { 222 223 case 0: 224 225 result[i]=value1+value2; 226 227 cout<<value1<<" + "<<value2<<" ="<<" "; //加 228 229 break; 230 231 case 1: 232 233 result[i]=value1-value2; 234 235 cout<<value1<<" - "<<value2<<" ="<<" "; //减 236 237 break; 238 239 case 2: 240 241 result[i]=value1*value2; 242 243 cout<<value1<<" x "<<value2<<" ="<<" "; //乘 244 245 break; 246 247 case 3: 248 249 result[i]=(double)value1/value2; 250 251 cout<<value1<<" ÷ "<<value2<<" ="<<" "; //除 252 253 break; 254 255 } 256 257 if((i+1)%mount==0) 258 259 { 260 261 cout<<endl; 262 263 } 264 265 } 266 267 } 268 269 } 270 271 else 272 273 { 274 275 276 277 cout<<"题目中是否有负数(填0为是,1为否):"; 278 279 cin>>number; 280 281 while(number!=0 && number!=1) 282 283 { 284 285 cout<<"不合法!"<<endl<<"请重新输入(填0为有负数,1为无负数):"; 286 287 cin>>number; 288 289 } 290 291 if(number==0) 292 293 { 294 295 296 297 cout<<"请输入数值的最小边界(填一个<0的整数):"; 298 299 cin>>range; 300 301 while(range>=0) 302 303 { 304 305 cout<<"不合法!"<<endl<<"请重新输入(填一个<0的整数):"; 306 307 cin>>range; 308 309 } 310 311 cout<<"每行打印题目的数量(每行):"; 312 313 cin>>mount; 314 315 316 317 cout<<endl<<"共"<<amount<<"道不包含乘除法的负数运算(范围:"<<range<<" ~ 0)"<<endl; 318 319 for(int i=0;i<amount;i++) 320 321 { 322 323 cout<<"("<<i+1<<") "; 324 325 value1=rand()%range+range/2; 326 327 value2=rand()%range+range/2; 328 329 op=rand()%2; 330 331 switch(op) 332 333 { 334 335 case 0: 336 337 result[i]=value1+value2; 338 339 cout<<value1<<" + "<<value2<<" ="<<" "; //加 340 341 break; 342 343 case 1: 344 345 result[i]=value1-value2; 346 347 cout<<value1<<" - "<<value2<<" ="<<" "; //减 348 349 break; 350 351 } 352 353 if((i+1)%mount==0) 354 355 { 356 357 cout<<endl; 358 359 } 360 361 } 362 363 } 364 365 else 366 367 { 368 369 370 371 cout<<"请输入数值的最大边界(填一个>0的整数):"; 372 373 cin>>range; 374 375 while(range<0) 376 377 { 378 379 cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):"; 380 381 cin>>range; 382 383 } 384 385 cout<<"每行打印题目的数量(每行):"; 386 387 cin>>mount; 388 389 390 391 cout<<endl<<"共"<<amount<<"道不包含乘除法的非负数运算(范围:0 ~ "<<range<<")"<<endl; 392 393 for(int i=0;i<amount;i++) 394 395 { 396 397 cout<<"("<<i+1<<") "; 398 399 value1=rand()%range; 400 401 value2=rand()%range; 402 403 op=rand()%2; 404 405 switch(op) 406 407 { 408 409 case 0: 410 411 result[i]=value1+value2; 412 413 cout<<value1<<" + "<<value2<<" ="<<" "; //加 414 415 break; 416 417 case 1: 418 419 result[i]=value1-value2; 420 421 cout<<value1<<" - "<<value2<<" ="<<" "; //减 422 423 424 425 break; 426 427 } 428 429 if((i+1)%mount==0) 430 431 { 432 433 cout<<endl; 434 435 } 436 437 } 438 439 } 440 441 } 442 443 cout<<" "; 444 445 cout<<"请输入你的答案:"<<endl; 446 447 for(int i=0;i<amount;i++) 448 449 { 450 451 cout<<"("<<i+1<<")"; 452 453 cin>>answer[i]; 454 455 if(result[i]==answer[i]) 456 457 { 458 459 cout<<"Right!"<<endl; 460 461 right++; 462 463 } 464 465 else 466 467 { 468 469 cout<<"Wrong!"<<endl; 470 471 wrong++; 472 473 cout<<"正确答案是: "<<result[i]<<endl; 474 475 } 476 477 } 478 479 cout<<endl<<"答对"<<right<<"题"<<endl; 480 481 cout<<"答错"<<wrong<<"题"<<endl; 482 483 484 485 return 0; 486 487 }
运行结果:
总结:
扩展在原来四则运算的基础上改动了一些,在结尾添加上了判断对错的功能。实现得还是比较快的,看到题目很快有了最基本的思路,然后就是敲代码去实现。在编程的过程中急于求成,编译过程中发现了许多问题:A、第一题的答案永远是0;B、判断对/错的功能不能实现;C、除法的结果都是整数,没有小数(查看课本,通过强制转换数据类型来解决,从int到double)。通过一行行注释、一步步调试,发现自己把变量弄混了还有一些关于数据类型的细节以前都没用注意,调试花了些时间去纠正,所以不管多有把握都不能粗心。
项目计划总结 周活动总结表 姓名:林彦汝 日期:3/19/2015 |
|||||||
任务 日期 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
|
|
|
|
|
|
周一 |
|
|
|
|
|
|
|
周二 |
|
|
|
|
|
|
|
周三 |
100 |
30 |
30 |
220 |
|
|
380 |
周四 |
300 |
50 |
30 |
|
|
|
380 |
周五 |
|
|
|
|
|
|
|
周六 |
|
|
|
|
|
|
|
周总计 |
|
|
|
|
|
|
|
阶段时间和效率 周数:2 |
|||||||
总计 |
760 |
|
|
|
|
|
|
平均 |
380 |
|
|
|
|
|
|
最大 |
380 |
|
|
|
|
|
|
最小 |
380 |
|
|
|
|
|
|
以前各周的累计时间 |
|||||||
总计 |
570 |
|
|
|
|
|
|
平均 |
190 |
|
|
|
|
|
|
最大 |
220 |
|
|
|
|
|
|
最小 |
120 |
|
|
|
|
|
|
日期 |
开始 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
3/18 |
8:00 |
9:50 |
10 |
100 |
上课 |
CN |
|
|
|
14:30 |
16:30 |
|
120 |
自习 |
|
|
|
|
19:00 |
19:30 |
|
30 |
思考 |
记录四则运算思路 |
|
|
|
20:00 |
22:00 |
20 |
100 |
自习 |
英语、C/C++ |
|
|
|
22:30 |
23:00 |
|
30 |
阅读 |
《梦断代码》 |
|
|
3/19 |
8:00 |
11:00 |
30 |
150 |
上课 |
嵌入式、接口 |
|
|
|
11:10 |
11:30 |
|
20 |
编程 |
四则运算 |
|
|
|
13:00 |
13:30 |
|
30 |
编程 |
四则运算 |
|
|
|
14:00 |
15:50 |
10 |
100 |
上课 |
嵌入式 |
|
|
|
16:00 |
17:20 |
|
80 |
自习 |
|
|
|
缺陷记录日志 学生: 林彦汝 日期: 3/19/2015 教员: 王老师 程序号: 5 |
||||||
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/19 |
1 |
|
编码 |
编译 |
1min |
|
描述:第一题的答案一直为零,画蛇添足给保存答案的数组赋值。 |
||||||
3/19 |
2 |
|
编码 |
编译 |
2min |
|
描述:保存题目答案的数组result[ ]和保存用户输入答案的数组answer[ ]弄混淆,以致判断功能无法实现。 |
||||||
3/19 |
3 |
|
编码 |
编译 |
0.5min |
|
描述:程序中“;”错打成“,”。 |
||||||
3/19 |
4 |
|
编码 |
编译 |
1min |
|
描述:除法的结果都是整数,没有小数,通过对被除数强制转换数据类型,int—double。 |