标题：qbasic
QBASIC的特点
Basic语言是计算机高级语言的一种，它简单、易学、好用，被广大计算机用户所青睐。Basic语言的表达式与数学中的表达式相似，语句与自然语言相仿，极容易被初学者掌握，而Basic语言的最新发展Visual Basic 6.0、7.0，其友好的可视化编程界面、强大的面向对象编程能力及其网上发行和网上查询的功能，不仅能使用户方便而轻松地编写出具有任何功能的应用程序，而且更好地适应了网络时代的到来。
QBASIC的现状
微软在较新版本的Windows中不再集成QBASIC。不过Windows 98的用户可以在光盘的\TOOLS\OLDMSDOS目录中找到它，在Windows 95的光盘中，它存放在\OTHER\OLDMSDOS目录中。微软网站对它的技术支持只对MS-DOS的授权用户有效。
QBASIC拥有一个值得称道的集成开发环境和一个功能强大的集成调试器，这一切在那个时代让人耳目一新。直到今天，QBASIC依然是许多面向初学者的编程书籍的主题。
语法
和Quick BASIC类似而又不同于微软其他BASIC的早期实现版本的是，QBASIC是一种结构化的编程语言。和GW-BASIC相比，QBASIC的主要改进是： 
扩充了变量和常量的类型
变量名长度：40个字符
增加了长整型、定长字符型变量
可定义数值常量、字符串常量
提供了新的选择结构
条件语句 
IF <条件> THEN <语句组1> ELSE <语句组2> 
多分支语句SELECT 
改进了循环结构 
增加以下两个循环语句: 
【WHILE循环】 
WHILE <条件> 
<循环体> 
WEND 
【DO循环】
DO 
WHILE <条件> <循环体>
LOOP 
子程序和函数作为单独的模块 
不需要行号 
代码示例（赋值,求和运算,并显示结果）
LET A=10 
LET B=20 
LET C=A+B 
PRINT C 
在编写程序时为了节省时间，可以不用写LET；并且，PRINT在编写程序时直接用“？”代替。有一点非常重要，在参加竞赛时，程序第一行必须是CLS！
快捷键
QBASIC 7.1快捷键：
F5：运行程序及继续运行被中断的程序；
Ctrl+Break：中断正在运行的程序；
Shift+F5：从第一条语句开始重新运行程序；
F4：当程序中断运行时，查看运行结果屏幕，再按一次F4则切换回代码屏幕；
F1：获得帮助。 
F2：切换主程序或SUB、FUNCTION。
F9：增加断点。
Alt+Enter：全屏。
Shift+F5：在程序终止时重新从头执行。
Ctrl+Insert：选定文字后复制到剪切板（Ctrl+C无效）
Shift+Insert：将剪贴板中的文字粘贴。（Ctrl+V无效）
范例
范例1：
菜场上一公斤香菇是7.5元，编一个程序，从键盘上输入重量，计算机自动算出其总价
INPUT X 
SUM=7.5*X 
PRINT SUM 
END
范例2：
卖西瓜，10千克以下每千克1.4元，10千克以上每千克0.7元，输入要买多少千克（必须为自然数），输出需要多少钱。
INPUT X
IF X<>FIX(X) THEN ? "NO":GOTO 1
IF X>10 THEN SUM=10*1.4+(X-10)*0.7 ELSE SUM=X*1.4
PRINT SUM
END
范例3：
输入10个字母，比较大小，输出最大的一个
DIM A$(10)
FOR I=1 TO 10
INPUT A$(I)
NEXT I
B$=A$(1)
FOR I=2 TO 10
IF B$<A$(I) THEN B$=A$(I)
NEXT I
PRINT B$
END
范例4：一个游戏：
CLS '清屏
LOCATE 5, 38 '定位到5,38
PRINT "Game" '显示 
LOCATE 16, 34 '定位到16,34
PRINT "Press Enter" '显示
DO
LOOP WHILE INKEY$ = "" '暂停
DIM Name1$, Name2$, HP1, HP2, Temp$
CLS '清屏
LOCATE 8 '定位至第8行
PRINT " Input 1st player's name"; '输入玩家1的名字
INPUT Name1$
PRINT " Input 2nd player's name"; '输入玩家2的名字
INPUT Name2$
RANDOMIZE TIMER
HP1 = INT(RND * 50) + 50 '随机决定玩家1的HP
HP2 = INT(RND * 50) + 50 '随机决定玩家2的HP
PRINT STRING$(12, " ") + Name1$ + "'s HP is " + STR$(HP1) '显示玩家1的HP
PRINT STRING$(12, " ") + Name2$ + "'s HP is " + STR$(HP2) '显示玩家2的HP
PRINT " Press any key to contiune"
DO
LOOP WHILE INKEY$ = "" '暂停
DIM Row, Text$, Attack, I
Text$ = "n"
Row = 0
CLS
DO '循环
PRINT
PRINT Name1$ + "'s HP:" + STRING$(16 - LEN(Name1$), " ");
PRINT STRING$(INT(HP1 / 2), 2)
PRINT
PRINT Name2$ + "'s HP:" + STRING$(16 - LEN(Name2$), " ");
PRINT STRING$(INT(HP2 / 2), 2) '以上这几句是用图形来表示HP
FOR I = 1 TO 4
PRINT
NEXT '显示空行
Row = Row + 1 '回合数+1
PRINT STRING$(11, " ") + STR$(Row) + "."
PRINT STRING$(12, " ") + Name1$ + " now has HP " + STR$(HP1)
PRINT STRING$(12, " ") + Name2$ + " now has HP " + STR$(HP2) '以上几句显示回合数和HP数
DO
LOOP WHILE INKEY$ = "" '暂停
Attack = INT(RND * 20) '随机决定攻击点数
Text$ = STRING$(12, " ") + Name1$
Text$ = Text$ + " attack " + Name2$ + " " + STR$(Attack) '先想好要显示的文字
HP2 = HP2 - Attack '用玩家2的HP减去攻击点数
PRINT Text$ '显示文字
DO
LOOP WHILE INKEY$ = "" '暂停
Attack = INT(RND * 20) '随机决定攻击点数
Text$ = STRING$(12, " ") + Name2$
Text$ = Text$ + " attack " + Name1$ + " " + STR$(Attack) '先想好要显示的文字
HP1 = HP1 - Attack '用玩家1的HP减去攻击点数
PRINT Text$ '显示文字
IF HP1 <= 0 OR HP2 <= 0 THEN EXIT DO 如果玩家1或2的HP小于等于0就退出循环
DO
LOOP WHILE INKEY$ = "" '暂停
CLS
LOOP
IF HP1 <= 0 THEN PRINT STRING$(12, " ") + Name2$ + " win"
IF HP2 <= 0 THEN PRINT STRING$(12, " ") + Name1$ + " win"
IF HP1 <= 0 AND HP2 <= 0 THEN PRINT STRING$(12, " ") + "Double win!"
这里有一个超长的画图程序:
DRAWTOOL.BAS
CLS
DO
SCREEN 1
SCREEN 0
PRINT TAB(16); "Draw tool"
PRINT STRING$(40, "*")
PRINT "Help:"
PRINT "Press highlighted letter."
FOR I = 1 TO 8
READ S$, S
GOTO PrintHLWord
PrintHLWordBack:
NEXT I
RESTORE
DATA "HorizontalBAR", 1, "UprightBAR", 1, "CrossBARs", 1, "BiasBAR1", 8
DATA "BiasBAR2", 8, "DiagonalBARs", 1, "DiffuseBARs", 2, "Exit", 1
ElseKey:
K$ = INPUT$(1)
SELECT CASE UCASE$(K$)
CASE "H"
GOTO HorizontalBAR
HorizontalBARBack:
CASE "U"
GOTO UprightBAR
UprightBARBack:
CASE "C"
GOTO CrossBARs
CrossBARsBack:
CASE "1"
GOTO BiasBAR1
BiasBAR1Back:
CASE "2"
GOTO BiasBAR2
BiasBAR2Back:
CASE "D"
GOTO DiagonalBARs
DiagonalBARsBack:
CASE "I"
GOTO DiffuseBARs
DiffuseBARsBack:
CASE "E"
END
CASE ELSE
GOTO ElseKey
END SELECT
LOOP
END
PrintHLWord:
IF S = 1 THEN
COLOR 15
PRINT LEFT$(S$, 1);
COLOR 7
PRINT MID$(S$, 2)
ELSE
COLOR 7
PRINT LEFT$(S$, S - 1);
COLOR 15
PRINT MID$(S$, S, 1);
COLOR 7
PRINT MID$(S$, S + 1)
END IF
GOTO PrintHLWordBack
HorizontalBAR:
SCREEN 1
FOR I = 1 TO 200
PSET (I, 100)
DO: LOOP WHILE INKEY$ = ""
NEXT I
SCREEN 0
GOTO HorizontalBARBack
UprightBAR:
SCREEN 1
FOR I = 1 TO 200
PSET (100, I)
DO: LOOP WHILE INKEY$ = ""
NEXT I
SCREEN 0
GOTO UprightBARBack
CrossBARs:
SCREEN 1
FOR I = 1 TO 200
PSET (I, 100)
PSET (100, I)
DO: LOOP WHILE INKEY$ = ""
NEXT I
SCREEN 0
GOTO CrossBARsBack
BiasBAR1:
SCREEN 1
FOR I = 1 TO 200
PSET (I, I)
DO: LOOP WHILE INKEY$ = ""
NEXT I
SCREEN 0
GOTO BiasBAR1Back
BiasBAR2:
SCREEN 1
FOR I = 1 TO 200
PSET (I, 200 - I)
DO: LOOP WHILE INKEY$ = ""
NEXT I
SCREEN 0
GOTO BiasBAR2Back
DiagonalBARs:
SCREEN 1
FOR I = 1 TO 200
PSET (I, I)
PSET (I, 200 - I)
DO: LOOP WHILE INKEY$ = ""
NEXT I
SCREEN 0
GOTO DiagonalBARsBack
DiffuseBARs:
SCREEN 1
FOR I = 1 TO 200
PSET (I, 100)
PSET (100, I)
PSET (I, I)
PSET (I, 200 - I)
DO: LOOP WHILE INKEY$ = ""
NEXT I
SCREEN 0
GOTO DiffuseBARsBack
路程图：
CLS
输入
计算
输出
END