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

    分为3个类:input,operate,和output

    `class input
    {

    private:
    
    	int userans[20];//用户输入的答案 
    
    	int quesnum;//题目数量 
    
    public:
    
    	void setuserans(int a);
    
    	void setquesnum(int a);
    
    	int getquesnum();
    
    	char* getuserans();
    

    };`

    `class output

    {

    private:
    
    	bool judge;//判断用户答案是否错误 
    
    	char expression[20];//运算式 
    
    	int userans;//用户答案 
    
    	int correctans;//正确答案 
    
    public:
    
    	void printsummary();//打印解题报告 
    
    	void printjudge();//判断答案对错,从而决定如何反馈信息 
    
    	void setjudge(bool a);//传入判断值
    
    	void setuserans(int a);
    
    	void setcorrectnum(int a);
    

    };`

    `class operation
    {

    private:
    
    	bool judge;
    
    	char experssion[20];
    
    	int correctans;
    
    	int userans;
    
    public:
    
    	char random();//生成随机数 
    
    	void setexpression();//生成运算式 
    
    	bool judgment();//判断结果是否是整数 
    
    	void bolan();//转成逆波兰表达式 
    
    	int calculate();//计算 
    
    	void eornot(char *a);//判断用户输入是否有e 
    

    };`

    算法实现
    采用两个栈先将表达式转化为逆波兰式,再计算。
    实现过程:

    1. 设两个栈s1,s2 ;

    2. 中缀式的左端开始逐个读取字符,逐序进行如下步骤:

    • 若是操作数,则分析出完整的运算数,直接压入栈s2;

    • 若是运算符,则分情况讨论:

    • 若是'(',则直接压入栈s1;

    • 若是')',则将距离栈s1栈顶的最近的'('之间的运算符,逐个出栈,依次压入栈s2,此时抛弃'(';

    • 若是除'('和')'外的运算符,则再分如下情况讨论:

                  若当前栈s1的栈顶元素为'(',则直接压入栈s1;

                  若当前栈s1的栈顶元素不为'(',则与栈s1的栈顶元素比较,若优先级大于栈s1栈顶运算符优先级,则直接压入栈s1。否者,将栈s1的栈顶运算符弹出,压入栈s2中,直到栈s1的栈顶运算符优先级别低于(不包括等于)该字符优先级,或栈s2的栈顶运算符为'(',此时再则压入栈s1;

    3.在进行完2后,检查栈s1是否为空,若不为空,则将栈中元素依次弹出并压入栈s2中(不包括'#');      

      

    4.完成上述步骤后,栈s2便为逆波兰式输出结果。但是栈s2应做一下逆序处理,因为此时表达式的首字符位于栈底;

  • 相关阅读:
    今日成长笔记2016-11-18
    牛人博客
    c 、c++、java区别
    Java开发中的23种设计模式详解
    JAVA编程规范
    设计及编码质量改进之降低耦合度
    加密
    敏捷开发之Scrum扫盲篇
    RPC
    李洪强iOS开发Swift篇—04_运算符
  • 原文地址:https://www.cnblogs.com/daydreams/p/6858080.html
Copyright © 2011-2022 走看看