• 软件工程个人作业02


    设计思想:在原有程序的基础上进行添加,进而实现进阶内容

    1、利用动态数组判断题目重复(一维动态数组);

    2、利用if语句对是否有乘除法通过随机数范围不同进行分类;

    3、数值范围利用变量代替实际数值进而对随机数确定范围实现;

    4、加减有无负数以及除法有无余数都是在输出前进行判断,进而实现该操作;

    5、是否有括号(最多可以支持十个数参与计算)该功能目前还未实现,,,

    程序源代码:

    #include<iostream>
    #include<ctime>
    #include<cstdlib>
    using namespace std;
    void Out(int x,int x0,int y,int y0,int z,int z0,int &i,int n,int m0){
        switch(z0){//判断整数或分数
        case 0:{
            switch(z){//运算法则判断
            case 0:
                cout<<n<<"   ("<<x<<")"<<" + "<<"("<<y<<")"<<" ="<<endl;
                break;
            case 1:
                   cout<<n<<"    ("<<x<<")"<<" - "<<"("<<y<<")"<<" ="<<endl;
                break;
            case 2:
                   cout<<n<<"    ("<<x<<")"<<" * "<<"("<<y<<")"<<" ="<<endl;
                break;
            case 3:
                if(y!=0){//防止出现除数为零的情况
                    if(m0==2){
                        if(x%y==0)//余数判断(该操作可能会降低除法概率,,)
                            cout<<n<<"    ("<<x<<")"<<" / "<<"("<<y<<")"<<" ="<<endl;
                        else
                            i--;
                    }
                    if(m0==1)
                        cout<<n<<"    ("<<x<<")"<<" / "<<"("<<y<<")"<<" ="<<endl;
                }
                else
                    i--;
                break;
            }
            break;
               }
        case 1:{
            if(x0!=0&&y0!=0){
                switch(z){//运算法则判断
                case 0:
                    cout<<n<<"    ("<<x<<"/"<<x0<<")"<<" + "<<"("<<y<<"/"<<y0<<")"<<" ="<<endl;
                    break;
                case 1:
                    cout<<n<<"    ("<<x<<"/"<<x0<<")"<<" - "<<"("<<y<<"/"<<y0<<")"<<" ="<<endl;
                    break;
                case 2:
                    cout<<n<<"    ("<<x<<"/"<<x0<<")"<<" * "<<"("<<y<<"/"<<y0<<")"<<" ="<<endl;
                    break;
                case 3:
                    if(y!=0)//防止出现除数为零的情况
                        cout<<n<<"    ("<<x<<"/"<<x0<<")"<<" / "<<"("<<y<<"/"<<y0<<")"<<" ="<<endl;
                    else
                        i--;
                    break;
                }
            }
            else
                i--;
            break;
               }
        }
    }
    void Judje(int &x,int &x0,int &y,int &y0){//保证真分数以及最简分数
        int m,i1;
        if(x>x0){//保证x<x0即保证为真分数
            m=x;
            x=x0;
            x0=m;
        }
        for(i1=x0;i1>1;i1--){//保证为最简分数
            if(x%i1==0&&x0%i1==0){
                x=x/i1;
                x0=x0/i1;
            }
        }
        if(y>y0){//保证y<y0即保证为真分数
            m=y;
            y=y0;
            y0=m;
        }
        for(i1=y0;i1>1;i1--){//保证为最简分数
            if(y%i1==0&&y0%i1==0){
                y=y/i1;
                y0=y0/i1;
            }
        }
            
    }
    void main(){
        int x,x0,y,y0,z,z0,j,n,n0,m,m0=0;//定义变量
        int num,max,min;
        cout<<"请输入随机数范围(先最小值,后最大值)"<<endl;
        cin>>min;
        cin>>max;
        cout<<"请输入加减是否有负数:1、有;2、没有"<<endl;
        cin>>j;
        cout<<"请输入是否要有乘除法:1、有;2、没有"<<endl;
        cin>>m;
        if(m==1){
            cout<<"请输入除法是否有余数(分数不做区别):1、有;2、没有"<<endl;
            cin>>m0;
        }
        cout<<"请输入需要打印的题目数量(大于等于1):"<<endl;
        cin>>num;
        int *a=new int[num*5];//定义数组存储运算
        srand(time(0));//定义时间种子
        int i=0;
        if(min<0&&j==2)
            min=0;
        x = rand()%(max-min+1)+min;//产生随机数
        x0 = rand()%(max-min+1)+min;
        y = rand()%(max-min+1)+min;
        y0 = rand()%(max-min+1)+min;
        if(m==1)
            z = rand()%(3-0+1)+0;
        else
            z = rand()%(1-0+1)+0;
        z0 = rand()%(1-0+1)+0;//用于判断整数运算与分数运算}
        Judje(x,x0,y,y0);
        cout<<"序号"<<endl;
        n=1;
        Out(x,x0,y,y0,z,z0,i,n,m0);
        a[0]=x;
        a[1]=x0;
        a[2]=y;
        a[3]=y0;
        a[4]=z;
        for(i=1;i<num;i++){//利用FOR循环进行剩余输出
            n=i+1;
            n0=i*5;
            x = rand()%(max-min+1)+min;//产生随机数
            x0 = rand()%(max-min+1)+min;
            y = rand()%(max-min+1)+min;
            y0 = rand()%(max-min+1)+min;
            if(m==1)
                z = rand()%(3-0+1)+0;//运算符
            else
                z = rand()%(1-0+1)+0;
            z0 = rand()%(1-0+1)+0;//用于判断整数运算与分数运算}
            Judje(x,x0,y,y0);
            a[n0]=x;
            a[n0+1]=x0;
            a[n0+2]=y;
            a[n0+3]=y0;
            a[n0+4]=z;
            if(x!=x0&&y!=y0&&x0!=1&&y0!=1){//防止出现在x=x0时输出依旧为x/x0格式以及分母为一的情况
                if(a[n0]!=a[n0-5]||a[n0]!=a[n0-4]||a[n0]!=a[i-3]||a[n0]!=a[n0-2]||a[n0]!=a[n0-1]){//题目避免重复
                    Out(x,x0,y,y0,z,z0,i,n,m0);
                }
            }
            else
                i--;
        }
        delete []a;
    }

    结果截图:

    总结:是否有括号功能未实现,当程序很长而又出错时错误难找,以后程序条例要清晰一些。

    周活动总结表

    尚晓朋      2016/3/20

      听课 代码 读书 总计
    星期一 100min 35行 构建之法2章 三小时
    星期二        
    星期三   28行    
    星期四        
    星期五   12行    
    星期六   4行    
    星期日        
    总计 100min 79行    

    时间记录日志

    日期 开始时间 结束时间 活动 备注 C U
    3.14

    8:00

    19:36

    20:30

    9:50

    20:22

    21:30

    编写程序

    上课

    编程序

    看书

       
    3.16 19:30 21:30 编程序 两个小时    
    3.18 19:25 21:20 编程序 115分钟    
    3.19 19:00 20:07 编程序 博客 67分钟    
    3.20 21:40 22:25 周末总结 45分钟    

    缺陷记录日志

    日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
    3.14 1   编码 编译 25min  

    描述:一定几率会突然跳出for循环,达不到30个出题数,
    3.16 2   编码 编译 20min  
    描述:无法定义动态数组。解决:改为一维数组
    3.18 3   编码 编译 30min  
    描述:除法有无余数,若使用范围内随机数相乘会超出范围。解决:通过结果进行判定而不是通过前期数字
    3.19 4   编码 编译 30min  
    描述:加减有无负数不好判定,最后决定吸取除法余数经验,从结果判定
  • 相关阅读:
    vue-cli 2.x升级到3.x版本, 和3.x降级到2.x版本命令
    vue-cli 2.x项目,删除打包线上环境的控制台打印
    vue-cli 2.x项目使用cross-env新建多个打包环境
    解决vue项目路由出现message: "Navigating to current location (XXX) is not allowed"的问题
    vue打包后,解决出现不到字体文件的错误
    js 网络图片转base64的方式(两种)
    vscode编译器,Settings Sync 同步插件,忘记GitHub token 和 Gist的解决办法
    输入两个时间,计算他们相差多少天多少时,多少秒
    老生常谈之js深拷贝与浅拷贝
    React Hooks 你不来了解下?
  • 原文地址:https://www.cnblogs.com/dawn-sky/p/5296157.html
Copyright © 2020-2023  润新知