• 软件工程个人作业03


    Planning

    Development

    •       Design

         1. 开辟两个数组一个为double类型另一个为char类型用于存放生成的随机数和随机运算符

         2.编写两个方法分别用于生成指定范围数内的随机数和加减乘除四种运算符

         3.调用这两个函数将生成的随机数和运算符分别存到事先设定好的数组中(存放的个数可以人为设定)

         4.为避免出现除数为零的情况设定一个函数检验并修改生成的为零的随机数

         5.调用以上编写好的函数和已经存放数据的数组编写output函数用于输出生成的算式

         6.编写计算算式的方法并返回一个计算结果(具体方法参见代码方法Calculate(int number);)

         7.变写主函数并在函数体中实现按需输出算式判断正误的功能。

    •       Coding

    #include<iostream>
    using namespace std;
    double Date[10];//存放数据的数组
    char Operator[11];//存放运算符的数组

    char OperatorGo()//生成运算符的方法
    {
        double a;
        a = rand() % 4;
        if (a == 0)
        {
            return'+';
        }
        if (a == 1)
        {
            return'-';
        }
        if (a == 2)
        {
            return'*';
        }
        if (a == 3)
        {
            return'/';
        }
        /*if (a == 4)
        {
            return'(';
        }*/
    }
    void Cun(int number, int scope)//将生成的数据存到数组内,scope为数据范围
    {
        for (int i = 0; i < number; i++)
        {
            Date[i] = rand() % scope;
        }
        for (int j = 0; j < number - 1; j++)
        {
            Operator[j] = OperatorGo();
        }
    }
    void ChangeDate(int scope)
    {
        for (int i = 0; i < 10; i++)
        {
            if (Date[i]==0)
            {
                Date[i] = rand()%scope;
            }
        }
    }
    /*void ChangeOpreator(double number)
    {
        for (double i = 0; i < number; i++)
        {
            if (Operator[i] == '('&&i<number-2)
            {
                Operator[i+1] = ')';
            }
            if (Operator[i] == '('&&i >= number - 2)
            {
                Operator[i] = '+';
            }
        }
    }*/
    void Output(int number, int scope)//输出计算式
    {
        //ChangeOpreator( number);
        ChangeDate(scope);
        for (int i = 0; i < (number - 1); i++)
        {
            cout << Date[i] << Operator[i];
            //ChangeOpreator(number);
            ChangeDate(scope);
        }
        cout << Date[number - 1];
        cout <<"="<< endl;
    }
    //以上为生成算式部分
    //下面是计算方法
    double Calculate(int number)
    {
        /*double **couter;
        couter = new double*[number - 2];
        for (double j = 0; j < number - 2; j++)
        {
            couter[j] = new double[number];
        }//创建动态数组用于存储中间步骤的计算结果
        char **couterOperator;
        couterOperator = new char *[number - 2];
        for (double k = 0; k < number - 2; k++)
        {
            couterOperator[k] = new char[number - 1];
        }
        for (double i = 0; i < number - 1; i++)
        {
            if (Operator[i] == '*')
            {
                couter[0][0] = Date[i] * Date[i + 1];
            }
        }*/
        for (int i = 0; i < number-1; i++)
        {
            if (Operator[i] == '*')
            {
                Date[i+1] = Date[i] * Date[i + 1];
                Date[i] = 0;
                Operator[i] = '+';
                //cout << "Date[" << i + 1 << "]=" << Date[i + 1] << endl;
            }
            if (Operator[i] == '/')
            {
                Date[i+1] = Date[i] / Date[i + 1];
                Date[i] = 0;
                Operator[i] = '+';
                //cout << "Date[" << i + 1 << "]=" << Date[i + 1] << endl;
            }
            
        }
        for (int j = 0; j < number - 1; j++)
        {
            if (Operator[j] == '+')
            {
                Date[j + 1] = Date[j] + Date[j + 1];
                Date[j] = 0;
                //cout << "Date[" << j + 1 << "]=" << Date[j + 1] << endl;
            }
            if (Operator[j] == '-')
            {
                Date[j + 1] = Date[j] - Date[j + 1];
                Date[j] = 0;
                //cout << "Date[" << j + 1 << "]=" << Date[j + 1] << endl;
            }
        }
        return Date[number - 1];

    }


    void main()
    {
        int numbers, scopes, number2;
        double result;
        int R=0, E=0;
        char chooce;
        double returnnumbers;
      o:cout << "                  <><><><><><><><><><><><><><><><><><>" << endl;
        cout << "                  <>        请输入您的选择          <>" << endl;
        cout << "                  <>         1.运行程序             <>" << endl;
        cout << "                  <>         2.结束程序             <>" << endl;
        cout << "                  <><><><><><><><><><><><><><><><><><>" << endl;
        cin >> chooce;
    if (chooce != '1'&&chooce != '2')
        {
            cout << "              输入错误请重新输入。。。" << endl;
            goto o;
        }
    if (chooce == '1')
    {
        
    m:cout << "                   请输入参加计算的数据的个数(个数小于10个)" << endl;
        cin >> numbers;
        if (numbers > 10|| numbers<2)
        {
            cout << "             输入错误(不符合计算规范)请重新输入!!!" << endl;

            goto m;
        }
    n:cout << "                   请输入参加计算的数据范围" << endl;
        cin >> scopes;
        if (scopes <= 1)
        {
            cout << "             输入错误(不符合计算规范)请重新输入!!!" << endl;
            goto n;
        }
    b:cout << "                   请输入生成运算式的个数" << endl;
        cin >> number2;
        if (number2 < 0)
        {
            cout << "             输入错误(不符合计算规范)请重新输入!!!" << endl;
            goto b;
        }
        for (int k = 0; k < number2; k++)
        {
            Cun(numbers,scopes);
            Output(numbers,scopes);
            cout << endl;
            cout << "             请输入您的计算结果:" << endl;
            cin >> result;
            returnnumbers=Calculate(numbers);
            if (returnnumbers!= result)
            {
                cout << "很遗憾,计算错误!%>_<%" << endl;
                cout << "正确答案为:" << returnnumbers << endl;
                E = E + 1;
            }
            else

            {
                cout << "        回答正确,真棒!^_^" << endl;
                R = R + 1;
            }
        }
        cout << "您一共计算了" << number2 << "道算式,其中回答正确" << R << "道,回答错误" << E << "道" << endl;
        goto o;
    }
    if (chooce = '2')
    {
            return;
    }

    }

    •       Test

    实验运行结果截图:

    如上图支持各种符号多个数据的计算;

    Postmortem:

    1.输出的计算结果有误;

    解决方法:在计算代码部分添加中间数值的结果输出,从而找出代码的出错原因;

    2. 在回答计算结果正确的情况下即(输入的结果等于计算结果)报错;

    解决方法:

    目前不知道原因

    但是:

    将if与else的条件调换以后问题就解决了。。。

    周总结进度表:

    日期

    任务

    听课

    编程

    阅读

    准备考试

    日总计

    周日

    周一

    120

    300

    0

    0

    420

    100

    周二

    0

    120

    0

    0

    120

    周三

    0

    0

    0

    0

    0

    周四

    0

    0

    0

    0

    0

    周五

    0

    0

    0

    0

    0

    周六

    0

    120

    100

    0

    220

    周总计

    120

    540

    100

    0

    340

    总计

    120+120

    220+540

    210+100

    0

    530+340

    平均

    120

    335

    155

    0

    435

    最大

    120

    540

    210

    0

    530

    最小

    120

    220

    100

    0

    340

    以前各周的累计时间

    总计

    240

    760

    310

    0

    870

    平均

    120

    335

    155

    0

    435

    最大

    120

    540

    210

    0

    530

    最小

    120

    220

    100

    0

    340

    事件记录日志表:

    日期

    开始时间

    结束时间

    中断时间

    净时

    活动

    备注

    C

    U

    3/21

    8:00

    10:00

    0

    120

    听课

    14:30

    18:00

    90

    300

    编程序

    19:00

    22:00

    30

    270

    预习复习课本知识

    3/22

    15:00

    18:00

    未知

    约200

    编程,思考

    思考加编程

    3/23

    15:00

    16:00

    10

    50

    阅读

    《构建之法》

    19:00

    20:00

    10

    50

    编程

    3/24

    14:30

    16:30

    0

    120

    Web

     

    3/25

    15:00

    18:00

    50

    250

    编程,作业

    《软件工程概论》进度表

    3/26

    NULL

    NULL

    NULL

    NULL

    NULL

    NULL

    缺陷记录日志表:

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

    3/21

    01

    正确计算结果为非整数,但是比较进行整数比较(数据类型错误)

    编译阶段

    重新编译阶段

    20

    3/23

    02

    运算符出错

    编译阶段

    断点检查阶段

    60

    存放运算符的数组开辟内存不够出现溢出

  • 相关阅读:
    动态绑定表格
    双缓冲设置控件
    编写模块化插件式应用程序
    网上收集整理SharePoint的母版页master占位符(改动不大)
    改变SharePoint工作流任务的界面
    SharePoint定时器作业部署步骤
    定时器作业将sap数据更新至列表库
    网络没问题,MSN登录不了解决方法
    以后就搬家到cnblogs吧。
    记录我的第一个OpenGL程序
  • 原文地址:https://www.cnblogs.com/aishangtaxuefeihong/p/5308047.html
Copyright © 2020-2023  润新知