zoukankan      html  css  js  c++  java
  • 四则运算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。

     

  • 相关阅读:
    【机器学习】scikit-learn中的特征选择小结
    【机器学习】scikit-learn中的数据预处理小结(归一化、缺失值填充、离散特征编码、连续值分箱)
    【机器学习】随机森林原理与调参小结
    用find命令巧查目录下文件的个数
    git
    数据库删除主键
    Linux安装JDK
    计算机进制
    java虚拟机故障处理工具
    线程的六种状态
  • 原文地址:https://www.cnblogs.com/mumulucky/p/4351110.html
Copyright © 2011-2022 走看看