zoukankan      html  css  js  c++  java
  • 随机生成四则运算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 漏掉了;
  • 相关阅读:
    Thinkphp整合最新Ueditor编辑器
    git管理和自动部署项目
    [转]桶
    Linux下ThinkPHP网站目录权限设置
    ThoughtWorks FizzBuzzWhizz 代码实现
    windows bat脚本实现ftp自动下载 删除
    MCM/ICM2018美国大学生数学建模大赛D题翻译
    解决C/C++语言中全局变量重复定义的问题
    使用fabric解决百度BMR的spark集群各节点的部署问题
    解决百度BMR的spark集群开启slaves结点的问题
  • 原文地址:https://www.cnblogs.com/GloryYT/p/5266994.html
Copyright © 2011-2022 走看看