逆波蘭計算器改進版

2021-06-29 00:50:31 字數 1649 閱讀 7047

前面有寫過逆波蘭計算器,那時候只能進行個位數計算,現在採用分隔符的辦法實現多位數即小數的計算,即在每個數字或者運算子或括號之後加上空格,來確定這個數是否輸入結束。逆波蘭式儲存在乙個陣列裡,然後按照逆波蘭計算規則就可以了,注意要使用atof轉換。下面是**部分。

#include#include#include#define capacity 50

typedef struct stack

*pstack,stack;

pstack initstack1()

int stackempty1(pstack st)

int stackfull1(pstack st)

int pushstack1(pstack st, char a)

else

}char popstack1(pstack st)

else

}char gettop1(pstack st)

typedef struct

*datastack;

datastack initstack2()

int stackempty2(datastack st)

int stackfull2(datastack st)

int pushstack2(datastack st, double data)

else

}double popstack2(datastack st)

else

}double gettop2(datastack st)

int priority(char op)

}int main(void)

popstack1(st);

break;

}case '+':

case '-':

case '*':

case '/':

else

}pushstack1(st, ch);

break;

}default:output[i++] = ch;}}

while(!stackempty1(st))

}output[i] = '\0';

free(st);

printf(" 字尾表示式為:");

for(m = 0; m <= i; m++)

printf("%c", output[m]);

printf("\n");

double num = 0;

char *pt = output;

while(*pt != '\0')

if(*pt == '.')

float pow = 1.0;

while(*pt >= '0' && *pt <= '9')

if(*pt == ' ')

pt++;

} if(priority(*pt) > 0) }

}printf(" 計算結果為: %f\n", gettop2(st2));

return 0;

}

這個問題從當初的幾乎判定為不能進行多位數的運算,到能表達出有多位數的逆波蘭表示式,到能實現多位數的計算,一點一點逼近目標。有時候困難並不是想象的那樣不可逾越,把複雜的問題細分成很多小步,逐個擊破,這是我編寫這個程式得到的收穫,也是適用於其他學習的學習方法。

逆波蘭計算器

include include include define stack init size 20 初始化棧的空間 define stackincrement 10 擴充套件空間 define maxbuffer 10 最大緩衝區 typedef double elemtype 建立乙個棧 type...

逆波蘭計算器

1.逆波蘭表示式用途 逆波蘭表示式是一種十分有用的表示式,它將複雜表示式轉換為可以依靠簡單的操作得到計算結果的表示式。例如 a b c d 轉換為ab cd 2.逆波蘭表示式邏輯實現 如果當前字元為變數或者為數字,則壓棧,如果是運算子,則將棧頂兩個元素彈出作相應運算,結果再入棧,最後當表示式掃瞄完後...

逆波蘭計算器

遍歷表示式。碰到數字將其放到棧中。遇到計算符 從棧中彈出兩個數用計算然後再從新入棧。a 在棧中的最後乙個數即為結果 轉換前 2 9 6 3 5 4轉換後 2963 5 4 使用逆波蘭計算結果為 16.0public class rpncalculator 如果是不是計算符,直接入棧 stack.pu...