当前位置: 首页 > news >正文

Fortran:program 和 subroutine 的区别

在 Fortran 中,programsubroutine 是两种不同的程序结构,它们在用途、位置、调用方式和作用范围等方面都有明显的区别。下面我将详细解释这两者的差异:

1. program:主程序

program 是 Fortran 程序的主入口,整个程序的执行从这里开始。每个 Fortran 程序通常有一个且仅有一个主程序。

关键特点:
  • 定义程序的入口program 定义了整个 Fortran 程序的起始点,程序的执行从这里开始,程序的运行也从这里结束。
  • 程序结构program 通常包含主逻辑和数据声明。在 program 中可以调用其他的子程序(subroutine)或函数。
  • 只能有一个主程序:每个 Fortran 程序只能有一个 program 块,它是程序的主入口。
  • 结束方式:主程序的结束是通过 end programend 语句。
示例:
program main_programimplicit noneprint *, 'This is the main program'call my_subroutine
end program main_program

2. subroutine:子程序

subroutine 是 Fortran 中的一种可重用的模块化代码段,可以在主程序或其他子程序中被调用。它们通常用于封装逻辑和算法,以便重复使用。

关键特点:
  • 可重用性subroutine 是一种可重用的代码块,可以在多个地方调用,避免重复代码。
  • 参数传递subroutine 可以接受参数(输入和输出),也可以在执行完后返回多个结果。
  • 多次调用:一个 subroutine 可以被多次调用,且在主程序或其他子程序中均可调用。
  • 没有返回值:与 function 不同,subroutine 没有返回值,它通过参数来传递输入和输出。
  • 结束方式:子程序的结束通过 end subroutineend 语句。
示例:
subroutine my_subroutineimplicit noneprint *, 'This is a subroutine'
end subroutine my_subroutine

3. 主要区别

特性programsubroutine
用途定义程序的主入口和整体控制逻辑。封装特定逻辑、算法,供主程序或其他子程序调用。
执行位置程序启动时首先执行。只有在被调用时才执行。
数量一个程序只能有一个主程序。可以有多个子程序。
参数不能传递参数。可以传递参数(输入和输出)。
作用范围主程序中的变量具有全局作用范围。子程序的变量通常是局部的,只有参数通过调用共享。
调用主程序通常不需要显式调用。需要在主程序或其他子程序中显式调用。
返回值无返回值。无返回值,但可以通过参数传递结果。
结束方式end programend subroutine

4. 如何调用 subroutine

program 中,你可以通过 call 语句来调用一个子程序。例如:

program main_programimplicit nonecall my_subroutine   ! 调用子程序
end program main_programsubroutine my_subroutineimplicit noneprint *, 'This is a subroutine'
end subroutine my_subroutine

5. 带参数的 subroutine

subroutine 通常通过参数来传递输入和输出。子程序可以有一个或多个参数,并且可以是输入、输出或输入输出双向的。

示例:
program main_programimplicit nonereal :: a, b, resulta = 2.0b = 3.0call multiply(a, b, result)  ! 调用子程序并传递参数print *, 'Result = ', result
end program main_programsubroutine multiply(x, y, product)implicit nonereal, intent(in) :: x, y       ! 输入参数real, intent(out) :: product   ! 输出参数product = x * y                ! 计算结果
end subroutine multiply

在上面的例子中:

  • multiply 子程序接收两个输入参数 xy,并计算它们的乘积,然后通过输出参数 product 返回结果。
  • intent(in)intent(out) 用于明确指定参数的用途(是输入还是输出)。

总结:

  • program:程序的主入口,整个程序从这里开始执行,且只能有一个主程序。
  • subroutine:模块化的代码段,可以接受参数,在主程序或其他子程序中被调用。它通过封装复杂的逻辑,使程序更加简洁和可维护。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 综合型医院适合什么样的数据摆渡方式,才能服务与安全兼顾?
  • 如何通过深度学习实践来理解深度学习的核心概念
  • STM32 之 SDRAM 详解
  • 【编程基础知识】数据库表设计三范式
  • Open3D(C++) 点云中的植被信息提取
  • 【四范式】浅谈NLP发展的四个范式
  • Java 21的Logging的笔记
  • 79.Options Object 模式
  • Knife4j:打造优雅的SpringBoot API文档
  • NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
  • matlab处理函数2
  • 多维时序 | Matlab基于TCN-Transformer+LSTM双输入神经网络时间序列预测
  • 大模型——LLaVA和LLaMA的介绍和区别
  • element实现动态路由+面包屑
  • 量化交易backtrader实践(一)_数据获取篇(4)_通达信数据应用
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Docker下部署自己的LNMP工作环境
  • Iterator 和 for...of 循环
  • JavaScript实现分页效果
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Vue 2.3、2.4 知识点小结
  • vue-cli在webpack的配置文件探究
  • Yii源码解读-服务定位器(Service Locator)
  • 码农张的Bug人生 - 初来乍到
  • 前端相关框架总和
  • 如何优雅地使用 Sublime Text
  • 深度学习中的信息论知识详解
  • 微信小程序:实现悬浮返回和分享按钮
  • 原生Ajax
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 栈实现走出迷宫(C++)
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ionic异常记录
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)Sql Server 保留几位小数的两种做法
  • (转)用.Net的File控件上传文件的解决方案
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Core 中的路径问题
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .Net 执行Linux下多行shell命令方法
  • .net快速开发框架源码分享
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作