算術表示式有字首表示法、中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。
輸入在一行中給出不含空格的中綴表示式,可包含+、-、*、\以及左右括號(),表示式不超過20個字元。
在一行中輸出轉換後的字尾表示式,要求不同物件(運算數、運算符號)之間以空格分隔,但結尾不得有多餘空格。
2+3
*(7-
4)+8
/4
237
4-*+
84/+
#include
#include
#include
using status =
int;
using elemtype =
char
;#define initsize 30
#define increment 10
#define max 20
#define overflow -2
#define error 0
#define ok 1
struct stack
;status initstack
(stack *s)
s->top = s-
>base;
s->stacksize = initsize;
return ok;
}status push
(stack *s, elemtype e)
s->top = s-
>base + s-
>stacksize;
s->stacksize +
= increment;
}*s-
>top++
= e;
return ok;
}status pop
(stack *s, elemtype *e)
*e =
*--s-
>top;
return ok;
}status change
(stack *s, elemtype str)
}if(str[i]
=='+'
|| str[i]
=='-'
)else
else
}while
(s->top - s-
>base >
0&& e !=
'(')
;push
(s, str[i]);
}}else
if(str[i]
==')')}
//剛開始測試1+((2+3)x4)-5一直不對,後來發現書寫的符號和計算機的不一樣,於是再多加了條件判斷『x』和『x』
else
if(str[i]
=='*'
|| str[i]
=='/'
|| str[i]
=='('
|| str[i]
=='x'
|| str[i]
=='x'
)else
if(str[i]
=='\0'
)else
i++;}
while
(s->top - s-
>base)
return ok;
}int
main()
#include
#include
#include
intisnum
(char c)
;int
iszhengfu
(char c)
;int
compare
(char a,
char b)
;int
main()
printf
("%c"
,str1[i]);
}elseif(
iszhengfu
(str1[i])&&
(i?!
isnum
(str1[i-1]
)&& str1[i-1]
!=')':1
))printf
("%c"
,str1[i]);
}}else
}else
else
break;}
str2[flag++
]= str1[i];}
}else str2[flag++
]= str1[i]
;for
( j=
0; j}}
while
(flag)
return0;
}int
isnum
(char c)
intiszhengfu
(char c)
intcompare
(char a,
char b)
}}
7 4 表示式轉換 (25 分)
7 4 表示式轉換 25 分 算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。在一行中輸出轉換後的字...
表示式轉換 中綴表示式轉換為字尾表示式
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...
表示式轉換
2 3 7 4 8 4 2 3 7 4 8 4 思路 a.若為 入棧 b.若為 則依次把棧中的的運算子加入字尾表示式中,直到出現 從棧中刪除 c.若為 除括號外的其他運算子,當其優先順序高於除 以外的棧頂運算子時,直接入棧。否則從棧頂開始,依次彈出比當前處理的運算子優先順序高和優先順序相等的運算子,...