zoukankan      html  css  js  c++  java
  • 软件工程个人作业02

    设计思路:

    功能一:题目避免重复。

            1、在原程序中将原程序的数据进行记录(三组数据用队列或者是栈);

            2、从第二次循环开始将三项纪录依次与之前记录的数据进行比较(for循环?)

    功能二:可定制。控制循环的次数

    功能三:是否有乘除法:控制运算符

            是否有括号:没有实现

            数值范围:控制随机数的范围

            有无负数:判断两个数值的大小,递归

            除法有无余数:若规定无余数则生成随机数并判断是否符合要求,直到符合要求为止。

    流程图:

    程序源代码:

    //可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求
    //This is a program of math operation 02
    //2016/3/17
    #include<iostream>
    #include<stdlib.h>
    #include<time.h>
    using namespace std;
    
    int a;
    int a1,a2;
    int b;
    int b1,b2;
    int item;
    int d;
    int p;
    int y;
    char c[4];
    
    int main()
    {
        int g;
        cout<< "请输入您需要打印/输出的算式的个数:";//功能二:定制打印个数
        cin>>g;
    
        //定制取值范围
        int MAX,MIN;
        cout << "请输入算式中所允许数值范围的最大值:" ;
        cin>>MAX;
        cout << "请输入算式中所允许数值范围的最小值:";
        cin>>MIN;
    
        //定制是否有乘除法
        int m;
        cout << "是否允许有乘除法:1、允许;0、不允许"<<endl;
        cin>>m;
    
        //有无负数
        int f;
        cout << "是否允许结果有负数:1、允许;0、不允许"<<endl;
        cin>>f;
    
        //除法有无余数
        int cy;
        cout << "是否允许除法有余数:1、允许;0、不允许"<<endl;
        cin>>cy;
    
        srand((int)time(NULL));
        
        c[0]='+';
        c[1]='-';
        c[2]='*';
        c[3]='÷'; 
    
        
        for(int i =1;i <= g;i++)
        {
            
            p = (0+rand()%2);
            if(m==1)//允许有乘除
            {
            if(p == 0)//整数
            {
                a = (MIN+rand()%MAX);
                y = (0 + rand()%4);
                if(y == 1)
                {
                    b = (MIN+rand()%MAX);
                    if(a<b)
                    {
                        item = a;
                        b = a;
                        b = item;
                    }
                }
                if(y == 3)
                {
                    b = (1 + rand()%MAX);
                    if(a<b)
                    {
                        item = a;
                        b = a;
                        b = item;
                    }
                    if(cy == 0)
                    {
                        for(;i == 0;)
                        {
                            i = a%b;
                            b = (1 + rand()%MAX);
                        }
                    }
    
                }
                else
                {
                    b = (MIN + rand()%MAX);
                }
                cout << a << " " << c[y] << " " << b << " " << "="<<endl;
            }
            else //分数
            {
                a1 = (MIN + rand()%MAX);
                a2 = (MIN + rand()%MAX);
                if(a1 > a2)
                {
                    item = a1;
                    a1 = a2;
                    a2 = item;
                }
                y = (0 + rand()%3);
                if(y == 1)
                {
                    b1 = (1 + rand()%MAX);
                    b2 = (1 + rand()%MAX);
                    if(b1>b2)
                    {
                        item = b1;
                        b1 = b2;
                        b2 = item;
                        
                    }
                    if((b1/b2)>(a1/a2))
                    {
                        int item1,item2;
                        item1 = a1,a1 = b1,b1 = item1;
                        item2 = a2,a2 = b2,b2 = item2;
                    }
                }
                if(y == 3)
                {
                    b1 = (1 + rand()%MAX);
                    b2 = (1 + rand()%MAX);
                    if(b1>b2)
                    {
                        item = b1;
                        b1 = b2;
                        b2 = item;
                        
                    }
                }
                else
                {
                    b1 = (1+rand()%MAX);
                    b2 = (1+rand()%MAX);
                    if(b1>b2)
                    {
                        item = b1;
                        b1 = b2;
                        b2 = item;
                        
                    }
                }
            }
            for(int s = a1;s > 1;s--)
            {
                if(a1%s == 0 && a2%s == 0)
                {
                    a1/=s;
                    a2/=s;
                }
            }
            for(int s = b1;s > 1;s--)
            {
                if(b1%s == 0 && b2%s == 0)
                {
                    b1/=s;
                    b2/=s;
                }
            }
            cout << a1<<"/"<<a2<<" " <<c[y]<<" "<<" "<< b1 <<"/"<<b2 << " " <<"="<<endl;
        }
            else
            {
                if(p == 0)//整数
                {
                    a = (MIN+rand()%MAX);
                    y = (0 + rand()%1);
                    b = (MIN + rand()%MAX);
                    if(y == 1)
                {
                    //b = (MIN+rand()%MAX);
                    if(a<b)
                    {
                        item = a;
                        b = a;
                        b = item;
                    }
                }
                    cout << a << " " << c[y] << " " << b << " " << "="<<endl;
                }
                else //分数
                {
                    a1 = (MIN + rand()%MAX);
                    a2 = (MIN + rand()%MAX);
                    if(a1 > a2)
                    {
                        item = a1;
                        a1 = a2;
                        a2 = item;
                    }
                    y = (0 + rand()%1);
                    b1 = (1+rand()%MAX);
                    b2 = (1+rand()%MAX);
                    if(b1>b2)
                    {
                        item = b1;
                        b1 = b2;
                        b2 = item;
                    }
                    if((b1/b2)>(a1/a2))
                    {
                        int item1,item2;
                        item1 = a1,a1 = b1,b1 = item1;
                        item2 = a2,a2 = b2,b2 = item2;
                    }
                }
                for(int s = a1;s > 1;s--)
            {
                if(a1%s == 0 && a2%s == 0)
                {
                    a1/=s;
                    a2/=s;
                }
            }
            for(int s = b1;s > 1;s--)
            {
                if(b1%s == 0 && b2%s == 0)
                {
                    b1/=s;
                    b2/=s;
                }
            }
                cout << a1<<"/"<<a2<<" " <<c[y]<<" "<<" "<< b1 <<"/"<<b2 << " " <<"="<<endl;
            }
    }
    }

    运行结果截图:

    程序分析与反思:

    在原来的程序上进行了分数的约分(分子分母同时除以一个数s若是可以除尽则将这个数约去,可以利用for循环,当s大于分子是便可以停止)。

    要根据客观实际即客观需求,分子分母的大小问题,除法是否有余数等问题都应该想到。还有没有实现的功能以及控制运算项为几项的问题都应该尽快解决。 

                周活动总结表                    

                                                                                                                                         姓名:黄丽萍                             

                                                                                                                                         日期:3.19.2016 

    日期

    任务

    听课

    编写程序

    阅读课本

    准备考试

    日总计

    周日

    0

    周一

    100

     90

    30

    220

    周二

    0

    周三

    0

    周四

     30

    30

    周五

     120

    120

    周六

    180

    120

    300

    周总计

    100

    390

    180

    670

               

                                                                                     时间记录日志

                                                                                                                           学生:黄丽萍          

                                                                                                                           教师:王建民老师         

                                                                                                                           课程:PSP

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    C

    U

    3/14

    9:35

    9:50

     0

    15

    设计思路

     3/14

    20:00

    21:00

    30

    30

    自己先思考补充

    聊天了

    3/15

    19:00

    19:30

    0

    30

    小组讨论设计思路

    3/17

    21:00

    21:30

    0

    30

    阅读

    3/18

    19:00

    21:00

    0

    120

    编写程序

    3/19

    8:00

    10:00

    0

    120

    阅读

     3/19

    13:00

    16:00

     0

    180

    编写程序

     

                      

                                                                                                                                                     学生:黄丽萍

                                                                                                                                                     老师:王建民老师

                                                                                                                                                    程序编号:02

                                                                                                                                                    日期:2016/3/19

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

    3/14

    02

    忽略问题

    此程序的上个版本

     

    10min

     

    描述:未化简分子分母

    3/19

    02 命名问题       10      

    描述:命名不规范

  • 相关阅读:
    线性规划与网络流24题解题报告
    [bzoj4569][SCOI2016]萌萌哒-并查集+倍增
    [bzoj1002]轮状病毒-矩阵树定理
    [bzoj1005][HNOI2008]明明的烦恼-Prufer编码+高精度
    [bzoj3995][SDOI2015]道路修建-线段树
    [bzoj3993][SDOI2015]星际战争-二分+最大流
    [bzoj3994][SDOI2015]约数个数和-数论
    [bzoj3990][SDOI2015]排序-搜索
    [bzoj4518][Sdoi2016]征途-斜率优化
    [bzoj4515][Sdoi2016]游戏-树链剖分+李超线段树
  • 原文地址:https://www.cnblogs.com/huangliping/p/5294414.html
Copyright © 2011-2022 走看看