C語言計算器 支援複雜表示式 括號 函式

2021-09-11 17:13:18 字數 1820 閱讀 7403

//可以使用四則運算、括號和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...