點擊下載「C-postfix」
右鍵另存「C-postfix」
阿思修改版(if版)
以上為拙作-_-|,參考課本&老師程式所寫,確定跑的出來。
只挑幾個可能有問題的地方解釋,看不懂請直接跟我說囧"
裡面可能有些解釋錯誤,請大大們指點Orz
#include /*為了使用atoi所必需宣告(參考課本p.251)*/
int sp=0; /*格子的位置*/
double val[100]; /*格子*/
int getnextword(char x[],int pos,char y[]) /*把字挑出來的副程式*/
void push(double f) /*把東西放進格子裡的副程式*/
double pop(void) /*把東西從格子裡拿出來的副程式*/
switch(word[0]) /*類似if的東西(見圖)*/
case '/': /*遇到除法時就...*/
op1=pop();
op2=pop(); /*把兩個會用到的數字從格子裡取出,分別存到op1跟op2*/
if(op1!=0) /*確定被除數不為0就...*/
ans=op2/op1; /*計算*/
printf("%f / %f = %f\n",op2,op1,ans); /*將計算的數字和結果都印出來*/
push(ans); /*將結果丟回格子裡*/
其他語法問題…嘿嘿嘿,我就偷懶啦~
請愛用課本Orz
5/5更新
應阿思要求,增補push跟pop的說明
PUSH的說明
void push(double f){ /*宣告一個不用回傳的副程式,參數格式為double(倍精準小數)*/
if(sp<100) /*sp為格子的位置,程式一開始設定格子為0~99,故位置小於100才能放進格子裡*/
val[sp++]=f; /*將主程式送過來的參數值放入格子中,並把位置+1,以便放下一個*/
else
printf("error: stack full, can't push\n"); /*若是位置超過100,則無放置入格子裡,故顯示錯誤訊息*/
}
POP的說明
double pop(void){ /*宣告一個要回傳值(double),但不用輸入參數值的副程式*/
if(sp>0) /*因位置為0~99,故小於0的位置為不存在,所以大於0的才要做*/
return val[--sp]; /*將格子裡對應位置的傳回傳主程式,並將位置減一,便於做下一步*/
else
printf("error: stack empty\n");
return 0.0; /*若位置為負,則顯示錯誤訊息,並回傳0.0*/
}
int getnextword(char x[],int pos,char y[]) /*把字挑出來的副程式*/
void push(double f) /*把東西放進格子裡的副程式*/
double pop(void) /*把東西從格子裡拿出來的副程式*/
switch(word[0]) /*類似if的東西(見圖)*/
case '/': /*遇到除法時就...*/
op1=pop();
op2=pop(); /*把兩個會用到的數字從格子裡取出,分別存到op1跟op2*/
if(op1!=0) /*確定被除數不為0就...*/
ans=op2/op1; /*計算*/
printf("%f / %f = %f\n",op2,op1,ans); /*將計算的數字和結果都印出來*/
push(ans); /*將結果丟回格子裡*/
其他語法問題…嘿嘿嘿,我就偷懶啦~
請愛用課本Orz
5/5更新
應阿思要求,增補push跟pop的說明
PUSH的說明
void push(double f){ /*宣告一個不用回傳的副程式,參數格式為double(倍精準小數)*/
if(sp<100) /*sp為格子的位置,程式一開始設定格子為0~99,故位置小於100才能放進格子裡*/
val[sp++]=f; /*將主程式送過來的參數值放入格子中,並把位置+1,以便放下一個*/
else
printf("error: stack full, can't push\n"); /*若是位置超過100,則無放置入格子裡,故顯示錯誤訊息*/
}
POP的說明
double pop(void){ /*宣告一個要回傳值(double),但不用輸入參數值的副程式*/
if(sp>0) /*因位置為0~99,故小於0的位置為不存在,所以大於0的才要做*/
return val[--sp]; /*將格子裡對應位置的傳回傳主程式,並將位置減一,便於做下一步*/
else
printf("error: stack empty\n");
return 0.0; /*若位置為負,則顯示錯誤訊息,並回傳0.0*/
}
請先 登入 以發表留言。