贝博恩创新科技网

Compaq Fortran教程如何快速入门?

Compaq Visual Fortran 是一款在 Windows 平台上非常经典和强大的 Fortran 90/95 开发环境,它由 Compaq 公司开发,后 HP 继承了其版权,虽然现在已经停止官方支持,但因其稳定性和易用性,至今仍有大量科学计算和工程领域的工程师在使用。

Compaq Fortran教程如何快速入门?-图1
(图片来源网络,侵删)

这份教程将从环境搭建、基础语法到实际项目开发,一步步引导你入门。


第一部分:环境搭建与入门

什么是 Compaq Visual Fortran (CVF)?

CVF 是一个集成开发环境,它将 Fortran 编译器调试器编辑器 集成在了一起,你可以用它来编写、编译、调试和运行 Fortran 程序。

  • 编译器: 将你写的 Fortran 源代码 (.f90, .for 文件) 转换成可执行文件 (.exe)。
  • 调试器: 帮助你找到程序中的错误(Bug),例如设置断点、查看变量值等。
  • 编辑器: 提供代码编写、语法高亮、自动缩进等功能。

安装 Compaq Visual Fortran

由于 CVF 已停止销售,你需要从合法的渠道获取安装文件,通常可以在一些技术论坛、大学资源库或二手软件平台找到。

安装步骤:

Compaq Fortran教程如何快速入门?-图2
(图片来源网络,侵删)
  1. 运行安装程序: 找到 setup.exe 并运行。
  2. 序列号: 安装过程中会要求输入序列号,如果你没有,可以尝试在网上搜索通用的试用序列号或破解方法(请注意版权和软件许可问题)。
  3. 选择安装组件: 建议全部安装,包括:
    • Fortran 编译器: 核心组件。
    • Visual Studio 集成: 让 CVF 的编辑和调试功能无缝集成到 Visual Studio 中。强烈建议安装!
    • 示例程序和文档: 对新手非常有帮助。
  4. 完成安装: 安装完成后,你的电脑上会出现 "Compaq Visual Fortran" 和 "Microsoft Visual Studio 6.0" 的快捷方式。

创建第一个 "Hello, World!" 程序

步骤 1: 启动开发环境

  • 双击桌面上的 "Compaq Visual Fortran" 快捷方式,这会启动 Visual Studio 6.0,并加载 CVF 的插件。

步骤 2: 创建新项目

  1. 在 Visual Studio 中,点击菜单 File -> New -> Project...
  2. 在弹出的对话框中,选择 Compaq Visual Fortran Projects
  3. 在右侧的模板中,选择 Fortran Console Application
  4. 给你的项目起一个名字(HelloWorld),并选择一个存放位置。
  5. 点击 OK

步骤 3: 编写代码

  1. 项目创建后,会自动生成一个默认的源文件,通常名为 Source1.forHelloWorld.for
  2. 你会看到类似下面的代码框架:
!DEC$ ATTRIBUTES DLLEXPORT::MAIN
!DEC$ ATTRIBUTES ALIAS:'_MAIN'::MAIN
!DEC$ ATTRIBUTES STDCALL::MAIN
SUBROUTINE MAIN()
    ! ... 代码 ...
END SUBROUTINE MAIN

将其修改为标准的 Fortran 95 "Hello, World!" 程序:

Compaq Fortran教程如何快速入门?-图3
(图片来源网络,侵删)
!DEC$ ATTRIBUTES DLLEXPORT::MAIN
!DEC$ ATTRIBUTES ALIAS:'_MAIN'::MAIN
!DEC$ ATTRIBUTES STDCALL::MAIN
SUBROUTINE MAIN()
    IMPLICIT NONE  ! 强制声明所有变量,是好习惯
    WRITE(*,*) "Hello, World from Compaq Visual Fortran!"
    WRITE(*,*) "Press any key to exit..."
    READ(*,*)  ! 等待用户输入,防止窗口一闪而过
END SUBROUTINE MAIN

代码解释:

  • !DEC$ ...: 这是 Compaq 特有的指令,告诉编译器如何处理 MAIN 子程序(例如导出它,使其成为一个可执行程序的入口)。
  • SUBROUTINE MAIN(): 在 CVF 中,控制入口通常是一个 SUBROUTINE 而不是 PROGRAM
  • IMPLICIT NONE: 禁用 Fortran 的隐式类型声明,所有变量必须先用 INTEGER, REAL 等声明后才能使用,可以避免很多错误。
  • WRITE(*,*): 向标准输出(通常是控制台窗口)打印信息。 代表默认的输出设备。
  • READ(*): 从标准输入读取信息,这里用来暂停程序,等待用户按键。

