首页                        1  2  3  4  5

 

 

第三章                 选择结果程序设计

 

§    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<xa/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,bc中。

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语句的语法图中,出现在THENELSE之后的语句,同样可以是IF语句,这种情况称为IF语句的嵌套.

 

3.2.1嵌套中THENELSE的配对规则.

     []  有一函数

             +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)

问题出在THENELSE的配套关系上。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 布尔表达式2THEN 语句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除尽,

         则它是闰年

   否则

          如果它能被