(2.1) 逻辑运算
关系逻辑运算符 | 含义 | 关系逻辑运算符 | 含义 |
---|---|---|---|
== 或.EQ. | 相等 | /= 或.NE. | 不相等 |
> 或.GT. | 大于 | < 或.LT. | 小于 |
>= 或.GE. | 大于等于 | <= 或.LE. | 小于等于 |
组合逻辑运算符 | 含义 | 组合逻辑运算符 | 含义 |
---|---|---|---|
.AND. | 且 | .OR. | 或 |
.EQV. | 同或 | .NEQV. | 异或 |
.NOT. | 非 |
(2.2) 分支结构
IF(逻辑运算) 执行语句
IF(a) 10,20,30 !a<0,GOTO 10;a=0,GOTO 20;a>0,GOTO 30
[name:] IF(逻辑运算1) THEN
执行语句1
ELSE IF(逻辑运算2) THEN [name]
执行语句2
...
ELSE IF(逻辑运算n-1) THEN [name]
执行语句n-1
[ELSE [name]]
[执行语句n]
END IF [name]
[name:] SELECT CASE(变量)
CASE(常量1) [name]
执行语句1
...
CASE(常量n-1) [name]
执行语句n-1
[CASE DEFAULT [name]]
[执行语句n]
END SELECT [name]
!CASE中的变量类型只能是整型、单个字符、逻辑型
CASE(1,3,5) !变量=1、3、5时执行CASE中的模块
CASE(1:5) !变量=1、2、3、4、5时执行CASE中的模块
CASE(1:) !变量>=1时执行CASE中的模块
CASE(:5) !变量<=5时执行CASE中的模块
(2.3) 循环结构
[name:] DO 迭代器 = 循环初值,循环终值,步长
循环语句
END DO [name]
[name:] DO WHILE(逻辑运算)
循环语句
END DO [name]
[name:] DO
循环语句1
IF(逻辑运算) EXIT [name]
循环语句2
END DO [name]
(2.4) 其他流程控制语句
PAUSE !暂停程序
EXIT !跳出该层循环
CYCLE !跳过该次循环
GOTO !任意跳转到想要的行代码处
CONTINUE !程序从该处继续执行
[ERROR] STOP !程序停止运行
[ERROR] STOP n !程序停止运行,并且打印n
[ERROR] STOP 'Error' !程序停止运行,并且打印“Error”
(2.5) 流程控制的应用
!小型交互式计算器
PROGRAM main
IMPLICIT NONE
REAL :: a,b,ans
CHARACTER oper
PRINT*,"请输入第一个数:"
READ*,a
PRINT*,'请输入运算符号(+、-、*、/):'
READ(*,'(A1)') oper
PRINT*,'请输入第二个数:'
READ*,b
SELECT CASE(oper)
CASE('+')
ans = a + b
CASE('-')
ans = a - b
CASE('*')
ans = a * b
CASE('/')
ans = a / b
CASE DEFAULT
WRITE(*,*) '未知运算符!'
STOP
END SELECT
WRITE(*,"(F6.2,A1,F6.2,'=',F6.2)") a,oper,b,ans
END PROGRAM main
!猜数字游戏
PROGRAM main
IMPLICIT NONE
INTEGER :: guess_time = 0 !记录猜测次数
REAL,PARAMETER :: err = 0.1 !猜测偏差
REAL :: temp_num
REAL :: random_num !记录随机生成的0~10之间的随机数
REAL :: guess_num !记录用户猜测的数
CALL random_seed() !随机数种子
CALL random_number(temp_num) !生成0~1之间的随机数保存在temp_num中
random_num = 0 + (10 - 0) * temp_num !这才是0~10之间的随机数
DO WHILE(guess_time < 11) !只有10次机会
guess_time = guess_time + 1
WRITE(*,*) '请猜测:(0~10之间的小数,精确到小数点后一位)'
READ(*,*) guess_num
IF(ABS(guess_num - random_num) < err) EXIT
WRITE(*,"('猜错了,你还有',I2,'次机会。')") 10 - guess_time
IF(random_num >= 0.0 .AND. random_num <= guess_num) THEN
WRITE(*,"('答案在0.0~',F3.1,'之间。')") guess_num
ELSE
WRITE(*,"('答案在',F3.1,'~10.0之间。')") guess_num
END IF
END DO
IF(guess_time == 10) THEN
WRITE(*,*) '很遗憾,机会已使用完,你没能猜中!'
STOP
END IF
WRITE(*,"('恭喜你猜对了!一共猜了',I2,'次。')") guess_time
END PROGRAM main
!字符串加密
PROGRAM main
IMPLICIT NONE
INTEGER :: i,str_len,key
CHARACTER(len = 20) :: str
WRITE(*,*) '请输入想要加密的字符串:'
READ(*,"(A20)") str
WRITE(*,*) '请输入加密密码:'
READ(*,*) key
str_len = LEN_TRIM(str) !获取字符串长度
DO i = 1,str_len
!第i个字符的ASCII码加key再将其转为字符赋给其本身
str(i:i) = CHAR(ICHAR(str(i:i)) + key)
END DO
WRITE(*,"('加密后的字符串:',A20)") str
END PROGRAM main
《 F O R T R A N S Y N T A X 》 系 列 博 客 创 作 参 考 资 料 来 源 《FORTRAN\ SYNTAX》系列博客创作参考资料来源 《FORTRAN SYNTAX》系列博客创作参考资料来源
- 《Fortran95程序设计》.彭国伦.中国电力出版社.
- 《工程分析程序设计》.陈斌、周屈兰.西安交通大学出版社.
- 《Fortran程序设计(第四版)》.Stephen J.Chapman.中国电力出版社.
博 客 创 作 : A i d e n L e e 博客创作:Aiden\ Lee 博客创作:Aiden Lee
特别声明:文章仅供学习参考,转载请注明出处,严禁盗用!