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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

九、表达式求值(1)

發(fā)布時間:2025/3/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 九、表达式求值(1) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

九、表達(dá)式求值(1)

文章目錄

  • 九、表達(dá)式求值(1)
    • 題目描述
    • 解題思路
    • 上機(jī)代碼

題目描述

背景:

我們的教材中已經(jīng)介紹了表達(dá)式求值的算法,現(xiàn)在我們將該算法的功能進(jìn)行擴(kuò)展,要求可以處理的運(yùn)算符包括:+、-、*、/、%(整數(shù)取余)、^(乘方)、(、)。

要求:

采用算符優(yōu)先算法,計算的中間結(jié)果只保留整數(shù)。

輸入:

第一行為整數(shù)N。表示下面有N個表達(dá)式

從第二行起的后面N行為N個由整數(shù)構(gòu)成的表達(dá)式

輸出:

共N行,每行為相應(yīng)表達(dá)式的計算結(jié)果。

如果判斷出表達(dá)式有錯誤,則輸出:error.

如果在計算過程中出現(xiàn)除數(shù)為0的情況,則輸出:Divide 0.

特殊情況說明:

在表達(dá)式中,如果操作數(shù)出現(xiàn)負(fù)數(shù)(例如-8),則要特別注意。例如:
10加-8表示為:10±8。
10減-8表示為:10–8。

