• 四则运算2


      根据课上思路的继续,将四则运算升级。我感觉要将所有的要求都实现有些难度,因此选择实现几个简单的功能。

      二次思路:

      1、在前面出30道两个随机产生的二位数四则运算的基础上,先解决避免题目中出现重复,与同学们讨论调用函数解决。

      2、之前是规定30道题,提示用户定制题目数量,在for语句循环显示题目前进行手动输入,输出至符合要求的题目数量时停止;打印方式同样通过给出提示,用户进行输入来选择实现每行显示多少道题目。

      3、关于几个运算条件,我想按照是否有乘除法、是否负数及参与运算数值的取值范围这样的顺序,用多个层次嵌套的方法来实现。例如说是否有乘除法,通过屏幕提示进行选择,出现两个分支,0是有乘除法的四则运算,1则只用考虑加减法;在选择0有乘除法后,继续进行选择运算中是否有负数,也是两个分支,同理0是有负数参与,1是没有负数(即全为正数);再在选择0有负数的情况下讨论数值范围、在选择1有负数的情况下讨论数值范围......就是分支上再分支。

     

      1 #include<iostream.h>
      2 #include<stdlib.h>
      3 #include<time.h>
      4 
      5 int main()
      6 {
      7     srand(time(NULL));      //题目避免重复
      8     int value1,value2,op;   //两个整数,运算符
      9     int amount,mount;             //题目数量
     10     int erji;               //二级运算,即乘除法
     11     int number;             //正负数
     12     int range;              //数值范围
     13 
     14     cout<<"请定制题目的数量(填一个>0的整数):";
     15     cin>>amount;
     16     while(amount<=0)
     17     {
     18         cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";
     19         cin>>amount;
     20     }
     21 
     22     cout<<"题目中是否有乘除法(填0为是,1为否):";
     23     cin>>erji;
     24     while(erji!=0 && erji!=1)
     25     {
     26         cout<<"不合法!"<<endl<<"请重新输入(填0为有乘除法,1为无乘除法):";
     27         cin>>erji;
     28     }
     29     if(erji==0)
     30     {
     31 
     32         cout<<"题目中是否有负数(填0为是,1为否):";
     33         cin>>number;
     34         while(number!=0 && number!=1)
     35         {
     36             cout<<"不合法!"<<endl<<"请重新输入(填0为有负数,1为无负数):";
     37             cin>>number;
     38         }
     39         if(number==0)
     40         {
     41 
     42             cout<<"请输入数值的最小边界(填一个<0的整数):";
     43             cin>>range;
     44             while(range>=0)
     45             {
     46                 cout<<"不合法!"<<endl<<"请重新输入(填一个<0的整数):";
     47                 cin>>range;
     48             }
     49             cout<<"每行打印题目的数量(每行):";
     50             cin>>mount;
     51 
     52             cout<<endl<<""<<amount<<"道包含乘除法的负数运算(范围:"<<range<<"~0)"<<endl;
     53             for(int i=0;i<amount;i++)
     54             {
     55                 cout<<""<<i+1<<"";
     56                 value1=rand()%range+range/2;
     57                 value2=rand()%range+range/2;
     58                 op=rand()%4;
     59                 switch(op)
     60                 {
     61                 case 0:
     62                     cout<<value1<<" + "<<value2<<"="<<"		";    //
     63                     break;
     64                 case 1:
     65                     cout<<value1<<" - "<<value2<<"="<<"		";    //
     66                     break;
     67                 case 2:
     68                     cout<<value1<<" x "<<value2<<"="<<"		";    //
     69                     break;
     70                 case 3:
     71                     cout<<value1<<" ÷ "<<value2<<"="<<"		";    //
     72                     break;
     73                 }
     74                 if((i+1)%mount==0)
     75                 {
     76                     cout<<endl;
     77                 }
     78             }
     79         }
     80         else
     81         {
     82 
     83             cout<<"请输入数值的最大边界(填一个>0的整数):";
     84             cin>>range;
     85             while(range<0)
     86             {
     87                 cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";
     88                 cin>>range;
     89             }
     90             cout<<"每行打印题目的数量(每行):";
     91             cin>>mount;
     92 
     93             cout<<endl<<""<<amount<<"道包含乘除法的非负数运算(范围:0~"<<range<<""<<endl;
     94             for(int i=0;i<amount;i++)
     95             {
     96                 cout<<""<<i+1<<"";
     97                 value1=rand()%range;
     98                 value2=rand()%range;
     99                 op=rand()%4;
    100                 switch(op)
    101                 {
    102                 case 0:
    103                     cout<<value1<<" + "<<value2<<"="<<"		";    //
    104                     break;
    105                 case 1:
    106                     cout<<value1<<" - "<<value2<<"="<<"		";    //
    107                     break;
    108                 case 2:
    109                     cout<<value1<<" x "<<value2<<"="<<"		";    //
    110                     break;
    111                 case 3:
    112                     cout<<value1<<" ÷ "<<value2<<"="<<"		";    //
    113                     break;
    114                 }
    115                 if((i+1)%mount==0)
    116                 {
    117                     cout<<endl;
    118                 }
    119             }
    120         }
    121     }
    122     else
    123     {
    124 
    125         cout<<"题目中是否有负数(填0为是,1为否):";
    126         cin>>number;
    127         while(number!=0 && number!=1)
    128         {
    129             cout<<"不合法!"<<endl<<"请重新输入(填0为有负数,1为无负数):";
    130             cin>>number;
    131         }
    132         if(number==0)
    133         {
    134 
    135             cout<<"请输入数值的最小边界(填一个<0的整数):";
    136             cin>>range;
    137             while(range>=0)
    138             {
    139                 cout<<"不合法!"<<endl<<"请重新输入(填一个<0的整数):";
    140                 cin>>range;
    141             }
    142             cout<<"每行打印题目的数量(每行):";
    143             cin>>mount;
    144 
    145             cout<<endl<<""<<amount<<"道不包含乘除法的负数运算(范围:"<<range<<"~0)"<<endl;
    146             for(int i=0;i<amount;i++)
    147             {
    148                 cout<<""<<i+1<<"";
    149                 value1=rand()%range+range/2;
    150                 value2=rand()%range+range/2;
    151                 op=rand()%2;
    152                 switch(op)
    153                 {
    154                 case 0:
    155                     cout<<value1<<" + "<<value2<<"="<<"		";    //
    156                     break;
    157                 case 1:
    158                     cout<<value1<<" - "<<value2<<"="<<"		";    //
    159                     break;
    160                 }
    161                 if((i+1)%mount==0)
    162                 {
    163                     cout<<endl;
    164                 }
    165             }
    166         }
    167         else
    168         {
    169 
    170             cout<<"请输入数值的最大边界(填一个>0的整数):";
    171             cin>>range;
    172             while(range<0)
    173             {
    174                 cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";
    175                 cin>>range;
    176             }
    177             cout<<"每行打印题目的数量(每行):";
    178             cin>>mount;
    179 
    180             cout<<endl<<""<<amount<<"道不包含乘除法的非负数运算(范围:0~"<<range<<""<<endl;
    181             for(int i=0;i<amount;i++)
    182             {
    183                 cout<<""<<i+1<<"";
    184                 value1=rand()%range;
    185                 value2=rand()%range;
    186                 op=rand()%2;
    187                 switch(op)
    188                 {
    189                 case 0:
    190                     cout<<value1<<" + "<<value2<<"="<<"		";    //
    191                     break;
    192                 case 1:
    193                     cout<<value1<<" - "<<value2<<"="<<"		";    //
    194                     break;
    195                 }
    196                 if((i+1)%mount==0)
    197                 {
    198                     cout<<endl;
    199                 }
    200             }
    201         }
    202     }
    203     return 0;
    204 }

    总结:

      程序是选择最容易想到但很繁琐的方式实现的,敲完全部代码下来发现有很多一样或类似的,以后可以尝试调用函数,这样会简单很多。

      1、最简单的错误:在判断输入的数是否符合要求时全部都用if结构,结果第一次不符合要求会提示,而连续输错两次就继续另一个要求的选择,后来改用while实现。

      2、在负数的输出上,开始在程序中限制了两个数其中一个为负数或者两个都为负数:value=rand()%range+range,后来我想了想改成了value=rand()%range+range/2,这样就能使随机产生正负数了,同时又出现另一个局限没解决,产生数的范围是我想要输出数值范围的一半。

     

      这次程序感受很深,以前没有好好学,参考别的同学的代码包含数据结构、链表的都看不太懂,只能用最麻烦的方法实现几个简单的功能了。

    项目计划总结

    周活动总结表

    姓名:林彦汝                                                    日期:3/14/2015

    任务

    日期

    听课

    编写程序

    阅读课本

    准备考试

     

     

    日总计

    周日

     

     

     

     

     

     

     

    周一

     

     

     

     

     

     

     

    周二

     

     

     

     

     

     

     

    周三

    100

    60

    60

     

     

     

    220

    周四

    200

    50

    30

     

     

     

    280

    周五

    200

    125

    30

     

     

     

    355

    周六

     

    120

    100

     

     

     

    220

    周总计

     

     

     

     

     

     

     

     

    阶段时间和效率                                                         周数:1

    总计

     

     

     

     

     

     

     

    平均

     

     

     

     

     

     

     

    最大

     

     

     

     

     

     

     

    最小

     

     

     

     

     

     

     

    以前各周的累计时间

    总计

     

     

     

     

     

     

     

    平均

     

     

     

     

     

     

     

    最大

     

     

     

     

     

     

     

    最小

     

     

     

     

     

     

     

    时间记录日志

    学生:林彦汝                                                     日期:3/14/2015

                                                                     课程:软件工程

    日期

    开始

    结束时间

    中断时间

    净时间

    活动

    备注

    C

    U

    3/11

    8:00

    9:50

    10

    100

    上课

    《计算机网络》

     

     

     

    12:40

    13:00

     

    20

    找资料

    C/C++

     

     

     

    16:00

    17:00

     

    60

    编程

    四则运算

     

     

     

    22:30

    23:00

     

    30

    阅读

    《梦断代码》

     

     

    3/12

    18:00

    20:00

    5

    50

    作业

    休息

     

     

     

    20:20

    21:00

     

    50

    编程

    四则运算

     

     

     

    22:30

    23:00

     

    30

    阅读

    《梦断代码》

     

     

    3/13

    18:30

    21:00

    10+10+5

    125

    编程

    四则运算

     

     

     

    22:30

    23:00

     

    30

    阅读

    《梦断代码》

     

     

    3/14

    9:00

    10:00

     

    120

    编程

    四则运算

     

     

     

    10:30

    11:30

     

    60

    作业

     

     

     

     

    14:00

    16:00

    10+10

    100

    写报告

     

     

     

    缺陷记录日志

    学生:    林彦汝

    日期:    3/14/2015

    教员:    王老师

    程序号:  2

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

    3/12

    1

     

    设计

    编译

    2min

     

    描述:不能连续用if判断输入的数是否合法,改成while结构。

    3/14

    2

     

    编码

    编译

    0.5min

     

    描述:出现中文“;”

     

  • 相关阅读:
    hihocoder #1138 : Islands Travel
    关于c中的inline
    LUOGU P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    LUOGU P1908 逆序对
    归并排序 (模板)
    tyvj 1864 守卫者的挑战
    loj #10001. 「一本通 1.1 例 2」种树
    bzoj 1026: [SCOI2009]windy数
    BZOJ 4521: [Cqoi2016]手机号码
    LUOGU 3089 后缀排序(模板)
  • 原文地址:https://www.cnblogs.com/mumulucky/p/4337941.html
Copyright © 2020-2023  润新知