变量初始化指的是——在定义变量时,直接给变量一个初始值。
本文代码
program initializationDemo
implicit none
integer :: termCount=2 ! 变量在定义(声明)时直接赋值的操作称之为初始化,我定义本例中参与计算的项数。
real :: piValue=3.14 ! 声明real类型时初始化
real :: eValue=2.71
logical :: isPiGreaterThanE=.true. ! 声明logical类型时初始化,3.14>2.71为真,初始值与客观判断一致。
logical :: isPiLessThan2=.true. ! 声明logical类型时初始化,3.14<2客观上为假,但这里故意初始化为真。
logical :: isELessThan3=.false. ! 声明logical类型时初始化,先给一个初始值,后面再用关系表达式覆盖。
character(len=10) :: formulaName="pi plus e" ! 声明character类型时初始化
isELessThan3=eValue<3.0 ! 直接把关系表达式eValue<3.0的逻辑值结果赋值给逻辑变量。
print *,"声明时初始化:"
print *,"termCount=",termCount
print *,"piValue=",piValue
print *,"eValue=",eValue
print *,"formulaName=",trim(formulaName)
print *,"以下是三个逻辑"
print *,"pi>e ?=",isPiGreaterThanE
print *,"pi<2 ?=",isPiLessThan2
print *,"e<3 ?=",eValue<3.0
end program initializationDemo
编译运行
(base) hong@hongdeMacBook-Pro 012.variableInitialization % gfortran examplevariableInitialization.f90
(base) hong@hongdeMacBook-Pro 012.variableInitialization % ./a.out
声明时初始化:
termCount= 2
piValue= 3.14000010
eValue= 2.71000004
formulaName=pi plus e
以下是三个逻辑
pi>e ?= T
pi<2 ?= T
e<3 ?= T
(base) hong@hongdeMacBook-Pro 012.variableInitialization %
结果分析
- termCount本是整数类型变量,初始化值为2,没有经过重新赋值,直接输出2。
- pi的值被初始化为单精度实数3.14,输出为3.14000010是二进制近似值的原因,见以pi为例。e值的初始化同理。
- formulaName的值被初始化为pi plus e,被输出pi plus e。
- 接着我设计了三个变量,pi>e,pi<2,e<3,其中pi>e应为真,pi<2应为假,e<3应为真。输出为
- pi>e ?= T
- pi<2 ?= T
- e<3 ?= T
原因在于
| 输出内容 | 输出结果 | 原因 | 输出的是 |
| isPiGreaterThanE | T | isPiGreaterThanE的初值为真,因为isPiGreaterThanE后来未被重新赋值 | 初值 |
| isPiLessThan2 | T | 同上 | 初值 |
| eValue<3.0 | T | 2.71<3.0确实为真 | eValue<3.0的逻辑 |
若仍有不明的读者可把isPiLessThan2想象为人的身高大于10米,我定义逻辑变量myHeightGreaterThan10meters = .true.之后未经验证直接输出myHeightGreaterThan10meters的值,myHeightGreaterThan10meters的初值为真即为真。
另外我尽管在初始化阶段写了logical :: isELessThan3=.false.,但我重新对isELessThan3赋值为eValue<3.0,即eValue<3.0逻辑值.false.,所以在我输出时即便写的是print *,"e<3 =?",isELessThan3而不是print *,"e<3 ?=",eValue<3.0,结果也是正确T(ture)的。
符合客观事实的正确代码与正确表述:
program initializationDemo
implicit none
integer :: termCount=2 ! 变量在定义(声明)时直接赋值的操作称之为初始化,我定义本例中参与计算的项数。
real :: piValue=3.14 ! 声明real类型时初始化
real :: eValue=2.71
logical :: isPiGreaterThanE=.true. ! 声明logical类型时初始化,3.14>2.71为真,初始值与客观判断一致。
logical :: isPiLessThan2=.true. ! 声明logical类型时初始化,3.14<2客观上为假,但这里故意初始化为真。
logical :: isELessThan3=.false. ! 声明logical类型时初始化,先给一个初始值,后面再用关系表达式覆盖。
character(len=10) :: formulaName="pi plus e" ! 声明character类型时初始化
isELessThan3=eValue<3.0 ! 不使用if,直接把关系表达式eValue<3.0的结果赋值给逻辑变量。
print *,"声明时初始化:"
print *,"termCount=",termCount
print *,"piValue=",piValue
print *,"eValue=",eValue
print *,"formulaName=",trim(formulaName)
print *,"pi>e initialized=",isPiGreaterThanE !初始化为真
print *,"pi>e objective logic=",piValue>eValue !客观为真
print *,"pi<2 initialized=",isPiLessThan2 !初始化为真
print *,"pi<2 objective logic=",piValue<2.0 !客观为假
print *,"e<3 computed logic=",isELessThan3 !计算逻辑为真
print *,"e<3 objective logic=",eValue<3.0 !客观逻辑为真
end program initializationDemo
重新编译运行
(base) hong@hongdeMacBook-Pro 012.variableInitialization % gfortran examplevariableInitialization.f90
(base) hong@hongdeMacBook-Pro 012.variableInitialization % ./a.out
声明时初始化:
termCount= 2
piValue= 3.14000010
eValue= 2.71000004
formulaName=pi plus e
pi>e initialized= T
pi>e objective logic= T
pi<2 initialized= T
pi<2 objective logic= F
e<3 computed logic= T
e<3 objective logic= T
(base) hong@hongdeMacBook-Pro 012.variableInitialization %