zoukankan      html  css  js  c++  java
  • 第四次课程作业

    第四次课程作业

    采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为?

    根据我的代码划分为两个类。


    class Equation    //算式类
    {
    private:
    	char a[10];//用字符数组存放生成的算式
    public:
    	void generateExpresion();//用于生成运算式
    	friend int calculateResult(Equation &);//用于计算
    	int randomOperation();//生成随机运算符
    	int randomNumber();//生成随机数
    	char trans_operation();//转换运算符
    	void get();//输出算式
    };
    int calculateResult(Equation &)
    {
    	
    }
    class Statistics//统计类
    {
    private:
    	int right;
    public:
    	void judge(int ans, int s);//判断用户答案是否正确
    	int get();
    };
    void print(int c)//输出统计结果
    {
    
    }
    

    采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为?

    随机生成类能够随机生成各种类运算式,同时将运算符传递给转化类;转化类将随机生成的运算符(转化前为数字)转化为符号传入运算类;运算类则负责计算结果,并将计算结果交给统计类;统计类则统计最终结果并判断答案是否正确。

    该自动出题软件采取何种算法或者是如何实现的?可以采用流程图描述的方法。

    由于生成的式子种类是固定几种的,所以计算方法是再写对应几种的计算函数分别计算。导致函数庞杂,显得很乱。前几天看数据结构-栈和队列内容的时候无意间看到后缀表达式这种方法,它能够适应各种算式的计算。就和蔡子阳探讨了下这个方法。


    • 我们把平时所用的标准四则运算表达式“9+(3-1)X3+10/2"叫做中缀表达式。转化为后缀表达式的规则为:从左到右遍历中缀表达式,若是数字就输出(即成为后缀表达式的一部分);若是符号,则判断其与栈顶符号的优先级,若是右括号或优先级高于栈顶符号则栈顶元素依次出栈并输出,并将当前符号进栈。
    • 以9+(3-1)*3+10/2为例
    1. 初始化一空栈,用来对符号进出栈使用。

    2. 第一个字符是数字9,输出9,将后面的“+”进栈。

    3. 第三个字符是“(”,左括号进栈。

    4. 第四个字符是数字3,输出,总表达式为9 3,接着是“-”,进栈。

    5. 接下来是数字1,输出,总表达式为9 3 1,后面是符号“)”,此时,我们需要去匹配之前的“(”,所以栈顶依次出栈,并 输出,直到“(”出栈为止。此时总的输出表达式9 3 1 -。

    6. 紧接着是“X”,因为此时的栈顶符号为“+”号,优先级低于“X”,因此不输出,“X”进栈,接着是数字3,输出,总的表达式为9 3 1 - 3.

    7. 之后是符号“+”,此时当前栈顶元素“X”比“+”优先级高,因此栈中元素出栈并输出(没有比加号更低的优先级,所以全出栈),总输出表达式为9 3 1 - 3 * +。然后将当前这个符号”+“进栈。

    8. 接着数字10,输出,总表达式为9 3 1 - 3 * + 10.后是符号”/“进栈。

    9. 最后一个数字2,输出,总的表达式为9 3 1 - 3 * + 10 2.

    10. 因为已经到最后,所以将栈中符号全部出栈并输出,最终输出的后缀表达式结果为9 3 1 - 3 * + 10 2 / +。

    • 接下来用得到的后缀表达式进行计算
    • 规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将栈顶的两个数字出栈,进行运算,运算结果进栈。直到获得最终结果。
    1. 初始化一个空栈。此栈用来对要运算的数字进出使用。

    2. 后缀表达式中前三个全是数字,所以9 3 1 进栈。

    3. 接下来是”-“,所以将栈中1出栈作为减数,3为被减数,得到2进栈。

    4. 数字3进栈

    5. 后面是”*“,将2和3出栈得到6进栈。

    6. 下面是”+“,所以6和9出栈得到15进栈。

    7. 接着是10和2进栈。

    8. 接下来是符号”/“,2和10出栈得到5进栈。

    9. 最后一个符号”+“,将15和5出栈得到最终结果20进栈。

    10. 结果是20出栈,栈变为空。

  • 相关阅读:
    安装gmsll
    常用LInux命令和操作
    yum 一键安装 jdk
    Linux目录详解,软件应该安装到哪个目录
    安装npm
    linux安装mysql (rpm + yum)
    springboot 打包jar 运行找资源文件
    rpm包安装java jar开机自启
    centos7设置服务开机自启
    linux(centos7) nginx 配置
  • 原文地址:https://www.cnblogs.com/lzhkami/p/6858837.html
Copyright © 2011-2022 走看看