后缀表达式求值

任务描述:

1.从文件读取表达式,判断表达式是否合理;

2.将表达式转为后缀形式;

3.求值

解决方案:

一.文件读取:

FILE fp;//文件指针
fp = fopen("demo.txt","r");
char expr[20] = {0};
char c;
int i = 0;
while( (c = fgetc(fp) != EOF){//读到文件末尾时返回的是EOF
     expr[i] = c;
     i++;
}

二.判断是否合理见 https://blog.csdn.net/lvdoujack/article/details/91491556

三.中缀形式转后缀形式:

1.数字直接保存进后缀表达式

2.操作符需要判断

(1)栈空则入栈;

(2)栈非空则比较当前op和栈顶op的优先级

    当前  ‘(’   大于所有栈顶op;

    当前   ‘)’   等于  栈顶  '('   ,小于其它栈顶op;

    当前op与栈顶op同级时,当前op小于栈顶op;

    当前op是  +  -  小于  栈顶*/

    当前op是  *  /  大于   栈顶+-

(3)判断结果做处理

大于:当前op入栈

等于:此时为左右括号相遇,将栈顶op弹出且当前op不作处理

小于:栈顶op出栈并且存入后缀表达式,当前op继续与新的栈顶op比较。

3.扫描完成后若栈非空则依次出栈存入后缀表达式

四.后缀表达式求值

1.遍历后缀表达式

2.遇见数字时入栈

3.遇见操作符时依次出栈操作数b,a做运算a   op   b,结果入栈

4.遍历完成后栈内的那个元素即是结果

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章