Fortran基础语法速览——从零开始编写你的第一个程序

发布时间:2026/5/26 20:46:01

Fortran基础语法速览——从零开始编写你的第一个程序 1. 为什么选择Fortran如果你正在寻找一门专为科学计算而生的编程语言Fortran绝对值得考虑。我第一次接触Fortran是在研究生阶段当时需要处理大量气象数据。教授说用Fortran吧它的数组计算速度比Python快20倍。事实证明他是对的——我用Fortran重写的算法运行时间从3小时缩短到了9分钟。FortranFormula Translation的缩写诞生于1957年是现存最古老的高级编程语言之一。但别被它的年龄吓到现代Fortran如Fortran 90/95/2003早已不是当年的模样。它保留了高效的数值计算能力同时加入了模块化、面向对象等现代特性。NASA的气候模拟、欧洲核子研究中心CERN的粒子物理计算、金融领域的量化分析这些高性能计算场景中都能看到Fortran的身影。2. 搭建开发环境2.1 安装编译器在开始写代码前我们需要一个Fortran编译器。推荐使用免费的gfortran它是GNU编译器集合GCC的一部分Windows用户下载MinGW-w64安装包记得勾选gfortran组件Mac用户用Homebrew一键安装brew install gccLinux用户通过包管理器安装例如Ubuntu下sudo apt install gfortran安装完成后在终端输入gfortran --version如果看到版本信息就说明安装成功。我建议配合VS Code使用安装Modern Fortran插件后可以获得语法高亮和代码提示。2.2 第一个程序打开文本编辑器输入以下代码! 我的第一个Fortran程序 program hello implicit none print *, 你好世界 end program hello保存为hello.f90.f90后缀表示使用Fortran 90标准。然后在终端编译运行gfortran hello.f90 -o hello ./hello看到屏幕输出你好世界时恭喜你迈出了第一步这个简单程序包含几个关键元素!开头的行是注释program hello和end program hello定义了程序边界implicit none是个好习惯它要求所有变量必须显式声明print *是最简单的输出语句3. 基础语法要素3.1 变量与数据类型Fortran是静态类型语言使用变量前必须先声明。基本数据类型包括类型声明说明示例值integer整型42real单精度浮点数3.14159double precision双精度浮点数1.23456d0character(len10)字符串Hellological布尔值.true.来看个实际例子program variables implicit none integer :: age 30 real :: height 1.75 character(len20) :: name 张三 logical :: is_student .false. print *, 姓名:, name print *, 年龄:, age print *, 身高:, height, 米 print *, 是否学生:, is_student end program variables注意::符号用于分隔类型和变量名这是Fortran 90的新语法。老式的Fortran 77会直接写integer age但现代编程中建议使用新语法。3.2 输入输出除了简单的print *Fortran提供了更灵活的I/O控制。read用于输入write可以格式化输出program io_demo implicit none real :: weight character(len20) :: pet_name print *, 请输入你的宠物名字: read *, pet_name print *, 请输入宠物重量(kg): read *, weight write(*, (a, f6.2, a)) trim(pet_name), weight, 公斤 ! 输出示例: 小花 3.50公斤 end program io_demo这里的(a, f6.2, a)是格式说明符a表示字符串f6.2表示浮点数总宽度6位小数点后2位trim()函数去除字符串尾部空格4. 编写BMI计算程序现在我们来实践一个完整的BMI身体质量指数计算程序。BMI的计算公式是[ BMI \frac{体重(kg)}{身高(m)^2} ]4.1 程序实现program bmi_calculator implicit none real :: height_cm, weight_kg, height_m, bmi ! 获取用户输入 print *, 请输入身高(cm): read *, height_cm print *, 请输入体重(kg): read *, weight_kg ! 计算BMI height_m height_cm / 100.0 bmi weight_kg / (height_m ** 2) ! 输出结果 print *, 你的BMI指数是:, bmi ! 健康评估 if (bmi 18.5) then print *, 体重过轻 else if (bmi 24) then print *, 正常范围 else if (bmi 28) then print *, 超重 else print *, 肥胖 end if end program bmi_calculator4.2 关键语法解析运算符**表示乘方相当于其他语言的^/是除法注意整数除法会截断所以用100.0而非100条件语句if (条件) then ! 代码块 else if (其他条件) then ! 代码块 else ! 代码块 end if这是Fortran的标准条件结构注意then和end if必不可少类型转换 当混合使用整数和实数时Fortran会自动转换。但显式转换更安全height_m real(height_cm) / 100.05. 常见问题与调试技巧刚开始学习Fortran时我经常遇到这些问题隐式类型问题 忘记写implicit none导致变量名拼写错误时编译器不会报错而是隐式创建一个新变量。比如program bug_demo ! 缺少 implicit none integer :: counter 0 counter counter 1 ! 拼写错误但不会报错 conuter conuter 2 print *, counter ! 输出1而非3 end program数组下标从1开始 与C/Python不同Fortran默认数组下标从1开始real :: temps(3) ! 有效下标是1,2,3 temps(0) 25.0 ! 运行时错误调试建议使用print *输出中间变量值编译时添加-Wall选项显示所有警告gfortran -Wall my_program.f90 -o my_program对于复杂程序可以分模块测试6. 下一步学习建议掌握基础语法后你可以继续探索数组操作 Fortran的数组处理非常高效支持整体运算real :: A(100), B(100), C(100) C A B ! 整个数组相加子程序和函数 将代码模块化function circle_area(radius) real :: circle_area real, intent(in) :: radius circle_area 3.14159 * radius**2 end function文件操作 读写数据文件open(unit10, filedata.txt) read(10, *) some_variable write(10, *) 结果, result close(10)我建议从实际项目入手比如计算物理习题处理实验数据实现简单数值算法如梯形法积分Fortran社区虽然不如Python活跃但仍有许多优质资源。推荐Fortran Wiki英文《Fortran 95/2003 程序设计》中文教材GitHub上的开源Fortran项目

相关新闻