《FORTRAN SYNTAX》第2章 流程控制

(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

  1. 《Fortran95程序设计》.彭国伦.中国电力出版社.
  2. 《工程分析程序设计》.陈斌、周屈兰.西安交通大学出版社.
  3. 《Fortran程序设计(第四版)》.Stephen J.Chapman.中国电力出版社.

博 客 创 作 : A i d e n   L e e 博客创作:Aiden\ Lee Aiden Lee
特别声明:文章仅供学习参考,转载请注明出处,严禁盗用!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值