1. 程式人生 > >第四次作業四則運算

第四次作業四則運算

bsp 作用 表達式 cnblogs 四則運算 討論 .com 個數 oev

代碼git地址:https://git.coding.net/Rainbows/ruanjiangongcheng.git

對於本周作業,老師要求的是結對編程。作業要求如下:

功能1. 四則運算

功能2. 支持括號

功能3. 限定題目數量,"精美"打印輸出,避免重復

根據高遠博同學的提示,四則運算求值一定要用到逆波蘭表達式,所以我百度搜了一下逆波蘭表達式的作用和用法。

將一個普通的中序表達式轉換為逆波蘭表達式的一般算法是:

  (1)首先構造一個運算符棧,此運算符在棧內遵循越往棧頂優先級越高的原則。

  (2)讀入一個用中綴表示的簡單算術表達式,為方便起見,設該簡單算術表達式的右端多加上了優先級最低的特殊符號“#”。

  (3)從左至右掃描該算術表達式,從第一個字符開始判斷,如果該字符是數字,則分析到該數字串的結束並將該數字串直接輸出。

  (4)如果不是數字,該字符則是運算符,此時需比較優先關系。

  做法如下:將該字符與運算符棧頂的運算符的優先關系相比較。如果,該字符優先關系高於此運算符棧頂的運算符,則將該運算符入棧。倘若不是的話,則將棧頂的運算符從棧中彈出,直到棧頂運算符的優先級低於當前運算符,將該字符入棧。

  (5)重復上述操作(3)-(4)直至掃描完整個簡單算術表達式,確定所有字符都得到正確處理,我們便可以將中綴式表示的簡單算術表達式轉化為逆波蘭表示的簡單算術表達式。

以下是我所寫的程序主要代碼,也是我編寫本次程序的重點難點:

隨機生成四個數作為四則運算式子中的四個數,然後生成四則運算的符號‘+,-,*,/‘,並把數字和符號合並到一起,形成一個隨機的四則運算的式子。並且采用

讓被除數的素因子只有2和5去避免十進制下的無限小數。
{
num1 = RandNumber();
System.Threading.Thread.Sleep(15);
num2 = RandNumber();
System.Threading.Thread.Sleep(15);
num3 = RandNumber();
System.Threading.Thread.Sleep(15);
num4 = RandNumber();
System.Threading.Thread.Sleep(
15); op1 = RandSymbol(); System.Threading.Thread.Sleep(15); op2 = RandSymbol(); System.Threading.Thread.Sleep(15); op3 = RandSymbol(); if (op1 == /)//如果我們要避免十進制下的無限小數,只需要讓被除數的素因子只有2和5,以下同理。 { Random rd = new Random(); n2 = rd.Next(1, 5); System.Threading.Thread.Sleep(15); m5 = rd.Next(1, 3); num2 = (int)(Math.Pow(2, n2) * Math.Pow(5, m5)); } if (op2 == /) { Random rd = new Random(); n2 = rd.Next(1, 5); System.Threading.Thread.Sleep(15); m5 = rd.Next(1, 3); num3 = (int)(Math.Pow(2, n2) * Math.Pow(5, m5)); } if (op3 == /) { Random rd = new Random(); n2 = rd.Next(1, 5); System.Threading.Thread.Sleep(15); m5 = rd.Next(1, 3); num4 = (int)(Math.Pow(2, n2) * Math.Pow(5, m5)); } ToEval = num1.ToString() + op1.ToString() + num2.ToString() + op2.ToString() + num3.ToString() + op3.ToString() + num4.ToString(); GetAnsr(); //Console.WriteLine("{0}{1}{2}{3}{4}{5}{6}{7}", num1, op1, num2, op2, num3, op3, num4,eq); // Console.WriteLine("{0}", ToEval); }

最後從控制臺輸入執行結果如圖:

技術分享

這次編程過程中,我體會到了結對編程的好處,我的搭檔高遠博同學給予了我很大的幫助。我們互相轉換思想,遇到問題一起討論,最終完成了本次任務。以下是我們結對編程的照片:

技術分享

第四次作業四則運算