• 四则运算2


    在第一次的基础上,本次老师又提出了新的要求:

    1.题目避免重复

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

    3.控制参数
    是否有乘除法

    是否有括号(最多支持十个数参与运算)

    数值范围

    加减有无负数
    除法有无余数

    分析:

    首先需要解决有无括号的问题,再在它的基础上完成其他要求。基本思路是定义两个数组分别存放操作数和运算符,再将两个数组合成一个数组,在运算符和操作数前后开辟空间来存放括号,开辟的空间内若操作数前随机显示为左括号,则在其后几个操作数后添加右括号,若有操作数左右括号都存在,则左右括号位置置为空,避免重复没有想到明确的思路,数量可在循环里添加变量实现,乘除法通过if else语句,数值范围用输入的数带入随机函数产生,后两项着实理解不透

    源代码:

    #include<iostream>
    #include<time.h>
    using namespace std;
    void main()
    {
        srand((int)time(NULL));//设置随机种子,使得程序每次运行的结果都不同
        int subject_number;    //出题数量
        int a[100];    //将数字存入数组a
        char b[100];    //将运算符存入数组b
        char c[100];    //将左括号存入数组c
        char d[100];    //将右括号存入数组d
        int  e[100];    //合成总数组
        char random_bracket;    //随机生成括号
        int random_number = 0;    //运算数字字数
        int i = 0;
        int operation_character = 0;    
        int fuhao = 0;    //判定运算符
        int j;
        int k;
        int l;
        int p;
        int min, Max;    //定义输入的值得范围的最值
        int random_have;       //定义左、右括号的是否存在的随机变量
        char review_array;    //检查数组中左右括号之间是否还存在左右括号
        char left;    //左括号变量
        char right;    //左括号变量
        char sign = 'a ';   //符号赋初值
        bool result = 0;   //定义是否需要乘除法的变量
        bool need = 0;
        random_number = rand() % 10 + 2;    //随机生成2~10个数
        cout << "*************************************************" << endl;
        cout << "请输入产生数字的范围(最小和最大):";
        cin >> min >> Max;
        cout << "是否需要乘除法[0(yes)/1(no)]";
        cin >> result;
        cout << "请输入出题数量";
        cin >> subject_number;
            if (0 == result)
            {
                for (j = 0; j < subject_number; j++)    //设置题目数量
                {
                    for (i = 0; i < random_number; i++)
                    {
                        operation_character = rand() % (Max - min + 1) + min;
                        a[i] = operation_character;
                        fuhao = rand() % 4 + 1;
                        switch (fuhao)
                        {
                        case 1:sign = '+'; break;
                        case 2:sign = '-'; break;
                        case 3:sign = '*'; break;
                        case 4:sign = '/'; break;
                        }
                        b[i] = sign;
                        e[4 * i] = ' ';
                        e[4 * i + 1] = a[i];
                        e[4 * i + 3] = b[i];
                        e[4 * i + 2] = ' ';
                    }
                    random_have = rand() % 2 + 1;  //随机确定有无括号
                    switch (random_have)
                    {
                    case 1:
                        left = '(';
                        right = ')';
                        break;
                    case 2:
                        left = ' ';
                        right = ' ';
                        break;
                    }
    
                    for (i = 0; i < random_number; i++)
                    {
                        for (k = 0; k < (random_number - 1) / 2; k++)
                        {
                            e[4 * k] = left;
                            if (left == '(')
                            {
                                e[4 * k + 10] = right;
                            }
                        }
                        if ((e[4 * i] == left)&&(e[4 * i + 2] == right))
                        {
                            e[4 * i] = ' ';
                            e[4 * i + 2] = ' ';
                        }
                        cout << (char)e[4 * i] << e[4 * i + 1] << (char)e[4 * i + 2] << (char)e[4 * i + 3];
                    }
    
                    cout << '' << "=" << endl;//使用退格符''来消除数组b最后一个多出来的符号
                }
            }
            else
            {
                for (j = 0; j < subject_number; j++)    //设置题目数量
                {
                    for (i = 0; i < random_number; i++)
                    {
                        operation_character = rand() % (Max - min + 1) + min;
                        a[i] = operation_character;
                        fuhao = rand() % 4 + 1;
                        switch (fuhao)
                        {
                        case 1:sign = '+'; break;
                        case 2:sign = '-'; break;
                        case 3:sign = '*'; break;
                        case 4:sign = '/'; break;
                        }
                        b[i] = sign;
                        e[4 * i] = ' ';
                        e[4 * i + 1] = a[i];
                        e[4 * i + 3] = b[i];
                        e[4 * i + 2] = ' ';
                    }
                    random_have = rand() % 2 + 1;  //随机确定有无括号
                    switch (random_have)
                    {
                    case 1:
                        left = '(';
                        right = ')';
                        break;
                    case 2:
                        left = ' ';
                        right = ' ';
                        break;
                    }
    
                    for (i = 0; i < random_number; i++)
                    {
                        for (k = 0; k < (random_number - 1) / 2; k++)
                        {
                            e[4 * k] = left;
                            if (left == '(')
                            {
                                e[4 * k + 10] = right;
                            }
                        }
                        if ((e[4 * i] == left) && (e[4 * i + 2] == right))
                        {
                            e[4 * i] = ' ';
                            e[4 * i + 2] = ' ';
                        }
                        cout << (char)e[4 * i] << e[4 * i + 1] << (char)e[4 * i + 2] << (char)e[4 * i + 3];
                    }
    
                    cout << '' << "=" << endl;//使用退格符''来消除数组b最后一个多出来的符号
                }
            }
    }

    结果截图:

     

    实验总结:

    此次作业完成的质量很差,用了很长时间,试了很多思路,发现基础还是薄弱,老师提示的递归思路自己不会使用,数组使用过程也是磕磕绊绊小错不断,if()里两个等号的错误还是会犯,基本功能缺失很多,虽然本次作业完成质量不高,但是给了自己信心,让自己发现了很多弱点,要多看书,要有大致完全的思路再开始动手,不要惧怕新知识

  • 相关阅读:
    01
    王天宇0703作业
    0706作业
    0705作业
    0704作业
    0703作业
    数据库死锁语句脚本
    项目问题 : 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
    工厂模式(Factory Patter)
    修改DevExpress中英文提示,将英文改为中文
  • 原文地址:https://www.cnblogs.com/brucekun/p/5267849.html
Copyright © 2020-2023  润新知