软件工程个人作业02

Posted 希境流年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程个人作业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;
}

 

结果截图:

技术分享技术分享技术分享

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

以上是关于软件工程个人作业02的主要内容,如果未能解决你的问题,请参考以下文章

软件工程个人作业02

软件工程个人作业02

软件工程个人作业02

软件工程个人作业02

软件工程个人作业02

软件工程个人作业02