1、第四章第四章 选择结构程序设计选择结构程序设计关系表达式和逻辑表达式用行IF语句实现选择结构用块IF实现选择多分支选择结构多分支转移语句选择结构程序设计问题的提出问题的提出在实际问题中,要求计算机进行逻辑判断,即给出一个条件,让计算在实际问题中,要求计算机进行逻辑判断,即给出一个条件,让计算机判断是否满足条件,并按照判断的结果来做不同的处理。机判断是否满足条件,并按照判断的结果来做不同的处理。1.从键盘输入一个数,如果是正数则打印出来,否则不做任何处理;2.将学生中成绩不合格者打印出来;3.将职工工资低于300元者打印出来;4.根判别式b2-4acb小于x=-1小于等于h=I不等于uv关系表达
2、式关系表达式l用一个关系运算符把两个运算量(数值量或字符串)联用一个关系运算符把两个运算量(数值量或字符串)联结起来称关系表达式;结起来称关系表达式;l每个关系表达式都有一个值,这个值称作逻辑值(即每个关系表达式都有一个值,这个值称作逻辑值(即“真真”或或“假假”););l在在QBASIC中,如果表达式不成立,即中,如果表达式不成立,即“假假”,则此表,则此表达式的值为达式的值为“0”,否则为,否则为“-1”;l举例:举例:PRINT 1513,1315运行结果:运行结果:-1 0逻辑运算符逻辑运算符问题的提出:如果需要判断一个数是否满足0 x10,语句 IF 0=x=0 AND x b+d
3、OR cd AND ABS(c)=a OR NOT c d+5 7 11 OR cd AND 2=a OR NOT c13 假 OR 假 AND 假 OR NOT 假 假 OR 假 OR 真真真IF语句语句语法:ELSE 语句2在IF语句中,实际是判别关系表达式的逻辑值是零还是非零。如果是非零(即条件成立),则执行THEN后的语句,否则执行ELSE后的语句(有ELSE语句!)。IF 53 THEN PRINT“This is true.”ELSE PRINT“This is false”IF 35 THEN PRINT“This is true.”ELSE PRINT“This is fals
4、e”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=53x=5=3用行用行IF语句实现选择结构语句实现选择结构行IF语句有二种形式:(1)IF 条件条件 THEN 语句语句例如:IF x0 THEN PRINT x(2)IF 条件条件 THEN 语句语句1 ELSE 语句语句2例如:IF x0 THEN PRINT x ELSE PRINT x一般形式:IF 条件条件 THEN 语句语句1
5、ELSE 语句语句2求解一元二次方程ax2+bx+c=0(参见SAMP4-2.BAS)qipxacbDqpxacbDaDqabpaDbaacbbx2,122,1222,1,04,042,2224则若则若令输入a,b,cd=b2-4acp=-b/2aaDq2d0是否x1=p+qx2=p-qx1=p+q”i”x2=p-q”i”选择结构的嵌套选择结构的嵌套在一个选择结构中包含另外一个选择结构,就称为选择结构的嵌套y=0(x=0)1(x0)-1(x0是是否否y=1x=0是是否否y=0 y=-1INPUT“Please input x”IF x0 THEN y=1 ELSE IF x=0 THEN y=
6、0 ELSE y=-1PRINT“y=“;y:END 对选择结构的嵌套的理解对选择结构的嵌套的理解选择结构的嵌套实际上是把一个选择结构的嵌套实际上是把一个IF结构的语句作为它外层结构的语句作为它外层IF结结构的构的THEN 或或ELSE 子句中应该执行的语句。子句中应该执行的语句。对比:IF 逻辑表达式 THEN 语句语句1 ELSE 语句语句2IF x0 THEN y=1 ELSE IF x=0 THEN y=0 ELSE y=-1IF x=0 THEN IF x0 THEN y=1 ELSE y=0 ELSE y=-1内层内层IF-ELSE外层外层IF-ELSEIF x=0 THEN IF
7、 x0 THEN y=1 ELSE y=-1IF x=0 THEN IF x0 THEN y=1 ELSE y=-1内层内层IF-ELSEIF x=0 THEN IF x0 THEN y=1 ELSE y=-1内层内层IF-ELSE规定:ELSE 与离它最近的IF 配对关于选择结构嵌套的两点说明关于选择结构嵌套的两点说明1.将内层的THEN子句和ELSE子句写全,即使不需要ELSE子句,也应写上ELSE子句,后面不跟任何语句。内层内层IF-ELSE外层外层IF-ELSEIF x=0 THEN IF x0 THEN y=1 ELSE ELSE y=-12.尽量将内嵌的IF 结构放在外层IF 的E
8、LSE子句中,而不放在THEN子句中,由于内层IF出现在外层IF 的ELSE子句中,内层的ELSE只能与其前面的IF配对,而IF是在外层的ELSE 右边,由于有外层IF的ELSE隔开,所以内层的ELSE绝不会越过外层的ELSE与外层的IF 配对。IF x0 THEN y=1 ELSE IF x=0 THEN y=0 ELSE y=-1内层内层IF-ELSE外层外层IF-ELSE利用块利用块IF实现选择结构实现选择结构语法:IF 条件 THEN 语句组语句组1ELSE 语句组语句组2END IFy=0(x=0)1(x0)-1(x0 y=1ELSE IF x=0 y=0 ELSE y=-1 END
9、 IFEND IFPRINT“x=”;x,”y=”;yEND块块IF实现选择结构举例实现选择结构举例举例(P108,sam4-6.bas):d=0.05(250m500)0(m250)0.075(500m1000)0.1(1000m2000)0.15(2000m)ELSEIF语句实现选择结构语句实现选择结构语法:IF 条件 THEN 语句组语句组1ELSEIF 条件2 THEN 语句组语句组2ELSEIF 条件2 THEN 语句组语句组3.ELSEIF 条件2 THEN 语句组语句组nELSE 语句组语句组n+1 END IFINPUT“Please input your money for
10、buying:”,mIF m250 THEN d=0ELSEIF m500 THEN d=0.05ELSEIF m1000 THEN d=0.075ELSEIF m0)-1(x0 y=1 CASE IS=0 y=0 CASE IS 0 y=-1END SELECTPRINT“x=”;x,”y=”;yENDSELECT CASE结构举例结构举例有一笔款欲存银行,三年后取出,可以采取几种方案之一:1.活期3年;2.3次一年定息(每年到期后取出,在重新存入);3.先存一次2年定期,在存一次1年定期;4.先存一次1年定期,在存一次2年定期;5.3年定期。假设存款年利率为:活期:1.5%1年期:4%2年
11、期:4.5%3年期:5.1%求本、利和的公式:p=p0*(1+r)n(其中:r为年利率,n为存款年数)(参见(参见samp4-9.bas)关于关于SELECT CASE结构的几点说明结构的几点说明(I)1.SELECT CASE行后的表达式称“CASE表达式表达式”,又可称“测试表达测试表达式式”,它可以是一个变量或表达式,如a+b,sin(x)2.CASE后的条件有如下三种形式:?常量;?用“TO”指定一个范围,如3 TO 4,8 TO 23;?用“IS”指定一个条件,其一般形式为:IS ,当“条件”为一个关系条件时,不能包含逻辑运算符,如IS 6(正正确确),IS NOT 100?CASE
12、 IS=0,IS=100 (各个条件之间的关系是“逻辑或”的关系,所以-x0PRINT“0”CASE 2 TO 10PRINT“2-10”END SELECT5.除了CASE ELSE 子句外,其他CASE子句的顺序对执行结果没有影响,如果把CASE ELSE子句放在最前,则首先执行的是CASE ELSE子句,而认为前面的CASE子句均不符合条件,例如:SELECT CASE INT(m)CASE ELSE d=0.15CASE IS 0)-1(x0)举例:INPUT“Enter x:”,xs=SGN(x)ON s+2 GOTO a,b,ca:y=-1:GOTO db:y=0:GOTO dc:
13、y=1:GOTO dd:PRINT“x=”;x,”y=”;yEND选择结构程序设计举例选择结构程序设计举例例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:;yearPRINT year;is;IF(year MOD 4=0 AND year MOD 100 0)OR year MOD 400=0
14、THEN PRINT a leap year!ELSE PRINT NOT a leap year!ENDs4-11-1.bas用行用行IF语句实现选择语句实现选择 s4-11-2.bas用块用块IF结构实现选择结构实现选择INPUT Please input year:;yearPRINT 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 IFENDs4-11-3.bas逐个条件判断逐个条件判断INPUT Plea
15、se input year:;yearIF 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 IFELSE leap=0END IFIF leap=1 THEN PRINT year;is a leap year!ELSE PRINT year;is NOT a leap year!END IFENDs4-11-4.bas在块在块IF结构使用结构使用ELSEIF语句实现选择语句实现选择INPUT Please input year:;
16、yearIF year MOD 4 0 THEN leap=0ELSEIF year MOD 100 0 THEN leap=1ELSEIF year MOD 400=0 THEN leap=1ELSE leap=0END IFIF leap=1 THEN PRINT year;is a leap year!ELSE PRINT year;is NOT a leap year!END IFEND选择结构程序设计举例选择结构程序设计举例例2 有一城市,规划建设1个中心城和4个卫星城。中心城的边长20公里,卫星城边长为5公里,均为正方形,中心城的地价为每公顷10万,卫星城为5万,其他地区1万。编程
17、序,输入任意一点的位置,确定该点的地价。-10-20-202020-101010中心城的范围:中心城的范围:|x|10 AND|y|10卫星城的范围:卫星城的范围:20|x|25 AND 20|y|25s4-12-1.bas在块在块IF结构使用结构使用ELSEIF语句实现选择语句实现选择INPUT Please input your coordinate:;x,yIF ABS(x)=10 AND ABS(y)=20 AND ABS(x)=20 AND ABS(y)=25)THEN price=5ELSE price=1END IFPRINT Price=;priceENDs4-12-2.bas
18、用用3个行个行IF语句实现选择语句实现选择INPUT Please input your coordinate:;x,yIF ABS(x)=10 AND ABS(y)=20 AND ABS(x)=20 AND ABS(y)=25)THEN price=5IF NOT(ABS(x)=10 AND ABS(y)=20 AND ABS(x)=20 AND ABS(y)=25)THEN price=1PRINT Price=;priceENDs4-12-3.bas用用2个行个行IF语句实现选择语句实现选择INPUT Please input your coordinate:;x,yprice=1IF
19、ABS(x)=10 AND ABS(y)=20 AND ABS(x)=20 AND ABS(y)=25 THEN price=5PRINT Price=;priceENDs4-12-4.bas通过标志变量实现选择通过标志变量实现选择INPUT Please input your coordinate:;x,yprice=1IF ABS(x)=10 AND ABS(y)=20 AND ABS(x)=20 AND ABS(y)=25 THEN price=5 flag=2IF flag 1 AND flag 2 THEN price=1PRINT Price=;priceEND找出剩余找出剩余2个
20、数中的最大者,放在个数中的最大者,放在c中中找出找出4个数中的最大者,放在个数中的最大者,放在a中中找出剩余找出剩余3个数中的最大者,放在个数中的最大者,放在b中中ab真真假假a与与b互换互换ac真真假假a与与c互换互换ad真真假假a与与d互换互换bc真真假假b与与c互换互换bd真真假假b与与d互换互换cd真真假假c与与d互换互换INPUT Please input a,b,c,d:;a,b,c,dIF a b THEN SWAP a,bIF a c THEN SWAP a,cIF a d THEN SWAP a,dIF b c THEN SWAP b,cIF b d THEN SWAP b,dIF c d THEN SWAP c,dPRINT a,b,c,dEND程序设计程序设计参见:参见:Samp4-14.bas基本要求基本要求l掌握多分支选择结构和多分支转移语句的使用。