1、第五课 if嵌套与case语句 一、IF语句的嵌套 在if语句中,如果then子句或else子句仍是一个if语句,则称为if语句的嵌套。 例1 计算下列函数 分析:根据输入的x值,先分成x>0与x≤0两种情况,然后对于情况x≤0,再区分x是小于0,还是等于0。 源程序如下: programex; var x:real; y:integer; begin wrtie('Inputx:');readln(x); ifx>0 theny:=1{x>0时,y的值为1} else{x≤0时} ifx=0 the
2、ny:=0 elsey:=-1; writeln('x=',x:6:2,'y=',y); end. 显然,以上的程序中,在then子句中嵌套了一个Ⅱ型if语句。当然程序也可以写成如下形式: programex; var x:real;y:integer; begin wrtie('Inputx:');readln(x); ifx>=0 then ifx>0 theny:=1 elsey:=0 elsey=-1; writeln('x=',x:6:2,'y=',y); end. 但是对于本题,下面的
3、程序是不对的。 y:=0; ifx>=0 then ifx>0theny:=1 elsey:=-1; 明显,从此人的程序书写格式可以看出,他想让else与第一个if配对,而事实上,这是错的。因为pascal规定:else与它上面的距它最近的then配对,因此以上程序段的逻辑意义就与题义不符。 要使上程序段中esle与第一个then配对,应将程序段修改为: y:=0; 或者y:=0; ifx>=0 ifx>=0 thenifx>0 then theny:=
4、1 begin else ifx>0thenY:=1; elsey:=-1; end elseY:=-1;二、case语句 上面我们知道可以用嵌套的if语句实现多分支的选择结构。但是如果分支越来越多时,用嵌套的if语句实现多分支就显得繁杂。当多分支选择的各个条件由同一个表达式的不同结果值决定时,可以用case语句实现。它的选择过程,很象一个多路开关,即由case语句的选择表达式的值,决定切换至哪一语句去工作。因此在分支结
7、opascal中增加了一个"否则"的情况,即增加一个else子句,但也是可省的。 ⑦每个常量后面只能是一个语句或一个复合语句。 例2根据x的值,求函数Y的值: 分析:利用case语句进行程序设计,关键在于巧妙地构造情况表达式。本例中三种情况可用一个表达式区分出来:Trunc(x/100)。因为x在(0~100)之间时表达式值为0;x在[100,200)时表达式值为1;其余部分可用else子句表示。 源程序如下: programex; varx,y:real; begin write('Inputx:');readln(x); ca