C語言實現帶括號的計算器

2021-09-29 12:40:25 字數 2093 閱讀 2596

中綴表示式轉字尾表示式的應用

我的演算法以及思路:

首先將輸入的東西作為字串存入到乙個字串陣列,然後將中綴表示式轉化為字尾表示式(其中關鍵在於運算子的轉化,比較棧頂元素和當前運算子的優先順序,如果棧頂元素的優先順序大,則壓入棧中,否則把棧裡的運算子彈出直到為空,並且加入到字尾表示式的字串中,再壓棧,最後將字尾表示式轉化為計算結果

樣例:

#include

#include

#include

typedef

struct node

* pnode, node;

typedef

struct stack

* pstack, stack;

pstack create_stack

(void

)void

push

(pstack s,

char date)

void

pop(pstack s)

pnode t = s-

>top;

s->top = s-

>top-

>pre;

free

(t);

}int

empty

(pstack s)

else

}int

top(pstack s)

void

push_num

(pstack s,

int date)

intmain

(void

)else

if(str[i]

=='('

)else

if(str[i]

==')'

)pop

(s_opt)

;//printf("1");

}elseif(

empty

(s_opt)

&& str[i]

!=' '

)else

push

(s_opt, str[i]);

}if(flag >=1)

}while(!

empty

(s_opt)

)for

(int i =

0; i < p-

1; i++

)printf

("\n");

pstack number_stack =

create_stack()

; flag =0;

double sum =

0, ans =0;

for(

int i =

0; i < p; i++

)else

if(suffix[i]

=='+'

|| suffix[i]

=='-'

|| suffix[i]

=='*'

|| suffix[i]

=='/'

)else

if(suffix[i]

=='-'

)else

if(suffix[i]

=='*'

)else

if(suffix[i]

=='/')}

}}printf

("%lf"

,number_stack-

>top-

>date)

;return0;

}

遇到的問題及總結:

1、括號要拿出來特殊處理下,比如遇到』(『直接入棧,就是為了等到』)』,遇到後就將它兩之間的操作符都彈到字尾表示式中

2、優先順序:乘除大於加減,在操作符入棧的時候要按照優先順序大小,棧頂元素優先順序小於等於直接入棧,否則把棧中元素彈出來直到當前操作符小於等於棧中操作符的優先順序為止

3、轉化為字串的時候,兩位數字以上的要進行特殊處理,我是通過加的乙個空格,最後計算的時候也要注意,用乙個sum來存當前的數字

C語言實現計算器

同學,你好!附 c語言實現迷宮類小遊戲完整思路與 例項 design by 海上的雨 效果圖 完整 include include includevoid jingtailianbiao void dongtailianbiao int stu num define len sizeof struc...

C語言實現計算器

t include include double z void suanshuyunsuan else z num1 num2 break printf 結果 printf n lf n z t1 void suanshuyunsuan2 else z z num1 break printf 結果 ...

棧實現的帶括號的計算器

帶括號的表示式計算 通過棧的應用來實現,建立運算元棧和運算子棧,運算子有優先順序。規則 1.自左至右掃瞄表示式,凡是遇到運算元一律進運算元棧。2.當遇到運算子時如果它的優先順序比運算子棧棧頂元素的優先順序高就進棧。反之,取出棧頂運算子和運算元棧棧頂 的連續兩個運算元進行運算,並將結果存入運算元棧,然...