Fortran 中的函数与子程序

Fortran 中的函数与子程序

简介

  • Fortran 是不区分大小写的
  • 函数(Function):
    • 函数是一段具有输入和输出的代码块,它接受一些输入参数,经过一系列计算后返回一个结果。
      • 在Fortran中,函数的定义以关键字"FUNCTION"开始,以"end function"结束
      • Fortran 90中的函数必须在程序的`contains`块中定义,以便在主程序中调用
  • 子程序(Subroutine):
    • 子程序是一段独立的代码块,它可以被其他代码调用并执行。与函数不同的是,子程序可以不返回任何结果,或者通过参数列表传递结果。在Fortran中,子程序的定义以关键字"SUBROUTINE"开始,后面跟着子程序名和参数列表。子程序体内部可以包含一系列的计算语句,执行完后通过关键字"END SUBROUTINE"结束。

函数实例

exam1:不使用return语句

  • 需要定义返回值
program function_exampleimplicit nonereal :: length, width, areawrite(*,*) "input length:"read(*,*) lengthwrite(*,*) "input width:"read(*,*) widtharea = calculate_area(length, width)write(*,*) "the area of triangle", arearead(*,*)containsfunction calculate_area(length,width) result(area)real, intent(in) :: length, widthreal :: areaarea = length * widthend function calculate_areaend program function_example

exam2:使用return语句

  • 直接定义函数(函数返回值)类型
program return_exampleimplicit nonereal :: num1, num2, averagewrite(*, *) "input two number:"read(*, *) num1, num2average = calculate_average(num1, num2)write(*,*) "the average of the two numbers:", averageread(*,*)containsreal function calculate_average(a, b)real, intent(in) :: a, bcalculate_average = (a + b) / 2.0  return  end function calculate_average
end program return_example

子程序实例

exam1:Simple Subroutine

program mainimplicit nonecall print_message()read(*,*)
end program mainsubroutine print_message()print *, "Hello, World!"
end subroutine print_message

exam2:Subroutine with Arguments

program mainimplicit nonereal :: num1, num2, sumnum1 = 2.5num2 = 3.7call calculate_sum(num1, num2, sum)print *, "The sum is:", sumread(*,*)
end program mainsubroutine calculate_sum(a, b, result)real :: a, b, resultresult = a + b
end subroutine calculate_sum

  • 子程序不是函数,可以理解为按照约定处理一个变量  

exam3:Subroutine with Intent

program mainimplicit nonereal :: numbers(5) = [1,2,3,4,5]integer :: icall square_array(numbers,5)do i = 1, 5print *, numbers(i)end doread(*,*)end program mainsubroutine square_array(arr, size)integer, intent(in) :: sizereal, intent(inout) :: arr(size)integer :: ido i = 1, sizearr(i) = arr(i) ** 2end do
end subroutine square_array
  • 或者
    • 我们添加了一个size函数
program mainimplicit nonereal :: numbers(5) = [1,2,3,4,5]integer :: iinteger :: jj = size(numbers)call square_array(numbers,j)do i = 1, jprint *, numbers(i)end doread(*,*)end program mainsubroutine square_array(arr, size)integer, intent(in) :: sizereal, intent(inout) :: arr(size)integer :: ido i = 1, sizearr(i) = arr(i) ** 2end do
end subroutine square_array

函数与子程序的发展史

  • In Fortran, subroutines and functions are used to encapsulate a specific set of instructions that can be called and executed from different parts of a program.
  • Subroutines are defined using the SUBROUTINE keyword followed by a name, and they do not return any values.
    • They are typically used for performing a series of calculations or operations without returning a result. Subroutines can have input parameters, which are variables passed to the subroutine for use within its code. 
  • Functions, on the other hand, are defined using the FUNCTION keyword followed by a name. Functions are used to perform calculations and return a single value as the result.
    • They can have input parameters, similar to subroutines, which are used in the calculation. 
  • Both subroutines and functions can be called from other parts of the program using their respective names.
    • When calling a subroutine, the program flow jumps to the subroutine code, executes it, and then returns to the calling point.
    • When calling a function, the result of the calculation is returned and can be assigned to a variable or used directly in an expression.
  • 在C语言中,存在函数
  • 在Java中,称为方法(method)
  • 在Python中,也有函数(function)
  • 通过区分function和subroutine,Fortran可以更好地满足不同的编程需求。这样的设计可以提高代码的可读性和可维护性,使得程序的逻辑更加清晰明确。
    • Function适用于需要返回结果的计算任务
    • Subroutine适用于需要执行一系列操作或修改参数值的任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9752.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVS-DR负载群集的优势和部署实例

