四则运算第二版

#include<iostream>
#include<time.h>
#include<string>
#include<windows.h>
using namespace std;

//生成随机数
int random_number(int min,int max)
{
    srand(time(NULL));
    int result = rand()%(max-min+1)+min;//生成指定范围内的随机数
    return result;
}

void yunsuan(int Testnum, int ifcc, int iffs, int ifys)
{
    int ch1, ch2, ch3, ch4;
    char sign;
    int m, min, max;
    int i, j, c;
    for (i = 0; i < Testnum; i++)
    {
        int number = random_number(2, 10);// ;//number为参与运算的参数个数
        for (int j = 1; j <= number; j++)
        {
            int num = rand() % 100 + 1;
            Sleep(1000);
            //是否有乘除
            if (ifcc == 1)
            {
                ch1 = random_number(1, 4);//随机生成运算符号
                switch (ch1)
                {
                case 1:sign = '+'; break;
                case 2:sign = '-'; break;
                case 3:sign = '*'; break;
                case 4:sign = '/'; break;
                default:cout << "有错误!" << endl; break;
                }
                if (j == number)
                    cout << num << endl;
                else
                    cout << num << sign ;
            }
            else
            {
                ch1 = random_number(1, 2);
                switch (ch1)
                {
                case 1:sign = '+'; break;
                case 2:sign = '-'; break;
                default:cout << "有错误" << endl; break;
                }
                if (j == number)
                    cout << num << endl;
                else
                    cout << num << sign;
            }
        }
        cout << endl;

    }
}
int main()
{
    int Testnum, ifcc, iffs, ifys;
    int m, min, max;
    cout << "*********四则运算********" << endl;
    cout << "请输入题目的数量: " << endl;
    cin >> Testnum;
    cout << "请输入数字产生的范围(min-max)" << endl;
    cin >> min >> max;
    m = max - min + 1;
    //1:代表有  0:代表无
    cout << "加减是否允许有负数:(1/0)" << endl;
    cin >> iffs;
    cout << "是否有乘除:(1/0)" << endl;
    cin >> ifcc;
    cout << "除法是否有余数:(1/0)" << endl;
    cin >> ifys;
    yunsuan(Testnum, ifcc, iffs, ifys);
    system("pause");
}

题目要求:在第一次原有的功能的基础上增加以下功能:

1.避免题目的重复

2.可定制(可定制题目数量\打印方式)

3.控制参数的生成:
  a.是否允许乘除发的生成

    b.是否允许有括号的生成(最多支持十个数参与运算)

    c.可以设定数值范围的范围

  d.是否负数参与运算

    e.除法是否有余数

设计思路:

      这次实验相比第一次 难了许多 老师再提示了用栈实现 自己在看了数据结构书之后 还是不能能完成 也想过编译原理中的算符优先等等 尝试了之后还是失败了 因为基础薄弱的原因 这次实验完成的很困难

      遇到一个问题很是没有想到:在添加了时间种子依然得到全是同样的随机值 浪费了我很多时间 一度怀疑我的循环是不是有问题 为什么rand()只执行了一次 后来单步执行发现是因为执行速度过快 最后添加了sleep(1000)才得到了结果

      整体就是 主函数做简单的输出 随机数单独写出一个函数 运算过程单独一个函数 因为以前的练习确实少 数据结构也没学好 确实写得很糟心

         

 

posted @ 2016-03-12 17:33  来自代码的诅咒  阅读(202)  评论(2编辑  收藏  举报