随机生成四则运算2

本次作业的题目:

老师又给二柱子增加了几个条件,对程序再做进一步的改进,要求满足如下条件:

1.题目避免重复。

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

3.可以控制下列参数:

  • 是否有乘除法
  • 是否有括号(最多可支持10个数参与计算)
  • 数值范围
  • 加减有无负数
  • 乘除有无余数

设计思想:  

     这次的内容有点多,而且个别功能有点难度,我没有把握全部实现,只能从最容易完成的功能入手,这次程序在第一次的基础上完成的,主要构建的功能如下

     1.利用循环可指定输出的题目数量

     2.分类乘除法与加减法

     3.在乘除法中,判断条件,余数为0,得到整除的除法式子

     4.在加减法中设置条件,使减数不小于被减数,得到的结果不为负数

     5.利用循环嵌套结构

PS:因为编程基础实在太差,花了时间自己独立完成,可是还是少了两个功能无法实现,而且代码量也写得很多,自己感觉是用的最笨的方法才有这么多代码,其中避免重复和括号的功能没有完成,请老师酌情给分,谢谢。

//2016 3.9 杨涛  软件工程作业 四则运算2
#include <iostream> 
#include <stdlib.h> 
#include <time.h> 
using namespace std;

int main()
{
    srand((unsigned)time(NULL));
    int numb1, numb3,j,Numb_Title,Num_Max,Mul_Div,Div,fuShu,Bracket;
    cout << "请输入你需要的题目数目:" << endl;
    cin >> Numb_Title;  //添加一个变量,满足第二组作业的条件之一
    cout << "输入你想得到的数值范围中的最大数(不包括这个数):" << endl;
    cin >> Num_Max;
    cout << "是否得到有括号的多部四则运算,有括号输入1,没有的话输入2:(没有完成这个功能,请选择2)" << endl;
    cin >> Bracket;
    if (Bracket == 2)//无括号的多功能运算
    {
        cout << "运算包括乘除法吗?包括的话输入1,不包括输入0:" << endl;
        cin >> Mul_Div;
        if (Mul_Div == 1)
        {
            cout << "整数除法符合整除吗?符合的话输入1,不符合的话输入0:" << endl;
            cin >> Div;
        }
        else
            Div = 0;
        cout << "加减的结果允许出现负数吗,允许输入1,不允许输入0:" << endl;
        cin >> fuShu;
        switch (fuShu)
        {
        case 0://加减不允许出现负数
            switch (Div)//1符合整除,0不符合整除
            {
            case 1://除法符合整除
                switch (Mul_Div)//包括的功能 是否包括乘除法
                {
                case 1://包括乘除法 情况 1 1 0
                    for (j = Numb_Title; j > 0; j--)//需要的题目数
                    {
                        char operator_lib[4] = { '+', '*', '/', '-' }; //定义运算符的可选类型
                        int rand_oper_idx = rand() % 4;                //然后随机生成,上述数组的下标就可以了。
                        char cur_oper = operator_lib[rand_oper_idx];
                        //生成整数运算
                        numb1 = rand() % Num_Max; //a取值为0~Num_Max-1
                        numb3 = rand() % Num_Max; //c取值为0~Num_Max-1
                        if (cur_oper == '/')//除法的情况下
                        {
                            numb3 = rand() % (numb1 - 1) + 1;//确保numb3小于numb1且排除0    
                            while (numb1%numb3 != 0)//确保整除
                            {
                                numb3 = rand() % (numb1 - 1) + 1; //c取值为0~Num_Max-1;
                            }
                            cout << numb1 << cur_oper << numb3 << " = " << endl;
                        }
                        else if (cur_oper == '-')
                        {
                            numb3 = rand() % numb1;//确保计算结果没有负数
                            cout << numb1 << cur_oper << numb3 << " = " << endl;
                        }
                        cout << numb1 << cur_oper << numb3 << " = " << endl;
                    }
                    break;
                }
                break;
            case 0://除法不符合整除
                switch (Mul_Div)//包括的功能 是否包括乘除法
                {
                case 1://包括乘除法
                    for (j = Numb_Title; j > 0; j--)//需要的题目数
                    {
                        char operator_lib[4] = { '+', '*', '/', '-' }; //定义运算符的可选类型
                        int rand_oper_idx = rand() % 4;                //然后随机生成,上述数组的下标就可以了。
                        char cur_oper = operator_lib[rand_oper_idx];
                        numb1 = rand() % Num_Max; //a取值为0~Num_Max-1
                        numb3 = rand() % Num_Max; //c取值为1~Num_Max-1
                        if (cur_oper == '/')//除法的情况下
                        {
                            if (numb3 == 0)
                            {
                                numb3 = rand() % (Num_Max - 1) + 1;
                            }
                            cout << numb1 << cur_oper << numb3 << " = " << endl;
                        }
                        else if (cur_oper == '-')
                        {
                            numb3 = rand() % numb1;//确保计算结果没有负数
                            cout << numb1 << cur_oper << numb3 << " = " << endl;
                        }
                        else
                        {
                            cout << numb1 << cur_oper << numb3 << " = " << endl;
                        }                                        
                    }
                    break;

                case 0:  //不包括乘除法
                    for (j = Numb_Title; j > 0; j--)
                    {
                        char operator_lib[2] = { '+', '-' }; //定义运算符的可选类型
                        int rand_oper_idx = rand() % 2;                //然后随机生成,上述数组的下标就可以了。
                        char cur_oper = operator_lib[rand_oper_idx];
                        numb1 = rand() % Num_Max; //a取值为0~Num_Max-1
                        numb3 = rand() % Num_Max; //c取值为0~Num_Max-1    
                        if (cur_oper == '-')
                        {
                            numb3 = rand() % numb1;//确保计算结果没有负数
                            cout << numb1 << cur_oper << numb3 << " = " << endl;
                        }
                        cout << numb1 << cur_oper << numb3 << " = " << endl;
                    }
                }
                break;
            }
            break;
        case 1://加减允许出现负数
            switch (Div)//1符合整除,0不符合整除
            {
            case 1://除法符合整除
                switch (Mul_Div)//包括的功能 是否包括乘除法
                {
                case 1://包括乘除法 情况 1 1 0
                    for (j = Numb_Title; j > 0; j--)//需要的题目数
                    {
                        char operator_lib[4] = { '+', '*', '/', '-' }; //定义运算符的可选类型
                        int rand_oper_idx = rand() % 4;                //然后随机生成,上述数组的下标就可以了。
                        char cur_oper = operator_lib[rand_oper_idx];
                        //生成整数运算
                        numb1 = rand() % Num_Max; //a取值为0~Num_Max-1
                        numb3 = rand() % Num_Max; //c取值为0~Num_Max-1
                        if (cur_oper == '/')//除法的情况下
                        {
                            numb3 = rand() % (numb1 - 1) + 1;//确保numb3小于numb1且排除0    
                            while (numb1%numb3 != 0)//确保整除
                            {
                                numb3 = rand() % (numb1 - 1) + 1; //c取值为0~Num_Max-1;
                            }
                            cout << numb1 << cur_oper << numb3 << " = " << endl;
                        }
                        else
                            cout << numb1 << cur_oper << numb3 << " = " << endl;
                    }
                    break;
                }
                break;
            case 0://除法不符合整除
                switch (Mul_Div)//包括的功能 是否包括乘除法
                {
                case 1://包括乘除法
                    for (j = Numb_Title; j > 0; j--)//需要的题目数
                    {
                        char operator_lib[4] = { '+', '*', '/', '-' }; //定义运算符的可选类型
                        int rand_oper_idx = rand() % 4;                //然后随机生成,上述数组的下标就可以了。
                        char cur_oper = operator_lib[rand_oper_idx];
                        numb1 = rand() % Num_Max; //a取值为0~Num_Max-1
                        numb3 = rand() % Num_Max; //c取值为1~Num_Max-1
                        if (cur_oper == '/')//除法的情况下
                        {
                            if (numb3 == 0)
                            {
                                numb3 = rand() % (Num_Max - 1) + 1;
                            }
                            cout << numb1 << cur_oper << numb3 << " = " << endl;
                        }
                        else
                        {
                            cout << numb1 << cur_oper << numb3 << " = " << endl;
                        }
                    }
                    break;
                case 0:  //不包括乘除法
                    for (j = Numb_Title; j > 0; j--)
                    {
                        char operator_lib[2] = { '+', '-' }; //定义运算符的可选类型
                        int rand_oper_idx = rand() % 2;                //然后随机生成,上述数组的下标就可以了。
                        char cur_oper = operator_lib[rand_oper_idx];
                        numb1 = rand() % Num_Max; //a取值为0~Num_Max-1
                        numb3 = rand() % Num_Max; //c取值为0~Num_Max-1    
                        cout << numb1 << cur_oper << numb3 << " = " << endl;
                    }
                }
                break;
            }
            break;
        }
    }
    else//有括号的多部四则运算实现
    {
//没有实现
    }
    return 0;
}

