//可以使用四則運算、括號和math.h中的一些函式。
//不能包含空格 3(4)會算成4,要寫成3*(4)
//使用了 math.h 編譯時加上 -lm 引數
//運用了字尾表示式的相關知識
//例 1+sqrt(4)*3 =7.000000
//例 2*(2+3) =10.000000
#include#include//compute函式使用
#define fnx0 3//常數陣列
#define fnx1 8//指向有乙個引數的函式的指標的陣列
#define fnx2 1//指向有二個引數的函式的指標的陣列
//xin為表示式字串,length為長度,錯誤時 *error為零。
double compute(char *xin,int length,int *error);
int main();
for(;;)
return 0;
}
char *fn0[fnx0]=;
double fx0[fnx0]=;
char *fn1[fnx1]=;
double (*fx1[fnx1])(double)=;
char *fn2[fnx2]=;
double (*fx2[fnx2])(double,double)=;
//計算算式字串的值
double compute(char *xin,int length,int *error);//運算子棧 +-*/ 為1234 0為空
signed char s[3]=;//數字棧符號
short now0=0;//運算子下標
short now1=0;//數字下標
short yes=0;//判斷函式是否成功
int i=0;//計數
int j=0;//計數
int k=0;//計數
int n=0;//計數 已讀字元數目
int nextlength=0;//計數 第一引數字元數目
int nextlength2=0;//計數 第一引數字元數目
char *p=xin;//指向字元的指標
double value[3]=;//數字棧
double pt=0;//小數點
//迴圈開始 讀字元 不支援空格
while(*p!='='&&n!=length&&*p!=0)else if(*p=='.')else if(*p=='+'||*p=='-'||*p=='*'||*p=='/')else if(*p=='-')else
++p;
++n;
continue;//結束 讀入下乙個字元
}if(o[now0]==0)
++now1;
}else if(o[now0]==1||o[now0]==2)
++now1;
}else
}else if(o[now0]==3||o[now0]==4)
}else if(*p=='(')
}--nextlength;
value[now1]=compute(p+1,nextlength,error);
p=p+nextlength+1;//補全缺少的字元
n=n+nextlength+1;
}else if(*p>='a'&&*p<='z')
//返回答案
return s[0]*value[0];//數字陣列第乙個元素與符號陣列第乙個元素乘積為最終答案
}
表示式計算器
早在上大學的時候,就想編寫乙個可以計算數學表示式的計算器,因為windowsxp自帶的計算器不支援表示式輸入,當要計算乙個算式時,不太方便。表示式計算器看似簡單,但要想把它做完善,不太容易,經過幾次改進之後,於一年前完成了這個小程式,雖然可能會有一些不足,不過也不打算再投入時間了,價值不大,只是拿來...
計算器 字尾表示式
不過目前這個功能太少,而且能算的十分有限,測試輸入為 4 4 5 3 測試輸出為 4 4 5 3 27 主要就是了解一下怎麼把中綴表示式轉化成字尾表示式,然後再利用字尾表示式求值,我後續會完善這個程式,做個真正意義上的計算器。o o 轉化步驟我搜尋了一下,大致如下 將中綴表示式轉換為等價的字尾表示式...
中綴表示式計算器
假如給定乙個中綴表示式 1 2 3 4 10 5利用棧就可以匯出字尾表示式123 4 105 當得到乙個字尾表示式時就很容易的求出表示式的值了,也是用棧計算的,對於123 4 105 從前往後,如果遇到運算元的時候直接入棧,遇到操作符,就從棧中彈出兩個操作,那下面的跟上面的那個預算,就可以得到123...