fortran 佛说如是甚深经典。我从昔来所得慧眼。未曾得闻如是之经。
手气不错
Article

012.variableInitialization变量初始化

2026年5月15日未分类

变量初始化指的是——在定义变量时,直接给变量一个初始值

本文代码

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

原因在于

输出内容输出结果原因输出的是
isPiGreaterThanETisPiGreaterThanE的初值为真,因为isPiGreaterThanE后来未被重新赋值初值
isPiLessThan2T同上初值
eValue<3.0T2.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 % 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注