程序员入门:QBASIC经典教程系列——简介

 目录

QBASIC是BASIC(Beginner’s All-purpose Symbolic Instruction Code,初学者通用指令代码)语言的一个变种,由美国微软公司开发,1991年随MS-DOS 5.0推出。它不能被编译成独立的可执行文件,源代码在集成开发环境(IDE)中先被编译成中间代码,然后中间代码在IDE中被解释执行。它被设计用来代替GW-BASIC,并被集成在MS-DOS 5.0及其更高版本(包括Windows 95)中。QBASIC基于微软稍早推出的QuickBASIC 4.5,但去掉了后者的编译和连接部分。

1.环境准备

QB有别与老式BASIC,首先它不再是纯解释BASIC,而可以编译成EXE文件,其次引入模块化概念,使程序更加清晰,不容易出错。而且还增加许多其他的功能。学习它可以对你以后学其他语言打基础,因为QB模块化的概念与C、PASICAL等相似,各种流程控制也相似。因为VB是在QB的基础上制作的,语法几乎完全相同,把QB的模块化扩展成简单的OOP(面向对象)编程,而界面完全用鼠标来画出来,添入各种属性(如颜色,标题等),再添入QB的代码就出来一个漂亮的WINDOWS程序。因此对于学习VB,QB将为你打下坚实的基础。我在全国编程区见过许多站友问一些VB的问题,其实那都是QB的基础知识。当然, 一些简单的小程序用QB做也是最方便的, 要不然微软怎么会在DOS里带个QBASIC.

废话不多说。首先你要有个QB的编程工具。DOS命令QBASIC不可以,因为它是个简易版的QB,版本才1.X,虽然有大部分QB的功能, 但不能完成本文所写的所有工作。QB建议用4.5版,它是最后一个版本的QB。但仍然有BUG,比如某些汉字不能输入。等你学到最后,可以用调用系统中断的方法输入汉字,但很麻烦。不如你直接用MSBASIC7.X,这是DOS下最后一个BASIC,很完善,可以输汉字。 另外VB FOR DOS 1.0也可以用,不画界面就成了QB。安好QB后首先把OPTION菜单的FULL MENUS选上,这样才能用所有的功能。

现在我们的系统大多都是64位的WINDOWS系统,我们学习的时候,建议下载QB64位,该环境支持鼠标、复制、粘贴,ALT+ENTER全屏等操作,十分方便,这样学习起来会事半功倍。当然,你如果比较怀旧,也可以选择下载DOSBOX模拟器,在原始环境QB4.5进行学习,操作起来相对来说只能以很原始的方式进行。 🙂

QBASIC4.5界面

下载地址:  QB64位    Basic 2 DOSBox

2.第一个程序

我们先编个很简单的小程序,在上面那个窗口直接输入下面这段程序:

— 例 1-1

SCREEN 12
    FOR X=0 TO 639
        LINE(0,0)-(X,479),X MOD 16
    NEXT
END

输入完后按一下F5键就可以运行了。如何?吃惊吧,这么漂亮! 🙂 这个小程序只是为了提高你学习的兴趣,要自己编还要再努力。 🙂 从这个小程序我们学到什么呢?

输入程序,按F5就可以直接运行!如果你想编译成EXE文件,首先要存盘(FILE菜单),然后选RUN菜单MAKE EXE FILE,选STAND-ALONE EXE这样一个EXE文件就能运行,否则还需要运行库。MAKE EXE AND EXIT后,在命令行输入你刚才定的那个文件名就成了。在QB环境里运行时,任何时刻你都可用CTRL-BREAK暂停,不会因为你的错误而死机。但如果做成EXE文件,CTRL-BREAK就不管用了。因此你要先把程序先按F5的方式运行,调试好再编译成EXE文件。

如果你用小写输入上面这段程序,会发现SCREEN,FOR,LINE,MOD,NEXT,END都会自动变大写,因为这些都是系统识别的保留字,有特殊的用途,你不能当作变量名来用。如果你输入错误,系统可能会自动报告并提示修改,比如你把那个16删了试试看。QB的特点是为初学者想的很周到,不容易犯错。

QB程序以命令为单位,每行都是一个命令,每行也可写许多命令,用冒号分隔。比如 SCREEN 12:FOR X=0 TO 639:…显然,这不利于阅读。

按F6键可以切换到下面那个Immediate窗口,称为“立即窗”,在那个窗口输入

PRINT 234*10

然后一回车你就能在屏幕上看见结果。如果没看清,按F4就可以再看看。也就是说,在这个窗口输入的任何命令都是立即执行而不需要按F5的,这为调试程序提供了很大的方便。

