• 四则运算2


    一,问题描述:

      要求:
        1、题目避免重复
        2、可定制(数量/打印方式)
        3、可以控制下列参数:是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数,是否支持分数(真分数假分数),

         是否支持小数(精确到多少位),打印中每行的间隔。

    二,设计思路

    1,题目避免重复:

    采用srand(time(NULL))实现

    2,可定制:

    a)定制数量:定义变量n,用户可以自己设置

    b)打印方式:可以自己选择每行可以打印几个

    3,可控制参数:

    a)是否支持乘除:编写了两个函数,一个有乘除,一个没有乘除,在主函数里设置判断语句用户自己选择,然后调用相应的函数。

    b)加减有无负数:设置判断语句,有负数为0,无负数为1.

    c)除法有无余数:在有乘除的函数里设置条件语句,0为有余数,1为无余数,如果用户选择与随机产生的不一致,则再随机取一个被除数。

    d)打印中每行的间隔:只要再换行时用一个循环语句,循环输出endl即可

    三,缺陷及问题

    由于能力有限是否有括号,是否支持分数,是否支持小数等功能没有实现

    四、源程序

    #include<iostream>

     #include<stdlib.h>

    using namespace std;

    #include<time.h>

     

    char get_oper(int n)

    {

          switch(n)

          {

          case 0:return '+';

          case 1:return '-';

          case 2:return '*';

          case 3:return '/';

          }

    }

     

    int main()

    {

          srand(time(NULL));

          int num1=0;

          int num2=0;

          int operators=0;

          int cpl;          //定义每行输出题目个数

          int range;           //定义数值范围

          int answer;        //定义计算结果

          int num;        //定义题目个数

          int JG;                //定义每行间隔

          char m;              //是否有乘除法

          char n;               //加减有无负数

          cout<<"请输入输出题目个数:";

          cin>>num;

          cout<<"请输入数值范围:";

          cin>>range;

          cout<<"请输入每行题目个数:";

          cin>>cpl;

          cout<<"请输入每行间隔:";

          cin>>JG;

          cout<<"是否有乘除法(Y/N?";

          cin>>m;

          cout<<"是否有负数(Y/N?";

          cin>>n;

          for(int i=1;i<=num;i++)

          {

                                            //随机产生运算的数和运算符。

               num1=rand()%range;

               num2=rand()%range;

               if(m=='Y')

               {

                     operators=rand()%4;

                     switch(operators)

                     {

                          case 0:answer=num1+num2;break;

                          case 1:answer=num1-num2;break;

                          case 2:answer=num1*num2;break;

                          case 3:answer=num1/num2;

                     }

               }

               else if(m=='N')

               {

                     operators=rand()%2;

                     switch(operators)

                     {

                          case 0:answer=num1+num2;break;

                          case 1:answer=num1-num2;break;

                     }

               }

               if(answer<range)

               {         

                     if(n=='Y')

                     {

                          cout<<num1<<get_oper(operators)<<num2<<"=";

                          for(int j=0;j<=JG;j++)

                                cout<<" ";

                                cout<<" ";

                          if(i%cpl==0)

                          {

                          cout<<endl;

                          }

                     }

                     else if(n=='N')

                     {

                          i--;

                     }

               }

               else

               {

                     i--;

               }   

          }

          return 0;

    }

    五、调试截图

    六、实验感想

    通过本次实验又学到了一些对于我来说新的知识,比如srand(time(NULL)),避免重复最开始想到的是最笨的思路,但是思路越简单实现就越难,自己没办法实现,后来了解到可以用srand()实现,又积累了一些编程知识,由于个人编程基础不足,所以部分功能没有实现,通过以后的学习还会回来慢慢改进该程序。

  • 相关阅读:
    BUPT复试专题—最小距离查询(2013)
    BUPT复试专题—中序遍历序列(2013)
    BUPT复试专题—统计节点个数(2013)
    BUPT复试专题—日期(2013)
    BUPT复试专题—内存分配(2014-2)
    BUPT复试专题—图像识别(2014-2)
    Catch That Cow(BFS)
    Pet(hdu 4707 BFS)
    Knight Moves(BFS,走’日‘字)
    Lost Cows(BIT poj2182)
  • 原文地址:https://www.cnblogs.com/cuipengbo/p/4339909.html
Copyright © 2020-2023  润新知