freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

數(shù)據(jù)結(jié)構(gòu)實驗二——算術(shù)表達(dá)式求值實驗報告(編輯修改稿)

2024-08-17 12:06 本頁面
 

【文章內(nèi)容簡介】 給s1 s1[i]=s2[i]。 s1[i]= 39。39。 s1[i+1]=39。\039。//為了方便打印后綴表達(dá)式,在字符串結(jié)尾加‘\0’}表示式求值運算的算法:算法描述:1) 讀入無括號的后綴表達(dá)式;2) 若為數(shù)值和小數(shù)點則將其聯(lián)合轉(zhuǎn)換為浮點型后進(jìn)棧(存放操作數(shù));3) 若為運算符,讓棧頂元素和次頂元素與次運算符進(jìn)行相應(yīng)的運算,運算結(jié)果打印并進(jìn)棧;4) 重復(fù)2)3)步驟,直到輸入為“”,則此時棧中的結(jié)果便是所追求的表達(dá)式的值。數(shù)值轉(zhuǎn)換為實數(shù)的算法描述:1) 若為數(shù)字,則將其減去39。039。的ASCII碼后就得到該數(shù)的數(shù)值,并暫存于一個變量m上;2) 若繼續(xù)為數(shù)字,也將其減去39。039。的ASCII碼后就得到該數(shù)的數(shù)值,并將其值加上已存的m*10后的值再存于m;3) 重復(fù)2)步驟直到遇到小數(shù)點,從小數(shù)點后的數(shù)開始,在重復(fù)2)步驟的通知,也記下小數(shù)點后的位數(shù)n;4) 當(dāng)遇到“ ”(空格)后,即表示此輪需轉(zhuǎn)換的數(shù)已讀入完畢,則將m除以10的你次方,則此時的之記為轉(zhuǎn)換后的實數(shù)。偽碼算法:void Calculate(SqStack_f *s,char *s2){ float m,x,y,z。 int i=0,j=0。 while(s2[i]!=39。39。)//讀入后綴表達(dá)式直到“”符號為止 { if(s2[i]=39。039。 amp。amp。 s2[i]=39。939。 || s2[i]==39。.39。) // 若為數(shù)值和小數(shù)點//則將其聯(lián)合轉(zhuǎn)換為浮點型后進(jìn)棧 { //數(shù)值轉(zhuǎn)換為實數(shù) m=0。 while(s2[i]!=39。 39。 amp。amp。 s2[i]!=39。.39。) //讀入的只為數(shù)字 m=m*10+(float)(s2[i++]39。039。)。//轉(zhuǎn)換為十進(jìn)制的整數(shù) if(s2[i]==39。.39。)//遇到小數(shù)點后 { j=0。i++。 while(s2[i]!=39。 39。) { m=m*10+(float)(s2[i++]39。039。)。//轉(zhuǎn)換為十進(jìn)制的整數(shù) j++。 //記錄小數(shù)點后的位數(shù) } while(j0) //轉(zhuǎn)換為實數(shù) { m/=10。 j。 } } i++。 Push_f(s,m)。 GetTop_f(s,amp。m)。 printf(The result is:%g\n,m)。 } else //讀入的為運算符 { Pop_f(s,amp。x)。//彈出棧頂元素 Pop_f(s,amp。y)。//彈出次頂元素 switch(s2[i]) {//讓棧頂和次頂元素與次運算符進(jìn)行相應(yīng)的運算,運算結(jié)果打印并進(jìn)棧 case 39。+39。:z=y+x。printf(The result is:%g\n,z)。break。 case 39。39。:z=yx。printf(The result is:%g\n,z)。break。 case 39。*39。:z=y*x。printf(The result is:%g\n,z)。break。 case 39。/39。:if(x==0) {//報錯功能 printf(表達(dá)式出錯,除數(shù)為‘0’,無意義\n)。 exit(1)。 } else { z=y/x。 printf(The result is:%g\n,z)。break。 } case 39。^39。:z=1。for(j=1。j=x。j++) {//乘方的運算 z=z*y。 printf(The result is:%g\n,z)。 } } Push_f(s,z)。 i++。 } }}結(jié)果輸出的偽碼算法:void result(SqStack_f *s){ float v。 GetTop_f(s,amp。v)。 printf(The final result is:%g\n,v)。//以合適的形式輸出結(jié)果,省去不必要的小數(shù)點}主程序的偽碼算法:void main(){ SqStack_f stack。 char str[80],c=39。Y39。 while(c==39。y39。 || c==39。Y39。)//判斷是否繼續(xù)本程序 { printf(請輸入算術(shù)表達(dá)式[本程序支持實數(shù)的加減乘除乘方運算],結(jié)束前請輸入‘’號!\n)。 gets(str)。//輸入表達(dá)式 InitStack_f(amp。stack)。//初始化一個存儲運算結(jié)果(實型)的棧 Translate(str)。//調(diào)用“中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式函數(shù)” printf(轉(zhuǎn)化后的后綴表達(dá)式為:\n)。//檢驗后綴表達(dá)式是否轉(zhuǎn)換正確 puts(str)。//輸出后綴表達(dá)式 Calculate(amp。stack,str)。//計算無括號表達(dá)式的值 result(amp。stack)。//調(diào)用“結(jié)果輸出函數(shù)” printf(你想繼續(xù)嗎?39。Y39?;?9。y39。為繼續(xù),其余為退出程序\n)。//增加程序的連續(xù)輸入功能 c=getchar()。 getchar()。//吞噬掉輸入判斷符后的‘\n’ }}函數(shù)的調(diào)用關(guān)系圖mainTranslateCalculateresultprecede四、 調(diào)試分析 在編程過程中,為了增加程序的實用性,將程序適用范圍擴(kuò)大到了實數(shù)型,并增加了連續(xù)輸入功能; 在編程過程中,為了增加程序的健壯性,在運算除法時,考慮到除數(shù)為“0”時的報錯和及時退出; 在調(diào)試過程中,最初一下子出來程序就出錯,為了方便檢查錯誤,故在主函數(shù)中增加了檢查后綴表達(dá)式是否轉(zhuǎn)換正確的函數(shù),并在每一步計算都跟蹤結(jié)果是否正確; 從程序?qū)嶒烆}的編制過程中容易看出,線性表的廣泛應(yīng)用,特別是順序存儲結(jié)構(gòu)的棧的應(yīng)用。本題中涉及兩元素類型(字符型和浮點型)的棧,由于是面向過程的語言,故只能分別定義。五、 用戶使用說明 本程序的運行環(huán)境為Window
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1