回到第一个程序。如果我们的程序不仅仅会说“Hello World (你好,世界)”; 而是可以根据一天中的不同时间段说“Good Morning World (早上好,世界)”, 或者“ Good Evening World (晚上好,世界)”,那是不是一件很酷的事情?在下一个程序中, 我们将让计算机能够在中午12点以前说“Good Morning World (早上好,世界)”,在中午12点以后说“Good Evening World (晚上好,世界)”。
If (Clock.Hour < 12) Then
TextWindow.WriteLine("Good Morning World")
EndIf
If (Clock.Hour >= 12) Then
TextWindow.WriteLine("Good Evening World")
EndIf
根据你运行程序的时间,你将会看到下面的某一个输出。
图 - Good Morning World (早上好,世界)
图 - Good Evening World (晚上好,世界)
让我们来分析一下程序的前三行。你肯定已经发现这几行程序告诉计算机如果Clock.Hour 小于12 ,就输出“Good Morning World. (早上好,世界。)”。If, Then 和 EndIf 是在程序运行过程中计算机能够理解的特殊语言。If 后面总是会跟一个条件判断。在这个例子中是(Clock.Hour < 12)。记住,为了让计算机理解你的意图,小括号在这里是必须的。条件判断后面跟的是then 和要执行的实际操作。实际操作后面跟的是EndIf , 这告诉计算机这个有条件的执行过程结束了。
在then 和EndIf 之间可能会有不只一个操作。如果条件符合,计算机将会把它们全部执行。例如,你可以写如下程序:
If (Clock.Hour < 12) Then
TextWindow.Write("Good Morning. ")
TextWindow.WriteLine("How was breakfast?")
EndIf
在这一章最开始的程序中,你可能已经注意到第二个条件有点多余。Clock.Hour 的值只可能小雨或者大于12。 我们不需要真正检查第二个条件。对于这种情况,我们可以通过else ,把两个if..then..endif 语句缩短为一句。
如果我们用else 重写,你将看到的下面的程序:
If (Clock.Hour < 12) Then
TextWindow.WriteLine("Good Morning World")
Else
TextWindow.WriteLine("Good Evening World")
EndIf
这个程序将和最开始的程序做完全同样的事情。这里我们学到了计算机编程中非常重要的一课:
在编程过程中,我们经常可以通过很多方法做同样的事情。很多时候,一种方法比其它的方法更有效。选择哪一种方法是由程序员决定的。当你编写了更多的程序获得了更多的经验后,你就可以了解不同的技术以及它们的优缺点。
在所有的程序中,你都可以看到If, Else 和 EndIf 是如何缩进的。缩进不是必须的,但它将帮助你更容易的理解程序的结构。因此,在程序块间缩进语句通常是一个很好的习惯。
现在我们已经学会了 If..Then..Else..EndIf 语句。让我们写一个程序。 当你给出一个数字时,它可以判断是奇数还是偶数。
TextWindow.Write("Enter a number: ")
num = TextWindow.ReadNumber()
remainder = Math.Remainder(num, 2)
If (remainder = 0) Then
TextWindow.WriteLine("The number is Even")
Else
TextWindow.WriteLine("The number is Odd")
EndIf
运行这个程序,你将能看到它的输出如下:
图 – 奇数或偶数
在这个程序中,我们引入了一个新的很有用的操作,Math.Remainder 。是的,正如你已经看到的,Math.Remainder 将返回第一个数除以第二个数的余数。
还记得吗?在第二章中,你知道了计算机按从上到下的顺序一次处理程序中的一个语句。然而,有一种语句可以使计算机不按照顺序执行,而跳到另一条语句。我们看一下下面的程序。
i = 1
start:
TextWindow.WriteLine(i)
i = i + 1
If (i < 25) Then
Goto start
EndIf
图 17 – 使用 Goto
在上面的程序中,我们把1付给变量i 。接着,我们加了一个新的语句,它以冒号结束(:)
start:
这被称作一个标记。标记就像是一个计算机可以理解的书签。只要你能保证它们的命名是唯一的,你可以任意命名一个标记,而且可以在程序中加入任意多的标记。
另一个有趣的语句是:
i = i + 1
这句话告诉计算机把变量i 加1,然后再把结果付回给i 。所以如果原来i 的值是1,在执行这句话之后,i 的值将变成2。
最后,
If (i < 25) Then
Goto start
EndIf
这部分程序告诉计算机,如果i 的值小于25,就开始从标记start执行语句。
使用Goto 语句,你可以让计算机任意多次的执行一些操作。例如,你可以把奇数或偶数的程序改写成下面的样子。程序将永远执行。你可以通过点击命令框右上角的Close(X)来终止程序。
begin:
TextWindow.Write("Enter a number: ")
num = TextWindow.ReadNumber()
remainder = Math.Remainder(num, 2)
If (remainder = 0) Then
TextWindow.WriteLine("The number is Even")
Else
TextWindow.WriteLine("The number is Odd")
EndIf
Goto begin
图 18 – 奇数或偶数程序无限执行
二进制(binary),发现者莱布尼茨,是在数学和数字电路中以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 。
事件就像被触发的信号,例如,为了应对类似移动或点击鼠标的用户操作。某种程度上说,事件同操作是相对的。对于操作,您作为一个程序员调用操作让计算机做一些事情;然后对于事件,计算机通知您一些有意思的事情发生了。
在编程时我们经常遇到需要重复执行相同一组步骤的情况。这种情况下,多次重写相同的语句是不合理的。这时我们需要借助子例程。
Small Basic 语言中也引入了 Turtle (龟标)对象,编程人员可以通过Small Basic 自带的很多命令调用这个对象。
在这一章节中,我们将运用前面学到的知识来做一些有趣的事。