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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

c语言逆波兰计算器程序,C语言实现的简单的逆波兰计算器

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言逆波兰计算器程序,C语言实现的简单的逆波兰计算器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前后調試了好幾天,類型轉換問題頗為麻煩,無賴使用兩種不同類型的棧解決,但程序目前還有兩個問題:

1.目前不能進行float類型的計算;

2.不能進行多位數的運算。

實際上就是目前只能進行個位數的帶括號的加減乘除運算,目前只能寫到這一步,期待后續改進。

#include

#include

#include

#define CAPACITY 50

typedef struct stack

{

int top;

char arr[CAPACITY];

}*pStack,stack;

pStack initStack1()

{

pStack st = (pStack)malloc(sizeof(stack));

st->top = 0;

return st;

}

int stackEmpty1(pStack st)

{

return(st->top <= 0);

}

int stackFull1(pStack st)

{

return(st->top >= CAPACITY);

}

int pushStack1(pStack st, char a)

{

if(stackFull1(st))

{

printf("棧滿!\n");

return 0;

}

else

{

st->arr[st->top++] = a;

return 1;

}

}

char popStack1(pStack st)

{

char a;

if(stackEmpty1(st))

{

printf("???\n");

return 0;

}

else

{

a = st->arr[--st->top];

return a;

}

}

char getTop1(pStack st)

{

if(!stackEmpty1(st))

return st->arr[st->top-1];

else

printf("Empty stack");

return 0;

}

typedef struct

{

int top;

int data[CAPACITY];

}*dataStack;

dataStack initStack2()

{

dataStack st = (dataStack)malloc(sizeof(dataStack));

st->top = 0;

return st;

}

int stackEmpty2(dataStack st)

{

return(st->top <= 0);

}

int stackFull2(dataStack st)

{

return(st->top >= CAPACITY);

}

int pushStack2(dataStack st, int data)

{

if(stackFull2(st))

{

printf("棧滿!\n");

return 0;

}

else

{

st->data[st->top++] = data;

return 1;

}

}

int popStack2(dataStack st)

{

int data;

if(stackEmpty2(st))

{

printf("???\n");

return 0;

}

else

{

data = st->data[--st->top];

return data;

}

}

int getTop2(dataStack st)

{

if(!stackEmpty2(st))

return st->data[st->top-1];

else

printf("Empty stack");

return 0;

}

int priority(char op)

{

switch(op)

{

case '*':

case '/':return 2;

case '+':

case '-':return 1;

default: return 0;

}

}

int myAtoi(char a)

{

return a-'0';

}

int main(void)

