Microsoft Small Basic编程入门.docx
《Microsoft Small Basic编程入门.docx》由会员分享,可在线阅读,更多相关《Microsoft Small Basic编程入门.docx(70页珍藏版)》请在冰豆网上搜索。
MicrosoftSmallBasic编程入门
MicrosoftSmallBasic
编程入门
第一章
入门
SmallBasic与编程
计算机编程被定义为使用编程语言创建计算机软件的过程。
就像我们可以说并且理解英语,西班牙语或者法语,计算机能理解用特定语言写成的程序。
这些特定语言被称为编程语言。
最初,只有很少几种编程语言,并且它们都非常容易学习和理解。
但是随着计算机和软件变得越来越精深,编程语言发展很快,并且随之汇集了更复杂的概念。
从而造成现代大部分编程语言以及相关的概念对于初学者掌握起来而言颇具挑战性。
这一事实已经开始阻碍人们学习或尝试计算机编程。
SmallBasic是一门针对初学者设计的使编程变得非常容易,亲切,有趣的编程语言。
SmallBasic的目的在于消除障碍,充当通往令人惊奇的计算机编程世界的踏脚石。
SmallBasic环境
让我们从对SmallBasic环境的一个快速介绍开始。
当你第一次运行SmallBasic.exe,你会看到一个如下图所示的窗口。
图1-SmallBasic环境
这就是SmallBasic环境,我们将在这里编写和执行我们的SmallBasic程序。
这个环境有几个截然不同的部分。
图中已经用数字标出。
编辑器,即标记为[1]的部分,我们将用来写我们的SmallBasic程序。
当你打开一个示例程序或者一个先前保存过的程序,它将显示在这个编辑器里。
这样你就可以对其进行更改并且保存以备后用。
你也可以同时打开和工作在多个程序上。
每个打开的程序将被显示在单独的编辑器里。
包含你当前正工作在上面的程序的编辑器被称为活动编辑器。
工具栏,即标记为[2]的部分,是被用来向活动编辑器或环境发布命令的。
随着我们的进展,我们将学到工具栏中各种各样的命令。
表面,即标记为[3]的部分,用来放置所有编辑器窗口。
我们的第一个程序
既然你已经熟悉了SmallBasic环境,我们将进而在里面开始编程。
正如我们刚刚在上面提到的,编辑器是我们写程序的地方。
所以,让我们先在编辑器里输入下面这行。
TextWindow.WriteLine("世界你好")
这是我们的第一个SmallBasic程序。
如果你输入正确,你应该看到与下图相似的结果。
图2–第一个程序
既然我们已经输入了我们的新程序,让我们来运行它看看会发生什么。
我们可以通过点击工具栏上的运行按钮或者使用键盘上的F5快捷键来运行我们的程序。
如果一切顺利,我们的程序将运行并得到如下图所示的结果。
图3–第一个程序的输出
恭喜!
你已经编写并运行了第一个SmallBasic程序。
一个非常简单的小程序,然而却是通向成为一个真正计算机程序员的一大步!
现在,在继续创建更大的程序之前,还有一个细节需要了解。
我们必须要了解刚刚发生了什么——我们到底告诉了计算机什么并且计算机是如何知道要做什么的?
在下一章,我们将分析我们刚刚写的程序,从而对其进行理解。
图4–Intellisense(智能感知)
保存我们的程序
如果你想关闭SmallBasic并且打算以后回来在你刚输入的程序上继续工作,你可以保存程序。
随时保存程序实际上是个很好的习惯,以至于你在意外关闭或断电时不会丢失信息。
你可以通过点击工具栏上的“保存”图标或者使用快捷键“Ctrl+S”(在按下Ctrl键时按S键)来保存当前程序。
第二章
解读我们的第一个程序
什么是真正的计算机程序?
一个程序是一组计算机指令。
这些指令准确地告诉计算机做什么,并且计算机总是遵循这些指令。
就像人们一样,计算机只能遵循用它们能明白的语言指定的指令。
这些语言被称为编程语言。
有非常多的语言计算机能明白,SmallBasic是其中之一。
假象你和你的朋友之间有个会话。
你和你的朋友用词语组成句子来彼此传递信息。
相似地,编程语言包含词语的集合用来组成句子来将信息传递给计算机。
程序基本上是多组语句(有时很少,有时多达数千)一起用同样的方式让程序员和计算机彼此明白。
SmallBasic程序
一个典型的SmallBasic程序由一组语句组成。
程序的每一行代表一条语句。
每条语句是给计算机的一条指令。
当我们让计算机执行一个SmallBasic程序时,它取过程序并从第一个语句读起。
它明白我们说的是什么,并且执行我们的指令。
一旦执行完第一条语句,它回到程序继续读取并执行第二行。
如此继续下去直到程序的结尾。
至此,我们的程序执行完毕。
回到我们的第一个程序
这是我们写的第一个程序:
TextWindow.WriteLine("世界你好")
这是一个非常简单的只包含一条语句的程序。
这条语句告诉计算机写一行内容为世界你好的文字到TextWindow。
这条语句在计算机里可逐字翻译成:
写世界你好
你可能已经注意到这条语句可以依次分解成更小的片断,就像句子可以分解成词语一样。
在第一条语句中,我们有三个清楚的片段:
a)TextWindow
b)WriteLine
c)“世界你好”
点号,圆括号和引号都是必须被放到语句中恰当位置的标点符号,从而使计算机能够明白我们的意图。
你可能还记得在我们运行我们的第一个程序时出现的黑色窗口。
这个黑色窗口叫做TextWindow,有时也被称为控制台。
那就是程序的结果输出的地方。
TextWindow,在我们的程序中被叫做对象。
在我们的程序中有许多这样的对象供我们使用。
我们可以对这些对象执行一些不同的操作。
在我们的程序里,我们已经使用了WriteLine操作。
你可能还注意到WriteLine操作后面跟着放在引号中的世界你好。
这段文字被作为输入传递给WriteLine操作,然后打印出来给用户。
这被称为对该操作的一个输入。
一些操作接受一个或者多个输入,而其他的则不需要任何输入。
我们的第二个程序
既然你已经明白了我们的第一个程序,让我们继续加一些颜色来让它更新奇。
TextWindow.ForegroundColor="Yellow"
TextWindow.WriteLine("世界你好")
图5–增加颜色
当你运行上面的程序,你将注意到在TextWindow中输出的还是“世界你好”,但是这次字体是黄色的而不是之前的灰色。
图6–黄色的世界你好
注意加到我们最初的程序中的这条新语句。
它使用了一个新单词,ForegroundColor(前景色),我们让它等于“Yellow”。
这意味着我们把“Yellow”指定给ForegroundColor。
现在,ForegroundColor和WriteLine操作的区别是ForegroundColor没有接受任何输入而且也没有圆括号。
取而代之的是跟了一个等于符号和一个词。
我们定义ForegroundColor为TextWindow的属性。
下面是一些对ForegroundColor属性的有效值。
试着用它们中的一个替换“Yellow”来看看结果——不要忘记引号,这是必要的。
Black
Blue
Cyan
Gray
Green
Magenta
Red
White
Yellow
DarkBlue
DarkCyan
DarkGray
DarkGreen
DarkMagenta
DarkRed
DarkYellow
第三章
引入变量
在我们的程序中使用变量
如果我们的程序能够对用户的姓名说“你好”而不只是单纯的“世界你好”,那样不是更好吗?
为了能那样做,我们必须首先让用户告知他/她的姓名并将其保存到某个地方,然后输出用户的姓名和“你好”。
让我们一起来看看这是如何做到的:
TextWindow.Write("输入你的姓名:
")
name=TextWindow.Read()
TextWindow.WriteLine(name+"你好")
当你输入并执行这个程序,你将看到如下输出:
图7–询问用户姓名
当你输入你的姓名并按ENTER键,你将看到如下输出:
图8–一个温馨的问候
现在,如果你再运行这个程序,你将被再次问同样的问题。
你可以输入一个不同的姓名,计算机将对这个姓名说你好。
程序解析
在你刚刚运行的程序中,可能引起你注意的那行程序是:
name=TextWindow.Read()
Read()看上去就像WriteLine(),但是没有输入。
它是一个操作并且基本上是告诉计算机等待用户输入些什么并按下ENTER键。
一旦用户按下ENTER键,它将获取用户的输入并将其返回给程序。
有趣的一点是无论用户输入的什么,现在都被存放在一个叫name的变量中。
一个变量被定义为用来临时存储数值以备以后使用的地方。
在上面的程序行中,name被用来存储用户的姓名。
下面的一行也很有趣:
TextWindow.WriteLine(name+"你好")
这是我们使用存放在我们的变量,name中的值的地方。
我们取出name中的值并将它与“你好”一起写到TextWindow。
一旦一个变量被设定,你可以多次使用它。
例如,你可以如下这么做:
TextWindow.Write("输入你的姓名:
")
name=TextWindow.Read()
TextWindow.Write("你好,"+name+"。
")
TextWindow.WriteLine("你最近怎么样,"+name+"?
")
你将会看到如下的输入:
图9–变量重用
变量命名规则
[TODO]未完成
使用数字
我们刚才看到如何用变量存储用户的姓名。
在接下来的程序中,我们将看到如何用变量存储和操作数字。
让我们从一个非常简单的程序开始:
number1=10
number2=20
number3=number1+number2
TextWindow.WriteLine(number3)
当你运行这个程序,你将得到下面的结果:
图10–两数相加
在程序的第一行,你将变量number1赋值为10。
在第二行,你将变量number2赋值为20。
在第三行,你将number1和number2相加并将结果赋值给number3。
因此,在这种情况下,number3的值将是30。
并且这就是我们输出到TextWindow的结果。
现在,让我们对程序做轻微的修改并看看结果:
number1=10
number2=20
number3=number1*number2
TextWindow.WriteLine(number3)
上面的程序将number1与number2相乘并将结果存放在number3中。
你可以看到如下的程序运行结果:
图11–两数相乘
相似的,你可以对数字作减法或除法。
这是减法:
number3=number1-number2
除法的符号是‘/’。
程序看上去就像这样:
number3=number1/number2
这个除法的结果是:
图12–两数相除
一个简单的温度转换器
下一个程序我们将用公式
将华氏温度转换成摄氏温度。
首先,我们从用户那里得到华氏温度并存放到一个变量中。
这里有一个特殊的操作能让我们从用户那里读取数字,它就是TextWindow.ReadNumber。
TextWindow.Write("输入华氏温度:
")
fahr=TextWindow.ReadNumber()
一旦我们有存放在变量中的华氏温度,我们可以像这样将它转换为摄氏温度:
celsius=5*(fahr-32)/9
圆括号告诉计算机先计算fahr–32然后再处理其它的。
现在我们需要做的就是将结果输出给用户。
将所有这些放到一起,就是我们的程序:
TextWindow.Write("输入华氏温度:
")
fahr=TextWindow.ReadNumber()
celsius=5*(fahr-32)/9
TextWindow.WriteLine("摄氏温度是"+celsius)
程序的运行结果是:
图13–温度转换
第4章
条件与分支
回到第一个程序。
如果我们的程序不仅仅会说“HelloWorld(你好,世界)”;而是可以根据一天中的不同时间段说“GoodMorningWorld(早上好,世界)”,或者“GoodEveningWorld(晚上好,世界)”,那是不是一件很酷的事情?
在下一个程序中,我们将让计算机能够在中午12点以前说“GoodMorningWorld(早上好,世界)”,在中午12点以后说“GoodEveningWorld(晚上好,世界)”。
If(Clock.Hour<12)Then
TextWindow.WriteLine("GoodMorningWorld")
EndIf
If(Clock.Hour>=12)Then
TextWindow.WriteLine("GoodEveningWorld")
EndIf
根据你运行程序的时间,你将会看到下面的某一个输出。
图14-GoodMorningWorld(早上好,世界)
图15-GoodEveningWorld(晚上好,世界)
让我们来分析一下程序的前三行。
你肯定已经发现这几行程序告诉计算机如果Clock.Hour小于12,就输出“GoodMorningWorld.(早上好,世界。
)”。
If,Then和EndIf是在程序运行过程中计算机能够理解的特殊语言。
If后面总是会跟一个条件判断。
在这个例子中是(Clock.Hour<12)。
记住,为了让计算机理解你的意图,小括号在这里是必须的。
条件判断后面跟的是then和要执行的实际操作。
实际操作后面跟的是EndIf,这告诉计算机这个有条件的执行过程结束了。
在then和EndIf之间可能会有不只一个操作。
如果条件符合,计算机将会把它们全部执行。
例如,你可以写如下程序:
If(Clock.Hour<12)Then
TextWindow.Write("GoodMorning.")
TextWindow.WriteLine("Howwasbreakfast?
")
EndIf
Else
在这一章最开始的程序中,你可能已经注意到第二个条件有点多余。
Clock.Hour的值只可能小雨或者大于12。
我们不需要真正检查第二个条件。
对于这种情况,我们可以通过else,把两个if..then..endif语句缩短为一句。
如果我们用else重写,你将看到的下面的程序:
If(Clock.Hour<12)Then
TextWindow.WriteLine("GoodMorningWorld")
Else
TextWindow.WriteLine("GoodEveningWorld")
EndIf
这个程序将和最开始的程序做完全同样的事情。
这里我们学到了计算机编程中非常重要的一课:
“
在编程过程中,我们经常可以通过很多方法做同样的事情。
很多时候,一种方法比其它的方法更有效。
选择哪一种方法是由程序员决定的。
当你编写了更多的程序获得了更多的经验后,你就可以了解不同的技术以及它们的优缺点。
Indentation(缩进)
在所有的程序中,你都可以看到If,Else和EndIf是如何缩进的。
缩进不是必须的,但它将帮助你更容易的理解程序的结构。
因此,在程序块间缩进语句通常是一个很好的习惯。
Even(奇数)或者Odd(偶数)
现在我们已经学会了If..Then..Else..EndIf语句。
让我们写一个程序。
当你给出一个数字时,它可以判断是奇数还是偶数。
TextWindow.Write("Enteranumber:
")
num=TextWindow.ReadNumber()
remainder=Math.Remainder(num,2)
If(remainder=0)Then
TextWindow.WriteLine("ThenumberisEven")
Else
TextWindow.WriteLine("ThenumberisOdd")
EndIf
运行这个程序,你将能看到它的输出如下:
图16–奇数或偶数
在这个程序中,我们引入了一个新的很有用的操作,Math.Remainder。
是的,正如你已经看到的,Math.Remainder将返回第一个数除以第二个数的余数。
Branching(分支)
还记得吗?
在第二章中,你知道了计算机按从上到下的顺序一次处理程序中的一个语句。
然而,有一种语句可以使计算机不按照顺序执行,而跳到另一条语句。
我们看一下下面的程序。
i=1
start:
TextWindow.WriteLine(i)
i=i+1
If(i<25)Then
Gotostart
EndIf
图17–使用Goto
在上面的程序中,我们把1付给变量i。
接着,我们加了一个新的语句,它以冒号结束(:
)
start:
这被称作一个标记。
标记就像是一个计算机可以理解的书签。
只要你能保证它们的命名是唯一的,你可以任意命名一个标记,而且可以在程序中加入任意多的标记。
另一个有趣的语句是:
i=i+1
这句话告诉计算机把变量i加1,然后再把结果付回给i。
所以如果原来i的值是1,在执行这句话之后,i的值将变成2。
最后,
If(i<25)Then
Gotostart
EndIf
这部分程序告诉计算机,如果i的值小于25,就开始从标记start执行语句。
Endlessexecution(无限执行)
使用Goto语句,你可以让计算机任意多次的执行一些操作。
例如,你可以把奇数或偶数的程序改写成下面的样子。
程序将永远执行。
你可以通过点击命令框右上角的Close(X)来终止程序。
begin:
TextWindow.Write("Enteranumber:
")
num=TextWindow.ReadNumber()
remainder=Math.Remainder(num,2)
If(remainder=0)Then
TextWindow.WriteLine("ThenumberisEven")
Else
TextWindow.WriteLine("ThenumberisOdd")
EndIf
Gotobegin
图18–奇数或偶数程序无限执行
第5章
循环
For循环
让我们再以前面章节用到的代码来举例说明。
i=1
start:
TextWindow.WriteLine(i)
i=i+1
If(i<25)Then
Gotostart
EndIf
这段代码的运行结果是:
按顺序打印数字1到24。
在提供了便捷的变量递增方法的编程语言中,这样的变量递增过程是很常见的。
以上这段程序与下面的程序输出结果相同:
Fori=1To24
TextWindow.WriteLine(i)
EndFor
输出结果是:
图19–使用For循环
请注意,我们将8行的程序减少到4行,而实际运行结果与8行的程序完全相同!
还记得前面我们提到的“完成一个任务通常会有多种方法”吗?
这就是一个典型的例子。
For..EndFor在编程术语中被称为一个循环。
在循环中可以使用一个变量,给变量赋以初值和终值,并让计算机自动执行变量递增。
变量每递增一次,计算机便执行一次For到EndFor之间的程序。
如果希望变量以2(而不是以1)为基准递增,例如,要输出1至24之间的所有奇数,即可以使用循环来实现。
Fori=1To24Step2
TextWindow.WriteLine(i)
EndFor
图20–仅输出奇数
For语句中的Step2告诉计算机以2为基数对变量i递增(而不是以1)。
通过使用Step可以根据需要指定任意递增基数。
甚至可以指定负增量来进行倒数,示例如下:
Fori=10To1Step-1
TextWindow.WriteLine(i)
EndFor
图21–倒数
While循环
While循环是另一种循环方法,该方法在无法预测循环次数的情况下非常实用。
前面介绍的For循环按照预先定义的次数执行程序,而While循环则是在指定条件为真的情况下重复运行程序。
以下示例中,我们将在指定变量大于1的情况下,对变量进行等分。
number=100
While(number>1)
TextWindow.WriteLine(number)
number=number/2
EndWhile
图22–等分循环
在以上程序中,对变量number赋以初值100,在number大于1的情况下重复运行While循环。
在循环中,输出number的值,再除以2,对其进行有效地等分。
正如预期,程序的输出结果为逐步被等分的序列数字。
因为我们无法事先得知程序要循环运行的次数,如果用For循环实现以上程序就会相当困难。
通过使用While循环,可以方便地检查条件,再确定是否要继续执行循环或退出。
有趣的是,每个While循环都可以分解成一组If..Then语句。
例如,可以将以上程序重写如下,其输出结果相同:
number=100
startLabel:
TextWindow.WriteLine(number)
number=number/2
If(number>1)Then
GotostartLabel
EndIf
第6章
图形入门
目前为止,在所有例子中,我们都用TextWindow解释SmallBasic语言的基础知识。
然而,SmallBasic还有一组强大的图形功能。
我们将在这章中学习。
GraphicsWindow引言
就如TextWindow使我们可以处理Text(文本)和Numbers(数字),SmallBasic提供了GraphicsWindow,我们可以用它来画图。
让我们从显示GraphicsWindow开始。
GraphicsWindow.Show()
当你运行这个程序的时候,你会发现你得到的是一个下图所示的白色Window(窗体),而不是一个通常情况下的空的文本窗体。
这个窗体本身没什么用,但这章你所有的工作都将基于它。
你可以通过右上角的‘X’来关闭这个窗口。
图23–一个空的GraphicsWindow
设置GraphicsWindow
这个图形窗口允许你根据自己的需要调整它的外观。
你可以改变它的标题、背景和大小。
让我们继续对它进行一些修改。
这将帮助我们熟悉窗体。
Grap