zoukankan      html  css  js  c++  java
  • 30道四则运算题的第三次补充

    30道四则运算题目

    一、题目:

    用C++编写程序,打印30道四则运算题目;

      要求:1、题目避免重复;
           2
    、可定制(数量/打印方式);
           3
    、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除    法有无余数、否支持分数 (真分数, 假分数, …)是否支持小数 (精确到多少位)、打印中每行的间隔可调整;

     二、设计思路:

    要求1:题目避免重复

             C++中用函数srand()能够避免生成重复的随机数,一定的数值范围只能生成一定数量的随机运算题目:满足一个关系:num>(4*(num2-num1)^2)即:题目数应小于4倍的可用整数的平方。满足这个条件才能不重复。

    要求2:可定制(数量/打印方式);

             For()循环中的30这个数字,变成一个从键盘输入的参数num;

             打印方式:在循环的过程中要根据用户输入的每行几个式子,间距进行打印。

    要求3:

    A、是否有乘除法

            把参数c进行控制:除法c=0;加法c=1;减法c=2;乘法c=3;

             用if控制用户输入的是否要乘法、除法

             Rand()随机生成c。

    B、是否有括号

             程序要改进成混合运算;if 0 cout<<;else cout<<

    C、数值范围

             提示语句;新参数

             参数a、b进行控制,新参数作为随机函数后面的控制条件;

    D、加减有无负数

             控制case 2的内容;a>b或者 a<b;

    E、除法余数

             如果用户输入的结果判断出需要除法式子,则进行判断是不是要能够整除。

             不要求整除的话,判断除数是否为0,若为0,a、b颠倒位置输出即可;

            若要求整除,重新生成a、b,直到生成合适a、b为止,此处用到while循环。

    F是否支持分数(真分数,假分数)

             输入提示语句

             真分数:结果输出形式a/b原样输出

    G是否支持小数

             输入提示语句;        

    H打印中每行的间隔可调整?

            在每道题目输出的时候,判断i与k是否是整除关系。是对话输出回车,进行排版。

    三、源代码:

      1 /**
      2 作者:程鹏远
      3 题目:30道2年纪四则运算题目
      4 */
      5 #include <iostream.h>
      6 #include <stdlib.h>
      7 #include <conio.h>
      8 int main()
      9 {
     10     //初始化
     11     int a,b,c;    
     12     int num1,num2;
     13     int num;
     14     int chufa;
     15     int k,jiange;
     16     int zhengchu;
     17     int j=0;
     18     int chengfa;
     19     int con;
     20     //请输入数的范围,中间用空格隔开:
     21     cout<<"请输入数的范围,中间用空格隔开:";
     22     cin>>num1>>num2;
     23 
     24     //控制题目的个数,num
     25     cout<<"其输入要出多少道题目:";
     26     cin>>num;
     27     
     28     if(num>(4*(num2-num1)^2))
     29     {
     30         cout<<"您输入的题目数量太多,会造成重复,请重新输入数目:";
     31         cin>>num;
     32     }
     33 
     34     //打印格式
     35     cout<<"一行几道题,行间距是几,中间空格:";
     36     cin>>k>>jiange;
     37     if(jiange>=5||jiange<0)
     38     {
     39         cout<<"您输入的间距太大或为负数,请重输:";
     40         cin>>jiange;
     41     }
     42     
     43     //是否要除法
     44     cout<<"是否要除法?是输入1,否输入0:";
     45     cin>>chufa;
     46     if(chufa==1)
     47     {
     48         cout<<"是否要有余数,是输入1,否输0:";
     49         cin>>zhengchu;
     50     }
     51     
     52     //是否要乘法
     53     cout<<"是否要乘法,是输入1,否输入0:";
     54     cin>>chengfa;
     55 
     56     cout<<endl;
     57     for(int i=0;i<num;i++)
     58     {    
     59         cout<<i+1<<"";        
     60         a=(rand()%(num2-num1+1))+num1;
     61         b=(rand()%(num2-num1+1))+num1;
     62         
     63         if(chufa==1)
     64         {
     65             if(chengfa==1)
     66             {
     67                 c=rand()%4;//0-3
     68             }
     69             else
     70             {
     71                 c=rand()%3;//0-2
     72             }
     73         }
     74         else
     75         {
     76             if(chengfa==1)
     77             {
     78                 c=rand()%3+1;//1-3
     79             }
     80             else
     81             {
     82                 c=rand()%2+1;//1-2
     83             }
     84         }
     85 
     86         switch (c)
     87         {
     88             case 1:
     89                 cout<<a<<"+"<<b<<"="<<"	";
     90                 break;
     91             case 2:
     92                 if(a>b)
     93                 {
     94                     cout<<a<<"-"<<b<<"="<<"	";
     95                 }
     96                 else
     97                 {
     98                     cout<<b<<"-"<<a<<"="<<"	";
     99                 }
    100                 break;
    101             case 3:            
    102                 cout<<a<<"*"<<b<<"="<<"	";
    103                 break;
    104             case 0://除法
    105                 if(zhengchu==1)//有余数
    106                 {
    107                     if(b==0)
    108                     {
    109                         cout<<b<<"/"<<a<<"="<<"	";
    110                     }
    111                     else
    112                     {
    113                         cout<<a<<"/"<<b<<"="<<"	";    
    114                     }
    115 
    116                     
    117                 }
    118                 else
    119                 {
    120                     while((j<100000)&&(a!=0)&&(b!=0)&&(a%b==0))
    121                     {
    122                         cout<<a<<"/"<<b<<"="<<"	";
    123                         j++;
    124                     }
    125                     if((a!=0)&&(b!=0)&&(a%b==0))
    126                     {
    127                         cout<<a<<"/"<<b<<"="<<"	";
    128                         //i++;
    129                     }
    130                     else
    131                     {
    132                         int j=0;
    133                         while(j<100000)
    134                         {
    135                             a=(rand()%(num2-num1+1))+num1;
    136                             b=(rand()%(num2-num1+1))+num1;
    137                             if((a!=0)&&(b!=0)&&(a%b==0))
    138                             {
    139                                 cout<<a<<"/"<<b<<"="<<"	";
    140                                 //i++;
    141                                 j=100000;
    142                                 j++;
    143                             }
    144                             else
    145                             {
    146                                 j++;
    147                             }
    148                         }
    149                     }                                
    150                 }
    151                 break;    
    152         } 
    153         
    154         
    155         if((i+1)%k==0)
    156         {
    157             cout<<endl;
    158             for(int m=0;m<jiange;m++)
    159             {
    160                 cout<<endl;
    161             }
    162         }
    163                 
    164     }
    165     //继续吗?
    166     cout<<"继续吗?是输入1,否输入0:"<<endl;
    167     cin>>con;
    168     if(con==1)
    169     {
    170         cout<<endl;
    171         main();
    172     }
    173     else
    174     {
    175         return 0;
    176     }
    177     getch();
    178     return 0;
    179 }

     

    四、结果截图

    五、总结:

      1.遇到问题:

        Rand()获取随机数,他的范围问题,是不是包括边界值;

        一定数目的题目才能够在满足数字的范围内不重复,运用高中排列组合知识进行讨论解决;

        这么多要求,这些要求是有顺序的,例如,必须先有判断是不是有除法,才能继续判断是不是要余数,如果没有除法,就不用判断是不是要余数,避免用户的困惑;

        要求无余数,一次循环过来的a、b是不满足条件的,需要对while循环熟练使用才能快速生成有用的a、b;

        For循环内部是包括自加1机制的,不用在循环的最后加1;

      2.收获

        一个软件的编写一定是从简单的小模块到大的模块,是从小到要求实现,到全部的要求实现。开始看见题目不要太着急,先对题目进行分解,慢慢就能做出完整的题目。

      3.体会

        先对题目要有一个自己的设计思路,思路成熟后才进行编写代码环节。编写的时候遇到小问题,可以百度相应的知识点,也可以问经验丰富的同学。

    一、项目计划总结:

    周活动总结表

    姓名:程鹏远                                                 日期:3月15日

    日期       任务

    听课

    编写程序

    阅读课本

    准备考试

    日总计

    周日

     

    205

     

     

     205

    周一

     

     

     

     

     

    周二

     

     

     

     

     

    周三

     

     

     

     

     

    周四

     

     

     

     

     

    周五

     

    105

     

     

     105

    周六

     

     

     

     

     

    周总结

     

     

     

     

     

    阶段时间和效率                                           第2 周数(上一次周活动表的周数+1):

    不包括上一周在内的累计时间                                                                         

    总计

     

     

     

     

     

     

     

    平均

     

     

     

     

     

     

     

    最大

     

     

     

     

     

     

     

    最小

     

     

     

     

     

     

     

    以前各周的累计时间                                                                                    

    总计

     310

     

     

     

     

     

     

    平均

     155

     

     

     

     

     

     

    最大

     205

     

     

     

     

     

     

    最小

     105

     

     

     

     

     

     

    二、时间记录表:

    学生        程鹏远                                              日期     315      

    教师        王建民                                              课程      软件工程       

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    3/15

    1:00

    4:37

    12min

    3小时25分钟

    编写30道四则运算题目

     

     

    三、缺陷记录日志:

    学生    程鹏远                                

    日期   3月15日                                                                                      

    教员       王建民                                             

    程序号       1                                  

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

     3/15

     01

    20

     编码

     编码

     1分钟

     

      描述:不会用rand()函数;

     

     02

    制表符” ”

     编码

     编译

     2分钟

     

    描述:不会用制表符“ ”

     

     03

     For()

     编码

    编译

    7分钟

     

     描述:for循环内部多层嵌套,内部放入了i++;

     

     

     

     

     

     

     

     

  • 相关阅读:
    解决 ThinkPHP Undefined class constant 'MYSQL_ATTR_INIT_COM
    Linux 下 Redis 服务 Shell启动脚本
    关于 Apache 2.4 配置PHP时的错误记录
    关于 linux ssh 的配置.
    Linux 编译安装 apache 2.4
    linux 系统下配置安装 java jdk 图文流程
    关于 jsp:include 传参的用法
    leetcode c++做题思路和题解(3)——栈的例题和总结
    leetcode c++做题思路和题解(4)——队列的例题和总结
    leetcode c++做题思路和题解(2)——链表的例题和总结
  • 原文地址:https://www.cnblogs.com/zhaixing/p/4340030.html
Copyright © 2011-2022 走看看