3.2 块IF语句

网友投稿 2019-03-29 19:02

https://cdn.china-scratch.com/timg/190331/1Z20I633-0.jpg

块IF语句比行IF语句功能更强,适应面更广,它能够通过IF—THEN—ELSE、IF—ELSE—END IF结构实现任意多个分支,并从任意多个分支中选择其中一个分支执行。块IF语句至少占用两个语句行。

3.2.1 块IF语句格式

当THEN部分和ELSE部分包含比较多的内容,需执行多个语句时,用行IF实现选择结构,在一行内就难以容纳,而且程序读起来也不清晰。QBASIC提供的“块IF”结构,即是一将一个选择结构用若干个语句来实现。

块IF的一般格式如下:

IF<条件>THEN

[<语句组1>]

ELSE

[<语句组2>]

END IF

关于块 IF结构的说明如下:

(1)执行块IF时,先判断所给的条件是否满足:如求出逻辑表达式的值为真,条件满足,则执行语句组1,然后跳过ELSE行和语句组2,由END IF出口;如果逻辑表达式为假,条件不满足,则跳过THEN部分,执行ELSE部分的语句组2,然后由END IF出口。

(2)语句组1和语句组2可以包含多个语句行。

(3)ELSE部分是任选的,即此部分可有可无。例如:

IF a > 8 THEN

Print a

End if

就无ELSE部分,也是合法的。

(4)IF-THEN必须写在一行上,THEN是该行的行尾,但是“语句组1”不能与IF- THEN写在同一行上。如下面程序的写法是错误的:

IFa>8 THENPRINT a

ELSE

   PRINT “a<=8”

END IF

QBASIC 把第一行认为是一个完整的IF语句,不允许出现其它语句,如果像上面的书写方法,QBASIC语言系统则判断第一条语句为行IF语句,第二行的ELSE没有相应的IF与之配对而给出错误信息。

(5)<语句组1>和<语句组2>可以缺省。例如:

IF b>0 THEN

ELSE

END IF

是合法语句,但无任何实际意义。

(6)ELSE和“语句组2”可以在一行上书写。例如:

IF a>0 THEN

ELSE PRINT a

END IF

这样书写方法是合法的,但使用这种方法书写,程序看起来不清晰,容易出现错误,一般最好还是将ELSE独占一行为好。

(7)块IF结构IF—END IF是一个选择体,IF和END IF成对出现。<语句组1>或<语句组2>中都允许嵌套块IF结构,当出现嵌套层时,可用向内缩进若干列的方法,形成锯齿形排列的形式,以便于了解层次关系。

【例3.4】将任意3个整数按由大到小进行排列。

解:设三个整数位a,b,c。第一先将a与b比较,a>b则a是大数不交换,ac则a是大数不交换,a< p="">

再将b与c比较,b>c则不交换,b< p="">

经过比较由大到小的顺序已排好。程序的NS图如图3.7所示。

https://cdn.china-scratch.com/timg/190331/1Z20LC6-1.jpg

程序如下:

INPUT“a,b,c=”;a,b,c

IF b>a THEN

SWAP a,b

END IF

IF c>a THEN

SWAP a,c

END IF

IF c>b THEN

SWAP c,b

END IF

PRINT“a,b,c=”;a,b,c

END

程序运行后,首先输入a,b,c

a,b,c=?9,5,10

程序运行结果为:

a,b,c=10  9  5

  在程序中使用了两变量的交换语句SWAP语句,使得程序减少了许多重复的赋值语句。

3.2.2 块IF的嵌套及ELSE IF的使用

1、块IF的嵌套

在块IF语句中,每个语句允许组包含任何语句,当然也可以包含块IF语句。如果一个快IF语句完全包含在另一块IF语句的一个语句组中,就称为块IF语句的嵌套。块IF语句的嵌套可表示为如下的一般形式:

IF…THEN

   IF…THEN

   ELSE

    :

   END IF

ELSE

    IF…THEN

     :

    ENDIF

END IF

【例3.5】编写一个程序,使用户能输入月份,根据给出的年份和月份判断该月有多少天。

INPUT  “Enter year”;y

INPUT  “Enter month(1-12)”;m

IF (m=4) OR (m=6)OR (m=9) OR (m=11) THEN

  day=30

ELSE

IF(m=1) OR (m=3) OR (m=5) OR (m=7) OR (m=8) OR (m=10) OR (m=12) THEN

      day=31

    ELSE

IF(Y MOD 4=0  AND Y MOD100<>0)OR(Y MOD 4=0  AND Y MOD 400<>0)THEN

       day=29

       ELSE

       day=28

       END IF

    END IF

END IF

PRINT “There are”;day;”daysin the month entered”

END

该程序根据输入的年、月份求出该月的天数day,程序使用了块IF的结构嵌套。用户使用嵌套方法时应注意IF-END IF的配合出现,假设不是成对出现,系统将作出错误处理。

2、块IF语句中使用ELSE IF

使用 ELSE IF的块IF结构的一般格式为:

      IF <</strong>条件1> THEN

        <</strong>语句组1>

      ELSE IF<</strong>条件2> THEN

        <</strong>语句组2>

ELSE IF<</strong>条件3> THEN

        <</strong>语句组3>

ELSE IF<</strong>条件n> THEN

    <</strong>语句组n>

ELSE

<</strong>语句组n+1>

END IF

当条件1满足执行语句组1,若条件1不满足而满足条件2则执行语句组2;若条件1和条件2都不满足而满足条件3,则执行语句组3……若条件1到n都不满足,则执行语句组n+1.只要执行完某一个语句组即跳到END IF退出块IF结构。

INPUT  “Enter year”;y

INPUT  “Enter month(1-12)”;m

IF (m=4) OR (m=6)OR (m=9) OR (m=11) THEN

  day=30

ELSE IF(m=1) OR (m=3)OR (m=5) OR (m=7) OR (m=8) OR (m=10) OR (m=12) THEN

      day=31

ELSE IF(Y MOD 4=0 AND Y MOD 100<>0)OR(Y MOD 4=0  AND Y MOD 400<>0)THEN

       day=29

    ELSE

       day=28

END IF

PRINT “There are”;day;”daysin the month entered”

END

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com