软件工程个人作业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  
描述:加减有无负数不好判定,最后决定吸取除法余数经验,从结果判定

 

posted @ 2016-03-19 20:07  丿流年  阅读(217)  评论(0编辑  收藏  举报
TOP