計算字尾表示式——C語言實現
阿新 • • 發佈:2019-01-03
程式相對簡單易懂,執行程式,
在命令列中輸入:123+*#(注意:由於輸入字元,以‘#’結束)
輸出:5.000000
#include <stdio.h> #include <stdlib.h> typedef struct { float *base; float *top; int StackSize; }Stack; //建立一個棧,100為Maxsize,#define無法定義 void Createstack(Stack &s) { s.base=(float *)malloc(100 * sizeof(float)); s.top=s.base; s.StackSize=100; } //棧頂指標 float top(Stack s) { if(s.top==s.base) { return -1; printf("error!\n"); //棧滿 } return *(s.top-1); } // 入棧程式 void push(Stack &s,float elem) { if(s.top-s.base>=s.StackSize) { //擴充套件棧空間 s.base=(float *)realloc(s.base,(s.StackSize+10)*sizeof(float)); s.top=s.base+s.StackSize; s.StackSize+=10; } *s.top++ = elem; } //出棧程式 void pop(Stack &s) { if(s.top==s.base) { //棧空 printf("error!\n"); return ; } s.top--; } //判斷輸入運算子 int operate(char c) { switch(c) { case '+' :return 1; case '-' :return 1; case '*' :return 1; case '/' :return 1; default :return 0; } } //輸入表示式 float cal(float a,float b,char c) { switch(c) { case '+' :return a+b; case '-' :return a-b; case '*' :return a*b; case '/' :return a/b; } } //主函式 int main() { float a,b,result; Stack s; Createstack(s); char c1='0'; printf("輸入字尾表示式:"); while(c1!='#') { c1=getchar(); if(!operate(c1)) { push(s,(float) (c1-48)); } else { b=top(s); pop(s); a=top(s); pop(s); result=cal(a,b,c1); push(s,result); } } printf("%f\n",result); system("pause"); //建立一個新棧,用於計算n的階乘 Stack m; Createstack(m); float i,n,item = 1; printf("請輸入一個數字:"); scanf("%f",&n) ; for (float i = n; i >= 1; i--) push(m, i); while (m.top != m.base){ item= top(m) * item; pop(m); } printf("n的階乘為:"); printf("%f",item) ; return 0; }