在DEBUG菜单里有很完善的调试工具。你的程序不可能一次成功,如果有BUG,可以用QB强大的调试功能进行调试。 WATCH WINDOWS可以显示你所要知道的变量,break point断点可以在你所指定的地方自动停下来。F8和F10可以单步运行程序,区别是F10可以跳过过程函数(以后再说)其他菜单你自己琢磨琢磨就知道干什么用了.

最后,QB的帮助系统很完善,只要把光标移到你所要查的命令上,比如SCREEN,按F1就能看到关于SCREEN的各种用法,细节和使用范例了。也可以从HELP的INDEX里找到。习惯于读HELP对任何语言的编程有非常有用,我只能带你入门,要成为高手,无论什么学语言都要仔细研究HELP。有空你可以把QB帮助里的那些EXAMPLE都运行一遍,这样你就能透彻的懂得这些命令如何使用了。

下面我列出各种热键:

F1 帮助 ALT-F1 上一个帮助主题
F2 模块(过程和函数)列表
F3 查找下一个
F4 看运行结果
F5 运行 SHIFT-F5 重新运行
F6 切换窗口
F7 运行程序到当前光标处
F8 简单的单步运行
F9 断点设置
SHIFT-F9 增加一个表达式到WATCH窗口,在调试时可以直接在WATCH窗口里看到这个表达式的结果.
F10 单步,但自动跳过过程(函数)
SHIFT-F8 向后跟踪运行历史
SHIFT-F10 向前跟踪运行历史
CTRL-BREAK暂停运行

虽然可以从菜单里选取, 很快你就会发现这些热键非常有用而且常用,甚至你不用死背.

3.数据类型

这部分我们开始进入真正QB语法的学习。打基础是很无聊的,因为没有有趣的程序,那么多概念要硬记。但打不好基础以后也学不好。鉴于读者已有一些编程概念,我就不细讲什么叫变量,什么叫函数什么是命令了。 🙂

下面这些内容开始也许不容易懂, 也很枯燥, 你也不必细看, 有些印象就成,因为在编程中时时要用到它们, 用时你可以现查, 查一两次就记住了. 😉

☆QB的数据表示

数字的表示方法

在QB里数字的表达跟平常一样,可用负号,小数点,小数点前的0可省略比如.1就是0.1。整数的八进制表示法是在开头写上&,如果是八进制长整数1234567就是 &1234567& (后面的&表示长整数, 见后面)现在已经很少用8进制数了.十六进制表示法是在数字前加 &H,这很常用.比如我们要把一个16进制数转换会10进制,在立即窗里输入:

? &HFF

输出结果:

255

由于在计算机内部常以16进制运算, 希望你能清楚的了解16进制数.比如&hFF是一个字节内存表示出来的最大数, 因为再加1等于&H100.而两个字节就是 &H100 * &H100 -1 = 65536 -1=65535 由于有正负之分,除以2, 等于32767+32768的和. 现在你应该知道为什么整数的范围是 +32767 到 -32768了吧?同样的, 长整数是4个字节表示的, 多大范围你可以自己算. 🙂 可惜QB没有二进制数, 多数语言也没有.

带小数的浮点数只能用10进制的.所谓浮点表示法就是科学计数法,单精度是用E表示指数: 3.14E+5 就是 3.1410^5 (10的5次方)双精度用D表示: -3.13e-20 就等于 -310^(-20) (10的负20次方)

QB的数据类型

数据类型是程序的灵魂,大学里专门有一门课叫做“数据结构”,是非常无聊的一门课,但却非常重要。 🙂 数据类型在数据库语言里是以应用决定的,QB和其他语言的基本数据类型是由硬件所决定的。在数学中似乎只有数字这一种变量, 由于硬件决定计算机语言必然要用不同的类型, 它们都很有用,不同的类型会有不同的用途和效果.

QB的数据类型有下面这些:

类型 后缀符号 简称 名称 长度(字节) 范围 举例
整型 % INT INTEGER 2 +-32767 A%
长整型 & LNG LONG 4 约+-20亿 A&
浮点 ! SNG SINGLE 4 见下 A!
长浮点 # DBL DOUBLE 8 见下 A#
字符串 $ STR STRING ? 32767字符 A$

VB里还增加一种商业数据类型,后缀是@,有两位小数。这是因为浮点类型会有误差, 可能出现0.02-0.01=0.009999的情况.对于绘图运算这没什么, 对于商业运算就很危险了.对于QB你可以用整型或长整型替代, 以分为单位就成了.

