跳轉到內容

QBasic/基礎數學

來自華夏公益教科書,開放的書籍,開放的世界

QBasic 中有六種數值變數

型別 最小值 最大值
整數 -32,768 32,767
長整數 -2,147,483,648 2,147,483,647
浮點數 -3.37x10^38 3.37x10^38
雙精度浮點數 -1.67x10^308 1.67x10^308
64 位整數 -9,223,372,036,854,775,808 9,223,372,036,854,775,807
64 位浮點數 ±1.18E−4932 ±1.18E+4932

請注意,64 位的整數和浮點數型別變數僅在 QB64 中可用。

很多程式設計都是數學。不要害怕:很多數學都很簡單,但它仍然是數學。在本節中,我們將學習如何進行一些基本數學運算(與你在三年級學到的內容相同)以及如何運算元字。

方程設定

[編輯 | 編輯原始碼]

在 QBasic 中,方程具有基本的設定,即右側和左側。例如 X=5,如你可能猜到的,這將變數 X 設定為 5。但我們也可以在右側使用變數。Y=X*10 會將 Y 設定為 X 的 10 倍,在本例中,為 50。在接下來的程式中,我將展示幾個方程,讓你對數學有一個直觀的認識。

7MATH.BAS

[編輯 | 編輯原始碼]
 CLS
 
 'Set a-d to initial values
 a = 10
 b = 6
 c = 3.1415
 d = 3.333333
 
 e = a + b
 PRINT a; "+"; b; "="; e
 
 f = c * d
 PRINT c; "x"; d; "="; f
 
 g = b - c
 PRINT b; "-"; c; "="; g
 
 h = b / d
 PRINT b; "/"; d; "="; h
 
 i = INT(d)
 PRINT "Remove the decimal from "; d; "="; i

理解 7MATH.BAS

[編輯 | 編輯原始碼]

你從中學到的最重要的內容是數學方程的設定。我認為你應該能夠弄清楚所有符號的含義及其作用,但 QBasic 對方程很挑剔。對於“e=a+b”,如果你嘗試“a+b=e”,它將不起作用。我想在 7MATH.BAS 中說明的最後一點是 INT() 函式。就詞彙而言,函式是接收一個資訊並返回另一個資訊的東西。因此,PRINT 是一個語句,而 INT() 是一個函式。INT() 函式接收一個數字並截斷其小數部分,它不進行四捨五入。因此,INT(5.1) 是 5,INT(5.999) 仍然是 5。如果你想四捨五入一個數字,請使用 CINT()。

8MATH.BAS

[編輯 | 編輯原始碼]
 CLS
 INPUT "Enter a number: ", x
 PRINT
 
 x = x + 5
 PRINT "X is now: "; x
 
 x = x * x
 PRINT "X is now: "; x
 
 x = x / 5
 PRINT "X is now: "; x
 
 x = x - 4
 PRINT "X is now: "; x
 
 x = x / x
 PRINT "X should be 1: "; x

理解 8MATH.BAS

[編輯 | 編輯原始碼]

8MATH.BAS 展示了一個在程式設計中非常重要的簡單概念,但在數學中是不可能的。計算機計算方程的方式是先計算方程右側的所有數學運算,然後將其放入左側的變數中。因此,方程 x=x+5 很有意義,不像數學中的矛盾。根據當前值重新分配變數的值是很常見的,也是減少變數數量的好方法。

 CLS
 INPUT "How much is your bill: ", bill
 INPUT "What percent tip do you want to give: ", tip
 
 tip = tip / 100   'change percent to decimal
 tip = tip * bill  'change decimal to money
 
 PRINT
 PRINT "The tip is"; tip; "$."
 PRINT "Pay"; tip + bill; "$ total."

小費計算器

[編輯 | 編輯原始碼]

