- 第一章 Fortran 语言程序设计初步
- 第二章 改变程序流程
- 第三章 循环结构
- 第四章 数据结构
- 第五章 数组
- 第六章 过程和模块
- 第七章 输入输出和文件
2.3.2 多重选择和 CASE 构造
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论