qb程序设计--第四章 选择结构程序设计[下学期]

文档属性

名称 qb程序设计--第四章 选择结构程序设计[下学期]
格式 rar
文件大小 34.9KB
资源类型 教案
版本资源 通用版
科目 信息技术(信息科技)
更新时间 2008-01-30 00:48:00

图片预览

文档简介

(共35张PPT)
第四章 选择结构程序设计
关系表达式和逻辑表达式
用行IF语句实现选择结构
用块IF实现选择
多分支选择结构
多分支转移语句
选择结构程序设计
问题的提出
在实际问题中,要求计算机进行逻辑判断,即给出一个条件,让计算机判断是否满足条件,并按照判断的结果来做不同的处理。
从键盘输入一个数,如果是正数则打印出来,否则不做任何处理;
将学生中成绩不合格者打印出来;
将职工工资低于300元者打印出来;
根判别式b2-4ac<0,则终止程序执行,否则求解。
关系运算符
关系运算符 含义 相当于数学符号 举例
> 大于 > a>b
< 小于 < x= 等于 = c=d
>= 大于等于 ≥ e>=-1
<= 小于等于 ≤ h<=I
<> 不等于 ≠ u<>v
关系表达式
用一个关系运算符把两个运算量(数值量或字符串)联结起来称关系表达式;
每个关系表达式都有一个值,这个值称作逻辑值(即“真”或“假”);
在QBASIC中,如果表达式不成立,即“假”,则此表达式的值为“0”,否则为“-1”;
举例:PRINT 15>13,13>15
运行结果:-1 0
逻辑运算符
问题的提出:如果需要判断一个数是否满足0≤x≤10,语句 IF 0=IF x>=0 AND x<=10 THEN 语句1 ELSE 语句2(正确)
QB的逻辑运算符:
AND(与):所联结的关系表达式必须同时成立才为真;
OR(或): 所联结的关系表达式只要有一个为真,即为真;
NOT(非):将原来的逻辑值取反。
逻辑运算符的运算规则
A B A AND B A OR B NOT A NOT B
真 真 真 真 假 假
真 假 假 真 假 真
假 真 假 真 真 假
假 假 假 假 真 真
逻辑表达式的预算次序
一个逻辑表达式一般包括逻辑运算符、关系表达式或其他运算量;
算术运算→关系运算→逻辑运算(NOT→AND→OR)
如以下表达式,其中a=5,b=3,c=-2,d=8
a-c > b+d OR c>d AND ABS(c) =a OR NOT c> d+5
7 > 11 OR c>d AND 2 =a OR NOT c>13
假 OR 假 AND 假 OR NOT 假
假 OR 假 OR 真

IF语句
语法:IF 关系表达式 THEN 语句1 [ELSE 语句2]
在IF语句中,实际是判别关系表达式的逻辑值是零还是非零。如果是非零(即条件成立),则执行THEN后的语句,否则执行ELSE后的语句(有ELSE语句!)。
IF 5>3 THEN PRINT “This is true.” ELSE PRINT “This is false”
IF 3>5 THEN PRINT “This is true.” ELSE PRINT “This is false”
IF 2 THEN PRINT “This is true.” ELSE PRINT “This is false”
IF 0 THEN PRINT “This is true.” ELSE PRINT “This is false”
表达式的逻辑值可以赋值给变量:
x=5>3
x=5=3
用行IF语句实现选择结构
行IF语句有二种形式:
(1)IF 条件 THEN 语句
例如:IF x>0 THEN PRINT x
(2) IF 条件 THEN 语句1 ELSE 语句2
例如:IF x>0 THEN PRINT x ELSE PRINT –x
一般形式: IF 条件 THEN 语句1 [ELSE 语句2]
求解一元二次方程ax2+bx+c=0(参见SAMP4-2.BAS)
输入a,b,c
d=b2-4ac
p=-b/2a
d≥0