步骤 4: 编译和运行

  1. 点击工具栏上的 "Build" 按钮(一个锤子图标),或者按 F7 键,这会编译你的项目。
  2. 如果没有错误,在输出窗口会看到 "Build: 1 succeeded, 0 failed..."。
  3. 点击工具栏上的 "Execute Program" 按钮(一个感叹号图标!),或者按 Ctrl + F5 键来运行程序。

你应该会看到一个黑色的控制台窗口,显示 "Hello, World..." 字样,并等待你按任意键后关闭。


第二部分:Fortran 95 基础语法

这部分是 Fortran 语言的核心,CVF 完全支持这些特性。

变量与数据类型

IMPLICIT NONE
! 声明变量
INTEGER :: age
REAL :: price, temperature
CHARACTER(len=50) :: name  ! 长度为50的字符串
LOGICAL :: is_student
! 赋值
age = 25
price = 99.99
name = "Zhang San"
is_student = .TRUE.
! 输出
WRITE(*,*) "Name: ", name
WRITE(*,*) "Age: ", age
WRITE(*,*) "Is student? ", is_student

数组

IMPLICIT NONE
! 声明一个固定大小的整型数组
INTEGER :: numbers(5)  ! 5个元素,索引从1到5
! 声明一个动态数组(需要在程序运行时确定大小)
INTEGER, ALLOCATABLE :: dynamic_array(:)
INTEGER :: n, i
! 初始化静态数组
numbers = [10, 20, 30, 40, 50]
! 为动态数组分配内存
WRITE(*,*) "Enter the size of the array: "
READ(*,*) n
ALLOCATE(dynamic_array(n))
! 给动态数组赋值
DO i = 1, n
    dynamic_array(i) = i * 10
END DO
! 输出数组
WRITE(*,*) "Static array: ", numbers
WRITE(*,*) "Dynamic array: ", dynamic_array
! 释放动态数组占用的内存
DEALLOCATE(dynamic_array)

控制结构

IF 语句:

IF (age >= 18) THEN
    WRITE(*,*) "You are an adult."
ELSE IF (age >= 13) THEN
    WRITE(*,*) "You are a teenager."
ELSE
    WRITE(*,*) "You are a child."
END IF

DO 循环:

! 计数循环
DO i = 1, 10
    WRITE(*,*) "Counting: ", i
END DO
! 使用 `CYCLE` 和 `EXIT`
DO i = 1, 10
    IF (i == 5) CYCLE  ! 跳过当前循环,继续下一次
    IF (i == 8) EXIT   ! 退出整个循环
    WRITE(*,*) "Looping: ", i
END DO

子程序和函数

这是 Fortran 模块化编程的核心。

子程序:

SUBROUTINE greet(name)
    IMPLICIT NONE
    CHARACTER(len=*), INTENT(in) :: name  ! INTENT(in) 表示该参数是输入,子程序不会修改它
    WRITE(*,*) "Hello, ", name, "!"
END SUBROUTINE greet
! 在 MAIN 中调用
CALL greet("Li Si")

函数:

FUNCTION add(a, b) RESULT(sum)
    IMPLICIT NONE
    INTEGER, INTENT(in) :: a, b
    INTEGER :: sum
    sum = a + b
END FUNCTION add
! 在 MAIN 中调用
INTEGER :: result
result = add(5, 3)
WRITE(*,*) "5 + 3 = ", result

第三部分:Compaq Visual Fortran 进阶技巧

模块

模块是组织和封装数据、子程序和变量的最佳方式,可以避免全局变量,实现更好的代码重用。

创建一个模块 my_math_module.f90:

MODULE my_math_module
    IMPLICIT NONE
    PRIVATE  ! 将所有内容设为私有,除非明确声明为 PUBLIC
    ! 公开一个子程序
    PUBLIC :: calculate_average
CONTAINS
    ! 计算一个数组的平均值
    SUBROUTINE calculate_average(arr, avg)
        IMPLICIT NONE
        REAL, INTENT(in) :: arr(:)  ! 输入数组,可以是任意大小
        REAL, INTENT(out) :: avg    ! 输出平均值
        INTEGER :: n
        n = SIZE(arr)
        avg = SUM(arr) / REAL(n)
    END SUBROUTINE calculate_average