測試輸入期待的輸出時間限制內(nèi)存限制額外進(jìn)程
測試用例 14
2^3
2^0
2^3^2
2^(3-1)^(10-8)
8
1
512
16
1秒64M0
測試用例 211
(2+8
2+8)
8/0
8/(8+5-13)
2^(2-5)
10-(80-30(/3*3+4
10-80-30)/3*3+4
(2+8)(3+2)
(2)3(8)
30(/3+3)+4
10(20-8)+2
error.
error.
Divide 0.
Divide 0.
error.
error.
error.
error.
error.
error.
error.
1秒64M0
測試用例 32
10(10)
14*10-(10)2
error.
error.
1秒64M0
測試用例 414
18-32
18/4
18%3
10+20*4
10-20/4
(18-3)*3
10*(10)
(10+2)/(8-10)
(2*3)/(5*2)
10-(80-30)/3*3+4
(((2+8)*2-(2+4)/2)*2-8)*2
(((8+2)*(4/2)))
10/0
(10-80*2
-14
4
0
90
5
45
100
-6
0
-34
52
20
Divide 0.
error.
1秒64M0

解題思路

算符優(yōu)先算法的思路不管是在PPT還是教材中已經(jīng)給出了詳細(xì)說明,我們再回顧一下

從左向右掃描表達(dá)式:

  • 遇操作數(shù),保存;
  • 遇運(yùn)算符號 θjθ_jθj?,與剛處理過的運(yùn)算符 θiθ_iθi? 比較:
    • θi<θjθ_i < θ_jθi?<θj? 則保存 θjθ_jθj?(已存入棧中的運(yùn)算符的優(yōu)先關(guān)系為 θ1<θ2<θ3θ_1 < θ_2 < θ_3θ1?<θ2?<θ3?···)
    • θi>θjθ_i > θ_jθi?>θj? 則說明 θiθ_iθi? 是已掃描過的運(yùn)算符中優(yōu)先級最高的,可進(jìn)行運(yùn)算
    • θi=θjθ_i = θ_jθi?=θj? 則說明括號內(nèi)算式已算完,需消去括號

算符優(yōu)先算法用兩個工作棧:OPTR棧保存運(yùn)算符;一個是OPND棧保存操作數(shù)或運(yùn)算結(jié)果。

基本思想

1.將操作數(shù)棧置空,表達(dá)式起始符“#”入棧(運(yùn)算符棧的棧底元素)。

2.依次讀入表達(dá)式中的每一項(有完整意義),若是操作數(shù),則進(jìn)OPND棧;若是運(yùn)算符,則與OPTR棧的棧頂運(yùn)算符比較優(yōu)先級后作相應(yīng)操作, 直至表達(dá)式求值完畢(即OPTR棧頂元素和當(dāng)前讀入字符均為“#”)

Tips:

老師上課時認(rèn)真講了這個算法,并預(yù)留了這個算法關(guān)于 C 語言實(shí)現(xiàn)的代碼,相信細(xì)心的同學(xué)已經(jīng)注意到了。但是這段代碼是不能直接通過這個題的,有一些小的 bug 需要我們進(jìn)行處理。因此我們可以選擇理解代碼的邏輯,針對具體 bug 進(jìn)行訂正即可。

上機(jī)代碼

#include<stdlib.h> #include<stdio.h> #include<string.h> #include<math.h> #define Nul 0x00char chinput[200], *p; /* 運(yùn)算式存儲字符串,運(yùn)算式當(dāng)前讀取位置 */ int operationgFlag=0; /* operationgFlag=1時意味著出現(xiàn)除數(shù)為0的情況 */struct t /* 符號棧 */ {char dat[200];int top; }prt;struct d /* 數(shù)字棧 */ {long int dat[200];int top; }prd;char PRI[9][9]= /* 優(yōu)先級表 */ {{'>','>','<','<','<','<','<','>','>'},{'>','>','<','<','<','<','<','>','>'},{'>','>','>','>','<','<','<','>','>'},{'>','>','>','>','<','<','<','>','>'},{'>','>','>','>','>','<','<','>','>'},{'>','>','>','>','>','<','<','>','>'},{'<','<','<','<','<','<','<','=',Nul},{'>','>','>','>','>','>',Nul,'>','>'},{'<','<','<','<','<','<','<',Nul,'='} };void pushd( long int a ) /* 數(shù)字入棧 */ {prd.dat[ prd.top++ ]=a; } void pusht( char a ) /* 符號入棧 */ {prt.dat[ prt.top++ ]=a; } long int popd( ) /* 數(shù)字出棧 */ {return prd.dat[ --prd.top ]; } char popt( ) /* 符號出棧 */ {return prt.dat[ --prt.top ]; }long int numble() /* 數(shù)字整理 */ {long int b=0;do{ b = b*10 + *p -'0'; // 組成整數(shù)p++;}while ( *p>='0' && *p<='9' ) ;return b; }long operation( long int x, long int y, char a ) {switch( a ){ case '+': return x+y;case '-': return x-y;case '*': return x*y;case '/': if ( y ) return x/y;else { printf("Divide 0.\n"); operationgFlag=1; return 0;}case '%': return ((long int) fmod(x,y));case '^': if (y>=0 ) return pow(x,y);else { printf("error.\n"); operationgFlag=1; return 0;}} }int signswitch( char a ) /* 符號轉(zhuǎn)換 */ {switch( a ){ case '+': return 0; case '-': return 1;case '*': return 2; case '/': return 3;case '%': return 4; case '^': return 5;case '(': return 6; case ')': return 7;case '#': return 8;} }char refusal( char a,char b ) /* 判定優(yōu)先級 */ {return PRI[signswitch(a)][signswitch(b)]; }int main() {int i,j,n,k,l, flag=0; /* flag=0前一個符號不是) */scanf("%d",&n);while(n--){//初始化operationgFlag = 0;flag = 0;char b;prt.dat[0] = '#';prt.top = 1;prd.top = 0;scanf("%s", chinput); /* 接收運(yùn)算式 */strcat ( chinput, "#"); /* 在運(yùn)算式結(jié)尾加#號 */p = chinput;while ( *p!='#' || prt.dat[prt.top-1]!='#' ) //表達(dá)式中還有值或者棧中還有值{if ( *p>='0' && *p<='9') { j = numble(); /* 如果是數(shù)字進(jìn)行整理并入棧 */pushd( j );}else /* 如果是符號與棧頂?shù)姆柋容^并運(yùn)算 */{if ( flag==1 && *p=='(' ){printf("error.\n");goto h;}else if ( *p==')') flag = 1;else flag = 0;switch ( refusal(prt.dat[prt.top-1], *p ) ){case '<': pusht ( *p++ ); break; /* 高則入棧 */case '=': popt( ); /* 脫括號 */p++; break;case '>': b = popt(); /* 低則進(jìn)行棧頂計算 */k = popd(); /* 第二操作數(shù)出棧 */l = popd(); /* 第一操作數(shù)出棧 */k = operation(l,k,b); /* 計算 */if(operationgFlag==1)goto h;else{pushd(k); break; /* 計算結(jié)果入棧 */}case Nul: printf("error.\n");goto h;}}}if(prd.top-1 == 0) //數(shù)字棧中只有一個數(shù),那就是最終結(jié)果printf("%d\n",prd.dat[prd.top-1]); /* 輸出 */elseprintf("error.\n");h:; /* 繼續(xù)下一個 *//*有三處需要直接進(jìn)入下一次循環(huán),goto不失是個好方法*/}return 0; }

總結(jié)

以上是生活随笔為你收集整理的九、表达式求值(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 伊人亚洲影院 | 少妇流白浆| 婷婷在线观看视频 | www日本com| 在线看黄网站 | 亚洲aav| 美女精品在线 | 波多野结衣1区 | 国产99视频在线观看 | av成人免费在线观看 | 国产偷怕| 日韩三级网 | 久久久久亚洲av无码网站 | 亚洲乱强伦 | 久久成人精品一区二区 | 免费视频毛片 | 成人爽a毛片一区二区免费 日本高清免费看 | 亚洲网站在线免费观看 | 一区自拍 | 久草免费在线视频观看 | 超碰免费人人 | 蜜臀久久精品久久久久久酒店 | 草久久久| 伊人视频在线观看 | 超碰在线c| 91免费官网 | 青青色在线 | 亚洲日本成人在线观看 | av青青草原 | 国产精一区 | 三年中国片在线高清观看 | 高清视频在线播放 | 黄污视频在线播放 | 亚洲第一av网 | 精品小视频在线观看 | 亚洲第一页夜 | 阿娇全套94张未删图久久 | 国产有码在线观看 | 免费一区二区三区四区 | 字幕网在线 | yy6080午夜| 俄罗斯嫩小性bbwbbw | 日日夜夜爽爽 | 小说肉肉视频 | 国产午夜电影 | 亚洲av成人精品毛片 | 成人黄色性视频 | 亚洲欧洲自拍偷拍 | 日韩免费av网站 | 老头av| 北条麻妃一区二区三区免费 | 99久久久国产精品无码免费 | 香蕉视频97 | 人民的名义第二部 | 91精品国产高清一区二区三密臀 | 天天干干天天 | 亚洲看看 | 97色在线| 国产福利不卡 | 浮力影院草草 | 天天操天天操天天射 | 又黄又高潮的视频 | 亚洲九九爱 | 天天狠天天插天天透 | 国产日韩精品在线观看 | 91操视频| 色狠av| 精品丝袜一区 | 在线精品视频免费观看 | 欧美日韩不卡一区二区 | 中文 欧美 日韩 | 成人免费高清在线观看 | 国产乱码精品一区二区三区五月婷 | 夜夜草网 | 日本a级c片免费看三区 | 午夜秋霞 | 91精品啪在线观看国产线免费 | 欧美夫妇交换xxx | 九七电影院97理论片 | 外国黄色网 | 三上悠亚在线观看一区二区 | 色婷婷久久一区二区三区麻豆 | 国产一级二级三级精品 | 国产性精品 | 日韩三区视频 | 精品三级 | 搞黄视频在线观看 | 亚洲人人人 | 欧美动态视频 | 不用播放器av | 99re免费视频精品全部 | 东京热加勒比无码少妇 | 国产男女精品 | 综合网伊人 | 国产5区| 日美一级片 | 中文字幕人妻丝袜二区 | 波多野结衣电车 | 国产在线区|