得到的不同的结果的截图

总结:这次花的时间真的挺长的,第一次对编程有这种较深刻的了解,感觉花的时间很值,能完成一部分功能我也很开心,毕竟都是独自写的,我会更加努力,学习更多相关知识,提高水平,希望在以后靠自己的水平完成所有的功能。

项目计划总结:

日期&&任务 听课 编写程序 阅读相关书籍 网上查找资料   日总计
周一 100 20 10 20 150
周二   30     30
周三   60 10 10 80
周四 100 20     120
周五   100   30 130
周六     30   30
周日     30   30
周总计 200 230 80 60 570

时间记录日志

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3/7 14:00 15:50 10 100 听课 软件工程上课
  16:14 16:40 6 20 编写程序 编写老师布置的作业
  17:10 17:20   10 阅读书籍 《构建之法》《梦断代码》
  21:00 21:25 5 20 网上查找资料  
3/8 21:00 21:30   30 编写程序 作业2
3/9 21:44 22:44   60 编写程序 作业2
  22:00 22:20   10 阅读书籍 《构建之法》
  22:40 22:50   10 查找资料  
3/10 16:35 16:55   20 阅读 《梦断代码》
  14:00 15:50   100 上课 软件工程上课
3/11 15:35 17:15   120 编程 作业2
  17:30 17:45   15 查找资料  
3/12 9:00 9:30   30 阅读书籍 计划阅读《构建之法》
3/13 19:00 19:30   30 阅读书籍 计划阅读《梦断代码》

缺陷记录日志

日期 编号 类型 引入阶段 排除阶段 修复时间 备注
3/9 1 20 编码 编译 1MIN switch后case':'放错了位置
3/11 2 20 编码 编译 1MIN 漏掉了;
原文地址:https://www.cnblogs.com/GloryYT/p/5266994.html