第三章
选择结果程序设计
§
3.IF语句的概念和应用
3.1.1IF语句的概念
IF语句是用来实现选择结构。
IF 语句的语法是:
IF 布尔表达式
then 语句
Else 语句;
![]()
语义流程图:


![]()
F
F
![]()
![]()
或
语句
T
T

![]()
注:①有两种形式:一是当布尔表达式的值位T或F时都分别执行不同的语句。二是省略F分支。
②布尔表达式的值应属布尔类型。即只有真或假两种可能。
③THEN后的语句在与ELSE之间不能加“;”。
④语句可以是简单语句,也可以为复合语句。
3.1.2举例
[例一] IF a<b THEN writeln(a,b) {注意此处无“;”}
ELSE writeln(b,a); {注意此处有“;”}
[例二] IF a<b THEN writeln(a,b); {注意此处有“;”}
IF
a>=b THEN writeln(b,a);
[例三] 求
0
(x≤-a)
y=
(-a<x≤a/2)
x (x>a/2)
program
function Y(input, output);
var
y,x,a:real;
begin
writeln(‘input a and x:’);
readln(a,x);
if (x<=-a)
then
y:=0;
if (x>-a)and(x<=a/2)
Then y:=sqrt(a*a-x*x);
If (x>a/2)
then
y:=x;
Writeln (‘a=’a,’x=’,x,’y=’,y)
end.
[例四] 输入三个整数,放在a,b,c三个变量中,然后把这三个数按由小到大的顺序放在a,b,c中。
program order3(input, output);
var
a,b,c,t:integer;
begin
writeln(‘input a ,b,c:’);
readln(a,b,c);
Writeln (‘a=’a:5,’b=’,b:5,’c=’,c:5);
if a>b
then begin t:=a,a:=b;b:=t
end;
if a>c
Then
begin t:=a;a:=c;c:=t end;
If b>c
then begin t:=b,b:=c;c:=t end;
Writeln (a:4,b:4,c:4)
end .
§
3.2IF语句的嵌套
在IF语句的语法图中,出现在THEN和ELSE之后的语句,同样可以是IF语句,这种情况称为IF语句的嵌套.
3.2.1嵌套中THEN和ELSE的配对规则.
[例] 有一函数
+1 (x>0)
y = 0 (x=0)
-1 (x<0)
可写出以下程序:
Program
signofx(input, output);
Var
y,x:real;
Begin
Writeln
(‘input x:’);
Readln
(x);
If
x>0
Then
Y:=1
Else
If
x=0
Then
y: =0
Else
y: =-1;
writeln(‘x=’,x,’y:=’,y)
End.
虚线框中是内嵌的IF 语句,请注意,最后一个分号既标志内层IF语句的结束又标志整个外层IF语句的结束,这个内嵌IF语句是嵌套在外层的ELSE子句中的。其流程见下图(a),也可以改写为:
If
x>=0
Then
IF x>0
Then y:=1
Else y:=0
ELSE
Y:=-1;
内嵌的IF语句是嵌套在外层的THEN子句中,其流程见下图(b)。
(a)
(b)
能否将它改写为:
y:=0;
IF x>=0
THEN
IF x>0
THEN y:=1
ELSE
Y:=-1;
编写人企图用它来实现图(C)流程;然而实际上却为图(d)流程。


(c)
(d)
问题出在THEN和ELSE的配套关系上。PASCAL规定:ELSE与它上面的距离最近的THEN配对。它与书写程序时采用的缩进方式无关。因此在使用嵌套的IF语句时要十分小心,防止出现逻辑上的错误。上例中若要实现原意,则可在内层的IF语句的ELSE分支中加入空语句来实现。
根据IF语句嵌入的真假分支的不同,可分为以下两类:
3.2.2 IF语句嵌套在THEN子句中。
IF 布尔表达式1
THEN
IF 布尔表达式2
THEN
IF 布尔表达式3
THEN 语句31
ELSE 语句32
ELSE
语句22
ELSE
语句12;
即在外层的THEN子句内嵌入内层IF语句。
注:若内层的IF语句缺少ELSE分支时,为了避免语音逻辑上的混乱,常用以下两种解决方法:
①. 将内层的IF语句用BEGIN……ELSE括起来:
…
THEN
BEGIN
IF 布尔表达式2,THEN 语句21
END
ELSE 语句12;
②
可以在内层的IF语句中将ELSE关键字写出来,在ELSE分支中的语以用空语句来实现。
…
THEN
IF 布尔表达式2
THEN 语句21
ELSE
ELSE 语句12;
3.2.3IF语句嵌套在ELSE子句中
IF 布尔表达式1
THEN 语句11
ELSE
IF布尔表达式2
THEN 语句21
ELSE
IF 布尔表达式3
THEN 语句31
ELSE 语句32
例:
输入一个年号,判断它是否是闰年。
判断闰年的算法是:
如果此年号能被400除尽,
则它是闰年
否则
如果它能被