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

004.variableTypeAndImplicitNone_变量类型与显示声明

2026年5月11日入门级

本例中我构建了一个直流电阻电路和一个简单交流阻抗场景。直流部分使用欧姆定律V=I*R。交流部分用复数阻抗Z=R+jX表示电阻和电抗。本例用这些基础电磁学量演示入门级的五种基础类型:integerrealcomplexlogicalcharacter

implicit none 要求所有变量必须先声明后使用

本文代码

program variableTypeAndImplicitNoneDemo
  implicit none
  ! 变量定义开始
  character(len=24) :: circuitName     ! 定义电路名称,使用character文本类型
  integer :: resistorCount             ! 定义电阻数量这类整数,integer整数类型
  real :: resistanceOhm                ! 定义电阻值,单位是ohm。real实数类型
  real :: currentAmpere                ! 定义电流值,单位是A。real类型
  real :: voltageVolt                  ! 定义电压值,单位是V。real类型
  complex :: impedanceOhm              ! 定义交流复阻抗,实部是电阻,虚部是电抗。用complex类型。
  complex :: acCurrentAmpere           ! 定义交流电流的复数表示。complex类型
  complex :: acVoltageVolt             ! 定义交流电压的复数表示。complex类型
  logical :: isVoltageSafe             ! 定义“电压是否安全”的真假判断。logical类型
  ! 变量定义结束

  ! 赋值操作:左侧必须是已声明的变量名,右侧是值、变量或公式表达式。赋值号=并非数学意义的恒等式,而是“把右侧计算结果存入左侧变量”。
  circuitName = "basic ohm circuit"    ! 左侧是character变量;右侧是字符字面量,必须用引号包住文本。
  resistorCount = 1                    ! 左侧是integer变量;右侧是整数值,表示电路中有1个电阻。
  resistanceOhm = 10.0                 ! 左侧是real变量;右侧写成10.0,表示实数电阻值10ohm。
  currentAmpere = 2.0                  ! 左侧是real变量;右侧写成2.0,表示实数电流值2A。
  voltageVolt = currentAmpere * &      ! 左侧是real变量;右侧是公式表达式,先计算I*R再存入电压变量。
                resistanceOhm
  impedanceOhm = (10.0, 5.0)           ! 左侧是complex变量;右侧(real,imag)表示10+5i ohm。
  acCurrentAmpere = (2.0, 0.0)         ! 左侧是complex变量;右侧表示交流电流2+0i A。
  acVoltageVolt = acCurrentAmpere * &  ! 左侧是complex变量;右侧是复数乘法表达式,计算交流电压。
                  impedanceOhm
  isVoltageSafe = voltageVolt < 36.0   ! 左侧是logical变量;右侧是关系表达式,结果为真或假。

  print *, "变量类型与implicit none:"        ! 输出示例标题。
  print *, "电路名称 circuitName =", &        ! 输出character变量,trim去掉尾部空格。
           trim(circuitName)
  print *, "电阻数量 resistorCount =", resistorCount  ! 输出integer变量。
  print *, "电阻 resistanceOhm  =", resistanceOhm, "ohm"  ! 输出real变量resistanceOhm。
  print *, "电流 currentAmpere  =", currentAmpere, "A"  ! 输出real变量currentAmpere。
  print *, "电压 voltageVolt    =", voltageVolt, "V"  ! 输出由欧姆定律计算出的real变量。
  print *, "复阻抗 impedanceOhm =", impedanceOhm, "ohm"  ! 输出complex变量impedanceOhm。
  print *, "交流电流 acCurrentAmpere =", &    ! 输出complex变量acCurrentAmpere。
           acCurrentAmpere, "A"
  print *, "交流电压 acVoltageVolt   =", &    ! 输出复数乘法得到的complex变量。
           acVoltageVolt, "V"
  print *, "直流电压是否低于 36 V =", &       ! 输出logical变量,T=.true,F=.false。
           isVoltageSafe
end program variableTypeAndImplicitNoneDemo

编译与运行

(base) hong@hongdeMacBook-Pro 004.variableTypeAndImplicitNone % gfortran exampleVariableTypeAndImplicitNone.f90
(base) hong@hongdeMacBook-Pro 004.variableTypeAndImplicitNone % ./a.out 
 变量类型与 implicit none:
 电路名称 circuitName =basic ohm circuit
 电阻数量 resistorCount =           1
 电阻 resistanceOhm  =   10.0000000     ohm
 电流 currentAmpere  =   2.00000000     A
 电压 voltageVolt    =   20.0000000     V
 复阻抗 impedanceOhm =             (10.0000000,5.00000000) ohm
 交流电流 acCurrentAmpere =             (2.00000000,0.00000000) A
 交流电压 acVoltageVolt   =             (20.0000000,10.0000000) V
 直流电压是否低于 36 V = T

运行结果分析

  • character类型用来保存文本。
    • circuitName是character(len=24) 类型;
    • 输出时使用trim(circuitName),所以尾部空格被去掉;
    • character(len=24) :: circuitName用自然语言解释可以是”定义了名为circuitName、最大长度是24字符的字符型变量“,以下不再重复;
    • 另外,若赋值不足24字符,则用空格补全;若赋值超过24字符,则截断。
  • integer类型用来保存整数。
    • 如resistorCount表示电阻数量;
    • 整数类型适合表示“个数、编号、次数”等没有小数的量。
  • real类型存储实数。
    • 电阻 resistanceOhm = 10.0000000 ohm;
    • 电流 currentAmpere = 2.00000000 A;
    • 电压 voltageVolt = 20.0000000 V;
    • 以上都是real类型,在程序中currentAmpere和resistanceOhm被赋值,voltageVolt经currentAmpere*resistanceOhm计算。
  • complex复数类型。
    • 复阻抗 impedanceOhm = (10.0000000,5.00000000) ohm,Fortran中复数字面量:(10.0, 5.0)表示10.0+5.0i,前实后虚;
    • 交流电流 acCurrentAmpere = (2.00000000,0.00000000) A表示2.0+0.0i
    • 关于交流电压 acVoltageVolt = (20.0000000,10.0000000) V ,acVoltageVolt = acCurrentAmpere * impedanceOhm = (2.0 + 0.0i) * (10.0 + 5.0i) = 20.0 + 10.0i,输出(20.0000000,10.0000000)
  • logical是逻辑类型。
    • isVoltageSafe是logical类型。
    • isVoltageSafe = voltageVolt < 36.0,这里的=赋值运算符,并非数学符号,不作关系比较,而<关系运算符,用于判断"小于",因此要把=的右侧看成一个整体。用自然语言解释”先计算右侧表达式 voltageVolt<36.0,再将逻辑结果赋值给左侧 isVoltageSafe“,即如果小于36V,我认为是安全的。

知识点总结

  • implicit none的作用:要求所有变量必须先声明、后使用,避免编译器按变量名首字母自动推断类型。
  • 赋值语句的基本形式:变量名 = 值或表达式
  • 左侧必须是变量,右侧可以是字面量、变量或公式表达式。程序会先计算右侧,再把结果存入左侧变量。

发表回复

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