回 帖 发 新 帖 刷新版面

主题:qbasic简易教程、学qb的好处介绍、软件下载、网站连接

本贴主要内容有:
    1  学qb的好处介绍
    2  QBASIC下载地址
    3  QBASIC的教材
    4  QB的相关网站连接
    5  QB的函数与语句用法简介
一  学qb的好处--  
    简单,极其的简单,如果说qbasic都无法理解,那就别往下看了!
   1 qb能让你掌握算法,它是个结构化的语言,在编程语言中qb是最容易学上手的!有时候你确定了一种算法,用A语言也是这么做,用B语言也会这么做!如果你的QB学得很好很好了(当然其他语言也是这样),再去学别的就非常非常的容易了,不用一个月,就能到你这个语言的水平!
 2 能更接近底层!能为你学习计算机的原理打基础,程序是计算机的灵魂,要学计算机原理就必须会一门语言,这样才能深刻的理解他!

  比如一个按纽,在win编程中你是可以直接拿来用就用,不需要知道是怎么做出来的,本来这是个好事,不过,如果你偏偏是一个喜欢刨根问底的人,哈哈,就要更深入了 !
以我的体会,举个简单的例子 
    我只会qb,qb中PRINT "ok" 语句为什么能在屏幕上显示字母呢,我想知道它背后的原理,我就找了资料学,知道了它背后的东西,原来它是调用了INT21中断中的显示功能,在这个基础上封装成了PRINT语句,那为什么INT21能显示呢?我也很奇怪,慢慢看书,发现INT21是调用了BIOS中的INT10中断,INT21号DOS中断对它进行了封装,那为什么调用了INT10就能显示呢?原来是封装了IO,最终的数据是反映到显存。(当然,有兴趣还可以了解,显卡是怎么来工作的,可以一直研究到芯片) 在文本模式下显卡的开始地址是B800。知道了这些,我就可以直接绕过中断写显存,这样速度就很快了。这个在以前的游戏中也是这个基本的原理......... 
   对于学习计算机课程的同学应该还是有帮助的!
   如果大家只是在win下编程,没有兴趣知道这些的话,我看学qb也没有多大用处,当我没有说!还有个不得不说的问题是QB有解释型的也有编译型的,别片面的理解教科书!
  3  如果你不是做一个职业程序员,qb过渡到vb是非常容易的(这个我已经极有体会了)
特别说明:如果你立志要做程序员,或者以后靠编程吃饭,请在学习qbasic,了解什么是编程以后,马上去学别的语言,别停在qbasic上!

  4 能解决简单的问题!

  如果你以后要做的是系统开发或者是有关的,请学汇编!

二 QBASIC的下载地址
 要学QBasic,先要得到这个软件,没有的话请在下面找一个下载链接

首先推荐 http://qb45.ys168.com
可以下载到qb45、qb71 