x1=p+q
x2=p-q
x1=p+q”i”
x2=p-q”i”
选择结构的嵌套
在一个选择结构中包含另外一个选择结构,就称为选择结构的嵌套
y=
0 (x=0)
1 (x>0)
-1 (x<0)
举例:
输入x
x>0


y=1
x=0


y=0
y=-1
INPUT “Please input x”
IF x>0 THEN y=1 ELSE IF x=0 THEN y=0 ELSE y=-1
PRINT “y=“;y : END
对选择结构的嵌套的理解
选择结构的嵌套实际上是把一个IF结构的语句作为它外层IF结构的THEN 或ELSE 子句中应该执行的语句。
对比:
IF 逻辑表达式 THEN 语句1 ELSE 语句2
IF x>0 THEN y=1 ELSE IF x=0 THEN y=0 ELSE y=-1
IF x>=0 THEN IF x>0 THEN y=1 ELSE y=0 ELSE y=-1
内层IF-ELSE
外层IF-ELSE
IF x>=0 THEN IF x>0 THEN y=1 ELSE y=-1
IF x>=0 THEN IF x>0 THEN y=1 ELSE y=-1
内层IF-ELSE
IF x>=0 THEN IF x>0 THEN y=1 ELSE y=-1
内层IF-ELSE

