BASIC语言概述

发布时间:

日志
AJAX技术汇总1
电脑除C盘外,其他盘都打不开,如何解决
字号:大大中中小小Qbasic教程
第一章BASIC语言概述
一、程序设计语言的选择程序是用来实现算法的。1、应用范围
.数值计算(科学计算)
FORTRANTrueBASICQBasic.商业和管理
COBOL、数据库系统(dBASEFoxBASEFoxpro.人工智能LispProLog.系统设计
C语言、C++
.多媒体(图、声、文技术VisualBASIC.计算机网络分布处理数据库系统:SYBASEORACLE
WWW文件:HTML(HyperTextMarkupLanguageJava2、语言所提供的功能强弱
3、语言提供的数据结构数据类型
4、语言的使用环境
DOSWINDOWSUNIXNOVELL5、程序设计环境
集成环境(菜单功能)、图形界面、软件开发工具6、使用者的背景熟练程度、使用环境

二、BASIC语言的发展
.BASIC语言于1964年问世作者:John.G.KemenyThomosE.Kurtz.Beginner'sAll-purposeSymbolicinstructionCode"

1、初期的BASIC(第一代)
.14——17个语句,MinimalBASIC.自己操作(输入、运行、修改、输出2、微机BASIC(第二代
.Microsoft总裁Bill.Gates编写只有4k字节的解释程序.TRS-80BASIC.AppleBASIC
.MSBASIC(BASICA.GWBASIC
3、结构化BASIC(第三代).限制GOTO语句,程序模块化.TrueBASIC真正的BASIC
.QuickBASIC.TurboBASIC.QBasic(DOS5.0以上
4、面向对象的BASIC
.windows环境下的VisualBASIC,图形界面,支持多媒体.
三、QBasic的特点
QBasicBASIC点:
1、扩充了变量和常量的类型.变量名长度:40个字符
.增加了长整型、定长字符型变量.可定义数值常量、字符串常量2、提供了新的选择结构.条件语句
IF<条件>THEN<语句组1>ELSE
<语句组2>ENDIF
.多分支语句SELECT3、改进了循环结构
增加以下两个循环语句:.WHILE循环
WHILE<条件><循环体>WEND.DO循环
DOWHILE<条件><循环体>LOOP4、子程序和函数作为单独的模块

5、不需要行号
6、具有良好的编辑环境7、提供联机“Help”
8、提供分步执行”“跟踪等调试9、采用先进的解释执行方式
10、与VisualBASIC完全兼容
四、QBasic使用环境
1、启动
.DOS状态下运行QBASIC,如:F:\>QBASIC.WIN98下双击QBASIC图标;.软盘启动
QBASIC系统文件(QBASIC.EXEQBASIC.HLP复制到A盘,再执行:A:\>QBASIC
2、工作窗口
.程序窗口(上).命令窗口(下).两窗口之间的切换F6
3、基本操作
光标、行列位置、鼠标指针、菜单、窗口的缩放
五、运行程序
1、从键盘输入程序


2、运行程序
.选择菜单RUN中的“Start"命令.直接按F5键或Shift+F5.在命令窗口中输入run命令3、修改和编辑源程序删除、插入、复制、粘贴4、程序存盘和从磁盘读入程序5、退出QBasic

第二章QBasic程序设计初步
一、概述
程序设计要掌握如下几点:
1、语法规则计算机是忠实的执行者
2、根据算法写出程序掌握算法,会画流程图3、数据结构
数据的组织形式
4、结构化程序设计方法掌握三种基本结构的运用5、程序运行的环境
了解计算机系统的硬件和软件配置程序设计=算法+数据结构+程序设计方法+语言工具和计算机环境
二、源程序结构1一个程序由若干个语句行组成,每一行称为一个语句行,一行中可以包含多个语句(句间用“:”号相隔)
2、语句行可以没有行号,程序按语句排列的顺序依次执行,但也允许有行号,行号仅作为行标号(源程序转移的目标)而不代表执行顺序。3、语句结构
<语句定义符>[<语句体>](关键字)
4、程序以END语句结束
可以有多个END语句,一般放在程序的最后。
5、行标号.行的标志
.只能在一行的开头.可独占一行(即为空语句
6、主程序与子程序一个程序只包含一个主程序,但可包含若干个子程序或函数。三、常量
常数——不变的数常量——不能改变的数据

1、数值常量(常数)
1)整型常量(整数)由若干个数字组成的序列2)实型常量(实数)
.定点数(日常记数法)小数位固定
.浮点数(科学记数法)E代表以10为底的幂数,即把常量用指数形式来表
例如:12.34E2表示1234.单精度实数(普通型实数)——7位有效数字
.双精度实数——16位有效数字(用D代替E3)数的范围
类型标记符字节有效位数
整数%2
长整数&4单精度定点数47单精度浮点数E47双精度定点数#815
双精度浮点数D8152、字符串常量
用双引号把若干个合法字符括起来,如:"QBasic""abc123"

3、符号常量CONST<符号>=<常量>例如:CONSTpi=3.14159
四、变量
可改变的量,如:leta=1leta=2.3leta=45.9printa
end
1、变量名和变量的值1)变量名规则
.变量名的第一个字符必须是字母
.变量名中第2个字符及其后的字符可以是字母、数字或小数点.变量名的长度范围为1-40个字符
.表示变量类型的符号应作为最后一个字符.QBasic的保留字不能用作变量名..变量名中的大小写字母等效.变量名中不可有空格2)变量的名与值

变量名——符号地址变量值——存储内容
系统自动生成变量名与内存地址对照表
2、变量类型
1)变量名后加类型定义符%——整型(INTEGER&——长整型(LONG
!——单精度实数(SINGLE#——双精度实数(DOUBLE
$——字符串(STRING2DIM语句
DIM<变量名>as<类型>.<变量名>不加类型符
.DIM定义了的变量其末尾加或不加类型定义符都是合法的且都表示同一变量
3)字符串变量
.可变长字符串变量a$="abcde"a$="1234567"
.固定长度的字符串变量例如:DIMaasstring*5a="China"a$="Shanghai"PRINTa,a$END运行结果如下:
ShangShang
课本P784.3列出了变量的类型定义方法及占用的内存量
五、标准函数.课本P804.4列出了最常用的一些数学函数.课本P36113.4节列出了QBasic的所有函数标准函数——类似数学函数y=f(x例如:计算x+y的平方根SQR(x+y计算sin(a+bSIN(a+b
六、运算符和表达式
QBasic的三种运算:算术运算、关系运算、逻辑运算1、算术运算符
+4+5=9-8-3=5*2*3=6

/5/2=2.5整除\5\2=2求余MOD5MOD2=1乘方^2^3=8
注:对于整除和求余运算,若参与运算的数不是整数,则先按四舍五入的原则变成整数后再运算。
2)算术表达式.QBasic表达式
用运算符和括号将若干运算量(包括常量、变量、函数等)连接起来的式子。(例4.1
.算术运算符的优先顺序:
括号正负号函数乘方乘、除、整除余数加、减.表达式的写法
表达式应写出在同一行,注意分式的写法。
第三章顺序程序设计
程序的执行次序,从上到下,由一些非控制转移语句组成
一、输出语句
输出用户所需的信息1、一般格式
PRINT[<表达式>]表达式常量、变量、函数:PRINT246PRINT"X=";X显示:X=...
2、作用(1输出数值计算的结果(P92
(2输出字符串(P93(3输出系统信息(P94
3、输出格式(1标准格式输出项以逗号分隔五区每区14
(2紧凑格式输出项以分号相隔(3TABXX
定位输出,但在同一行中、TABX)中的X应从左到右逐渐增大。还可利用SPACE(X插入空格

(4PRINT<....>,不换行(光标到下一区)PRINT<....>不换行(光标在输出项后)PRINT<....>换行空行
4、打印输出
LPRINT其使用方法与PRINT相同
二、赋值语句
1、一般格式
[LET]<变量名>=<表达式>LETa=100LETa$="BOOK"
计算右边的表达式,将其值赋给左边变量;
主要作用:运算。“=”的作用于是赋值,与等于的差别如:X=YY=X不同(P1003、对变量的赋值操作

1)变量的初值为0未赋值的变量
2)一个变量只有一个值变量的当前值由最后一次赋值决定n=n+13)变量值的传递
a=bb的值不变b=aa的值不变4)关于赋值类型
以左边变量的类型为准5)两个变量交换值
a=bc=aa=bc为中间结果为?/font>
b=c
三、键盘输入语句
1、一般格式:
INPUT[“提示信息]<变量表>说明:(1执行该语句从键盘输入数据的数目应与语句2
中的变量个数相同
(2从键盘输入的数据只能是常量
(3输入时数据间用逗号分隔例:求学生三门课的平均成绩
INPUT"a,b,c=";a,b,cV=(a+b+c/3PRINT"average=";vEND
四、读入语句
1、格式:READ<变量表>DATA<数据表>

例:READa,b,c,DATA75,60,90V=(a+b+c/3
END2、说明:
1<数据表>中的数据个数不能少于<变量表>中的变量个数。2DATA语句可放在程序的任何位置,可使用多个DATA语句来存放数据,这时将按DATA语句的先后顺序,把数据放数据区。3)关于数据指针当指针移到数据区之外时,屏幕给出错误信息:
OutofDATA(P109
4DATA语句中的数据只能是常量五、恢复数据指针语句RESTORE
将数据指针移至首位或指定的DATA语句标号。
六、结束语句和暂停语句1END语句结束程序运行。一个程序可有多个END语句,但运行程序时,只有一个起作用,即执行其中一个END语句都会使程序结束。2STOP语句
使程序暂停,选择RUN-CONTINUE继续运行。七、程序调试

1、分步执行
F9单步执行,STEP
F6窗口转换,WINDOWSF5运行或继续运行。2、设置断点F9设置断点F5运行或继续运行



第四章选择结构程序设计
一、概述
分支结构:二、关系式和逻辑表达式
1、关系运算符<>=<=>=<>
2、关系式
关系式是由一个关系运算符把两个表达式连起来的式子。结果(值)为逻辑值:TrueFalseQBASIC用数值表示:真:-1(非零值)假:0
ifx<>0thenprintxifxthenprintx相同3、逻辑运算符及逻辑表达式
(1not(非、逆、取反)7>4值为真not(7>4值为假(2and(与、交)所连接的两个关系式为真时条件成立。x>0andx<10
(3or(或、并)
所连接的两个关系式中有一个(以上)为真,则条件成立。X>10orX<0集合表示
AandBAorBnotA4、逻辑表达式的运算规则5、运算次序(优先级别)P123
关于逻辑表达式结果:x=6>4
printxx=-1a=5=3=>a=(5=3a=0三、行IF语句

1、一般格式if<>then<1>[else<2>]
2、嵌套关系(1if…thenif…then…else…else
内层
外层2if…thenif…then…elseif…then…else四、块if语句1、一般格式
if<条件>then<语句组1>[else
<语句组2>]endif2、应用举例
6.5:输入3个整数、按从大到小的顺序输出。
算法:
1)先将ab比较,把小者放b中,大者放a2)再将ac比较,把小者放c中,大者放a中,此时a已是三者最大的。3)最后将bc比较,大者放b中,小者放c中,此时abc已按从大到小的顺序排例好。
程序:inpnt"a,b,c,=";a,b,cifb>athen
t=aa=b交换abswapa,b
b=tendififc>athen
t=aa=c交换acswapa,c
c=tendififc>bthen
t=bb=c交换bc(swapb,c
c=tendif
printa,b,c
end

3、块if的嵌套
ifthenifthen

else
endif
else
endif
4、块IF中的ELSEIF格式ifthen

elseifthen
else

endifendif写成:ifthenelseifthen

else
endifP125改写为:Input"m=";mIfm<100then
d=0elseifm<200thend=0.01
elseifm<300thend=0.02
elseifm<500thend=0.03
elseifm<1000thend=0.04
elseifm<2000thend=0.05

elsed=0.08
endifa=m*(1-dprint"amount=";a
end
五、多分支选择语句
用嵌套的IF语句可实现多分支选择1、基本格式selectcase<变量>
case<1><语句组1>
case<2><语句组2>

case<n><语句组n>
caseelse<语句组n+1>
endselect
每一个CASE句中指定一个值条件,当CASE变量的值符合条件时,执行该子句下面CASEENDSELECT出。
c=int(s/250
2、在CASE子句中使用TOCASE<1>TO<2>
3、在CASE子句中使用IS
CASEIS<关系运算符><表达式>4、在CASE子句中使用多个条件
允许在一个CASE子句中指定多个条件,各条件之间用逗号分开。条件=单值、值范围、单条件
5SELECTCASE语句的一般格式selectcase<测试表达式>
case<条件11><条件12>,…<语句组1>
case<条件21><条件22>,…<语句组2>
case<条件n1><条件n2>,…<语句组n>
caseelse<语句组n+1>

endselect六、多分支转移语句
格式:ON<算术表达式>GOTO<标号1><标号2>七、多分支选择结构小结
1IF-THEN-ELSE(用IF的嵌套)分支(条件)较少时使用。2SELECTCASE
分支(条件)较多时使用。3ONGOTO
非结构化程序设计,不宜使用。
第五章循环结构程序设计
一、概述循环结构:1WHILE循环2FOR循环3DO循环
循环体——反复执行的一组语句例:求s=1+2+3+...+100编写如下程序:s=0
fori=1to100
s=s+i反复执行100nexti
print"1+2+3+...+100=";s
end
二、WHILE循环结构WHILE<条件><循环体>WEND
:<>,<>,退环。如:s=0i=1WHILEi<=100
s=s+iWEND
”——Ctrl+Break行。
1(P1527.5:如果我国工农业生产每年以12%速度增长,问多少年后产值翻一番:基值设为100(逐年计算产值,看是否达到200p=100

r=.12
n=0WHILEp<200p=p*(1+rn=n+1WEND
PRINTn;"years","p=";p
END
2(P1527.6:给出两个正整数,求它们的最大公约数。算法:(辗转相除法)
(1、以大数m作被除数,小的数n作为除数,相除后余数为r(2、如果r=0,则n就是最大公约数。否则将n=>m,r=>n,重复(1程序及框图INPUT"m,n=";m,nr=mMODn
WHILEr<>0m=nn=r
r=mMODnWEND
PRINT"最大公约数为:",n
END3(P1537.7:给一个整数n(>2,判别它是否素数(质数)算法:判别n是否素数,只要将n1(n-1各数轮流作除数除,若都不被整除,则为素数。n不是素数,则n=n1*n2,n1n2中必然有一个大于或等于n的开方根,另一个小于或等于n的开方根。即若n是非素数,则必然有一个因子小于或等于n开方根。程序及框图:INPUT"n=";nk=INT(SQR(n
i=2flag=0WHILEi<=kANDflag=0
ifnMODi=0THENflag=1ELSEi=i+1
WENDIFflag=0THEN
PRINTn;"是素数!"
ELSEPRINTn;"不是素数!"
ENDIFEND二、FOX循环结构
1、格式

FOR<变量>=<初值>TO<终值>STEP<增量>循环体
WEXT<变量>
如:fori=1to10step2printi,
nexti2、说明
1FORNEXT必须配对;2FOR必须在NEXT的前面;
3FOR中的循环变量与NEXT的变量一致;4)步长为1“STEP1”可省略;5)循环终止的条件是循环变量赋值超过终值,而不是等于终值。6)循环次数的计算
次数=(终值一初值/步长+17)循环变量尽量用整型变量;8数;
终止条件:当步长>0,循环变量>终值当步长<0,循环变量<终值当步长=0,永不终止9)循环变量主要用来控制循环、可在循环体内引用,也可不在循环体出现。fori=1to100print"a"nexti
fori=1to100printi,nexti
注意:在循环体内可对循环变量赋值,但这将改变循环次数。fori=1to100printi,i=i+1nexti3exitfor语句
提前终止循环fori=1to100s=s+i*i
ifs>=100thenexitfor
nextiprintsend
4、应用举例判别n是否素数。input"n=";nk=int(SQR(n
f=0








fori%=2tok
ifnmodi%=0thenf=1exitforendifnexti%iff=0then
printn;"是素数"
elseprintn;"不是素数"
endifend斐波那契数列f(n=1(n<=2f(n=f(n-1+f(n-2(n>2
f1=1f2=1
f3=f2+f1=2f4=f3+f2=3
f5=f4+f3=5......程序如下:f1=1f2=1printf1,f2,
fori%=3to20f3=f1+f2printf3,
f1=f2f2=f3nexti%printendx10=1程序如下:
x=1


,

10

forn%=10to2step-1x=(x+1*2nextn%print"桃子的数量为:";xend
思考:forn%=10to1step-1forn%=1to9三、DO循环语句1、简单DO循环DO
<循环体>
loop
终止循环可用:exitdo
计算三门课程的平均成绩doinput"a,b,c,=";a,b,cifa=0andb=0andc=othenexitdos=(a+b+c/3
print"平均成绩:';s
loopend
2、带while子句的DO循环语句
格式一:dowhile<条件><循环体>loop格式二:do
<循环体>
loopwhile<条件>
作用:当指定条件为真是继续循环,否则结束循环。`while...wend次。
:1+1/2+1/3+.......1/n直到前后两项之差小于是1e-3为止。s=0n=1t=1/n
dot1=ts=s+t1n=n+1t=1/n
loopwhilet1-t>=1e(-3printsend思考:1)用dowhile...loop改写程序;2)两种格式do循环的区别?3、带until子句的do循环语句


格式一:dountil<条件><循环体>loop格式二:do<循环体>.
loopuntil<条件>
作用:当条件为真时终止循环20002050年之间的所有闰年。闰年的条件是:
1)能被4整除,但不能被100整除的年份都是闰年;2)能被100整除,又能被400整除的年份是闰年;程序如下:y=2000
dowhiley>2050
ifymod4=0andymod100<>0thenl=1
elseifymod100=0andymod400=0thenl=1elsel=0endif
ifl=1thenprinty,y=y+1loop
end思考:条件可写成:(1if(ymod4=0andymod100<>0or(ymod100=0andymod400=0thenl=1elsel=0
(2ifymod4=0thenif(ymod100<>0thenl=1elseif(ymod400=0thenl=1else
l=0
endif人口增长平均1.5%设现人口12.3亿,问多少年后人口达到或超过15亿。p=1.23e+0.9r=0.015n=0dountilp>=1.5e+0.9p=p*(1+rn=n+1loopprintn;"","人口";pend问题(1)比较下面两例:f=1f=1n=6n=6dountiln>5do
f=f*nf=f*nn=n+1n=n+1looploopuntiln>5printfprintfendend
2)凡是用dountil循环可以解决的问题,全部可用dowhile解决,只需把“<条件>”取成“<反条件>”p=1.23e+0.9r=0.015n=0dowhilep<1.5e+0.9p=p*(1+r

n=n+1loopprintn;"","";pend四、循环的嵌套
一个循环体内包含另一个循环
100-200forn=101to200step2k=int(SQR(ni=2f=0whilei<=kandf=0ifnmodi=0thenf=1elsei=i+1
wendiff=0thenprintn,nextnend例打印乘法九九表
fori=1to9forj=1to9p=i*jprintp,nextj
printnexti
end打印表格(P175printTAB(5;"|"forj=1to9printtab(j*8;j;nextjprint
forn=1to75print"-";
nextnprinttab(5;"|";print
fori=1to9printi;"|";forj=1to9p=i*j
printTAB(j*8;p;nextjprintnexti
forn=1to75print"-";nextnend
注:1)内外循环不应交叉
2)内外循环的变量名不应相同







第六章函数与子程序
件。
程序的每一个模块可以是子程序或函数,它是通过执行一系列语句来完成一个特定的操作过程,常称为过程
执行一个过程”——调用一个子程序或函数;一、自定义函数QBASIC函数:①标准函数②自定义函数③外部函数
1、单行自定义(DEF)函数语句函数——用一个语句定义一个函数(1.一般格式;
DEFfn<名字>(<参数>=<表达式>
1.已知圆的半径r,求圆的面积:S=πr2DEFfns(r=3.14159*r*rPRINTfns(3END
2DEFfns$=”thisisastring”PRINTfns$
3.求以下公式:

DEFfnc(a,b=SQR(a*a+b*bPrintfnc(3,4(2.说明
函数名由两部分组成
fns
自定义函数标志(fn,用户定义名(一个字母s参数可有多个,但调用时的参数(实参)与定义时的参数(形参)要一致。
2、多行自定义(DEF)函数用多行语句来定义一个函数。(1、一般格式DEFfn<名字>(<参数>
......
fn<名字>=<表达式>ENDDEF
4、定义函数f(n=1+2+...+n

DEFfns(nS=0
FORi=1tonS=S+iNextifns=SENDDEF
Forn=1to100Printfns(nNEXTnEND
(2、说明
i)形式参数——定义函数的自变量实际参数——调用函数时的参数。
ii)函数先定义后使用,即习惯把DEF语句放在程序的开头。
二、块内子程序1gosub-return语句
子程序定义:<标号或行号>......return
子程序调用:GOSUB<标号或行号>
5:求4+5+6S=0
n=4:gosubfs=s+pn=5:gosubfs=s+pn=6:gosubfs=s+pprint“4!+5!+6!=”;sendf:p=1
fori=1tonp=p*inextireturn
2ongosub-return语句
(1.一般格式子程序定义:<标号>:
......return
子程序调用:
ON<表达式>gosub<子程1>,<子程2>,…,<子程n>

例:小学生算术练习”——轮流出一个二位数和一个一位数的加法、减法和乘法的题目,共出十题,每题10分。RANDOMIZE
fori=1to10a=int(90*RND+10b=int(9*RND+1p=imod3+1ONpGOSOBa1,a2,a3Nexti
Print"n=";n*10END
a1:printa;"+";b;"=";
inputc
ifc=a+bthenn=n+1return
a2:printa;"-";b;"=";inputc
Ifc=a-bthenn=n+1Return
a3:printa;"*";b;"="Inputc
Ifc=a*bthenn=n+1Return.
(2、说明:
<表达式>的值不是整数时,按四舍五入处理,值为0或大于n则不起作用,值为负时系统给出错误信息——“不正确的函数调用3ONKEY(nGOSUB-RETURN语句(1、调用格式
ONKEY(nGOSUB<标号>
其中n是数值表达式,代表一个陷阱键n的值与设定键的对应关系如下:n1~1011121314
键名
功能键F1~F10方向键方向键方向键方向键

:求和式:S=12+22+...+n2n=100000ONKEY(2GOSUBpriKEY(2ONS=0

Fori=1to100000S=S+i*iNEXTipring“s=”;send
pri:print“nowswmis”;s,”I=”;ireturn
(2.说明
设置陷阱:ONkey(nGOSUB<标号>打开陷阱:KEY(non关闭陷阱:KEY(noff
三、独立模块的子程序1、建立子程序格式:SUB<子程序名>[(<参数表>]………ENDSUB
2、子程序的调用(1.格式
DECLARESUB<子程序名>[(<参数表>]………Call<子程序名>[(<参数表>]<子程序名><参数表>
例:SUBstars(nfori=1tonPRINT“*”;NextiPrint
ENDSUB_________________________
DECLARESUBStars(nCallStars(30CallStars(18End
(2.说明
iDECLARE为外部子程序说明语句,主程序调用多少个子程序,就有多少个DECLARE语句;
iiCall语句的“Call”可以省写,参数的括弧也可不写;如:Callstars(30可写成:stars30
3、参数传递(1.值传递方式Callstars(30......

SUBstars(n
(2.地址传递方式a=30
Callstars(a
......SUBstars(n
例:求4!+5!+6!+7!子程序:SUBFact(n,ff=1
fori=1tonf=f*inextiENDSUB
主程序:DECLARESUBFact(n,f
fori=4to7CallFact(i,fS=S+fNexti
Print“s=”;SEnd
注:地址传递方式是当实际参数为变量时发生,它将可能会改变原变量的值,若实际参数来。
例:求两个整数的最大公约数和最小公倍数。(P208最小公倍数=(m*n/最大公约数
求最大公约数子程序:SUBHCF(m,n,h
IFmAPm,nr=mMODn
DOWHILEr<>0m=nn=r
r=mMODnLOOPh=nENDSUB
求最小公倍数子程序:SUBLCM(m,n,hh=m*n/hENDSUB
主程序:
DECLARESUBHCF(m!,n!,h!DECLARESUBLCM(m!,n!,h!INPUT"m,n=";m,n

CALLHCF(m,n,h
PRINT"最大公约数为:";hCALLLCM(m,n,h
PRINT"最小公倍数为:";hEND说明:程序在执行时,结果不正确;其原因是CALLHCF语句调用时修改了mn的值,以至使CALLLCM运行不
正确。因此,CALLHCF语句应为:CALLHCF((m,(n,h
6(P209算法:n=10n1n22(T8(F3(T7(Tn=16
n1n22(T14(F3(T13(T
四、模块化的函数1、建立一个函数FUNCTION<函数名>(<形参表>......
LET<函数名>=<表达式>ENDFUWSTION
2、函数的调用
与标准函数相同,只是在主程序开头加上DECLAREFUNCTION<函数名>(<参数>,无参数函数也要写上两个括号(例:求47的阶乘之和FUNCTIONFact(nf=1
fori=1tonf=f*iNEXTIFact=f
ENDFUNCTION
__________DECLAREFUNCTIONFact(nS=0
Fori=4to7S=S+Fact(iNexti
Print"S=";SEnd

注意函数的参数传递3STATIC选项(静态)
外部函数中使用的变量,在函数调用结束后将全部被释放,其值不再保留。如要保留函数中的变量,可在建立函数时加写“STATIC”FUNTION函数名(<参数>STATIC
五、全局变量与局部变量1、局部变量
每一个模块(子程序、主程序、函数)中的变量都只在本模块中有效,即是它们的作用域只限于模块,这种变量称为局部变量。2、全局变量
在程序所有模块中都有效的变量,即作用域为整个程序变量称为全局变量。其定义格式为:COMMONSHARED<变量表>
六、过程的嵌套调用在一个过程里又调用另一个过程。
七、过程的递归调用在一个过程里又调用该过程本身;
例如直接调用:FUNCTIONf(xC=f(xf=2*CENDFUNCTION
又如交叉调用:FUNCTIONf1(x……C=f2(y……f1=2*C……ENDFUNCTION
FUNCTIONf2(t……d=f1(a……f2=4/d……ENDFUNCTION
执行的结果造成无终止的自身调用,显然,程序中不应出现这种无终止的调用,而只应是有限次数的、有终止的递归调用。

FONCTIONAge(n
Ifn=1thenAge=10elseAge=Age(n-1+2EndFONCTION
主程序:DECLAREFUNCTIONAge(n

PrintAge(5End

FONCTIONFact(n
Ifn<=1thenFact=1elseFact=n*Fact(n-1ENDFONCTION
第七章数组
一、概念
例如要求一个班50名学生的平均成绩:

下标变量Si用数组表示为:S(i1、有关说明:
(1.数组与普通变量一样,用来存放数据;(2.数组中的数据必须是同一类型;2、数组与循环结合fori=1to50inputs(inextis=0
fori=1to50s=s+s(inextiprints/50end
二、数组的建立和引用1、数组的建立
(1.DIM<数组名>(下标上界DIM<数组名>(上界1,上界2

说明:
一般情况下,下标值从0开始
如:DIMA(5即定义了a(0a(1a(5若要修改下标起始值,可用下面语句:OPTIONBASEN如:OPTIONBASE1DIMa(5
则定义了5个变量a(1a(2a(3a(4a(5
若数组下标上界不超过10则可不必用DIM定义数组。(2DIM<数组名>(n1ton2下标值的范围:-3276832767数组名与变量名的定义相同;
允许在同一模块中,数组名与变量名同名,它们不代表同一对象;DIMa(100A=3
DIM语句中的上界可是常数或变量、表达式;如:DIMa(10DIMa(nDIMa(n+2
但变量值一定先赋值定义全局数组
DIMSHAREDa(50
DIM语句可定义变量类型DIM<变量>AS<类型>
其中<类型>是:INTEGER(整型LONG(长整型)SINGLE(单精度型)DOUBLE(双精度型)STRING(字符串型;
<变量>不能加类型定义符,如下写法是错误的:DIMA&ASLONG
在用DIM语句定义了一个变量类型后,该变量名后面加上类型定义符或不加类型定义符都是合法的,且代表同一个对象。例如:DIMaASLONGa=123456a&=77777printa,a&END
运行结果如下:
7777777777
但程序中不能再用a作其它类型的变量名。2、数组的引用
引用数组元素(下标变量),即在括弧中指定下标;
在程序中,数组与其它变量的使用相同,即可参与运算,可以被赋值;在引用数组时,数组名、类型、维数以及下标的范围,应与定义时一致;同一模块中,数组和变量可同名,但数组与数组不能同名;下列情况是不允许的:

DIMa(10,10DIMa(50,50DIMa(15DIMa%(153、静态数组和动态数组
静态数组——建立数组后,其维数和大小不能改变;
动态数组——在程序执行教程中,可改变大小或者被释放;
QBASIC规定:在DIM语句中用常数指定下、上界的数组为静态数组,如果用变量(或表达式)指定上下界的数组为动态数组。(1.重定义语句
REDIM<数组名>(上界如:DIMS20X2030……
√REDIMS(50×REDIMX(30
只改变同名数组的大小,但不能改变维数;(2.释放数组语句ERASE<数组名>
释放数组所占据的空间;1:释放和重定义数组:n=10DIMa(n
FORi=1TOna(i=i
PRINTa(i;NEXTiPRINTERASEaREDIMa(16FORi=1TO16a(i=i
PRINTa(i;NEXTiPRINTEND说明:
.如果不使用ERASE语句释放数组,不能用DIM语句对同一个数组两次定义;.REDIM可改变数组的大小,而不必先用ERASE语句释放数组;
.无论用DIMREDIM定义一个与原来数组同名的数组,可以改变数组中各维的上下界,而不能改变数组的维数。(3.数组上、下界函数
LBOUND(<数组名>,<维数>——下界函数UBOUND(<数组名>,<维数>——上界函数例:
INPUTn,m

DIMa(nTOm
FORi=LBOUND(a,1TOUBOUND(a,1a(i=i
PRINTa(i;NEXTiPRINT
DIMb(10,15
FORi=1TOUBOUND(b,1FORj=1TOUBOUND(b,2b(i,j=10*i+jPRINTb(i,j;NEXTjNEXTiPRINTEND
三、数组的应用1、一维数组
只有一个下标的数组。(1.数据统计
:输入n个学生的成绩,求平均成绩。OPTIONBASE1
INPUT"numberofstudentsis:";nDIMs(nFORi=1tonINPUTs(isum=sum+s(iNEXTiaver=sum/n
PRINT"aver=";averEND
:输入n个学生的学号和成绩,要求输出平均成绩和高于平均分的学生学号及成绩。OPTIONBASE1
INPUT"numberofstudentsis:";nDIMnum(n,score(nFORi=1ton
INPUTnum(i,score(nsum=sum+score(iNEXTiaver=sum/nPRINT
PRINT"平均分是:";averPRINT
PRINT"高于平均分的学生有:"PRINT"学号","成绩"

FORi=1TOn
IFscore(i>averTHENPRINTnum(i,score(iNEXTiEND
(2、数据排序
例:从键盘输入10个数。要求按由小到大的顺序将它们打印出来;
比较交换法
a1a2a3a4a5a6a7a8a9a10
第一次:a1a2a3a4a5a6a7a8a9a10比较第二次:a2a3a4a5a6a7a8a9a10比较第三次:a3a4a5a6a7a8a9a10比较第四次:a4a5a6a7a8a9a10比较第五次:a5a6a7a8a9a10比较第六次:a6a7a8a9a10比较第七次:a7a8a9a10比较第八次:a8a9a10比较第九次:a9a10比较OPTIONBASE1DIMa(10
FORi=1TO10INPUTa(iNEXTi
FORi=1TO9
FORj=i+1TO10
ifa(i>a(jTHENSWAPa(i,a(jNEXTjNEXTi
FORi=1TO10PRINTa(i;NEXTiEND选择法
OPTIONBASE1DIMa(10
FORi=1TO10INPUTa(iNEXTi
FORi=1TO9k=i
FORj=i+1TO10
ifa(k>a(jTHENk=jNEXTj
ifk<>iTHENSWAPa(k,a(iNEXTi

FORi=1TO10PRINTa(i;NEXTiEND
(3.数据查找(检索):设有n个学生,每个学生的数据包括:学号、姓名、性别、年龄、平均分等;要求输入一个学号,程序输出该学生的所有数据。顺序查找法
假设:num(i为学生学号,nam$(i为姓名,num为查找对象。SUBSearchFORi=1TOn
IFnum=num(iTHENPRINT"num";num(iPRINT"name";nam$(iEXITFORENDIFNEXTi
IFi>nTHENnum;"notfound"ENDSUB
折半查找法(二分查找法)
对按一定规律(由小到大或由大到小)排列好的数据进行检索;假设:num(i为按从小到大排列的学生学号,nam$(i为姓名,num为查找对象。SUBSearchtop=1bot=nfind=0DO
mid=INT((top+bot/2IFnum=num(midTHENPRINT"num";num(iPRINT"name";nam$(ifind=1
ELSEIFnumbot=mid-1
ELSEIFnum>num(midTHENtop=mid+1ENDIF
LOOPUNTIL((botIFfind=0THENnum;"notfound"ENDSUB2、二维数组矩阵的表示:


aij——双下标变量a(i,j→二维数组数组定义:DIMA(m,na(i,j→b(j,i
:输出魔阵——每行、每列和对角线之和均相等。排列规律:
(1、先将“1”放在第一行当中;
(2、从“2”开始到N*N止,各数中每一个数存放的行比前一个数的行数减1,列数加1(3、如果上一个数的行数为1,则下一个数的行数为n(最后一行(4、当上一个数的列数为n时,下一个数的列数为1,行数减1
(5、如下一个数应放的位置已被其它数占据,则下一个数放在上一个数的下面。四、过程中的数组参数1、作为下标变量
子程序定义:SUBA(x,y……
ENDSUB
调用:DIMT(10……
CallA(t(1,t(22、作为数组:定义:

调用CALLB(p(,g(
将主程序中的PG传给子程序中的a,b数组传递采取地地传递方式。即子程序中对形象参值的修改,将会改变实参值;


第八章字符串处理
字符串——字符系列一、字符串常量1、显式常量
用双引号括起来的一串字符(不包括双引号)空格也是一个字符,没有字符的字符串叫空串"";数值常量与字符串常量的分别。
123表示一个数值常量,而"123"表示一个字符串常量2、符号常量
用一个符号名(字母)代表一个字符串常量;如:CONSTc="Beijing"CONSTc$="Beijing"
注意:字串常量与字串变量的区别,字串常量是不能改变的;CONSTc$="Shanghai"不正确。二、字符串变量1、变长字符串变量长度在0-32767范围;1)定义方法
①变量名后加类型说明符“$”②用DEFSTR语句;
如;DEFSTRa,bab开头的变量均为字串;③用DIM语句;
格式:DIM<变量名>ASSTRING变量名不应包含类型说明符;2)说明
①变量名不分大小写;②变量名应避开关键字;2、定长字符串变量
格式;DIM<变量名>ASSTRING*nn为字符串长度;
如:DIMNAMASSTRING*20
DIMAASSTRING*10BASSTRING*20在对定长字串变量赋值时,如果实际长度小于定义个数,则字符一律靠左存放,右端补空格;三、字符串变量的赋值1、用LET语句
[LET]<变量名>=<字符串>
LET语句给字符串变量赋值。DIMaASSTRING

LETa="ThisisaBASICprogram"PRINTaEND
2、用INPUT语句
输入时字符串用引号或不用引号的区别:
①如果字符串首尾有空格,不用引号时,空格将被舍弃;②如果输入的字符串有逗号,则一定要有引号。3、用LINEINPUT语句
行输入语句:输入一行以回车结束,中间可以是任何字符,不显示"?"号;LINEINPUT语句给字符串变量赋值。PRINT"enter2lines:"LINEINPUTa$LINEINPUTb$PRINTa$,b$END
4、用READ/DATA语句
READ语句中可包含数值变量和字符串变量,而DATA语句中只能相应放置数值常量和字符常量。
READ/DATA语句给字符串变量赋值。DEFSTRa
READa1,a2,a3,s1,s2,s3PRINTa1,s1PRINTa2,s2PRINTa3,s3
DATA"Basic","Fortran","C",98,87,67END
四、字符串的连接
两个字符串的合并,运算符为“+”字符串连接。a$="China"
b$="ThePeople'sRepublicof"c$="Ilove"d$=b$+a$PRINTd$PRINTc$+a$END
五、字符串的比较1、字符比较规则
用字符的ASCⅡ代码的大小进行比较(见课本附表P353-355,常用的字符顺序如下(由小到大)
空格!"#$%&'(*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~中文字。2、字符串比较的规则
两个字串从左到右逐个字符比较。

"BASIC"="BASIC"BASIC"<>"BASIC"3、字符关系表达式
两字符串的比较结果(真假值)
六种关系运算符:=,<,<>,>,<=,>=六、字符串数组
与数值数组的定义相类似。七、字符串函数八、字符串处理
第九章屏幕控制和作图
一、显示模式
显示模式:信息在屏幕上的显示方式。

1、文本模式
屏幕上显示的最小单位为一个字符,这种模式下的用户不能用线条来绘制各种图形只能用字符组合成粗糙的图案。
在这种模式下屏幕分为25行,每行80个字符。屏幕左上角为原点坐标,坐标为(1,12、图形模式
屏幕上显示的最小单位是显示器的象素点,可用基本的几何图形,如直线、方框、圆等绘制出复杂而精美的图画。
这种模式在VGA以上显示器的显示范围为640×480点,原点坐标(00)在屏幕左上角。二、屏幕控制语句1LOCATE语句
格式:LOCATE[<>][<>]
功能:确定光标在屏幕上的坐标位置。说明:取值范围:行1-25,1-80例如:
LOCATE1010PRINT“QBASIC”LOCATE1510PRINT“再见
2WIDTH语句(设置输出的行宽)格式:WIDTH<宽度值>功能:确定屏幕输出宽度。

其中:宽度的有效值是4080
例如:WIDTH40字符是扁形WIDTH80字符是长形3CLS语句格式:CLS
功能:清除屏幕信息,确定光标位置:在文本方式下,将光标置于屏幕的左上角,在图形方式下,将光标置于屏幕的中心。4CSRLINPOS函数格式:CSRLIN
POSn
功能:CSRLIN记录光标所在的行位置。POS记录光标所在的列位置。例:
LOCATE57A=CSRLINB=POS(0
LOCATE1015PRINT“ABCD”PRINTAB5SCREEN语句
格式:SCREEN[<模式>][<色彩>]功能:设置屏幕的显示方式(文本或图形其中:模式代表显示器的工作方式
色彩是一个数值表达式,只有在模式为012时它才有效。显示模式:0-13(除56外)有12种图形模式可供使用。(参见P29611.3色彩:012,三种(参见P29711.5例:SCREEN00模式为0,彩色为0表示屏幕工作在黑白字符模式下。6COLOR语句
功能:设置屏幕显示的颜色1、设置文本方式的屏幕显示颜色格式:COLOR<前景色><背景色><前景色>:定义屏幕上所显示的字符颜色
数值范围是0-31,如P29811.6表示0-1516种颜色,16-31是在0-15基础上加16闪烁方式。
<背景色>:定义屏幕的底色,数值范围为0-7.2设置模式1的屏幕显示颜色格式:COLOR<背景色><配色器号><配色器号>01号配色器它们有四种颜色,P29911.8
例如:COLOR21背景绿色1号配色器3、设置图形模式12-13的显示颜色格式:COLOR[<前景色>]
例:显示模式1216种前景颜色。

CLS
SCREEN12
FORI=0TO15COLORI
PRINT"***CurrentColoris"I;"***"NEXTIEND
:动态显示文字。三、作图语句1、画点1PSETxy[<色彩>]
功能:在屏幕上指定的坐标位置画一个点说明:xy)为坐标点,如屏幕模式为12时,x0-639y0-479<色彩>:画点的颜色,缺省时用前景色。例:画一点。SCREEN10COLOR70
PSET160100例:画一连线。SCREEN10FORi=1TO300PSETi1002NEXT
例:从(11)到(199199)画一斜线。CLS
SCREEN10FORi=1TO199PSETii2NSETi2PRESETxy[<色彩>]
功能:作用相同PSET,区别是省略色彩时,用背景色画点,可用它擦去位于(xy)的点。3STEPXY)表示相对坐标PSETSTEPxy<彩色>PRESETSTEPxy<彩色>PSET1010
PSETSTEP1010PSETSTEP1010
2、画线1LINE语句
格式:LINE(x1,y1-(x2,y2,<彩色>[B|BF]功能:在屏幕上指定的位置画一直线或矩形。说明:x1y1)为直线的起始坐标,

(x2y2)为直线的终点,<彩色>指定直线的颜色,
B的作用是画一个以坐标(x1y1)到(x2y2)为对角线的矩形框;BF不仅画一个矩形框,而且在框内填满与边相同的颜色。2DRAW语句(连续画线语句)格式:DRAW<字符串>
功能:在屏幕上连续画出各种直线说明:<字符串>Un向上移动n个单位Dn向下移动n个单位Ln向左移动n个单位Rn向右移动n个单位En向右上方移动n个单位Fn向右下方移动n个单位Gn向左下方移动n个单位Hn向左上方移动n个单位Cn选择颜色nSn比例图示
An把图形旋转一个角度,n的数值为01230表示不转,1逆时针转902为逆时针转1803为逆时针转270度)
Mx,y从当前位置开始向(xy)画线3、画圆语句1、画圆
格式:CIRCLExy,<半径>[,<色彩>]功能:以指定的圆心和半径画一个圆。说明:xy)为圆心坐标,<半径>为所要绘制圆的半径;<色彩>为绘制的圆指定颜色。例:以(200150)为圆心,以50为半径画一个圆。CLS
SCREEN12
CIRCLE20015050END2、画椭圆
CIRCLEx,y,半径[,<色彩>],,<纵横比>说明:<纵横比>:小于1时,椭圆为横向,大于1时,椭圆为竖向,若不指定,默认为1(即画圆)3、画圆弧
CIRCLExy,半径[,<色彩>],<起始角>,<终止角>
其中<起始角><终止角>为所画圆弧的起始位置和终止位置,以逆时针方向,度量单位为弧度,取0-2pi
四、图形着色
格式:PAINT(X,Y[,<填充色>[,<边界色>]]功能:对封闭图形进行着色。五、图形窗口
1WINDOW语句

1WINDOW(X1,Y1-(X2,Y2定义一个标准的坐标系,Y轴向上。2WINDOWSCREEN(X1,Y1-(X2-Y2定义一个标准的坐标系,Y轴向下。
一旦定义了一个新的坐标系(逻辑坐标系),程序中的图形语句都将使用此坐标系的坐标值作图;当WINDOW后无参数时,返回屏幕坐标系统。2VIEW语句
格式:VIEW[SCREEN](X1,Y1-(X2,Y2,<底色>,<边界色>
定义一个矩形区域,使制作的图形仅限在这个区域内输出,称这个区域为视窗。
SCREEN的选用将保持原来系统提供的屏幕绝对坐标,即物理屏幕坐标,原点在左上角。
第十章文件
文件——程序或数据存放在磁盘上的形式,存放在外部介质上的数据的集合;
程序——文件
数据——文件一、文件的概念1、分类
1)从文件的内容区分;
程序文件——源程序或可执行的目标程序数据文件——输入/输出数据;2)从文件的存储形式区分;ASCⅡ文件(文本文件)
源程序、字符串数据可用TYPE命令显示;存储时需转换ASC——二进制形式;二进制文件
用二进制形式存储
3)从文件的组织形式区分;顺序文件(不定长)随机文件(定长)2、文件与记录
一个文件是由若干个记录组成,一个记录包含若干个数据项。
例如一个学生的数据:学号、姓名、年龄、成绩等可看成一组数据组成一个记录;3、文件名
扩展名:.BAS.FOR.PAS.C4、文件的读写和文件缓冲区
读文件——将文件读入内存,或将文件读入计算机。写文件——从计算机主机向磁盘传送(输出)数据。
对磁盘上的数据文件进行读写操作时,必须在内存中开辟一个文件缓冲区以建立必要的输入/输出通道。5、文件指针

每文件都有一个指针,指向当前应读写的位置,从文件中读数据,就是读指针所指向位置处的数据。向文件写数据,是写到指针所指向的位置处。二、顺序文件1、概念
顺序存取文件(SEQIEMCEACCESSFILE
——文件中各记录写入顺序,存放的顺序和读出的顺序三者是一致的。记录1
……
记录i
……
记录n

2、顺序文件的打开与关闭
使用之前,先打开文件,使用后关闭它;(1.OPEN语句
格式:OPEN<文件名>FOR<读写方式>AS#<文件号><读写方式>
OUTPUT:写数据,向文件输出;INPUT:读数据,从文件读入;APPEND:写数据:添加记录;
<文件号>:即文件缓冲区号,每一个文件都要指定一个不同的文件号(1225说明:
OUTPUT方式打开文件,建立新文件,指针指向首记录;将删除已存在的文件。INPUT方式打开已存在的文件,指针指向首记录;
APPEND方式打开文件,指针指向文件尾;可建立新文件2CLOSE语句关闭已用的文件
CLOSE[#<文件号1>][,#<文件号2>]……关闭由文件号指定的文件缓冲区,将内容存盘,如不指定文件号,则关闭所有已打开的文件;3、输出数据(写文件)新文件写入记录1PRINT#语句
格式:PRINT#<文件号><输出项>例;PRINT#1a;b;c
注意:逗号与分号的差别,与PRINT语句类似在对字符串存盘时,注意引入定界符。2WRITE#语句
存盘时,各数据间插入逗号,并给字串加双引号,且正数前面不设空格。例:
OPEN"student.dat"FOROUTPUTAS#1READnum,nam$,sex$,scoreDOUNTILnam$="end"
WRITE#1,num,nam$,sex$,scoreREADnum,nam$,sex$,scoreLOOP
DATA101,Li,m,90,103,Wang,f,98

DATA104,Xiu,f,100,105,Zhang,m,78DATA107,Tan,m,99,109,Ling,f,88DATA000,end,,END
说明:(1、文件中的记录以:回车换行符相隔:CHR$(13CHR$(102、文件最后用文件结束符结束CHR$(26一个记录的长度不能超过225个字符;3PRINT#WRITE#的区别:
WRITE#语句(数据项之间用均相同)101"Li","m",90103,"Wang","f",98
PRINT#语句(数据项之间用101Lim90103Wangf98
PRINT#语句(数据项之间用“,”101Lim90103Wangf984、输入数据(读文件)
从已建立文件中读入数据到计算机中;1INPUT#语句
格式:INPUT#<文件号><变量1>[<变量2>…..]每次从文件中读出一个记录,注意:变量类型应与数据一致;:
OPEN"student.dat"FOROUTPUTAS#3DO
INPUT#3,num,nam$,sex$,scorePRINTnum,nam$,sex$,scoreLOOPUNTILEOF(3CLOSEEND终止函数
EOF<文件号>
检查记录指针是否指向文件尾,是则真(-1,否则为假(02LINEINPUT#语句
格式:LINEINPUT#<文件号><字串变量>将文件的记录,以字符形式读入;:
OPEN"student.dat"FOROUTPUTAS#3DO
LINEINPUT#3,stud$PRINTstud$

LOOPUNTILEOF(3CLOSEEND
5、文件的修改
若要修改已有的顺序文件,则要利用中间文件,因为对一个顺序文件不能既读又写。对顺序文件的修改步骤:1、用INPUT方式打开需要修改的旧文件,准备从中逐个读出数据;2、另设一个中间临时文件(用OUTPUT方式打开),用来存放修改后的各记录;3逐个读入旧文件的记录,用户决定是否修改?如果不改,就把此记录原封不动地写到中间文件中去;如果要修改,则在修改后再写到中间文件中。4、将旧文件删除,把中间文件改名为原来的旧文件的名称。:
OPEN"student.dat"FORINPUTAS#1OPEN"temp"FOROUTPUTAS#2DOUNTILEOF(1
INPUT#1,num,nam$,sex$,scorePRINTnum,nam$,sex$,scoreINPUT"chang?(y/n";r$
ifUCASE$(r$="Y"THENINPUTnum,nam$,sex$,scoreWRITE#2,num,nam$,sex$,scoreINPUT"insert?(y/n";q$ifUCASE$(q$="Y"THENINPUTnum,nam$,sex$,scoreWRITE#2,num,nam$,sex$,scoreENDIFLOOPCLOSE
KILL"student.dat"
NAME"temp"AS"student.dat"END
6、有关函数和语句EOF(函数尾测试
INPUT$(函数
格式:INPUT$<字节数><文件号>从指定的打开文件中读取指定数目的字符;LOF(函数
给出指定文件已进行读写的字节数;格式:LOF<文件号>SEEK(函数
格式:SEEK(<文件号>给出指定文件的当前指针SEEK语句指针移动

格式:SEEK#<文件号>,<字节位置>
有关顺序文件的语句和函数:P33612.7
三、随机文件(RAMDOMACCESSFILE
随机存取文件——所有记录等长,各记录相应的数据项的长度也相同;按记录号进行存取,记录的顺序不一致,可直接读写任一条记录。1、随机文件的建立
1OPEN<文件名>AS#<文件号>[LEN=<长度>]
存取方式不用指定,自动加上“FORRANDOM”,表示随机文件;2)定义缓冲区中各的长度(FIELD字段)
FIELD<文件名><域宽>AS<域名>[<域宽>AS<或名>]定义记录的结构
如:FIELD#1,10ASA$,15ASB$,36ASC$
3)随机文件的记录中各域只能存放字符串数据,在对数值型数据进行处理时,要经过转换;
4)数值转换为字符的函数MKI$<整型表达式>2字节MKS$<单精度表达式>4字节MKD$<双精度表达式>8字节称为内码字符串
5)缓冲区中各域的字符串变量赋值LSET<域变量>=<字符串>(左对齐)RSET<域变量>=<字符串>(右对齐)6)将文件缓冲区中的数据存盘PUT#<文件号>[<记录号>]7)用CLOSE关闭文件:
OPEN"good.dat"FORRANDOMAS#1LEN=23FIELD#1,2ASn$,15ASm$,4ASP$,2ASs$DO
READnum%,nam$,price,stock%IFnum%=9999THENEXITDOLSETn$=MKI$(num%LSETm$=nam$
LSETp$=MKS$(priceLSETs$=MKI$(stock%PUT#1LOOP
DATA.............DATA.............DATA.............DATA.............DATA.............

DATA9999,,,CLOSEEND
2、随机文件的读入(1、打开随机文件
OPEN<文件名>AS#<文件号>[LEN=<长度>](2、定义文件缓冲区中各域的长度;
FIELD<文件名><域宽>AS<域名>[<域宽>AS<或名>](3、从指定的文件中读取一个记录GET#<文件号>[<记录号>]
(4、将内码字符串还原为数值型数据;CVI<2个字节的域变量>——整数CVS(<4个字节的域变量>——单精度CVD(<8个字节的域变量>——双精度
这三个函数是MKI$MKS$MKD$的逆运算(5、关闭文件CLOSE:
OPEN"good.dat"FORRANDOMAS#1LEN=23FIELD#1,2ASn$,15ASm$,4ASP$,2ASs$PRINT"num","name","price","stock"FORi%=1TOLOF(1/23GET#1,i%
num%=CVI(n$nam$=m$
price=CVS(p$stock%=CVI(s$
PRINTnum%,nam$,price,stock%NEXTi%CLOSEEND
3、随机文件的修改
随机文件的优点:可直接读写任何一个记录,且既能读又能写。:
OPEN"good.dat"FORRANDOMAS#1LEN=23FIELD#1,2ASn$,15ASm$,4ASP$,2ASs$INPUT"whichrecord:";rDOUNTILr=0GET#1,r
num%=CVI(n$nam$=m$
price=CVS(p$stock%=CVI(s$
PRINTnum%,nam$,price,stock%

INPUT"price=";priceLSETp$=MKS$(pricePUT#1,r
INPUT"whichrecord:";rLOOPCLOSEEND
3、记录型变量
一个记录包括若干个在同一文件中各个记录所包含的域都是相同的,这样可以定义一种新的变量类型——记录。
1001Shirt671201002Skirt871081003
Coat
231.5
67
(1、定义记录类型
格式:TYPE<记录类型名><域名1>AS<类型><域名2>AS<类型>......
<域名n>AS<类型>ENDTYPE
例如:TYPEgoods
numASINTEGERnamASSTRING*15priceASSINGLEstockASINTEGERTYPEEND
(2、定义记录变量
格式:DIM<记录变量名>AS<记录类型名>例如:DIMaASgoods(3、记录变量中的域表示法格式:<记录变量名>.<域名>
例如:a.num表示a变量中的num域。4、用于记录变量的读写语句1GET#语句
格式:GET#<文件号>[,<记录号>][,<记录变量>]
功能:用于从文件中读一个指定的记录,赋给一个记录变量。2PUT#语句
格式:PUT#<文件号>[,<记录号>][,<记录变量>]功能:将一个记录变量的内容写到指定的记录中去。10-8:用记录变量的方法建立一个随机文件。P34612.14

TYPEgoods
numASINTEGERnamASSTRING*15priceASSINGLEstockASINTEGERTYPEEND
DIMclothASgoods
OPEN"good.dat"FORRANDOMAS#1LEN=LEN(clothDO
READcloth.num,cloth.nam,cloth.price,cloth.stockIFcloth.num=9999THENEXITDOPUT#1,,clothLOOPDATA..........
DATA9999,,,CLOSEEND
:用记录变量的方法读入一个随机文件内容。TYPEgoods
numASINTEGERnamASSTRING*15priceASSINGLEstockASINTEGERTYPEEND
DIMclothASgoods
OPEN"good.dat"FORRANDOMAS#1LEN=LEN(clothPRINT"num","name","price","stock"FORi%=1TOLOF(1/LEN(clothGET#1,i%,cloth
PRINTcloth.num,cloth.nam,cloth.price,cloth.stockNEXTi%CLOSEEND
:用记录变量的方法修改一个随机文件内容。TYPEgoods
numASINTEGERnamASSTRING*15priceASSINGLEstockASINTEGERTYPEEND
DIMclothASgoods
OPEN"good.dat"FORRANDOMAS#1LEN=LEN(clothDO

INPUT"whichrecord";rIFr=0THENEXITDOGET#1,r,cloth
PRINTcloth.num,cloth.nam,cloth.price,cloth.stockINPUT"price=";cloth.pricePUT#1,r,clothLOOPCLOSEEND
四、文件与目录处理1、显示磁盘目录
FILES["文件名"]
例:FILES"*.BAS"显示当前目录下,扩展名为BAS的所有文件;2、执行DOS命令
SHELL[命令字符串]
例:SHELL"dir"暂时退出QBASIC,执行DOS的命令dir(显示目录,然后返回QBASIC
注:如果没有[命令字符串],则转到DOS命令状态,可用EXIT返回QBASIC3、文件改名
NAME<旧名>AS<新名>可改名或修改文件路径。4、文件删除
KILL<文件名>5、目录操作
MKDIR<路径名>——建立子目录CHDIR<路径名>——改变当前目录RMDIR<路径名>——删除(空)目录

最近读者


ycllchinwin002

大灰狼
分享(0评论(0
分类:记事本_资料484次阅读
2008-03-0620:37
网易博友109
我要登录->

发表评论



BASIC语言概述

相关推荐