第四次作業的完善

2022-08-13 12:18:12 字數 1548 閱讀 1746

——下定決心開始行動後,你會發現問題並非有想象中的那麼難,問題照樣有理可尋。過程中也曾迷茫,甚至想放棄,但既然開始了總不能半途而廢吧。

——時間擠一擠真的還是會有的。

( github鏈結 )

接下來的是我的解題思路:

1.因為我們輸入的式子是中綴表示式,但對計算機來說中綴表示式卻是很複雜的,因此計算表示式的值時,通常需要先將中綴表示式轉換為字首或字尾表示式,然後再進行求值。

因此我先將中綴表示式轉變為字首表示式。(過程中我參考了以下部落格 參考部落格 )。

(期間我在轉換的字首表示式的過程中,忘記了將括號剔除,導致了程式無法正常執行。。。在這上花了好多時間。)

2.轉化成字首表示式之後就可以開始計算了:

從右到左遍歷表示式的每個數字和符號,遇到是數字就進棧,遇到的是符號,就將棧頂的兩個數字出棧,進行運算,運算結果進棧,一直到最終獲得結果。

3.其中讓我最懵的就是對負數的判斷處理,這也是我考慮了最久的問題,後來在同學的幫助下終於攻克了該難關。

如下是主要**:

int calculation::level(string c) //判斷運算符號優先順序 

if(c=="*" || c=="/")

return (q);

}bool calculation::isoperator(string s) //判斷是否是四則運算符號

double calculation::output(queuestrs)

while(!ch.empty())

else if (s1.top() == ")")

else if(level(temp)>=level(s1.top()))

else

}else if(temp=="(")

s1.pop();

} else if(temp==")")

else }

while(!s1.empty()) //棧s1不為空則把s1中剩下的所有元素壓入棧s2中

// 此時已得到字首表示式

while(!s2.empty()) //將字首表示式的逆序逐個壓入棧ch1中

while(!ch1.empty()) //開始計算

else if(symble == "-")

else if(symble == "*")

else if(symble == "/")

else // 將字串中的數字轉成double型 }

double num=0;

num=out.top();

out.pop();

return num;

}

實現效果:

收穫:1.cmd命令列對於我來說也是陌生的,因此參考資料(參考資料 ),通過檢視資料自己對於命令列有了基礎的了解。

2.這次的作業也讓我對stack棧有所了解,能夠比較熟練應用該資料結構。

3.運用sstream將字串中的數字轉為double型。(可參考資料 )

第四次作業

扎ogu 典型產品 最高傳輸速率 ieee 802.11a wi fi5 802.11a 43m 450 zyxel p334u 54mbps 1500 zyxel p335u 54mbps 1600 ieee 802.11b d link di 624 a 54mbps 215 linksys w...

第四次作業

作業題一 vs2012 rc在介面上,比beta版更容易使用,彩色的圖示和按照開發 執行 除錯等環境區分的顏色方案讓人愛不釋手。vs2012整合了asp.net mvc 4,全面支援移動和html5,wf 4.5相比wf 4,更加成熟,期待已久的狀態極工作流回來了,更棒的是,現在它的設計器已經支援c...

第四次作業

專案一求1000以內所有偶數的和 includevoid main cout sum includevoid main while i 1000 cout sum includeint main while i 1001 cout 專案3 乘法口訣表 程式設計序,輸出乙個乘法口訣表,形如 1x1 1...