规定:ELSE 与离它最近的IF 配对
关于选择结构嵌套的两点说明
将内层的THEN子句和ELSE子句写全,即使不需要ELSE子句,也应写上ELSE子句,后面不跟任何语句。
内层IF-ELSE
外层IF-ELSE
IF x>=0 THEN IF x>0 THEN y=1 ELSE ELSE y=-1
尽量将内嵌的IF 结构放在外层IF 的ELSE子句中,而不放在THEN子句中,由于内层IF出现在外层IF 的ELSE子句中,内层的ELSE只能与其前面的IF配对,而IF是在外层的ELSE 右边,由于有外层IF的ELSE隔开,所以内层的ELSE绝不会越过外层的ELSE与外层的IF 配对。
IF x>0 THEN y=1 ELSE IF x=0 THEN y=0 ELSE y=-1
内层IF-ELSE
外层IF-ELSE
利用块IF实现选择结构
语法:
IF 条件 THEN
语句组1
ELSE
语句组2
END IF
y=
0 (x=0)
1 (x>0)
-1 (x<0)
举例:
INPUT “Please input x:”;x
IF x>0
y=1
ELSE
IF x=0
y=0
ELSE
y=-1
END IF
END IF
PRINT “x=”;x,”y=”;y
END
块IF实现选择结构举例
举例(P108,sam4-6.bas):
d=
0.05 (250≤m<500)
0 (m<250)
0.075 (500≤m<1000)
0.1 (1000≤m<2000)
0.15 (2000≤m)
ELSEIF语句实现选择结构
语法:
IF 条件 THEN
语句组1
ELSEIF 条件2 THEN
语句组2
ELSEIF 条件2 THEN
语句组3
……..
ELSEIF 条件2 THEN
语句组n
ELSE
语句组n+1
END IF
INPUT “Please input your money for buying:”,m
IF m<250 THEN
d=0
ELSEIF m<500 THEN
d=0.05
ELSEIF m<1000 THEN
d=0.075
ELSEIF m<2000 THEN
d=0.1
ELSE
d=0.15
ENDI
amout=m*(1-d)
PRINT “amount=”;amount
END
基本要求
掌握逻辑运算的基本概念
掌握行IF语句和块IF结构的使用
多分支选择结构(SELECT CASE结构)
语法:
SELECT CASE 表达式
CASE 条件1
语句组1
CASE 条件2
语句组2
……
CASE ELSE
语句组n
END SELECT
y=
0 (x=0)
1 (x>0)
-1 (x<0)
举例:
INPUT “Please enter x:”,x
SELE CASE x
CASE IS >0
y=1
CASE IS =0
y=0
CASE IS <0
y=-1
END SELECT
PRINT “x=”;x,”y=”;y
END
SELECT CASE结构举例
有一笔款欲存银行,三年后取出,可以采取几种方案之一:
活期3年;
3次一年定息(每年到期后取出,在重新存入);
先存一次2年定期,在存一次1年定期;
先存一次1年定期,在存一次2年定期;
3年定期。
假设存款年利率为:
活期:1.5%
1年期:4%
2年期:4.5%
3年期:5.1%
求本、利和的公式:p=p0*(1+r)n (其中:r为年利率,n为存款年数)
(参见samp4-9.bas)
关于SELECT CASE结构的几点说明(I)
SELECT CASE行后的表达式称“CASE表达式”,又可称“测试表达式”,它可以是一个变量或表达式,如a+b, sin(x)
CASE后的条件有如下三种形式:
常量;
用“TO”指定一个范围,如3 TO 4,8 TO 23;
用“IS”指定一个条件,其一般形式为:IS <关系运算符> <表达式>,当“条件”为一个关系条件时,不能包含逻辑运算符,如IS <6(正确),IS NOT <6(错误,不能包含逻辑运算符)。
可以在一个CASE中使用多个条件,多个条件时,各个条件之间的关系是“逻辑或”的关系,如
CASE 1,3,5,7
CASE 1 TO 5,8 TO 10,IS >100
CASE IS>=0, IS<=100 (各个条件之间的关系是“逻辑或”的关系,所以-∞关于SELECT CASE结构的几点说明(II)
不同CASE子句中的“条件”不应当重复,重复虽然不会报告错误,只是出现操作上的矛盾,例如:
SELECT CASE a
CASE 1,2,3
PRINT “1-3”
CASE IS >0
PRINT “>0”
CASE 2 TO 10
PRINT “2 -10”
END SELECT
除了CASE ELSE 子句外,其他CASE子句的顺序对执行结果没有影响,如果把CASE ELSE子句放在最前,则首先执行的是CASE ELSE子句,而认为前面的CASE子句均不符合条件,例如:
SELECT CASE INT(m)
CASE ELSE
d=0.15
CASE IS <250
d=0
CASE 250 TO 499
d=0.05
END SELECT
多分支转移语句(ON GOTO 语句)
语法:ON 算术表达式 GOTO 行号或行标号1,行号或行标号2,行号或行标号3……
例如:ON x GOTO a,b,c,d
当x=1时,执行行标号为a的语句行;
当x=2时,执行行标号为b的语句行;
当x=3时,执行行标号为c的语句行;
当x=4时,执行行标号为d的语句行。
y=
0 (x=0)
1 (x>0)
-1 (x<0)
举例:
INPUT “Enter x:”,x
s=SGN(x)
ON s+2 GOTO a,b,c
a: y=-1 : GOTO d
b: y=0 : GOTO d
c: y=1 : GOTO d
d: PRINT “x=”;x,”y=”;y
END
选择结构程序设计举例
例1:输入一个年份(例如1999),要求判断它是否是闰年。
分析: 判断闰年的条件是:能被4整除但不能被100整除的是闰年,如1992年;能被4整除又能被400整除的是闰年,如2000年;其他为非闰年。
(参见:s4-11-1.bas, s4-11-2.bas, s4-11-3.bas, s4-11-4.bas)
INPUT "Please input year:"; year
PRINT year; " is ";
IF (year MOD 4 = 0 AND year MOD 100 <> 0) OR year MOD 400 = 0 THEN PRINT "a leap year!" ELSE PRINT "NOT a leap year!"
END
s4-11-1.bas
用行IF语句实现选择
s4-11-2.bas
用块IF结构实现选择
INPUT "Please input year:"; year
PRINT year; " is ";
IF (year MOD 4 = 0 AND year MOD 100 <> 0) OR year MOD 400 = 0 THEN
PRINT "a leap year!"
ELSE
PRINT "NOT a leap year!"
END IF
END
s4-11-3.bas
逐个条件判断
INPUT "Please input year:"; year
IF year MOD 4 = 0 THEN
IF year MOD 100 = 0 THEN
IF year MOD 400 = 0 THEN
leap = 1
ELSE
leap = 0
END IF
ELSE
leap = 1
END IF
ELSE
leap = 0
END IF
IF leap = 1 THEN
PRINT year; " is a leap year!"
ELSE
PRINT year; " is NOT a leap year!"
END IF
END
s4-11-4.bas
在块IF结构使用ELSEIF语句实现选择
INPUT "Please input year:"; year
IF year MOD 4 <> 0 THEN
leap = 0
ELSEIF year MOD 100 <> 0 THEN
leap = 1
ELSEIF year MOD 400 = 0 THEN
leap = 1
ELSE
leap = 0
END IF
IF leap = 1 THEN
PRINT year; " is a leap year!"
ELSE
PRINT year; " is NOT a leap year!"
END IF
END
选择结构程序设计举例
例2 有一城市,规划建设1个中心城和4个卫星城。中心城的边长20公里,卫星城边长为5公里,均为正方形,中心城的地价为每公顷10万,卫星城为5万,其他地区1万。编程序,输入任意一点的位置,确定该点的地价。
-10
-20




-20
20
20
-10
10
10
中心城的范围:
|x|≤10 AND |y|≤10
卫星城的范围:
20≤ |x|≤25 AND 20≤ |y|≤25
s4-12-1.bas
在块IF结构使用ELSEIF语句实现选择
INPUT "Please input your coordinate:"; x, y
IF ABS(x) <= 10 AND ABS(y) <= 10 THEN
price = 10
ELSEIF (ABS(x) >= 20 AND ABS(x) <= 25) AND (ABS(y) >= 20 AND ABS(y) <= 25) THEN
price = 5
ELSE
price = 1
END IF
PRINT "Price="; price
END
s4-12-2.bas
用3个行IF语句实现选择
INPUT "Please input your coordinate:"; x, y
IF ABS(x) <= 10 AND ABS(y) <= 10 THEN price = 10
IF (ABS(x) >= 20 AND ABS(x) <= 25) AND (ABS(y) >= 20 AND ABS(y) <= 25) THEN price = 5
IF NOT (ABS(x) <= 10 AND ABS(y) <= 10) AND NOT (ABS(x) >= 20 AND ABS(x) <= 25 AND ABS(y) >= 20 AND ABS(y) <= 25) THEN price = 1
PRINT "Price="; price
END
s4-12-3.bas
用2个行IF语句实现选择
INPUT "Please input your coordinate:"; x, y
price = 1
IF ABS(x) <= 10 AND ABS(y) <= 10 THEN price = 10
IF ABS(x) >= 20 AND ABS(x) <= 25 AND ABS(y) >= 20 AND ABS(y) <= 25 THEN price = 5
PRINT "Price="; price
END
s4-12-4.bas
通过标志变量实现选择
INPUT "Please input your coordinate:"; x, y
price = 1
IF ABS(x) <= 10 AND ABS(y) <= 10 THEN price = 10
flag = 1
IF ABS(x) >= 20 AND ABS(x) <= 25 AND ABS(y) >= 20 AND ABS(y) <= 25 THEN price = 5
flag = 2
IF flag <> 1 AND flag <> 2 THEN price = 1
PRINT "Price="; price
END
找出剩余2个数中的最大者,放在c中
找出4个数中的最大者,放在a中
找出剩余3个数中的最大者,放在b中
a

a与b互换
a

a与c互换
a

a与d互换
b

b与c互换
b

b与d互换
c

c与d互换
INPUT "Please input a,b,c,d:"; a, b, c, d
IF a < b THEN SWAP a, b
IF a < c THEN SWAP a, c
IF a < d THEN SWAP a, d
IF b < c THEN SWAP b, c
IF b < d THEN SWAP b, d
IF c < d THEN SWAP c, d
PRINT a, b, c, d
END
程序设计
参见:Samp4-14.bas
基本要求
掌握多分支选择结构和多分支转移语句的使用。
同课章节目录