9TIP.BAS 根據你想要付的小費金額和百分比,計算出你的小費和總賬單金額。前三行清除螢幕並從使用者那裡獲取資訊。第五行透過除以 100 將小費從百分比轉換為正確的小數(例如 20%=.2 因為 20/100=.2)。下一行將該百分比乘以賬單,將其轉換為美元值。因此,如果你的賬單是 20.00 美元,並且你留下 20% 的小費,它會將 20*.2 相乘,結果是 4 或 4.00 美元。最後三行格式化輸出。
這是一個完整的程式的良好示例。它從使用者那裡收集資訊,處理資訊,並向用戶提供反饋。此外,程式的中間部分是變數節省的良好示例。這是一個需要練習才能掌握的主題。在編寫程式時,如果你使用太多變數,將難以跟蹤所有變數。如果你嘗試過分節省,你的程式碼可能難以理解。

你可能會注意到,如果你輸入的賬單金額不是精確的美元值,該程式可能會打印出超過兩位小數的數字。作為一個練習,嘗試修改該程式,使其只顯示兩位小數 - 你可以使用 CINT() 函式或你打算使用的任何其他舍入方法。

10OROP.BAS

[編輯 | 編輯原始碼]
 'ORder of OPerations
 CLS
 a = 15
 b = 10
 c = 12.2
 d = 1.618
 
 PRINT a * b + c   'these two are different
 PRINT a * (b + c)
 
 PRINT
 
 PRINT b - c / d   'these two are different
 PRINT (b - c) / d
 
 PRINT
 
 PRINT a * b - c * d / a + d   'these two are the same
 PRINT (a * b) - ((c * d) / a) + d

括號和運算順序

[編輯 | 編輯原始碼]

10OROP.BAS 是運算順序以及如何使用括號來操作它的一個例子。我不想在這裡深入解釋運算順序。我能給出的最好的建議是,除非你確定運算順序,否則使用括號來確保方程按你想要的方式工作。你需要知道的關於括號的一切是,最深層的巢狀括號優先計算。如果你想了解更多,有很多代數資源可用。說到這裡,你可能想溫習一下代數。雖然它對於程式設計不是必需的,但它可以幫助你更輕鬆地進行程式設計,並可以讓你建立更高階的程式。

隨機數

[編輯 | 編輯原始碼]

雖然我們將在下一節討論隨機數的使用,但我希望討論隨機數的生成。QBasic 有一個隨機數語句 RND,它生成一個 0 到 1 之間的隨機小數。你可以將其視為一個隨機百分比。一開始,這可能看起來是生成隨機數的奇怪方法。但是,透過一些數學運算,很容易將其操作為提供你想要的任何範圍內的數字。
第一步是將 RND 乘以一個數字(你想要的範圍)。例如“RND*10”。這將返回 0 到 10(包括兩者)之間的隨機數(小數)。因此,為了選擇 0 到 10 之間的隨機數,我們會說“(RND*10)”

11RND.BAS

[編輯 | 編輯原始碼]
 CLS
 RANDOMIZE TIMER
 
 PRINT "Random number from 0-9:"; RND * 10
 PRINT
 
 PRINT "Random number from 1-10:"; (RND * 10) + 1
 PRINT
 
 PRINT "Random integer from 1-10:"; INT(RND * 10) + 1
 PRINT
 
 PRINT "Random even integer from 50-100:"; INT(RND * 25) * 2 + 50

關於 RND 的更多資訊

[編輯 | 編輯原始碼]

關於 11RND.BAS 的一些說明,第二行 RANDOMIZE TIMER 設定了計算機使用當前時間來選擇隨機數。如果不這樣做,它每次都會選擇相同的隨機數(試試看,寫一個只有一行的程式,PRINT RND,然後反覆執行它,你的螢幕會充滿相同的數字),這對某些應用可能有用,但對大多數應用沒有用。將 RANDOMIZE TIMER 新增到所有使用 RND 語句的程式的頂部,它們將變得不那麼可預測。這個程式只演示瞭如何從隨機數生成器中選擇你想要的東西。最後一行顯示了你可以在得到什麼方面非常具體。確保執行這個程式幾次,以檢視不同的結果。

華夏公益教科書