返回介绍

2.3.2 多重选择和 CASE 构造

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

a) 整型

F90 增加了 CASE 构造,提供了从几个可选项中选取一个执行的手段,这是因为在某些多种条件的选择情况下使用 IF 构造显得比较繁琐,而使用 CASE 构造可是程序显得直观、简短。CASE 构造控制和块 IF 构造类似,它也是用来编写分叉选择算法,也是根据条件区分作不同的算法,不同的是它只能把某个量分成若干个孤立的离散值,按不同值作不同处理。在处理复杂、多种交叉的条件时不像 IF 构造方便,但更为简明。其一般形式为:

[构造名:] SELECT CASE(case 表达式)

CASE(case 选择符) [构造名]

[CASE DEFAULT [构造名]

块]

END SELECT [构造名]

其中,case 表达式是整型、字符型或逻辑型表达式,不能是实型和复型表达式。SELECT CASE 是入口语句,END SELECT 是出口语句。case 选择符是 case 值范围表,它有以下四种形式:

(值表) 表示等于该值,各值之间用逗号分开

(下界:) 表示大于或等于该值

(:上界) 表示小于或等于该值

(下界: 上界) 表示在这两个值之间(包括等于)

上面的四种表示方法可以混用,如 CASE(2:5,9) 等价于 CASE(2,3,4,5,9)。

CASE DEFAULT 语句是可选的,当 case 表达式的值在 case 值范围以外时,执行 CASE DEFAULT 语句后面的块。CASE 构造的执行顺序是:先计算 case 表达式的值,当它落在值范围内,则执行其后的块。注意,CASE 语句是一条单独的语句。

例:错误语句 CASE(0:59) PRINT*,"不及格"

正确写法 CASE(0:59);PRINT*,"不及格"

例:统计学生考试成绩:100 分为满分,85 分以上为优,70-84 为良,60-69 为及格,59 分以下不及格。 [e_232_01.f90]

CASE 构造的规则是:1) CASE DEFAULT 语句最多只能有一句;2) case 值必须与表达式的类型相同;3) 给定 CASE 构造中的 case 值范围不能有重叠;5) CASE 块可以是空的,也可以包含其它块,其嵌套形式与块 IF 相同。

程序执行时,CASE 构造的控制机制是:(1) 控制进入 CASE 构造后,先计算情况表达式的值;(2) 如果第一个 CASE 语句选择符值与情况表达式值相等则执行语句块 1,转出口;(3) 如第一个选择符值不为情况表达式的值,再查下一个 CASE 语句的选择符值,满足执行语句块 2,转出口,不满足再查下一个 CASE 语句的选择符值,直至全部情况选择符值都检查完;(4) 如果全部情况选择符值都不符情况表达式的值,且又有 CASE DEFAULT 语句,则执行该语句后的 DEFAULT 块,否则直接转出口。

例:块 IF 包含 CASE 块。(有无错?)

if_construct: if(a.gt.0) then

case_construct_b: select case (b)

case(:0)

……

case(0:)

……

end select case_construct_b

else

case_construct_c: select case (c)

case(:0)

……

case(0:)

……

end select case_construct_c

end if if_construct

b) 字符型

设要编一程序,把学生按专业划分以便检索,专业分为天体物理、应用物理、理论物理三种,把每个专业应修的课程依次编成语句块 1、块 2、块 3,构造名为 DEPARTMENT_22_MAJOR,专业变量名为 MAJOR,则 CASE 构造为:

DEPARTMENT_22_MAJOR: SELECT CASE(MAJOR)

CASE(‘Astronomical Physics’)

语句块 1

CASE(‘Applied Physics’)

语句块 2

CASE(‘Theoretical Physics’)

语句块 3

END SELECT DEPARTMENT_22_MAJOR

则当变量 MAJOR 取值为‘Applied Physics’时,执行语句块 2(例如它的功能是打印出学生专业课程成绩),如此等等。

例:字符型选择。 [e_232_02.f90]

c) 逻辑型

当 case 表达式为逻辑表达式时,CASE 语句中的情况选择符也要取逻辑值:真或假。由于它不可能取多于两个的值,因此在逻辑型的情况选择符内不允许写成一个值域范围(即始值:终值形式)。

设有一个关系表达式 X>=3,当成立时打印‘YES’,否则打印印‘NO’。CASE 构造为:

SELECT CASE(X>=3)

CASE(.TRUE.)

PRINT *,‘YES’

CASE(.FALSE.)

PRINT *,‘NO’

END SELECT

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

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

发布评论

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