當前位置:編程學習大全網 - 編程語言 - C語言計算表達式的值

C語言計算表達式的值

#include<stdio.h>

#include<stdlib.h>

#define MaxSize 99

void translate(char str[],char exp[]) /*將算術表達式轉換成後綴表達式*/

{

struct

{

char data[MaxSize];

int top; /*top為棧頂*/

}op; /*定義壹個含data和top的結構體*/

char ch;

int i = 0,t = 0;

op.top = -1;

ch = str[i]; /*將str的每壹個數轉換成ch*/

i++;

while(ch != '\0') /*ch對應不同的符號的時候對應的轉換情況*/

{

switch(ch)

{

case '(': /*當是(的時候,將此括號存入棧op*/

op.top++;op.data[op.top]=ch;

break;

case ')':

while(op.data[op.top] != '(') /*括號內的轉換優先級最高,故先提取表達式*/

{

exp[t]=op.data[op.top];

op.top--;

t++;

}

op.top--;

break;

case '+':

case '-':

while(op.top != -1&&op.data[op.top] != '(')

{

exp[t] = op.data[op.top];

op.top--;

t++;

}

op.top++; /*恢復可插入位置*/

op.data[op.top] = ch;

break;

case '*':

case '/':

while(op.top == '/'||op.top == '*') /*優先級*/

{

exp[t] = op.data[op.top];

op.top--;

t++;

}

op.top++;

op.data[op.top] = ch;

break;

case ' ': /*忽略空格,排除誤操作*/

break;

default:

while(ch >= '0'&&ch <= '9')

{

exp[t] = ch;t++;

ch = str[i];i++;

}

i--;

exp[t] = '#'; /*分隔操作數,為了美觀,也為了以後好分隔操作數,呵呵*/

t++;

}

ch = str[i];

i++;

}

while(op.top != -1) /*得到剩下的部分*/

{

exp[t] = op.data[op.top];

t++;

op.top--;

}

exp[t] = '\0'; /*表達式結束*/

}

float cal_value(char exp[])

{

struct

{

float data[MaxSize];

int top;

}st; /*操作數棧*/

float d;

char ch;

int t = 0;

st.top = -1;

ch = exp[t];

t++;

while(ch != '\0')

{

switch(ch) /*運算主體*/

{

case '+':

st.data[st.top-1] = st.data[st.top-1]+st.data[st.top];

st.top--;

break;

case '-':

st.data[st.top-1] = st.data[st.top-1]-st.data[st.top];

st.top--;

break;

case '*':

st.data[st.top-1] = st.data[st.top-1]*st.data[st.top];

st.top--;

break;

case '/':

if(st.data[st.top] != 0)

st.data[st.top-1]=st.data[st.top-1]/st.data[st.top];

else

{

printf("\n\t除0是錯誤的");

}

st.top--;

break;

default:

d=0;

while(ch >= '0'&&ch <= '9') /*從後綴表達式中獲取操作數,#作用在此體現*/

{

d = 10*d+ch-'0';

ch = exp[t];

t++;

}

st.top++;

st.data[st.top] = d;

}

ch = exp[t];

t++;

}

return st.data[st.top];

}

int main() /*可以提到前面去*/

{

char str[MaxSize],exp[MaxSize]; /*str為算術表達式,exps為後綴表達式*/

printf("請輸入壹個求值表達式\n");

printf("表達式:");

gets(str); /*輸入壹個算術表達式*/

printf("原表達式是:%s\n",str);

translate(str,exp); /*將算術表達式轉換成後追表達式*/

printf("後綴表達式:%s\n",exp);

printf("計算結果:%g\n",cal_value(exp));/*通過後綴表達式來求值*/

system("pause");

return 0;

}

  • 上一篇:玩遊戲用什麽筆記本電腦好?
  • 下一篇:三菱系統m70cnc原始密碼是
  • copyright 2024編程學習大全網