四则运算3

  基于前两次四则运算的开发,再把程序扩展一下:让程序能接受用户输入答案,并判定对错,最后给出总共对/错的数量。

 

思路:

  在原来的基础上,增加两个数组,一个保存题目的正确答案(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。

 

原文地址:https://www.cnblogs.com/mumulucky/p/4351110.html