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。在接下來的程式中,我將展示幾個方程,讓你對數學有一個直觀的認識。
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
你從中學到的最重要的內容是數學方程的設定。我認為你應該能夠弄清楚所有符號的含義及其作用,但 QBasic 對方程很挑剔。對於“e=a+b”,如果你嘗試“a+b=e”,它將不起作用。我想在 7MATH.BAS 中說明的最後一點是 INT() 函式。就詞彙而言,函式是接收一個資訊並返回另一個資訊的東西。因此,PRINT 是一個語句,而 INT() 是一個函式。INT() 函式接收一個數字並截斷其小數部分,它不進行四捨五入。因此,INT(5.1) 是 5,INT(5.999) 仍然是 5。如果你想四捨五入一個數字,請使用 CINT()。
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 展示了一個在程式設計中非常重要的簡單概念,但在數學中是不可能的。計算機計算方程的方式是先計算方程右側的所有數學運算,然後將其放入左側的變數中。因此,方程 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() 函式或你打算使用的任何其他舍入方法。
'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)”
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
關於 11RND.BAS 的一些說明,第二行 RANDOMIZE TIMER 設定了計算機使用當前時間來選擇隨機數。如果不這樣做,它每次都會選擇相同的隨機數(試試看,寫一個只有一行的程式,PRINT RND,然後反覆執行它,你的螢幕會充滿相同的數字),這對某些應用可能有用,但對大多數應用沒有用。將 RANDOMIZE TIMER 新增到所有使用 RND 語句的程式的頂部,它們將變得不那麼可預測。這個程式只演示瞭如何從隨機數生成器中選擇你想要的東西。最後一行顯示了你可以在得到什麼方面非常具體。確保執行這個程式幾次,以檢視不同的結果。