一个顺序结构程序,在BASIC中总是按语句行号的大小顺序执行;在Quick BASIC中是按语句的先后次序执行。也就是说,流程是单一直线进行的。它虽简单易懂,但功能有限,不能解决复杂的实际问题。本章将要介绍的选择结构,是要利用计算机的逻辑判断能力,根据确定的条件是否满足,有选择地执行某些语句或程序段,这种程序的执行顺序被改变了。所以选择结构的流程就不是单一直线的,而是发生了分叉,或称为分支。根据分支路的多少,可分为两路分支选择和多路分支选择两类。本章涉及的内容包括:
n 行IF语句
n 块IF结构
n SELECT CASE结构
n 选择结构的嵌套
本章的难点在于选择结构的嵌套部分的学习和理解。
例如 有一函数:

要求输入一个X值,计算并打印大于Y的值。
算法:根据X的值是否大于2,分为两种计算方法,这是一个最简单的两分支结构。N-S流程图如图6-1所示。

如图6-1 N-S流程图
源程序:
INPUT“X is”;X
IF X<=2 THEN Y=2*X+3 ELSE Y=X+5
PRINT “Y=”;Y
END
程序中第2行语句是一个行IF语句,其中X<=2成立的话,即条件为真,那么就执行THEN后面的赋值语句,即Y=2*3X+3;否则如果X<=2不成立的话,即条件为假,那么就执行行ELSE后面的赋值语句,即Y=X+3。注意,两个分支只选择其中一个分支执行。
IF 〈条件〉 THEN {〈语句〉丨〈行号〉}[ELSE{〈语句〉丨〈行号〉}]
〈条件〉:用关系表达式或逻辑表达式表示
〈语句〉丨〈行号〉:在THEN或ELSE后面可以是语句或行号。如果是语句的话,允许写多个语句,但各语句之间要有冒号分开;如果是行号的话,只允许写一个行号,这个行号必须是该程序存在的语句行号。建议初学者不使用行号。
行IF语句的流程图如6-2所示。

图6-2 行IF语句的流程图
首先,对表示条件的关系表达式或逻辑表达式进行运算,根据其结果的逻辑值分别选择两路分支中的一支,即:如果逻辑值为“真”,条件成立,执行THEN后的语句,ELSE后的语句不执行;如果逻辑值为“假”,条件不成立,执行ELSE后的语句,THEN后的语句不执行。
[例6-1] 从键盘上输入两个数M、N,如果N不等于0,打印出商M/N,否则打印出无商的信息。
算法:
1.输入被除数M和除数N的值;
2.判断N〈〉0?按分支处理。
N-S图如图6-3所示。

图6-3 N-S图
源程序:
REM EXAMPLE 1
IF N<>0 THEN PRINT "The Quotinet is":M/N
ELSE PRINT "Quotinent undefined"
END
算法:1.输入A、B、C3个数;
2.A存入一变量BIG;
3.如果B>BIG,把B存入BIG;
4.如果C>BIG,把C存入BIG;
5.打印BIG的值。
N-S图如图6-4所示。

源程序:
REM EXAMPLE 2
INPUT A,B,C
BIG=A 图6-4 N-S图
IF B>BIG THEN BIG=B
IF C>BIG THEN BIG=C
PRINT “The bigest is”;BIG
END
程序说明:
在IF-THEN-ELSE结构中,允许ELSE部分省略,就成了IF-THEN结构,其N-S图如6-4。由图中可以看出,当条件成立,关系表达式的值为真,就执行THEN后的语句;否则,条件不成立就什么也不处理,程序执行下一个语句。
行IF语句的结构可以分为3个部分:IF〈条件〉部分:THEN语句部分;ELSE语句部分。在问题简单的情况下,3部分写在一行还容易看懂,但当问题复杂的时候,3部分写在一行里就不便于阅读了。Quick BASIC中,对这个语句加以扩充,将这3个部分分成若干语句行,构成一段程序块,即块IF,这样结构更清楚明了,功能更强,使用也更方便,而且行IF语句的功能,都可以用块IF实现。
IF 〈条件〉 THEN
…}S1〈语句组1〉
ELSE
…}S2〈语句组2〉
END IF
其中
〈条件〉――用关系表达式或逻辑表达式表示;
S1――条件成立时执行的语句组;
S2――条件不成立执行的语句组。
如图6-5所示。如果IF语句中的条件成立的话,就执行S1的语句;S1执行后,程序跳过S2,转到END IF语句的下一个语句并继续执行;

图6-5 IF语句
如果IF语句中的条件不成立的话,就跳过SI,执行ELSE 后的S2语句,执行完S2后,转到END IF的下一个语句并继续执行。
总之,它对两个分支,只取其一执行。
[例6-3] 判断一个数是偶数还是奇数。
源程序:
'EXAMPLE 3
DEFINT A-Z
INPUT Num
IF Num MOD 2=0 THEN
PRINT Num;"is a event number"
ELSE
PRINT Num;"is a odd number"
END IF
END
说明:
程序中的DEFINT是一个整型变量说明语句,凡是以A~Z开头的变量都是整型。
[例6-4] 任意输入3个数A、B、C,找出其中最大的数和最小的数。
算法:
1.先比较A与B,大者赋值给MAX,小者赋值给MIN;
2.再将MAX与C比较,大者存入MAX;
3.再将MIN与C比较,小者存入MIN;
4.输出MAX,MIN。
N-S图如图6-6所示。


图6-6 N-S图
源程序:
‘EXAMPLE 4
INPUT "A,B,C=";A,B,C
IF A>B THEN
MAX=A
MIN=B
ELSE
MAX=B
MIN=A
END IF
IF C>MAX THEN