注意:浮点数与其他语言不同,不是FLOAT。此外还有定长字符串和自定义类型。变量名可以用任何一个非保留字的字母和数字组合,必须以字母开头。保留字就是QB的命令和函数已经用了的单词。 大小写都没关系,QB会自动统一大小写。

注意不能用"_",QB不支持。VB等支持, 但有特别用途。

变量定义只要在变量名后加上后缀就可以指定变量类型,比如a%。注意 a%和a$是两个不同的变量,可以同时使用。如果不加任何后缀,系统默认是浮点类型的。数字也是如此, 23%表示整数23, 23!代表浮点数23,当然 23.0 也是浮点数.

使用DEF后紧跟“简称”可以改变系统默认类型。比如DEFINT A 代表所有以A开头的变量都是整型变量。比如DEFLNG A-Z 代表所有变量(从A到Z开头)都是长整型变量。此外还可以用DIM命令+名 AS +类型名称 指定变量类型:

DIM A AS INTEGER

则A是整型变量。

数据类型都是有范围的
最大 最小
INTEGER 32,767 -32,768
LONG 2,147,483,647 -2,147,483,648
SINGLE (7位数字) ?.402823 e+38 ?.401298 e-45
DOUBLE (15位数字) ?.7976931 d+308 ?.940656 d-324
字符串 32767个字符 0

如果所计算出的数据超过数据类型所允许的范围则会发生溢出错误。看到这里你可能会问,如果我们使用DOUBLE类型不就全解决问题了么?由于处理范围越大需要更多的内存去处理,速度也就越慢。而浮点数的处理速度是永远比不上整数的(即使你用的是原装奔腾)。因此占内存最小的整型(2BYTE)速度最快,而且能满足一般的应用,我们一般在程序第一行加上DEFINT A-Z,这样可以成倍的提高运行速度。

数字也可指定类型,默认是整型的。如果不指定可能会出错,看下面这个例子,在立即窗里输入:

? 32767 * 2

结果出现一个OVERFLOW(溢出)错误。如果用:

? 32767& * 2

就能输出正确的结果了。

字符串

普通字符串长度是任意可变的,比如a$="asdfasdf":a$=""(空串)字符串以两个双引号括起来。如果有引号或回车等其他字符怎么办?可以用CHR$函数,比如CHR$(13)代表回车, 13是回车的ASCII值。字符串可以用加法合并:

?"asdfasdf"+chr$(34)

输出:

asdfasdf"

        字符串还有定长字符串,长度由DIM命令指定,赋值时如果不够长度用空格填补,超过长度自动截断,这类似数据库的C型字段,也正是为便于处理数据库而设计的。比如:

DIM S AS STRING*10

则S字符串的长度永远为10

在这里先说一下注释命令REM或"’"。凡是以这两个开头的代表是注释而不是程序,QB不会执行。比如:

REM asdsf sdfgdf sdfgg QB不会说这行打错了
‘ PRINT 1345234 随便你怎么打都没关系,QB不执行这行

用这个命令(两种写法都一样)可以注释你的程序是干什么用的,以免以后忘了,也可以在调试时不暂时不用的命令用"’"注释掉。

数组类型

QB的数组用DIM定义,比如:

DIM ARR(12,10) AS LONG

表示一个有13行,每行11个长整型数的数组(矩阵).数组最小下标是(0,0),最大是(12,10) (这与C语言不同,最大下标多一)最小下标可以这样定义:

DIM ARR(1 TO 12,10 TO 20)

则最小下标就是arr(1,10)了.注意,arr和arr(0,0)是两个没有关系的变量,可以同时用,不象C语言.

QB里没有逻辑型数据

任何数字类型都可代替逻辑值.用0代表假,-1代表真,因为-1的二进制表达法是 11111….,正好与0000….相对应,任何数据类型都是这样.其实在判断语句里,非0就代表"真"了.比如在立即窗里输入: IF 10 THEN ?"TRUE"… 利用立即窗你可以实验各种命令如何使用.

常量

除了变量和数字以外,QB还支持常量,用CONST表示:

CONST PI#=3.14159265358979323846

以后就可以用pi#表示这么长串数字了,但不能赋值。CONST后面的表达式可以是四则运算,但不能有函数运算,比如:CONST PI2#=PI#*2 ‘PI#也是常数,所以能在这里使用。

讲了这么多,你现在真正能看到效果的只有前面那个画图的程序。好象很无聊,打基础嘛,我已经尽力使之做到“有聊”了。 🙂 因为这些你现在用不着,以后就很常用了,也不用硬记,用的时候可以把这封再复习一遍

发表评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注