返回介绍

2.3.1 块 IF 构造

发布于 2025-03-08 16:28:31 字数 4690 浏览 0 评论 0 收藏 0

a) 块 IF 的组成和执行

块 IF 的一般形式可写成:

IF(逻辑表达式) THEN ← 块 IF 语句

块 1 ← then 块

ELSE

块 2 ← else 块

END IF

块 IF 语句不是一个单独语句。块 IF 语句、ELSE 语句和 ENDIF 语句只能用在块 IF 中而不能单独使用,它们必须和块 IF 中其它语句联系起来共同起作用。可以说一个块 IF 是一个语句块(决不能只包括一个语句),用来实现选择结构。但是,块 IF 可以不包含 ELSE 语句和 else 块。then 块是当块 IF 语句中的逻辑表达式为真时执行的语句组。 [e_231_01.f90]

块 IF 的执行步骤为:先执行块 IF 语句,求出逻辑表达式的值,如果此值为“真”,则将流程转到 then 块。执行 then 块中各个执行语句。执行完 then 块后跳过 ELSE 语句和 else 块,流程转到 END IF 语句处。如果逻辑表达式的值为“假”,则流程跳过 then 块,转到 ELSE 语句及 else 块。执行完 else 块以后流程转到 END IF 语句。END IF 语句是块 IF 的“出口”,无论执行完 then 块或 else 块,流程都转到 END IF 语句,接着执行 ENDIF 语句之后的下一语句。END IF 语句本身不进行什么操作,它是块 IF 的结束符号,用它标志块 IF 的范围(块 IF 语句开始,END IF 结束)。

一个块 IF 中可完整地包含另一个(或多个) 块 IF,称为块 IF 的嵌套。注意嵌套时不能交叉。

b) ELSE IF 语句

在块 IF 中,then 块和 else 块还可以包含另一个块 IF,即上面介绍的块 IF 的嵌套。如果嵌套的层次比较多,而每一个块 IF 又都要包含块 IF 语句、ELSE 语句、ENDIF 语句,程序就会冗长。而且每一层的嵌套都向右缩进,层次多时就会发生困难,无法再向右缩进了。

F77 提供 ELSE IF 语句来处理“否则,如果……”的情况。其一般形式为:

IF(逻辑表达式 1) THEN

… then 块

ELSE IF(逻辑表达式 2) THEN

… else if 块

ELSE

… else 块

END IF

当处理多分支选择时,用数条 ELSE IF 语句往往比较方便,在程序中 ELSE IF 语句不必向右缩进,而连续用多个 ELSE IF 语句表示各个条件的选择。注意块 IF 语句必须有一个 END IF 语句与之对应。而 ELSE IF 语句不需 END IF 语句与之对应,它可以有与之配对的 ELSE 语句。

例:解[e_231_02.f90]

c) 块 IF 构造

F90 明确提出了块的概念。块是作为单元看待的一个可执行构造的序列,它可用于 IF 构造、CASE 构造和 DO 构造中,对这三种构造都可命名(即标签)。块的规则为:1) 如果一个块中包含一个可执行构造,那么它必须完整地被包含在该块中。2) 禁止从块的外部转入块的内部,可以在块的内部进行控制转移,也可以从块内转移到块的外部。3) 块是可以嵌套的。

IF 构造的一般形式为:

[构造名:] IF(e1) THEN

块 1

[ELSE IF(e2) THEN [构造名]

块 2]

[ELSE IF(en) THEN [构造名]

块 n]

[ELSE [构造名]

块 n+1]

END IF [构造名]

其中 e1,…,en是逻辑表达式,指出各种条件。语句块是一组语句,内容是当 e 成立(e 逻辑表达式值为真)时要执行的算法。IF 构造的控制机制为:(1) 检查 e1真否。真,执行块 1,绕过其它块,直接转出口语句 END IF 处出口;假,跳过块 1,检查 e2真否。(2) e2真,执行块 2,而后直接转出口;假,跳过块 2,检查 e3,以此类推;(3) 如果所有 ELSE IF 语句的 e 都是假,那么必须执行 ELSE 语句下的块 n+1。如果 IF 构造中没有 ELSE 语句,就什么也不执行,转出口。由此可见,执行 IF 构造,自上而下顺次检查每块前面的条件,满足条件的就执行该条件下面的块,执行完该块后立即转向出口。以后即使还有块满足条件(条件可以相交),也不予理睬。因此,一个 IF 构造中最多只执行一块,也可能一块也不执行。

例:输入实数 x,求下面的三角波脉冲函数 F(x) 的值。 [e_231_03.f90]

d) IF 构造的缺省形式

在 IF 构造中,then 块、else if 块、else 块都可以缺省。缺省有两种形式,一种是构造中出现该类语句,但后面没有算法语句块;一种是连该类语句一起省略。这两种情况使执行时可能结果不同,应按控制机理仔细分析。

只有 then 块

IF(e) THEN

块 1

END IF

当 e 真,执行块 1,e 假,则不执行任何语句,此时 IF 构造相当于没有。

缺省 else if 块

如果连 ELSE IF 语句省去:

IF(e) THEN

块 1

ELSE

块 2

END IF

则 e 真执行块 1,假执行块 2。

如果保留 ELSE IF 语句,缺省下面块:

IF(e1) THEN

块 1

ELSEIF(e2) THEN

ELSE

块 2

END IF

则 e1真执行块 1,e1假、但 e2真时不作任何操作,转出口,e1和 e2都假时,执行语句块 2。

缺省 else 块

IF(e1) THEN

块 1

ELSEIF(e2) THEN

块 2

END IF

则 e1真执行块 1,e1假、但 e2真语句块 2,e1和 e2都假时不作任何操作。

缺省 then 块

IF THEN 语句必须有,但后随的块可以缺省:

IF(e1) THEN

ELSEIF(e2) THEN

块 2

ELSE

块 n+1

END IF

则 e1真时,整个构造等于空设,什么也不执行。只有当 e1为假时,才会一块块检查下去。

e) IF 构造的嵌套

IF 构造的任一语句块中(then 块、else if 块、else 块)都可以嵌入另一个构造,被嵌入的构造可以是另一 IF 构造,也可以是另一些形态、功能不同的构造,如 CASE 构造、DO 构造,前提是必须把整个构造完整地嵌在 IF 构造的某一块中,不允许一部分嵌在一个块中,另一部分嵌在另一个块中,即被嵌入的任何构造不可跨越两块。

在 IF 构造嵌套时,为了清晰区分内层与外层构造,一般应对内、外层构造分别取名,并且内层构造要缩进几格(可用[Tab]键统一缩进)。

在某些场合 IF 构造嵌套是必需的,但嵌套过多,阅读时要一层层地记住前面各层的条件,容易出错,也不易维护,应尽量减少嵌套。办法是把条件分细,列成多句 ELSE IF 语句。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文