{

int p = 0;

int i = 0;

int j;

int result, tmp1, tmp2;

char ch, temp;

char infix[CAPACITY] = "\0";

char output[CAPACITY];

pStack st = initStack1();

dataStack st2 = initStack2();

printf("請輸入中綴表達式:");

scanf("%s", &infix);

printf("后綴表達式為:");

for(ch = infix[p];ch !='\0';ch = infix[++p])

{

switch(ch)

{

case '(':pushStack1(st,ch);break;

case ')':

{

while(getTop1(st) != '(')

{

output[i++] = getTop1(st);

printf("%c", popStack1(st));

}

popStack1(st);

break;

}

case '+':

case '-':

case '*':

case '/':

{

while(!stackEmpty1(st))

{

temp = getTop1(st);

if(priority(temp) >= priority(ch))

{

output[i++] = temp;

printf("%c", popStack1(st));

}

else

{

break;

}

}

pushStack1(st, ch);

break;

}

default:output[i++] = ch,printf("%c",ch);

}

}

while(!stackEmpty1(st))

{

temp = popStack1(st);

output[i++] = temp;

if(temp == '(')

{

printf("表達式有誤!");

exit(EXIT_FAILURE);

}

printf("%c", temp);

printf("\n");

}

output[i] = '\0';

free(st);

for(j=0;j

{

switch(output[j])

{

case'+':tmp1 = popStack2(st2);tmp2 = popStack2(st2);result = tmp1 + tmp2;pushStack2(st2, result);break;

case'-':tmp1 = popStack2(st2);tmp2 = popStack2(st2);result = tmp2 - tmp1;pushStack2(st2, result);break;

case'*':tmp1 = popStack2(st2);tmp2 = popStack2(st2);result = tmp2 * tmp1;pushStack2(st2, result);break;

case'/':tmp1 = popStack2(st2);tmp2 = popStack2(st2);result = tmp2 / tmp1;pushStack2(st2, result);break;

default:pushStack2(st2,myAtoi(output[j]));break;

}

}

printf("輸出結果為: %d\n", getTop2(st2));

return 0;

}兩種堆??梢杂梅盒蛯崿F共用函數,目前還不清楚怎么實現。

總結

以上是生活随笔為你收集整理的c语言逆波兰计算器程序,C语言实现的简单的逆波兰计算器的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲一区成人在线 | 人人爽在线 | 亚洲天堂男人的天堂 | 男插女视频在线观看 | 爱插网| av在线播放地址 | 日韩在线免费av | 黄色高潮 | 色综合天天综合 | 久久91亚洲精品中文字幕奶水 | 日日噜噜夜夜狠狠久久波多野 | 美女啪啪网址 | 9久久9毛片又大又硬又粗 | 久久精品亚洲一区二区 | 91精品国产麻豆国产自产在线 | 亚洲mv一区 | hs网站在线观看 | 欧美精品在线一区 | 国产欧美日韩精品在线 | 少妇人妻偷人精品视频蜜桃 | 成人美女在线 | 久久午夜神器 | 黄色网在线播放 | 大地av| 欧美暧暧视频 | 美国一级大黄一片免费中文 | 亚洲精品456 | 国产精品第108页 | va在线视频 | 国产色一区二区 | 久久这里只有精品99 | 天天拍天天操 | 蜜臀久久| 欧美色图13p | 小明成人免费视频 | 天天鲁一鲁摸一摸爽一爽 | 日本久久爱| 黄色在线视频网址 | 最新亚洲精品 | 国产高清在线观看视频 | 中文字幕欧美另类精品亚洲 | 最新永久地址 | 成年人黄色免费视频 | 99性趣网 | 麻豆国产精品777777在线 | 黄色变态网站 | 大咪咪av| 91丨九色 | 天天躁日日躁狠狠躁av麻豆 | 国产一区免费 | 激情91视频| 午夜成人免费影院 | 无码人中文字幕 | 日本黄色免费大片 | 国产综合激情 | 天天色一色| 久一在线| 亚洲欧美日韩另类在线 | 久久精品视频无码 | 亚洲天堂欧美在线 | 人人妻人人澡人人爽 | 亚洲国产永久 | 亚洲一级淫片 | 先锋资源在线视频 | 亚洲综合在线五月 | 加勒比一区二区三区 | 男操女视频免费 | av巨作| 一级黄色裸体片 | 国产成人传媒 | 亚洲特黄| 丰满双乳秘书被老板狂揉捏 | 欧洲精品免费一区二区三区 | 国产视频1区 | 日本一区二区三区成人 | www.五月天婷婷.com | 久久无码人妻丰满熟妇区毛片 | 91成人破解版 | 美女扒开尿口给男人桶 | 中文理论片 | 色国产在线 | 午夜精品福利在线观看 | 亚洲成人av免费观看 | 国产人妖一区二区 | 欧美性猛交乱大交 | 日本黄色性视频 | 嫩草午夜少妇在线影视 | 午夜视频福利在线观看 | 夜夜撸av| 天天操夜夜夜 | 热久久在线 | 夜夜干夜夜 | 成人国产精品 | 香蕉视频黄色片 | 欧美日韩一区二区在线播放 | 夜夜操夜夜干 | 亚洲最大av | 黄视频网站在线观看 | 亚洲AV乱码国产精品观看麻豆 |