中序轉後序程式問題

目前碰到了些麻煩

只剩下一題

想請大家幫個忙

感激不盡!!!

題目說明:

撰寫一個 C/C++程式,使其能夠讀取使用者輸入的中序表示(Infix Expression)運算式,轉換成後序表示式(Postfix Expression),緊接著計算出正確運算結果。程式的細項要求如下:

a. 讀取使用者即時輸入的中序表示運算式,並以 Enter 作為運算式之結束。

b. 使用 Stack,將使用者輸入的中序表示式轉換成後序表示式,並輸出轉換後的結果。

c. 使用 Stack,計算後序表示式的值,並輸出運算結果。

d. 運算子的優先順序如下:

i. 負號(-):高優先順序

ii. 乘(*)、除(/)、餘數(%):中優先順序

iii. 加(+)、減(-):低優先順序

e. 範例:

畫面顯示: 請輸入中序運算式:

使用者輸入: 5 + 3 * 2 + ( 4 * -2 + 9 ) * 7  (以空格隔開)

畫面輸出: 該運算式的後序表示法為:5 3 2 * + 4 -2 * 9 + 7 * +

畫面輸出: 該運算式的值為:18

已更新項目:

您好

很抱歉這麼久才出現

畢竟最近實在是太忙了

剛剛試了下您所寫的程式

有沒有辦法是讓使用者輸入呢?

4 個解答

評分
  • 6 年前
    最佳解答

    #include <stdio.h>

    #include <string.h>

    #include <stdlib.h>

    int isp(char a) {

    switch(a){

    case '+':

    case '-': return 1;

    case '*':

    case '/': return 2;

    }

    return 0;

    }

    int InToPost(

    char *inp, // input

    char *psx // output

    ){

    char stack[100], inx;

    int top,o,l, sign;

    for (sign=o=l=0,top=-1; (inx=*inp) != '\n' && inx!='\0';++inp) {

    switch(inx){

    default :

    if (o) return 6;

    o = !o;

    *psx++ = ' ';

    if(sign) *psx++ = '-';

    *psx++ = inx;

    sign=0;

    case ' ': continue;

    case ')':

    if (!o) return 7;

    o = 1;

    --l;

    for(; top >= 0 && stack[top] != '('; --top){

    *psx++ = ' ';

    *psx++ = stack[top];

    }

    if(0>top) return 2;

    --top;

    break;

    case '(':

    if (o) return 5;

    o = 0;

    ++l;

    stack[++top] = inx;

    break;

    case '-':

    if (!o) { sign=!sign; break; } // unary operator

    case '+':

    if (!o) { break; } // unary operator

    case '*':

    case '/':

    if (!o) return 1;

    o = 0;

    for(; top >= 0 && isp(inx) <= isp(stack[top]);--top){

    *psx++ = ' ';

    *psx++ = stack[top];

    }

    stack[++top] = inx;

    break;

    }

    }

    for(;top>=0;--top){

    *psx++ = ' ';

    *psx++ = stack[top];

    o=1;

    }

    if (l != 0) return 3;

    if (o != 0 && o != 1) return 4;

    *psx++ = '\0';

    return 0;

    }

    int main() {

    int i;

    char psx[100],

    *inp[] = {(char*)"1+2*----3-4",

    (char*)"5+3*2+(4*-2+9)*7",

    (char*)"5 + 3 * 2 + ( 4 * -2 + 9 ) * 7",

    (char*)"5 + 3 * 2 + ( 4 * ++--+-2 + 9 ) * 7",

    (char*)"((((((((1+2)*3)))))))+5",

    (char*)"(((1+3)))+((((((((1+2)-3)))))))*5",

    (char*)"1+3"};

    for(i=sizeof(inp)/sizeof(inp[0])-1;

    i>=0;

    --i){

    memset(psx,0,sizeof(psx));

    printf("status=%d:", InToPost(inp[i],psx));

    printf("%s=>%s\n",inp[i],psx);

    }

    return 0;

    }

    2014-11-02 11:16:34 補充:

    >有沒有辦法是讓使用者輸入呢?

    拜託一下 魏老師,我舉山竽 妳再少也要以一魚返吧.困難的東東都幫妳做了耶!

  • 6 年前

    九卅休閒特區 官方 TS777.CC 立即 加入試玩

    彩球 - bingo、三星彩、四星彩、539、六合、KENO彩、威力彩等各國彩球遊戲

    體育 -- 世界各國籃球(NBA)、棒球(MLB)、網球、冰球、足球等遊戲

    電子 機台 -- 5PK、水果盤、7 PK、金瓶梅、趙雲救主等復古 遊戲

    真人 遊戲 -- 骰寶、翻攤、龍虎、百家樂、三公、21點、輪盤等現場及手臂 遊戲

    對戰 GAME -- 麻將、大老二、德州撲克、暗棋、接龍、五 子棋、鬥地主等真 人競技 遊戲

    免費 註冊 體驗

    九卅舒壓館 官方 TS777.CC 歡迎 免費 加入

  • 匿名使用者
    6 年前

    誠心服務!會員溫馨!永久服務!

    第一:全程直播遊戲的公平與公正性【亞洲唯一直屬會員代理】

    第二:點數儲值和託售皆在十分鐘之內完成【全台娛樂城速度最快24小時不分周末】

    第三:二十四小時專業客服務線上服務全年無休【大大小小問題都可以馬上做詳細解答喔】

    電子機台.真人遊戲和你一同玩樂

    麻將 百家樂 5PK 德州撲克 水果盤 賓果

    輪盤 21點 10點半 骰盅 牌九 鬥地主 13支

    全年網站優惠活動不間斷!

    快去註冊會員!免費:官方網站 http://a8891.net/

  • 匿名使用者
    6 年前

    這里很不錯999shopping。com老婆很喜歡

    却冠俋

還有問題?馬上發問,尋求解答。