黑客
QBASIC程序设计基础
模块二 QBASIC程序设计
人们是通过自然语言进行相互交流的。
计算机要按照人的想法进行工作,就必须能理解和执行人们给它的指令,也就是说,人与计算机要有一种共同的语言,俗称“计算机语言”。QBASIC就是一种计算机语言。我们用QBASIC编写计算机程序来使计算机完成预定任务。它的神奇力量来自于人们设计好的一系列语句和指令。计算机语言是程序设计的工具,解决问题的具体方法和步骤是程序设计的关键。
从涉及解决问题的方案、编写程序到上机调试运行程序的过程,被称为程序设计。
解决问题的具体方法和步骤(算法)是程序设计的关键
学习内容
QBASIC程序的实现
QBASIC语言基础知识
顺序结构的QBASIC程序
选择结构的QBASIC程序
循环结构的QBASIC程序
第一节 QBASIC程序的实现
学习目标:
熟悉QBASIC的工作窗口
学会程序的输入、运行和保存
启动QBASIC QBASIC系统窗口
菜单栏:单击每个菜单项都可以看到一个下拉式菜单的菜单名,它们是QBASIC的操作命令。
文件名:显示正在编写的程序文件名。如果新的程序文件还没有存盘,则显示“Untitled”(无名)。
提示栏:显示一些按键的提示信息,如按F5是运行程序。
QBASIC程序编辑窗口
自主探索
1、输入QBASIC程序
REM program A1.BAS ‘ 说明语句
CLS ‘清除屏幕
LET a=10 ‘将10赋值给变量a
LET b=20 ‘将20赋值给变量b
LET c=a+b ‘将a+b的值赋值给变量c
PRINT a;”+”;b;”=”;c ‘显示运行结果
END ‘结束
2、运行QBASIC程序
可以单击菜单栏中的“RUN”菜单项,单击”START”命令。
也可以直接按“F5”键,即可运行程序。
3、保存程序文件
注意文件的保存位置
注意文件名的合法性
文件名的合法性:程序保存时,文件名是以字母开头的字母、数字和部分标点符号的组合,但不能有空格和☆=+[]∶()/\等字符。QBASIC程序以文件形式保存后会自动生成扩展名“.bas”,表示文件的性质是QBASIC程序。
4、退出QBASIC
使用“FILE”菜单项下的”Exit”命令,退出QBASIC系统
注意将未保存的已编号的程序存盘。
例程1:
REM circle ‘关于圆的周长的计算程序
CLS ‘清屏
LET R=5 ‘R为半径radiu
LET PI=3.14 ‘PI为π
LET C=2*R*PI ‘C为圆的周长
PRINT “C=“;C ‘打印出C的值
END ‘程序结束
第二节 QBASIC语言基础知识
学习目标:
理解QBASIC语言中常量、变量的概念
了解QBASIC的标准函数及表达式
QBASIC程序是由什么构成的?
一个QBASIC程序是由若干语句组成的。语句一般由语句定义符(关键字)和语句体两部分组成。
LET a=10
一、QBASIC程序
QBASIC程序:一个 QBASIC程序是由一定序列的若干条QBASIC语句组成的。语句的排列顺序是程序解决问题的步骤体现。程序以rem语句开始以end语句结束。
语句:是计算机执行的一个操作。大部分语句包括语句定义符和语句体两部分。
REM program A1.BAS
CLS
LET a=10
LET b=20
LET c=a+b
PRINT a;”+”;b;”=”;c
END
QBASIC程序处理的数据主要有那些?
REM circle ‘关于圆的周长的计算程序
CLS ‘清屏
LET R=5 ‘R为半径radiu
LET C=2*R*3.14 ‘C为圆的周长
PRINT “C=“;C ‘打印出C的值
END ‘程序结束
3×x+y(x-y)/3 3+4*8*sqr(16)/2
程序中参加运算的数据称为计算对象,也称“运算
量”。QBASIC中的运算量有常量、变量和标准函数等。一个表达式是由运算量和运算符号组成的。
1、常量
在程序中,有一些量的值始终保持不变,我们把它称作常量。QBASIC语言中常量可分为数值型常量和字符型常量。
数值型常量:就是数学中所用到的常数
125、-100、1.6、-3.02等
字符型常量:是用双引号引起来的一串字符。双引号是字符串的界定符,字符串常量指的是双引号中的字符,不包括双引号,如“+”、“1-2-3”和“china”等
2、变量
变量:程序在运行过程中其值能改变的量。
LET x=3
LET x=100
变量名:程序中所用道的每个变量都有唯一标识的名字,即变量名。QBASIC对变量名有规定:
变量名的第一位必须是字母,即变量名必须是以字母开头。
变量名由英文字母、数字和小数点组成,不允许有空格。
不能用QBASIC的语句定义符、函数名等关键字作为变量名
变量名不区分大小写
定义变量名时,应遵循“见名知义”和“简单明了”的原则。如:num代表“数量”、age代表“年龄”。
看下列变量名,是否合法?
Sum b28
2b wang li
变量的值:存放在变量中的数据
变量名与变量的值的关系
变量的类型
3、标准函数
计算机处理数据时,有一些计算方法是经常使用的,如求平方、绝对值、开方等。
常用计算的小程序被称为标准函数
标准函数列表
练一练
LET a=ABS(-19.05)
LET c=INT(-4.9)
LET e=INT(4.15)
LET b=SQR(16)
LET d$=“123”
LET f=123
QBASIC程序中的算术表达式
用QBASIC的运算符和括号将若干个运算量(常量、变量和标准函数等)连接起来的式子,成为QBASIC的表达式。
QBASIC有算术运算符、关系运算符和逻辑运算符
QBASIC有算术表达式、关系表达式和逻辑表达式
3+4*8*SQR(16)/2^3
算术表达式的运算次序遵循规则
从左到右的次序
乘除优于加减
整除优于加减,但次于乘除;MOD优于加减,但次于整除
乘方优于乘除
函数运算优先于乘方
括号优先,可以使用括号改变以上优先次序
练一练
例程2
已知数学参考书的单价(price)为9.8,需购进90本,书店给予9.5折扣(discount)优惠,编程计算实际应付款数(amount)。上机运行编写的程序,记录结果。
REM FKJE
cls
LET PRICE=9.8
LET NUM=90 ‘ input num
LET DISCOUNT=0.95
LET SUM=PRICE*NUM*DISCOUNT
PRINT “FKZE”;SUM
end
1、LET赋值语句
赋值语句是讲一个表达式的值赋值给一个变量,具有计算和赋值双重功能。
LET a=10 、LET c=a+b
赋值语句中的表达式可以是常量、变量和表达式。赋值语句中的“=”是赋值号,不等同于数学中的等号。“n=n+1”在数学上是矛盾等式。在QBASIC语言中,它是先计算“=”右边的表达式的值,然后将表达式的值赋值给“=”左边的变量。
2、INPUT输入语句
Input输入语句是用于给变量赋值,不过它与LET语句不同,INPUT语句是在程序运行之后才进行输入。 INPUT输入语句可以给一个或多个变量赋值,有多个变量时,变量之间用“,”号隔开,输入的数据也用“,”隔开。
REM program
Cls
Input “a,b”;a,b
Let c=a+b
Print a; “+”b; “=“;c
end
3、PRINT输出语句
PRINT输出语句时将数据输出到屏幕上,输出对象可以是常量、变量和表达式。也具有输出和计算双重功能。
注意:
输出项之间“,”与“;”的区别
自主探索
试着为下列语句添加语句定义符
a=5
b$=“5*6=“
s=a*6
Print b$;s
a=3
b=6
a=b+1
Print “a=“; a;”b=“;b
学会利用流程图
利用计算机完成工作时从问题开始的,设计解决问题的方法和步骤(即算法)是关键!设计出的算法可以用自然语言或流程图两种方法描述。下面就是一个小学生心算练习程序的算法流程图。
流程图
REM program
CLS
LET data1=INT(RND*100)
LET data2=INT(RND*100)
LET sum=data1+data2
PRINT data1;”+”;data2;”=“;
INPUT answer
PRINT “the answer is”;sum
END
第四节 选择结构的qbasic程序
理解IF语句的用法
看懂选择结构的程序
理解选择结构在程序中的作用
关系表达式和逻辑表达式
关系运算符和关系表达式
=、>、<、<>、>=、<=六种
逻辑运算符和逻辑表达式
AND 所连接的两个条件都成立时,表达式值为真,否则为假。
OR 所连接的两个条件只要有一个成立时,或者两个条件都成立时,表达式的值为真,否则为假。
NOT 对一个逻辑量或一个条件的值取反。
选择结构语句----IF语句
IF语句的格式
IF 条件 THEN
语句组A
[ELSE
语句组B]
ENDIF
例程:
REM A3.bas
INPUT “A,B”;A,B
IF A>B THEN
PRINT A
ELSE
PRINT “sorry”
ENDIF
END
自主探索
学校要选拔篮球运动员,下面是一个输出身高1.70米以上的学生学号和身高的程序,程序输入后不能正常运行,请找出程序中的错误。改正并运行程序,观察输出结果。
Cls
Input “your number:”;no
Input “your height:”;height
If height<1.70 then
Print “sorry for you”
Else
print no ,height
End
IF语句的应用实例
1、根据下面的函数编写一程序,从键盘上输入X的值,要求输出Y的值
CLS
INPUT “X=“;X
IF X>O THEN Y=1
IF X=0 THEN Y=0
IF X<0 THEN Y=-1
PRINT “X”;X,”Y=“;Y
END
2、从键盘上输入三个整数,编写输出最大值的程序
算法分析:
做中学
REM the biggest data
CLS
INPUT “INPUT a,b,c”;a,b,c
LET max=a
IF b>max THEN max=b
IF c>max THEN max=c
PRINT “max=”;max
END
程序分析:
小学生两位数加法练习程序。
程序设计思路是使用if语句,先判断小学生的答案是否相同,即判断answer=sum关系表达式是否成立。如果成立(答案正确),就执行输出“right”语句;如果不成立(答案不正确),则执行else部分输出“wrong”的语句。最后输出正确答案。
REM program
CLS
RANDOMIZE TIMER
LET data1=INT(RND*100)
LET data2=INT(RND*100)
LET sum=data1+data2
PRINT data1;“+”data2;“=”
INPUT answer
IF answer=sum THEN
PRINT “right!”
ELSE
PRINT “wrong”
ENDIF
PRINT “the answer is”;sum
End
第五节 循环结构的qbasic
学习目标:
理解循环结构语句的用法
看懂循环结构的程序
理解循环结构在程序中的作用
计数循环语句---FOR—NEXT语句
1、 FOR—NEXT语句的格式
FOR 循环变量=初值 TO 终值 STEP 增值
循环体
NEXT 循环变量
2、执行过程
循环变量赋初值
将循环变量与终值比较,如果未超过终值,则执行步骤(3);否则跳过步骤(3)--(5)而执行步骤(6)。
执行循环体
与next语句,循环变量取新值,即循环变量=循环变量+循环变量增量。
返回步骤(2)。
循环执行终止,继续执行next语句的下一条语句。
例程2:
打印出10—1十个自然数。
CLS
FOR I=10 TO 1 STEP -1
PRINT i,
NEXT I
END
自主探索:
CLS
FOR x=2 TO 7 STEP 2
PRINT X;
NEXT X
END
应用示例:
1、编写程序计算s=1+2+3+4+……+100的值
算法分析:
这是一个累加求和问题,加法需进行100次。程序现将存放累加结果的变量s赋初值0(又称累加器清零),设循环变量的初值为1.循环变量同时作为累加项,每执行一次循环体,累加项的值增1,循环变量i递增到101时,循环体不再被执行,变量s的值就是计算结果。
REM sum
CLS
S=0
FOR i=1 TO 100 STEP 1
S=S+i
NEXT I
PRINT S
END
自主探索:
1、编写程序计算100以内所有奇数的和;在QBASIC环境下输入并保存程序;运行程序,记录结果。
2、编写程序从键盘上任意输入10个数,求其中正数之和。
REM SUM(X>0)
CLS
S=0
FOR i=1 TO 10 STEP 1
INPUT “X”;X
IF X>0 THEN S=S+X
NEXT I
RPINT “S=“;S
END
条件循环语句——WHILE_WEND语句
1、WHILE-WEND语句的格式
WHILE条件
循环体
WEND
2、执行过程
1、判断条件是否成立,即判断条件表达式的之是否为真。
2、如果判断条件结果为是(真),则执行循环体中的语句,执行完返回WHILE行,在对条件进行判断;如果判断条件结果仍为是(真),则重复执行循环体。
3、判断条件结果为否,则不执行循环体,直接执行WEND语句后的语句。
做中学:
CLS
LET i=1
WHILE i<=10
PRINT “**********”
i=i+1
WEND
WHILE-WEND语句的应用实例
1、计算从键盘上输入N个整数的和。设输入-1表示程序结束。
算法分析:
由于输入的数据个数不确定,加法重复计算的次数也不确定,因此,条件循环语句WHILE-WEND实现加法重复操作。当输入的数据不是-1,即条件判断X<>-1为真时,执行循环体;当输入数据时-1时,即条件判断x<>-1为假,停止执行循环。
REM sum(n)
CLS
S=0
INPUT “X=“;X
WHILE X<>-1
s=s+x
INPUT “X=“;X
WEND
PRINT “s=“;s
END
2、求1+2+3+4+……+n的和不大于1000的最大n的值。
算法分析:
这是循环执行的次数不确定的累加求和问题。程序现将存放累加结果的变量s赋初值0,累加项变量i赋初值为0.循环执行条件为S<=1000,每次累加计算后,累加项递增1。最后一次满足条件s<=1000的累加项的值就是1+2+3+4+……+n的和不大于1000的最大n的值。
S=0
i=0
WHILE S<=1000
i=i+1
S=s+I
WEND
PRINT “n=“;i-1
END
循环结构程序示例
1、如何使小学生心算练习程序运行一次,可以进行10道加法题的练习?
算法分析:
解决这个问题可以用计数型循环语句FOR-NEXT,将一道加法练习题的处理过程作为循环体,循环体的执行次数为10次即可。随机函数每次产生的随机数不同,程序运行一次产生的10道加法练习题也不同。
REM programA5
CLS
RANDOMIZE TIMER
FOR i=1 TO 10 STEP 1
LET data1=INT(RND*100)
LET data2=INT(RND*100)
LET sum=data1+data2
PRINT data1;”+”; data2;”+”
INPUT answer
IF answer=sum THEN
PRINT “RIGHT!”
ELSE PRINT “WRONG!”
PRINT “the answer is “;sum
Next I
End
自主探索:
如果我国工农业生产总产值每年以8%的速度增长,问多少年后产值会翻一番(设基值为100)试编写程序并上机运行。
实践与提高:
1、阅读程序,说说下面两个程序的运行结果,并上机验证。
2、完善加法练习程序。要求程序给出完成10道练习题的得分情况,作对一题给10分,做错不给分。
hacker
按“ESC”键将进入工作窗口
按“回车键”将调用“帮助系统”
QBASIC程序编辑区
菜单栏
文件名
提示栏
File
Edit
Run
New
Open
Save
Exit
Cut
Copy
Paste
Run
新建文件
打开文件
存储文件
退出
剪切
复制
粘贴
运行程序
注意:REM语句和每行的“’”之后的内容是对程序和语句的说明、注释,程序运行后不会产生任何操作,仅仅为了程序员便于阅读程序,也可被省略。
语句定义符:计算机做什么操作
语句体:具体内容是什么
清除屏幕
将20赋值给变量b
将10赋值给变量a
将a+b的值赋值给变量c
显示运行结果
结束
说明语句
m
n
10
20
LET M=10
LET N=20
LET M=N
一个程序中的一个变量往往会多次进行赋值,但是,一个变量在任意时刻只能有一个值,不可能由两个或多个值,即一个变量在某一时刻的值是唯一的。
变量的类型:
数值型变量
字符型变量
在变量名后没有其它标识的变量,一般认为是数值型变量
在变量名后有“$”标识为是字符型型变量
试一试:
REM BIANLIANG
LET X=2.5
LET Y$=“COMPUTER”
PRINT X,Y$
END
ABS (-16.6)
自变量
函数名
SQR(9)=3
求x的平方根
SQR(x)
REN=0.56324
得到一个在(0,1)区间的随机数
REN
INT(-7.8)=-8
INT(7.6)=7
取不大于x的整数
INT(x)
ABS(-16.6)=16.6
求x的绝对值
ABS(x)
举例
功能
标准函数
19.5
4
-5
123
4
123
2^3的结果8
乘方
^
5 mod 2 的结果1
求余数
MOD
5\2的结果2
整除
\
除
/
乘
*
减
-
加
+
举例
表示含义
运算符
ABS(-a)*5*5/2
C+2*a*b^2
3*x+y/(x-y)^3
例程1
REM maths
LET a=10.55
LET b=20
LET c=-30
PRINT ABS(c)+2* INT(a)*b^3
END
谁能最快的告诉我这个程序的运行结果?
第三节 顺序结构的QBASIC程序
顺序结构的程序就是按语句出现的先后次序执行的,程序中间没有引任何分支或循环重复操作。顺序结构是最简单的程序结构。
顺序结构的主要语句:
1、LET赋值语句
2、INPUT键盘输入语句
3、PRINT 输出语句
A,b:?10,20
10+20=30
5*6=30
a=3 b=6
练习者输入心算答案
打开随机数发生器
data1=INT(RND*100)
data2=INT(RND*100)
计算机计算结果
输出正确答案
开始
结束
真
X>0 OR X<<>-10
真
NOT(7<5)
假
NOT(X=5)
NOT
假
X<0 OR X=-10
真
X>0 OR X<-10
OR
假
X>10 AND X<20
真
X>0 AND X<10
AND
值(真/假)
举例(X=5)
逻辑运算符
条件成立?
语句组A
语句组B
Y=
+1
0
-1
算法分析:
输入的X需要进行条件的判断,如果x>0,y=+1;如果x=0,y=0;如果x<0,y=-1。程序需要三个if语句来判断三个条件之后,使y获得确定值。
运行结果:
第一次 X=?3 回车
X=3 y=1
第二次 x=? 0 回车
X=0 y=0
第三次 x=?-4 回车
X=-4 y=-1
将三个数分别赋值给a、b、c三个变量。变量max存放比较后的大数,将a的值先赋值给max中;b与max比较,把大者放入max中。三个数需要比较判定两次,用两个IF语句,最后最大的数在max中。
运行结果:
Input a,b,c?12,4,26 回车
Max=26
在解决实际问题时,常常会遇到需要重复某些操作的情况。如:100道加法练习题,50名学生身高测量等问题。
例程1:
REM print *
CLS
FOR i=1 TO 10 STEP 1
PRINT “**********”
NEXT I
END
CLS
FOR x=10 TO 9 STEP -2
PRINT X;
NEXT X
END
REM JSSUM
CLS
S=0
FOR i=1 TO 100 STEP 2
S=S+I
NEXT I
RPINT S
END
算法分析:
这仍然时一个累加求和问题。只是需要对输入的10个数依次进行判定,只有大于零的数据才进行累加计算,因此IF语句必须在循环体内。现将存放累加结果的变量s置0,循环变量i的初值为1.循环体每执行一次,输入一个数据给变量x,判定表达式x>0的结果是否为真,只讲输入的正数才作为累加项进行累加。当循环变量i递增到11时,输入累加结果。
条件成立?
循环体
注意:程序不能停止运行(死循环)时,可以在按住
CTRL键的同时按下BREAK键,程序将被强制终止。
请同学们议一议,什么情况下使用FOR-NEXT循环语句,什么情况下使用WHILE-WEND语句?
CLS
i=1
S=100
WHILE S<=200
i=i+0.08
S=s*I
WEND
PRINT “S=“;S
END
N=10
S=0
WHILE N>=0
S=S+N
N=N-2
PRINT N
WEND
PRINT S
END
CLS
INPUT N
FOR i=1 TO N STEP 1
IF i/7=int(i/7) THEN
PRINT i
ENDIF
PRINT N
NEXT i
END
开始
变量score=0
打开随机数发生器
i<=10
LET data1=INT(RND*100)
LET data2=INT(RND*100)
LET sum=data1+data2
键盘输入answer值
Answer=sum?
输出“right!”
Score=score+1
输出“wrong!“
输出正确答案
循环变量i增加步
输出得分
结束