日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言写程序计算表达式的值,C语言 写的 表达式求值。

發布時間:2024/8/5 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言写程序计算表达式的值,C语言 写的 表达式求值。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有不對的地方還望指出來,讓我改正。謝謝。存一個代碼

#include

#include

#include

#include

#define Stack_Size 1010

#define INF 21000000

char cmp[7][8]= {">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<=?",">>>>?>>","<<<<="};

/*

> > < < < > >

> > < < < > >

> > > > < > >

> > > > < > >

< < < < < = ?

> > > > ? > >

< < < < < ? =

*/

typedef struct

{

char Elem[Stack_Size];

int top;

} Operator;

typedef struct

{

double Elem[Stack_Size];

int top;

} Number;

void InitStack_Operator(Operator* S)

{

S->top=-1;

}

void InitStack_Number(Number* S)

{

S->top=-1;

}

int Pop_Operator(Operator* S)

{

if(S->top==-1)

{

printf("運算符棧為空\n");

exit(10);

}

S->top--;

return 1;

}

int Pop_Number(Number* S)

{

if(S->top==-1)

{

printf("數字棧為空\n");

exit(11);

}

S->top--;

return 1;

}

int Push_Operator(Operator* S,char ch)

{

if(S->top==Stack_Size-1)

{

printf("運算符棧滿\n");

exit(12);

}

S->top++;

S->Elem[S->top]=ch;

return 1;

}

int Push_Number(Number* S,double ch)

{

if(S->top==Stack_Size-1)

{

printf("運算符棧滿\n");

exit(13);

}

S->top ++;

S->Elem[S->top]=ch;

return 1;

}

char Gettop_Operator(Operator *S)

{

if(S->top==-1)

{

printf("運算符棧為空\n");

exit(17);

}

return S->Elem[S->top];

}

double Gettop_Number(Number *S)

{

if(S->top==-1)

{

printf("數字棧為空\n");

exit(18);

}

return S->Elem[S->top];

}

double Calc(double a,double b,char opt)

{

double res;

if(opt=='+') res=a+b;

if(opt=='-') res=a-b;

if(opt=='*') res=a*b;

if(opt=='/')

{

if(fabs(b)<0.00000001)

{

printf("發生除0錯誤\n");

exit(15);

}

res=a/b;

}

//printf("%.2lf %c %.2lf = %.2lf\n",a,opt,b,res);

return res;

}

int change(char ch)

{

switch(ch)

{

case '+':

return 0;

case '-':

return 1;

case '*':

return 2;

case '/':

return 3;

case '(':

return 4;

case ')':

return 5;

case '#':

return 6;

}

return -INF;

}

char compare(char a,char b)

{

if(cmp[change(a)][change(b)]=='?')

{

printf("表達式錯誤\n");

exit(16);

}

return cmp[change(a)][change(b)];

}

int check(char *s,int len)

{

for(int i=0; i

{

if(s[i]>='0'&&s[i]<='9') continue;

if(s[i]=='+'||s[i]=='-'||s[i]=='*') continue;

if(s[i]=='/'||s[i]=='('||s[i]==')') continue;

return 0;

}

return 1;

}

int main()

{

char a[1010],b[1010];

int len;

Operator signs;

Number number;

InitStack_Number(&number);

InitStack_Operator(&signs);

Push_Operator(&signs,'#');

double x,y;

scanf("%s",a);

len=strlen(a);

if(check(a,len)==0)

{

printf("輸入中存在多余字符\n");

exit(19);

}

a[len]='#';

int i,f=0,k=0;

Push_Operator(&signs,'#');

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

{

if((a[i]>='0'&&a[i]<='9')||a[i]=='.')

{

b[k++]=a[i];

f=1;

continue;

}

if(f)

{

b[k]='\0';

Push_Number(&number,atof(b));

f=0;

k=0;

}

switch(compare(Gettop_Operator(&signs),a[i]))

{

case '

Push_Operator(&signs,a[i]);

break;

case'=':

Pop_Operator(&signs);

break;

case'>':

y=Gettop_Number(&number),Pop_Number(&number);

x=Gettop_Number(&number),Pop_Number(&number);

Push_Number(&number,Calc(x,y,Gettop_Operator(&signs)));

Pop_Operator(&signs);

i--;

break;

}

}

double ans=Gettop_Number(&number);

printf("%.2lf\n",ans);

return 0;

}

總結

以上是生活随笔為你收集整理的c语言写程序计算表达式的值,C语言 写的 表达式求值。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。