目录 一、DR模式数据包流向分析 二、DR模式的特点 三、DR模式中需要解决的问题 四、LVS-DR部署实例 1.配置NFS共享存储器 2.配置节点web服务(两台的配置相同) 3.配置LVS负载调度器 一、DR模式数据包流向分析 1.Client 客户端发送请求到 Director …

伪类元素content,icon变形倾斜问题

![在这里插入图片描述](https://img-blog.csdnimg.cn/b58d128a80fd4a069a5e47cf2e87e256.png 检查发现原本设置了一个 font-style 为 italic,为倾斜样式 解决办法: font-style: normal;

亿级日活业务稳如磐石 华为云发布性能测试服务CodeArts PerfTest

HDC期间可参与华为云PaaS生态抽奖活动,活动链接在文末 计算机软件作为人类逻辑智慧的伟大结晶之一,已经渗透到了人类社会的各个角落。早期的计算机发展对硬件有很强的依赖性,只有少数的个人或者机构才能拥有软件这种“奢侈品”。但随着软件行…

蓝桥杯专题-试题版含答案-【字母统计】【计算球体积】【16进制的简单运算】【C小加随机数】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

阿里云直播配置

一、开通阿里云直播 首先进入阿里云直播产品主页:https://www.aliyun.com/product/live 。 点击下方的“立即开通”。 如果是还未注册的用户请按照页面提示进行完成注册并实名认证。 2、首次进入会提示开通服务,点击“开通服务”,然后选择计…

【现场问题】flink-cdc,sql一直校验不通过,为什么,明明sql没有错误

flink-cdc 问题展示问题解决校验结果 问题展示 这里的flink-cdc的sql对了好几遍,都没问题,包括单个执行create,也是显示校验通过 如图: 但是多个一起就报错了: java.lang.IllegalArgumentException: only single state…

华为HCIP第一天---------RSTP

一、介绍 1、以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路,但是这也带来了网络环路的问题。网络环路会引发广播风暴和MAC地址表震荡等问题,导致用户通信质量差,甚至通信中断。为了解决交换网…

游戏出海长期向好趋势未改,茄子科技助力企业把握出海机遇

在中国游戏出海成为更多企业的必选题之时,如何把握出海机遇,在激烈竞争中实现增长,成为中国游戏厂商的着力点。秉承着红海将至的市场发展背景,出海全球化、本地化的战略已经成为企业大势所趋,越来越多的游戏厂商开始挑…

【操作系统】c语言--使用信号量解决生产者和消费者问题

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

驱动开发作业2 —— ioctl

通过ioctl函数选择不同硬件的控制&#xff0c;如实现对LED、蜂鸣器、马达、风扇的控制 1.将GPIO的相关寄存器封装成结构体 --------> gpio.h 2.LED相关驱动文件 --------> led.c 3.蜂鸣器相关驱动文件 --------> beep.c 4.风扇相关驱动文件 --------> fan.c 5.马…

Spring 与 Servlet-2

学习笔记&#xff08;加油呀&#xff09;&#xff1a; Spring的通知类型 Spring 通知类型按切面功能调用的不同时刻&#xff0c;可以分为提供了 5 种 Advice 类型 1、前置通知 Before advice&#xff1a;在某连接点之前执行的通知&#xff0c;但这个通知不能阻止连接点之前的…

解决vmWare ESXI 7.3报错,客户机操作系统已禁用 CPU。请关闭或重置虚拟机(ESXI使用遇到问题解决记录文持续使用持续更新)

一&#xff1a;分析客户机操作系统已禁用 CPU" 这个错误通常是由以下原因之一引起的&#xff1a; 1. 虚拟机配置不正确&#xff1a;可能是您在虚拟机配置中选择了不受支持的 CPU 类型或功能。某些操作系统可能需要特定的 CPU 功能才能正常运行。如果您的虚拟机配置与操作…