欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Fortran】分支结构(IF语句和SELECT CASE结构)

程序员文章站 2022-05-03 08:24:47
...

【Fortran】分支结构



【1】IF语句

1) 使用方式

使用1(最常规)
IF(logical_expression) THEN
    expression_1
    expression_2
  ...
END IF

注意事项:

  • IF( * )THEN....END IF是固定结构;
  • logical_expression为真时,才执行expression_1expression_2等语句;
  • expression_1等执行语句的缩进不是必须的,只是为了提高可读性。
使用2(复杂)
IF(logical_expression_1) THEN
    expression_1
    expression_2
      ...
ELSE IF(logical_expression_2) THEN
    expression_3
    expression_4
      ...
ELSE
    expression_5
    expression_6
      ...
END IF

注意事项:

  • IF( * )THEN....END IF是固定结构;
  • 可以有多个ELSE IF子句,ELSE子句只有一个
  • logical_expression_1为真时,执行expression_1等语句,当logical_expression_1为假时,对logical_expression_2进行判断,为真时执行expression_3等语句,为假则跳至ELSE中,执行expression_5等语句;
  • 执行语句的缩进不是必须的,只是为了提高可读性。
使用3(仅适于单条执行语句)
IF(logical_expression)  expression

2) 命名方式(可选)

用途:在大型项目中,能够一眼看出ELSE IFELSE子句数是属于哪一结构块的。

[name:]IF(logical_expression_1) THEN
    expression_1
    expression_2
      ...
ELSE IF(logical_expression_2) THEN [name]
    expression_3
    expression_4
      ...
ELSE [name]
    expression_5
    expression_6
      ...
END IF [name]

3) 嵌套

IF(logical_expression_1) THEN
    expression_1
    expression_2
     ...
	IF(logical_expression_2) THEN
	expression_3
	expression_4
	...
	END IF  !判断表达式2的结构块
END IF    !判断表达式1的结构块

注意事项:

  • 最好指定名字,不然出现错误会很难排查。

由于IF语句很好理解,就不一一举例子了。


【2】SELECT CASE结构

1) 使用方式

[name:] SELECT CASE( case_expression )
CASE(status_1) [name]
    expression_1
CASE(status_2) [name]
    expression_1
...
CASE(status_n) [name]
    expression_n    

CASE DEFAULT [name]
    expression_m  
END SELECT [name]    

注意事项:

  • case_expression是研究对象,status是必须满足的条件,如果研究对象满足条件,则执行相应的子块;
  • 从上往下一直对case_expression进行条件status判断,当各个status均不满足时,执行DEFAULT子块,最终结束该模块;
  • DEFAULT子块不是必须要有的,但尽量留有,一方面保持结构的完整性,另一方面可以用来建立警告信息(即当case_expression均不满足条件时,返回一个判断信息)
  • case_expression可以是整数、字符或逻辑表达式,不能是实数型
  • status的类型要与 case_expression相对应,可以是整数、字符或逻辑表达式,还可以是数值范围,如(a:)(:b)(a:b)(表示 a≤数值≤b),或集合,如(a,b,c,d),要用逗号隔开。同时,要求各个status相互独立,没有交集;

2) 例子

例子通俗易懂,程序运行一遍可知,不过多解释了。

PROGRAM my_test
IMPLICIT NONE
CHARACTER(len=10)::human_stage
INTEGER::year

WRITE(*,*) "年龄大小,整数形式"
READ(*,*)  year

abc:SELECT CASE( year )
CASE(0:44) abc     ! 0~44岁为青年人
    human_stage = '青年人'
CASE(45:59) abc     ! 45~59岁为中年人
    human_stage = '中年人'
CASE(60:) abc     ! 60岁之后为老年人
    human_stage = '老年人'    
CASE DEFAULT abc
    human_stage = '输入错误'    ! 返回信息
END SELECT abc 

WRITE(*,*) 'human = ',human_stage

STOP 
END PROGRAM my_test