用c語言實現乙個簡單的計算器(資料結構)

2021-09-19 23:22:34 字數 1569 閱讀 8757

讀取到括號時將括號內內容優先計算出來,然後取代原括號表示式的位置。

讀取到運算子時比較其與緊接的前後兩個運算子的優先順序,若均優先,進行計算,否則進行擱置。

讀取到『#』時若其緊接的前面的算術運算子為『#』則表示結束,否則對前接符號進行出棧運算。

讀取到『+』,『-』,若其前接運算子為『#』則擱置入棧,否則將其前接符號彈出運算。

讀取到』x』,』/』,若其前接運算子為『x』或』/'則將其前接符號進行出棧運算,否則擱置入棧。

讀取到『(』進行直接進行擱置入棧。

讀取到『)』,若其前接符號為『(』則將兩個符號都銷毀。否則將其前接符號出棧運算。

然後根據上面的規則,我們編寫乙個判斷運算順序的函式:

int preemption(char a,char b)                           //符號優先順序比較,a為當前讀入,b為棧頂元素 

return c;

}

這個函式中我使用c作為反饋指令的媒介,函式返回值為c,而c的不同值代表不同的指令情況: 0.結束運算 1.彈出符號進行運算 2.符號擱置進棧 3.刪除當前元素及棧頂元素(倆括號相遇) 4.報錯(讀到無法識別的字元) 。只需要在主函式中使用乙個switch函式接受這個指令並對應執行即可。

if(*p<='9'&&*p>='0') 

p++;

}

其中p是指向算術表示式的指標,p4是指向數字棧的指標

ok,大致所需要注意的事項就是這些了,下面是我的完整**:

#include #include #include int preemption(char a,char b)                           //符號優先順序比較,a為當前讀入,b為棧頂元素 

return c;

} int main()

; char *p=str;

double *p3,*p4,a=0,b=0;

char *p1,*p2;

char stack1[20]; //符號棧 棧頂指標p2,棧底指標p1

double stack2[20]; //數字棧 棧頂指標p4,棧底指標p3

p1=p2=stack1;

p3=p4=stack2;

*p2++='#';

printf("請輸入需要計算的算術表示式:");

gets(str);

strcat(str,"#");

while(*p!='\0')

p++;

} else

break;

case 2:

*p2++=*p++;

break;

case 3:

p++;

p2--;

break;

case 4:

printf("程式讀到了無法計算的符號,出錯了\n");

p++;

break;}}

} return 0;

}

乙個計算器的C語言實現

今天在讀 編譯原理及實踐 時。看到了乙個簡單的整數計算器的實現。依照書上的思路,我略微進行了擴充套件 1 從整數計算器擴充套件到小數計算器。2 支援除法 3 支援空字元。執行效果例如以下 非常easy,例如以下 cal.c include include char token double exp ...

C語言實現乙個矩陣乘法計算器

雖然一般做練習題的時候具體的矩陣最多四階左右,但是作為實現該功能的 最好不要侷限於此。由於矩陣乘法的運算要求,第二個矩陣的行數必須與第乙個矩陣的列數相等,且兩個矩陣的行列數均不可小於或等於0,該演算法會先要求輸入第乙個矩陣的行數與列數,然後按行輸入矩陣的元素,接著輸入第二個矩陣的行數與列數,判斷是否...

C 實現乙個簡單的計算器

乙個用堆和棧實現的簡單計算器,可以進行非負數之間的加減乘除運算 可以是個位數也可以是多位數 這個計算器就是用棧和佇列進行乙個手算過程的模擬,也不算難 下面是 include include include include include using namespace std int main if...