随机生成四则运算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;
}

得到的不同的结果的截图

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

项目计划总结:

日期&&任务听课编写程序阅读相关书籍网上查找资料  日总计
周一100201020150
周二 30  30
周三 60101080
周四10020  120
周五 100 30130
周六  30 30
周日  30 30
周总计2002308060570

时间记录日志

日期开始时间结束时间中断时间净时间活动备注
3/714:0015:5010100听课软件工程上课
 16:1416:40620编写程序编写老师布置的作业
 17:1017:20 10阅读书籍《构建之法》《梦断代码》
 21:0021:25520网上查找资料 
3/821:0021:30 30编写程序作业2
3/921:4422:44 60编写程序作业2
 22:0022:20 10阅读书籍《构建之法》
 22:4022:50 10查找资料 
3/1016:3516:55 20阅读《梦断代码》
 14:0015:50 100上课软件工程上课
3/1115:3517:15 120编程作业2
 17:3017:45 15查找资料 
3/129:009:30 30阅读书籍计划阅读《构建之法》
3/1319:0019:30 30阅读书籍计划阅读《梦断代码》

 

缺陷记录日志

日期编号类型引入阶段排除阶段修复时间备注
3/9120编码编译1MINswitch后case':'放错了位置
3/11220编码编译1MIN漏掉了;

 

转载于:https://www.cnblogs.com/GloryYT/p/5266994.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值