END MODULE my_math_module

在项目中使用模块:

  1. 在 Visual Studio 中,右键项目 -> Add -> Files...,将 my_math_module.f90 添加到项目中。
  2. 在你的主程序文件中,使用 USE 语句来调用模块。
!DEC$ ATTRIBUTES DLLEXPORT::MAIN
!DEC$ ATTRIBUTES ALIAS:'_MAIN'::MAIN
!DEC$ ATTRIBUTES STDCALL::MAIN
SUBROUTINE MAIN()
    USE my_math_module  ! 使用我们创建的模块
    IMPLICIT NONE
    REAL :: test_scores(5) = [88.0, 92.5, 76.0, 85.0, 90.5]
    REAL :: average_score
    CALL calculate_average(test_scores, average_score)
    WRITE(*,*) "The test scores are: ", test_scores
    WRITE(*,*) "The average score is: ", average_score
END SUBROUTINE MAIN

调试程序

调试是开发中最重要的环节之一。

  1. 设置断点: 在代码行号左侧的灰色区域单击,会出现一个红点,这表示程序运行到这一行时会暂停。
  2. 启动调试: 点击工具栏上的 "Start Debugging" 按钮(一个带虫子的图标),或者按 F5
  3. 查看变量: 当程序在断点处暂停时,将鼠标悬停在变量上,可以在弹出的提示框中看到其当前值,或者,打开 Debug 菜单下的 QuickWatchWatch 窗口,输入变量名来持续观察。
  4. 单步执行:
    • F10 (Step Over): 执行当前行,如果当前行是函数/子程序调用,则直接执行完整个调用,不进入其内部。
    • F11 (Step Into): 执行当前行,如果当前行是函数/子程序调用,则进入其内部,逐行执行。
    • Shift + F11 (Step Out): 从当前所在的子程序/函数中执行出去,直到返回到调用它的地方。
  5. 继续执行: 按 F5 继续运行,直到遇到下一个断点或程序结束。

第四部分:资源与常见问题

学习资源

  • 官方文档: CVF 的安装目录下通常有 Docs 文件夹,里面有 CVF_User_Guide.pdfCVF_Reference.pdf,这是最权威的资料。
  • 书籍:
    • 《Fortran 95/2003 for Scientists and Engineers》 (Stephen J. Chapman): 经典入门教材。
    • 《Modern Fortran Explained》 (Michael Metcalf, John Reid, Malcolm Cohen): 深入讲解现代 Fortran 特性。
  • 在线社区:
    • comp.lang.fortran : Google Groups 上的 Fortran 新闻组,非常活跃,可以提问和交流。
    • Stack Overflow : 搜索标签 [fortran][compaq-visual-fortran]
    • Fortran Discourse : 一个现代的 Fortran 开发者社区。

常见问题

  • Q: 编译时出现 "error LNK2001: unresolved external symbol _MAIN" 错误?

    • A: 这通常是因为 MAIN 子程序的声明或属性有问题,请确保你的 MAIN 子程序有正确的 !DEC$ ATTRIBUTES 指令,并且项目类型是 "Console Application"。
  • Q: 如何链接外部库(如 LAPACK, BLAS)?

    • A: 在 Visual Studio 中,右键项目 -> Settings
      1. Link 选项卡中,在 Object/library modules 框里输入你的库文件名(如 lapack.lib, blas.lib)。
      2. Input 选项卡中,在 Additional library path 框里输入你的 .lib 文件所在的目录路径。
  • Q: 程序运行时窗口一闪而过怎么办?

    • A: 在程序末尾加上 READ(*,*) 语句,或者按 Ctrl + F5 运行,而不是 F5
  • Q: CVF 太老了,我该学哪个?

    • A: 如果你的目标就是维护或使用旧的 CVF 项目,那么学习 CVF 是必要的,对于新项目,强烈推荐学习现代的 Fortran 和开发环境,
      • Intel Fortran Compiler (ifx/ifort): 业界性能领先的编译器,与 Visual Studio 集成良好。
      • GNU Fortran (gfortran): 开源免费,跨平台(Windows, Linux, macOS)。
      • 现代编辑器: 如 VS Code + LSP Fortran 插件,或现代的 IDE。

希望这份教程能帮助你顺利入门 Compaq Visual Fortran!祝你编程愉快!

分享:
扫描分享到社交APP
上一篇
下一篇