跳转到内容

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 语句的程序的顶部,它们将变得不那么可预测。这个程序只演示了如何从随机数生成器中选择你想要的东西。最后一行显示了你可以在得到什么方面非常具体。确保运行这个程序几次,以查看不同的结果。

华夏公益教科书