|
QB入门教程(一) |
|
| 来自: | 作者:Float Pointer |
| -0- QB有别与老式BASIC,首先它不再是纯解释BASIC,而可以编译 成EXE文件,其次引入模块化概念,使程序更加清晰,不容易出错。 而且还增加许多其他的功能。 学习它可以对你以后学其他语言打基础,因为QB模块化的概念 与C、PASICAL等相似,各种流程控制也相似。因为VB是在QB的基础 上制作的,语法几乎完全相同,把QB的模块化扩展成简单的OOP (面向对象)编程,而界面完全用鼠标来画出来,添入各种属性( 如颜色,标题等),再添入QB的代码就出来一个漂亮的WINDOWS程序。 因此对于学习VB,QB将为你打下坚实的基础。我在全国编程区见过许 多站友问一些VB的问题,其实那都是QB的基础知识。 当然, 一些简单的小程序用QB做也是最方便的, 要不然M$怎么会 在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选上,这样才能用所有 的功能。 -1- 我们先编个很简单的小程序: 在上面那个窗口直接输入下面这段程序: --- 例 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暂停运行 虽然可以从菜单里选取, 很快你就会发现这些热键非常有用而且常用, 甚至你不用死背. -2- 这部分我们开始进入真正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.14*10^5 (10的5次方) 双精度用D表示: -3.13e-20 就等于 -3*10^(-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你可以用整型或长整型替代, 以分为单位就成了. BTW:&读做“俺的”,$读做“刀乐”,@读做“爱特” ;) 注意:浮点数与其他语言不同,不是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是整型变量。 --- 数据类型都是有范围的: 最大 最小 INTEGERS 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#也是常数,所以能在这里使用 讲了这么多,你现在真正能看到效果的只有前面那个画图的程序。 好象很无聊,打基础嘛,我已经尽力使之做到“有聊”了。 :) 因为这些你现在用不着,以后就很常用了,也不用硬记,用的时 候可以把这封再复习一遍。 |
|