2、
http://www.programfan.com/down/1/qb45.zip
(这个下载后要 把qb快捷方式删除,(qb快捷方式的名字也是qb,不过图标上有一个小箭头)

QB7.1:很著名也很经典的QBasic版本的最高版本,全图形环境.对于初学编程或想编写简单程序的人来说很实用,而要想编写更强大的软件可以使用下面更强大的编程工具.
http://berg.heim.at/zermatt/440339/qb71.zip

GWBASIC:很早但很有名的BASIC编译器,我放在这儿是因为它具有很大的学习和收藏价值.
http://www.powerload.fsnet.co.uk/download/gwbasic.exe

http://tlcheng.twbbs.org/TLCheng/Basic/dosbasic.htm

qbasic经典教程网站推荐
http://www.zjou.edu.cn/te/qbasic/index.htm

http://www.hongen.com/proedu/hext/jkfdb/
http://219.129.188.76/Qbasic/

2003年9月全国计算机等级考试二级QBasic笔试试卷(附答案)
http://www.3our.com/lw/0408/class/qb/
http://www.3our.com/lw/0408/2004/2-16/2004216c1031.html


第二推荐(这个给真正想了解,运用它的人)
http://qbdos.51.net/cgi-bin/bbs/
上面的这个是专门讨论dos技术和用basic 做开发的论坛,主要是qb的实际运用!
在编程资料区有详细的编程技术资料和原程序
合作开发区可以讨论合作开发软件
这个网站由网友areyong购买的域名提供的空间!

http://basicdos.jsphome.com/
4..
http://vip.6to23.com/basicfan/
5.....
http://202.109.195.141/leinet/index.html

6.....>> QB梦工厂
http://member.netease.com/~ldx/qb/main.htm
QB讲义的地址:
http://hgxy.impu.edu.cn/computer/Qb/lecture/lecture.htm

http://202.101.234.114/cwx/qbasic.htm

还有e文QBASIC网站,也给大家

http://www.qbasic.com/frames.shtml
http://www.qbcafe.net/english/

所有做的这些的目的都是,为了大家能更好的学习,使肣B对以后的学习打下个基础,就象我一样在工作中能有帮助!


QQ上也有专门讨论QB的群,欢迎大家加入,这样有什么问题的时候你可以得到在线帮助!
方法:
在QQ里左键单魑业娜海?
右键单击查找添加群,
左键单击通过群的号码,
然后输入群的号码
下面是给大家的一些qb群号!
1  QB俱乐部  4055920
2  QB       495194
3  火客qb高手群 132804  加入请发消息“编程”
4  如果人满请进qb内部交流群1306576
5  潮流编程群:4446164
6  编程爱好者中合2分会 2759373

7 我建的qb群:有基础的进2737222   开始接触的进2737245
或者在qq上搜索群--》关键字--》qbasic,可以找到很多群

我的QQ:406930019,EMAIL:QB45@SOHU.COM 如果你是为了做作业,别来加我,如果是为了学习,热烈欢迎!

http://www.doshome.com

http://www.cn-dos.net/dosbbs/index.asp

<DOS之家>,这是一个学习DOS和WINDOWS的网站,因为编程有时要涉及这些东西,大家有兴趣可以看看.
   在本论坛的《BASIC语言基础教程》里面可以学习一些基础知识!
   对于要买教材的,仅仅是为了应付考试,或者仅仅是应付老师,请买《qbasic二级教程》谭浩强的那本basic这样的书!
   如果你真正想学编程,想用qbasic打基础,请千万别买这样为应试教育出的书!   在此我向大家推荐 -----  跟我学系列中的《跟我学QBASIC》12.00元,它非常适合什么都没有接触而又想学编程的初学者,本书以结构化编程的思想为主,又通俗易懂!看了可以为你学习别的语言打个良好的基础!
      如果深入了解qb,灵活运用,我向大家推荐《QUICK BASIC程序设计》刘秉文编著 电子工业社出版18.00元.或者你看书名只要是带有QUICK BASIC的就行。
    当然还有更多的这样的书请大家自己多挑选,里面应该有这样的内容:一、QB的编程环境介绍。二、如何编译BAS。三、调用中断。
   如果有这些内容,说明教程很详细,你就放心的买吧!

如果以后的职业想做程序员或者在编程上想有发展,建议你在学习QBASIC一个月后学别的语言!

  qbasic的精华部分我认为在文件这个部分,非常容易学,也很简单实用,而且与微软的操作系统的核心文件管理部分非常的贯通!

回复列表 (共5个回复)

沙发

Quick Basic 常用函数:
      ABSy=ABS(n)得到n的绝对值
      ASCy=ASC(S$)得到字符串头一个字符的ASCII码
      ATNy=ATN(n)得到反正切值(单位是弧度)
      CDBLy=CDBL(n)把n转化为双精度浮点格式
      CHR$S$=CHR$(n)得到ASCII码n对应的字符
      CINTy=CINT(n)对n进行舍入取整(奇凑偶
      CLNGy=CLNG(n)把一个数n转化为长整数
      COMMAND$S$=COMMAND$在DOS下启动程序时,获得命令行中的其余信息
      COSy=COS(n)得到自变量n的余弦值
      CSNGy=CSNG(n)把一个数值转化为单精度数
      CSRLINy=CSRLIN返回光标行数位置
      CVIV%=CVI(2字节的串)字符串转换为整型数
      CVSV!=CVS(4字节的串)字符串转换为单精度数
      CVLV&=CVL(4字节的串)字符串转换为长整数
      CVDV#=CVD(8字节的串)字符串转换为双精度数
      CVSMBFV!=CVSMBF(4字节MS字符串)转换成IEEE格式单精度数
      CVDMBFV#=CVDMBF(8字节MS字符串)转换成IEEE格式双精度数
      DATE$S$=DATE$把系统日期赋给变量S$
      ENVIRON$S$=ENVIRON$(X$)
      S$=ENVIRON$(n)得到环境表中的参数
      EOFy=EOF(filenum)遇到文件结束则返回真,否则为假
      ERDEVy=ERDEV返回设备驱动器错误码
      ERDEV$S$=DEDEV$返回设备驱动器错误信息
      ERRy=ERR返回错误的错误号
      ERLy=ERL返回出错处最近的行号
      EXPy=EXP(X)指数函数y=ex
      FILEATTRy=FILEATTR(filenum,attr)返回打开文件的信息
      FIXy=FIX(n)截掉小数部分进行取整
      FREy=FRE({S$|-1|-2})得到可以被程序使用的剩余内存空间的大小
      FREEFILEy=FREEFILE返回下一个自由BASIC文件号
      HEX$S$=HEX$(n)把十进制数转换成相应十六进制格式字符串
      INKEY$S$=INKEY$从键盘上读数据但不显示
      INPy=INP(portno)从一个I/O端口读入一个字节
      INPUT$S$=INPUT$(m[,[#]n])从键盘或文件中读入指定数量的字符
      INSTRy=INSTR([n,]targetstring, patternsttring)字符串查找
      INTy=INT(n)得到一个不大于n的最大整数
      IOCTL$S$=IOCTL$[#]n从一个设备驱动器程序接收数据
      LBOUNDy=LBOUND(array[,n])返回数组array第n维的最小下标
      LCASE$S$=LCASE$(X$)把字符串X$的大写字母全变为小写
      LEFT$S$=LEFT$(X$,n)得到字符串X$最左边的n个字符
      LENy=LEN(S$)得到字符串S$的长度
      LOCy=LOC(n)得到文件中现在所处的位置(当前位置)
      LOFy=LOF(n)得到磁盘文件的长度或通讯缓冲区剩余空间大小
      LOGy=LOG(x)自然对数y=InX
      LPOSy=LPOS(printer)得到打印缓冲区中当前的位置
      LTRIM$S$=LTRIM$(x$)返回去掉前导空格的字符串复制品
      MID$S$=MID$(X$,n[,m])从X$的第n个字符开始取m个字符;省略m,则取完
      MKD$S$=MKD$(V#)把双精度数值转化为随机文件中输出字符串
      MKI$S$=MKI$(V%)把整数转换为字符串
      MKL$S$=MKL$(V&)把长整数转换为字符串
      MKS$S$=MKS$(V!)把单精度数转换为字符串
      MKSMBF$S$=MKSMBF$(V!)把单精度数转换为MS格式字符串
      MKDMBF$S$=MKDMBF$(V#)把双精度数转换为MS格式字符串
      OCT$S$=OCT$(n)得到数值n的八进制形式字符串,负数为其补码形式
      PEEKy=PEEK(offset)得到指定存储单元的值
      PENy=PEN(option)读取光笔状态
      PLAYy=PLAY(x)得到后台音乐缓冲区音符个数
      PMAPy=PMAP(i,option)把图形屏幕的物理坐标变为实用坐标或反之
      POINTcolor=POINT(x,y)
      y=POINT(n)得到一个象素的颜色
      得到前一个点的坐标
      POSy=POS(x)得到光标的列数位置
      RIGHT$S$=RIGHT$(x$,n)从字符串X$的右边取n个字符
      RNDy=RND(n)得到0到1之间的随机数,n=0则得到前一个RND值
      RTRIM$S$=RTRIM$(X$)返回一个去掉X$尾随空格的字符串
      SADDy=SADD(S$)返回S$字符串的地址
      SCREENy=SCREEN(row,column[,option])得到屏幕上指定字符的ASCII或属
      SEEKy=SEEK(filenum)返回当前文件位置
      SETMEMy=SETMEM(n)改变远堆集使用的内存大小
      SGNy=SGN(n)输出n的符号
      SINy=SIN(x)正弦值y=SinX
      SPACE$S$=SPACE$(n)输出长度为n的空格字符串
      SPCSPC(n)在PRINT语句中跳过n个空格
      SQRy=SQR(n)给出n的平方根
      STICKy=STICK(n)返回两个操纵杆的坐标
      STR$S$=STR$(n)返回一个表示n值的字符串
      STRIGy=STRIG(n)返回操纵杆触发状态
      STRING$S$=STRING$(n,x$)返回n个x$第一个字符组成的字符串
      TABTAB(column)将输出位置移到column列
      TANy=TAN(x)正切值y=tgX
      TIME$S$=TIME$获得当前时间
      TIMERy=TIMER输出自午夜开始后流逝的秒数
      UBOUNDy=UBOUND(array[,n])输出数组array第n维最大下标
      UCASE$S$=UCASE$(x$)把字符串x$中所有小写字母变成大写
      VALy=VAL(S$)输出字符串S$的相应数值
      VARPTRy=VARPTR(variable)返回变量的偏移地址
      VARSEGy=VARSEG(variable)返回变量的段地址
      VARPTR$S$=VARPTR$(variable)返回变量地址的字符串表示

板凳

Quick Basic 常用的语句
语句名               语句格式                             功能
BEEP                 BEEP 使喇叭发声
BLOAD                BLOAD filespc[,address] 把用BSAVE语句存贮的文件装入内存
BSAVE                BSAVE filespc,address,length 把某一内存区域中的内容存入磁盘
CALL                 CALL 过程名[(形式参数表)] 调用一个过程
CALLS                CALLS 过程名[形式参数表] 把控制传给非BASIC语言写的过程
CALL ABSOLUTE        CALL ABSOLUTE address [(参数表)] 传送控制给一个机器语言过程
CALL INT86OLD        CALL INT86OLD(int_no, in_array(), out_array())
                     CALL INT86XOLD(int_no,in_array(), out_array()) 实现DOS功能调用
CALL INTERRUPT       CALL INTERRUPT(int_no, inregs, outregs)
                     CALL INTERRUPTX(int_no, inregs, outregs) 结构化的DOS功能调用
CHAIN                CHAIN filespec 将控制由当前程序转到别的程序
CHDIR                CHDIR path 改变现行的目录(相当于DOS的CD)
CIRCLE               CIRCLE(x,y),r,[,c[,start,end,[,aspect]]] 画圆或圆的一部分
CLEAR                CLEAR 重新初始化全部变量,关闭文件和设置堆栈的大小
CLOSE                CLOSE [[#]n[,[#]n]...] 关闭文件。n是文件号;无选择时关闭所有文件
CLS                  CLS 清屏幕
COLOR                COLOR [背景色][,[调色板] 设置图形颜色(随图形方式不同而不同
COM                  COM(n){ON|OFF|STOP} 允许,不允许或禁止指定口上的通讯事件捕捉
COMMON               COMMON 变量表 说明要传递给被链接程序的变量
CONST                CONST 常值名=常值表达式 说明用于代替数值或字符串的符号常数
DATA                 DATA 常量[,常量]... 为READ语句准备数据
DATE$                DATE$=S$ 根据S$中的内容设置系统日期
DECLARE              DECLARE {FUNCTION|SUB}过程名[(参数表)] 说明引用过程和检查参数类型
DEF FN               DEF FN
                     DEF FN...END DEF 定义单行或多行函数
DEF SEG              DEF SEG[=n] 为需段地址语句定义数据段
DEF type             DEF type 字符范围 定义变量的缺省类型
DIM                  DIM 变量 [AS类型] 说明变量并分配存贮空间
DO...LOOP            DO...LOOP 根据条件决定是否进行循环
DRAW                 DRAW S$ 在显示器上画图
END                  END {DEF | FUNCTION | IF| SELECT | SUB | TYPE} 结束程序.过程或程序块
ENVIRON              ENVIRON 含"="的字符串 修改DOS环境字符串表中的参数
ERASE                ERASE array,[array]... 重新初始化静态数组,重新为动态数组分配空间
ERROR                ERROR n 模拟产生BASIC错误 n
EXIT                 EXIT { DEF | DO | FOR | FUNCTION | SUB } 跳出循环或程序块
FIELD                FIELD [#]filenum,宽度 AS 字符串变量... 在随机存贮文件缓冲器里为变量分配空间
FILES                FILES [filespec] 显示指定磁盘上文件(相当于DOS的DIR)
FOR...NEXT           FOR...NEXT 允许一批命令在循环中执行给定的次数
FUNCTION             FUNCTION...END FUNCTION 说明过程函数的名字,参数和代码
GET                  GET [#]filenum[,recnum[,variable]]
                     GET (x1,y1)-(x2,y2),array 把一磁盘文件读入随机存取缓冲器变量存储屏幕上的图像
GOSUB
RETURN               GOSUB...RETURN 将控制转移到子程序和从子程序返回
GOTO                 GOTO {行号|行标号} 无条件转移到指定语句
IF...THEN... ELSE...   根据逻辑表达式的值进行条件执行
INPUT                INPUT[;][提示字符串{;|,}]变量表 在程序运行期间从键盘输入数据
INPUT#               INPUT#filenum,变量表 从顺序存取装置或文件中读取数据
IOCTL                IOCTL[#]filenum,字符串 传送控制数据字符串到设备驱动器
KEY                  KEY n,字符串
                     KEY {ON|OFF|LIST} 把软键字符串值赋给功能键显示,清除或全显功能键
KEY(n)               KEY(n){ON|OFF|STOP} 开启.关闭或停止捕捉指定键
KILL                 KILL filespec 删去磁盘上的指定文件
LET                  [LET]变量=表达示 赋值
LINE                 LINE(x1,y1)-(x2,y2),color, BF, style 画线或方框
LINE INPUT           LINE INPUT[;][提示字符串 {;|,}]字符串变量 输入一整行字符
LINE INPUT#          LINE INPUT #filenum,S$ 从顺序磁盘文件读一整行字符串到S$中
LOCATE               LOCATE row,col,cursor,start,stop 将光标移到指定位置或改变光标属性
LOCK ...
UNLOCK                      用另外的过程控制对打开文件的全部或部分的存取
LPRINT                      向打印机发送数据
LPRINT USING                向打印机按格式发送数据
LSET                 LSET 字段变量=S$ 以左对齐方式把字符串数据放入随机文件缓冲区中
MID$                 MID$(S$,n[,m])=r$ 用r$把S$中的第n个符开始替换m个字符,原长度不变
MKDIR                MKDIR path 用字符串path建立一个子目录
NAME                 NAME 旧文件名 AS 新文件名 为文件改名
ON ERROR             ON ERROR GOTO {行号|行标号} 设置错误陷阱
ON even              ON even GOSUB {行号|行标号} 设置事件陷阱
ON...GOSUB           ON n GOSUB {行号|标号表} 转到第N个标号所示子程序
ON...GOTO            ON n GOTO {行号|标号表} 转到第n个标号所示语句
OPEN                 OPEN filespec [FOR mode]AS [#]n [len=recordsize] 打开磁盘文件
OPEN COM             OPEN "COMn:[baud][,parity][,data][,stop][,option]" AS [#]n [LEN=num] 打开一通讯文件
OPTION BASE          OPTION BASE n 设置数组下标缺省最小值
OUT                  OUT portno,n 把一个字节值n送到I/O端口
PAINT                PAINT (x,y)[,color][,boundary] 在图形屏幕上用颜色或图案填充封闭区域
PALETTE              PALETTE attribute,color 改变调色板中的颜色
PALETTE USING        PALETTE USING array 改变调色板中所有颜色
PCOPY                PCOPY源显示而,目的显示页 以全屏幕方式将一页拷贝到另一页上
PEN {ON | OFF | STOP}       允许.禁止和暂停光笔事件捕捉
PLAY                 PLAY 字符串 演奏字符串指定的音乐
PLAY {ON | OFF | STOP}      允许.禁止和暂停对演奏事件的捕捉
POKE                 POKE address,byte 将一字节写入指定内存单元
PRESET               PRESET (x,y)[,color] 在屏幕上画一点(缺省为背景色)
PRINT                       显示语句
PRINT #                     输出字符串到文件
PRINT # USING               格式输出到文件
PRING USING                 格式显示
PSET                 PSET (x,y)[,color] 在屏幕上画一点(缺省为前景色)
PUT                  PUT [#]filenum[,[recnum] [,varable]]
PUT (x,y) array,action       将变量或随机存贮缓冲器写入文件
                             将由GET得到的图像放置在屏幕上
RANDOMIZE            RANDOMIZE [n] 预置(重新播种)随机数发生器
READ                 READ 变量表 从DATA语句读数据并赋给变量
REDIM                REDIM 变量 AS 类型... 改变已为动态数组分配的空间
REM                  REM remark 在程序里插入说明或注释
RESET                RESET 关闭全部磁盘文件
RESTORE              RESTORE {行号|行标号} 允许从指定的行重读DATA语句
RESUME               RESUME {行号|行标号|NEXT} 错误捕捉程序调用后继续执行程序
RETURN               RETURN {行号|行标号} 控制从子程序里返回
RMDIR                RMDIR path 消去目录path(相当于DOS的RD)
RSET                 RSET S$=X$ 把X$右对齐放在随机存贮缓冲器的字符器S$中
RUN                  RUN [{行号|文件名}] 重新执行内存中程序或由文件名指定的程序
SCREEN               SCREEN [mode][,[colorswitch]][,[apage][,[vpage]] 设置显示屏幕
SEEK                 SEEK [#]filenum,position 在文件里为下一个读写操作设定位置
SELECT CASE         根据一个表达式决定执行n个语句块之一
SHARED               SHARED 变量 AS 类型... 说明共用变量
SHELL                SHELL 命令字符串 暂停BASIC程序,运行DOS的命令
SOUND                SOUND 频率,时间长度 从喇叭发声
STATIC               STATIC 变量表 说明为静态变量
STOP                 STOP 终止程序执行
STRIG                STRIG {ON|OFF} 开启或关闭操纵杆的触发检查
STRIG ON,OFF和STOP STRIG(n) {ON|OFF|STOP} 允许.关闭或暂停捕捉操纵杆动作
SUB SUB...END SUB           标明子程序的开始和结尾
SWAP                 SWAP 变量1,变量2 交换两个变量的值
SYSTEM               SYSTEM 关闭所有打开文件并把控制返回操作系统
TIME$                TIME$=S$ 按字符串S$来设置时间
TIMER {ON| OFF|STOP}       允许.禁止或轶计时事件捕捉
TRON/TROFF           TRON/TROFF 跟踪程序语句的执行
TYPE TYPE...END TYPE        定义数据类型
UNLOCK                     释放对文件一部分的锁定
VIEW VIEW [SCREEN](x1,y1)-(x2,y2),color,border 为图形输出定义屏幕边界
VIEW PRINT           VIEW PRING top TO bottom 设置屏幕上文本窗口边界
WAIT                 WAIT portno,and_value,xor_valud 监视端口状态并暂停程序的执行
WHILE...WEND               在条件为真时, 执行循环体内语句
WIDTH                WIDTH [设备][列数] 设置输出宽度
WINDOW               WINDOW [SCREEN](x1,y1)-(X2,y2) 定义当前窗口的广义坐标
WRITE                WRITE 表达式表 在屏幕上输出数据
WRITE #              WRITE #filenum,expressiolist 将数据写入顺序文件
$DYNAMIC             REM $DYNAMIC 默认用动态数组, 特点:可以利用redim重新定义数组大小
$STATIC              REM $STATIC 默认用静态数组

3 楼

有关于文件操作方面的部分语句!
(1).OPEN 语句
格式:OPEN <文件名> FOR <读写方式> AS#<文件号>
<读写方式>:
这里我们只用二进制方式BINARY
<文件号>:即文件缓冲区号,每一个文件都要指定一个不同的文件号(1~225);
说明:
以BINARY方式打开已存在的文件,指针指向首记录;
(2)CLOSE语句
关闭已用的文件
CLOSE [#<文件号1>][,#<文件号2>]……
关闭由文件号指定的文件缓冲区,将内容存盘,如不指定文件号,则关闭所有已打开的文件;
(3)、GET#语句
格式:GET #<文件号> [,<地址>][,<记录变量>]
功能: 用于从文件中读一个指定地址的记录,赋给一个记录变量。
(4)、PUT#语句
格式:PUT #<文件号> [,<地址>][,<记录变量>]
功能: 将一个记录变量的内容写到指定地址的记录中去
(5)SEEK语句
格式:SEEK#<文件号>,<字节位置>
把指针移动指定地方
(6)LOF语句
格式:LOF<文件号>
获得文件的大小!
(7)EOF语句
格式:EOF<文件号>
判断文件是否到最后!

三、随机文件(RAMDOM ACCESS FILE)
随机存取文件——所有记录等长,各记录相应的数据项的长度也相同;
按记录号进行存取,记录的顺序不一致,可直接读写任一条记录。

1、随机文件的建立

(1)OPEN <文件名> AS#<文件号> [LEN=<长度>]

存取方式不用指定,自动加上“FOR RANDOM”,表示随机文件;

(2)定义缓冲区中各“域”的长度(FIELD 字段)


FIELD <文件名>,<域宽>AS<域名>[,<域宽>AS <或名>]
定义记录的结构
如:FIELD #1, 10 AS A$, 15AS B$, 36AS C$

(3)随机文件的记录中各域只能存放字符串数据,在对数值型数据进行处理时,要经过转换;
(4)数值转换为字符的函数

MKI$(<整型表达式>) 2字节

MKS$(<单精度表达式>) 4字节

MKD$(<双精度表达式>) 8字节

称为“内码字符串”
(5)缓冲区中各域的字符串变量赋值

LSET <域变量>=<字符串>(左对齐)

RSET <域变量>=<字符串>(右对齐)
(6)将文件缓冲区中的数据存盘

PUT #<文件号>[,<记录号>]
(7)用CLOSE关闭文件

例10-5:(P340例12.11)
OPEN "good.dat" FOR RANDOM AS #1 LEN=23
FIELD #1, 2 AS n$,15 AS m$,4 AS P$,2 AS s$
DO
READ num%,nam$,price,stock%
IF num%=9999 THEN EXIT DO
LSET n$=MKI$(num%)
LSET m$=nam$
LSET p$=MKS$(price)
LSET s$=MKI$(stock%)
PUT #1
LOOP
DATA .............
DATA .............
DATA .............
DATA .............
DATA .............
DATA 9999,,,
CLOSE
END
2、随机文件的读入
(1)、打开随机文件
     OPEN <文件名> AS#<文件号> [LEN=<长度>]
(2)、定义文件缓冲区中各域的长度;
FIELD <文件名>,<域宽>AS<域名>[,<域宽>AS <或名>]
(3)、从指定的文件中读取一个记录
GET #<文件号> [,<记录号>]
(4)、将内码字符串还原为数值型数据;
CVI(<2个字节的域变量>)——整数
CVS(<4个字节的域变量>)——单精度
CVD(<8个字节的域变量>)——双精度
这三个函数是MKI$,MKS$ MKD$的逆运算
(5)、关闭文件
     CLOSE

例10-6:(P341例12.12)

OPEN "good.dat" FOR RANDOM AS #1 LEN=23
FIELD #1, 2 AS n$,15 AS m$,4 AS P$,2 AS s$
PRINT "num","name","price","stock"
FOR i%=1 TO LOF(1)/23
GET #1,i%
num%=CVI(n$)
nam$=m$
price=CVS(p$)
stock%=CVI(s$)
PRINT num%,nam$,price,stock%
NEXT i%
CLOSE
END
3、随机文件的修改

随机文件的优点:可直接读写任何一个记录,且既能读又能写。

例10-7:(P342例12.13)
OPEN "good.dat" FOR RANDOM AS #1 LEN=23
FIELD #1, 2 AS n$,15 AS m$,4 AS P$,2 AS s$
INPUT "which record:";r
DO UNTIL r=0
GET #1,r
num%=CVI(n$)
nam$=m$
price=CVS(p$)
stock%=CVI(s$)
PRINT num%,nam$,price,stock%
INPUT "price=";price
LSET p$=MKS$(price)
PUT #1,r
INPUT "which record:";r
LOOP
CLOSE
END
3、记录型变量

一个记录包括若干个“域”,在同一文件中各个记录所包含的域都是相同的,这样可以定义一种新的变量类型——记录。
  1001 Shirt 67 120
1002 Skirt 87 108
1003 Coat 231.5 67
(1)、定义记录类型

格式:TYPE  <记录类型名>

<域名1> AS <类型>
<域名2> AS <类型>
......
<域名n> AS <类型>
END TYPE
例如: TYPE goods
      num    AS  INTEGER
      nam    AS  STRING*15
      price  AS  SINGLE
      stock  AS  INTEGER
      TYPE END

(2)、定义记录变量
格式: DIM <记录变量名> AS <记录类型名>

例如:  DIM  a  AS goods

(3)、记录变量中的域表示法

格式: <记录变量名>.<域名>

例如:  a.num     表示a变量中的num域。

4、用于记录变量的读写语句

(1)、GET#语句
格式:GET #<文件号> [,<记录号>][,<记录变量>]
功能: 用于从文件中读一个指定的记录,赋给一个记录变量。
(2)、PUT#语句
格式:PUT #<文件号> [,<记录号>][,<记录变量>]
功能: 将一个记录变量的内容写到指定的记录中去。

例10-8:用记录变量的方法建立一个随机文件。
(P346例12.14)
TYPE goods
  num    AS  INTEGER
  nam    AS  STRING*15
  price  AS  SINGLE
  stock  AS  INTEGER
TYPE END
DIM cloth  AS  goods
OPEN "good.dat" FOR RANDOM AS #1 LEN=LEN(cloth)
DO
READ cloth.num,cloth.nam,cloth.price,cloth.stock
IF cloth.num=9999 THEN EXIT DO
PUT #1,,cloth
LOOP
DATA .....
.....
DATA 9999,,,
CLOSE
END
例10-9:用记录变量的方法读入一个随机文件内容。
(P347例12.15)
TYPE goods
  num    AS  INTEGER
  nam    AS  STRING*15
  price  AS  SINGLE
  stock  AS  INTEGER
TYPE END
DIM cloth  AS  goods
OPEN "good.dat" FOR RANDOM AS #1 LEN=LEN(cloth)
PRINT "num","name","price","stock"
FOR i%=1 TO LOF(1)/LEN(cloth)
  GET #1,i%,cloth
PRINT cloth.num,cloth.nam,cloth.price,cloth.stock
NEXT i%
CLOSE
END
例10-10:用记录变量的方法修改一个随机文件内容。
(P348例12.16)
TYPE goods
  num    AS  INTEGER
  nam    AS  STRING*15
  price  AS  SINGLE
  stock  AS  INTEGER
TYPE END
DIM cloth  AS  goods
OPEN "good.dat" FOR RANDOM AS #1 LEN=LEN(cloth)
DO
  INPUT "which record";r
  IF r=0 THEN EXIT DO
  GET #1,r,cloth
PRINT cloth.num,cloth.nam,cloth.price,cloth.stock
INPUT "price=";cloth.price
PUT #1,r,cloth
LOOP
CLOSE
END
四、文件与目录处理
1、显示磁盘目录
   FILES ["文件名"]
例:FILES "*.BAS" —显示当前目录下,扩展名为BAS的所有文件;

2、执行DOS命令
   SHELL [命令字符串]

例:SHELL "dir"  — 暂时退出QBASIC,执行DOS的命令dir(显示目录),然后返回QBASIC。
注:如果没有[命令字符串],则转到DOS命令状态,可用EXIT返回QBASIC。

3、文件改名
   NAME <旧名> AS <新名>
可改名或修改文件路径。

4、文件删除
    KILL <文件名>

5、目录操作
MKDIR <路径名>——建立子目录
CHDIR <路径名>——改变当前目录
RMDIR <路径名>——删除(空)目录

4 楼

循环结构:                           
循环体——反复执行的一组语句  

  1)、FOR循环                           
(2)、WHILE循环                           
(3)、DO循环 
在这两个循环中可以用EXIT退出
EXIT FOR
EXIT DO                            

FOR循环                           
例子
FOR I=1 TO 5
    PRINT I
NEXT I
运行结果
1
2
3
4
5
可以带参数STEP
FOR I=5 TO 1 STEP -1
    PRINT I
NEXT I
运行结果
5
4
3
2
1

FOR I=1 TO 5 STEP 2
    PRINT I
NEXT I
运行结果
1
3
5

(2)、WHILE循环  

WHILE  <条件>   <循环体>  WEND                     注: <条件>是终止循环的逻辑表达式,<条件>应随循环的执行而变化,最终退出循环。 
例子:
WHILE I>5
     I=I+1
     PRINT I
WEND                            
运行结果
1
2
3
4
5
                         
3)、DO循环                             
这个有两种方式,一种是当循环 (WHILE),一种是直到循环(UNTIL)
这两种中都可以先判断在循环,或者是先循环在判断

带until子句的do循环语句 (直到型)
1、先判断,在循环
格式一:do until <条件>              
                <循环体>            
       loop   
2、先循环,在判断                       
格式二:do                        
           <循环体>.            
    loop until <条件>                           

作用:直到条件为真时终止循环 

当型循环
1、先判断,在循环
格式一:do WHILE <条件>              
                <循环体>            
       loop   
2、先循环,在判断                       
格式二:do                        
           <循环体>.            
    loop WHILE <条件>                           

作用:当条件为真时终止循环 

5 楼

 选择结构程序设计
   一、概述
   分支结构:                                                 
二、关系式和逻辑表达式
  1、关系运算符                
     < 、 >、 =、 <=、 >=、 < > 
  2、关系式                
    关系式是由一个关系运算符把两个表达式连起来的式子。结果(值)为逻辑值:               
        真 True    假 False                     
   QBASIC用数值表示: 真: -1(非零值)                
             假: 0                     
if x< >0 then print x和if x then print x 相同                                  
   3、逻辑运算符及逻辑表达式
  
   (1)、not (非、逆、取反)                            
      7>4 值为真                               
       not (7>4) 值为假               
   (2)、and (与、交)                 

    所连接的两个关系式为真时条件成立。
       x>0 and x<10
   (3)、or (或 、并)                     

   所连接的两个关系式中有一个(以上)为真,则条件成立。                                             
     X> 10 or X<0                     

    集合表示                     

      A and B    A or B     not A                                
  4、逻辑表达式的运算规则(P123表6.4)                                                    
  5、运算次序(优先级别)                      

    算术运算—关系运算—逻辑运算(例P123)                      

    关于逻辑表达式结果:                      

    x=6>4                      

    print x         x=-1                      

    a=5=3 =>a=(5=3)     a=0                      

三、行IF语句              
                   
  1、一般格式                   
    if <条件> then <语句1> [else<语句2>]                      

    课本P124例6.1、 6.2、 6.3              
                      
  2、嵌套关系                                         
  (1)if…then if…then…else…else    
         内层                   
         外层                                  
 (2)if…then if…then…else if …then…else               

四、块if语句                     

   1、一般格式                   
     if <条件> then                    
       <语句组1>                    
     [else                 
       <语句组2>]                 
     end if                   

   2、应用举例

      课本P129例6.4             
   例6.5: 输入3个整数、按从大到小的顺序输出。              
                   
  算法:                   
  (1)先将a与b比较,把小者放b中,大者放a。               
  (2)再将a与c比较,把小者放c中,大者放a中,此时     a已是三者最大的。                    
  (3)最后将b与c比较,大者放b中,小者放c中,此时     a、b、c已按从大到小的顺序排例好。             
  程序:                    
       inpnt "a,b,c,=";a,b,c  
       if b>a then   
         t=a                    
         a=b    交换a、b(swap a,b) 
         b=t                    
       end if                
       if c>a then   
         t=a                    
         a=c   交换a、c(swap a,c) 
         c=t                    
       end if     
       if c>b then   
         t=b                    
         b=c   交换b、c (swap b,c)            c=t                    
       end if                    
       print a, b,c                        end                    
                
  3、块if的嵌套               
     if then                    
       …             
       if then
         …             
       else                    
         …             
       end if                    
       …             
     else                    
       …             
     end if                                             
     课本P131例6.6                

   4、块IF中的ELSEIF格式

       if  then
         …            
       else                    
         if then
          …            
         else
          …            
         end if                    
       end if                      

写成:  if  then                    
      …            
     elseif then
      …            
     else                    
      …            
     end if                      

P125 改写为:                      

     Input "m=";m
     If m<100 then
       d=0                    
     elseif m<200 then
       d=0.01
     elseif m<300 then
       d=0.02
     elseif m<500 then
       d=0.03
     elseif m<1000 then
       d=0.04
     elseif m<2000 then
       d=0.05
     else                    
       d=0.08
     end if                    
     a=m*(1-d)                    
     print "amount=";a
     end                      

五、多分支选择语句                      

     用嵌套的IF语句可实现多分支选择               
  1、基本格式             

     select case <变量>
       case <值1>                    
         <语句组1>
       case <值2>                    
         <语句组2>
       …          
       case <值n>                    
         <语句组n>
       case else                    
         <语句组n+1>
     end select                      

  每一个CASE句中指定一个值条件,当CASE变量的值符合条件时,执行该子句下面的语名组,在执行完该语句组后,跳过其它CASE子句,从END SELECT转出。           

例6.8(P136)    c=int(s/250)           

  2、在CASE子句中使用TO            

     CASE <值1> TO <值2>         
     例P139          

  3、在CASE子句中使用IS          

     CASE IS <关系运算符> <表达式>          

     例6.9 (P139)          

  4、在CASE子句中使用多个条件          

   允许在一个CASE子句中指定多个条件,各条件   之间用逗号分开。        
     条件=单值、值范围、单条件       
      例P140         

  5、SELECT CASE语句的一般格式         

     select case <测试表达式>
       case <条件11>,<条件12>,…
         <语句组1>
       case <条件21>,<条件22>,…
         <语句组2>
       …           
       case <条件n1>,<条件n2>,…
         <语句组n>
       case else                    
         <语句组n+1>
     end select          

六、多分支转移语句       
          

  格式:ON <算术表达式> GOTO <标号1>,<标号2>,…          
七、多分支选择结构小结         

  1、IF-THEN-ELSE(用IF的嵌套)       
    分支(条件)较少时使用。        
  2、SELECT CASE       
    分支(条件)较多时使用。       
  3、ON GOTO       
    非结构化程序设计,不宜使用。 

我来回复

您尚未登录,请登录后再回复。点此登录或注册