Fortran程序设计第7章 属性的声明
fortran 第7章
§7-1-1 一维数组
例; 记录5位同学的成绩,并提供由座号查询成绩的功能。
§7-1-1 一维数组
1)声明:integer :: student(students) 或: integer :: student(3) 2)赋值 student(1)=80 student(2)=85 3)运算 数组的元素可当作变量 a=student(1)+student(2)
§7-1-2 二维数组
• 5个班级,每班5位学生,保存成绩;查询成绩
输入两个2×2的矩阵的值,并相加
程序内容有重复, 可用3维数组
§多维数组:
• 声明: Integer a(D1, D2, ……, Dn) ! n维数组 • FORTRAN最多可声明高达7维的数组
• a(I1, I2, …, In) , 使用n维数组时,要给出n个坐 标值
a=b*c a=sin(b)
!a(d1,d2,…)=sin(b(d1,d2,…)),数组b必须是浮点数; !一维相当于 a(i)=sin(b(i), i=1, n)
§7-2-2 对整个数组的操作
a=b>c ! a、b、c的尺寸、维数相同, 但是a为逻辑型数组变量,数组 a,b为同类型的数值变量 对于一维的情况,相当于: Do i=1, n If (b(i) > c(i)) then A(i) = .true. Else A(i)= .false. end if End do
• Integer a(-3: 3) ! 能使用的是 a(-3), a(-2), a(-1), a(0), ! a(1), a(2), a(3) • Integer a(5, 0:3) ! 能使用的是a(1~5, 0~3)的元素 • Integer b(2:3, -2:1) ! 能使用的是b(2~3, -2~1)的元素
fortran 语言编程
fortran 语言编程Fortran 语言编程Fortran(Formula Translation)是一种面向科学计算和工程计算的高级编程语言。
它于1957年诞生于IBM,是最早被广泛采用的科学计算语言之一,目前已经发展到第四个版本(Fortran 2018)。
Fortran是一种编译型语言,它通过编写源代码并使用编译器将其转换成机器语言来执行。
本文将详细介绍Fortran语言的基础知识、语法规则和常用的编程技巧,以帮助读者了解和掌握这门强大的科学计算语言。
第一步:安装Fortran编译器要开始编写和运行Fortran程序,首先需要安装Fortran编译器。
有多种Fortran编译器可供选择,其中最常用的是GNU Fortran(gfortran)和Intel Fortran Compiler(ifort)。
可以从官方网站或其他可信的来源获得这些编译器的安装程序,并按照提示进行安装。
第二步:编写并编译Fortran程序在开始编写Fortran程序之前,需要了解Fortran的基本语法规则。
Fortran使用固定格式或自由格式,固定格式的源代码按照列格式排列,每行的前6列被保留用于行号和注释,从第7列开始是可执行代码。
自由格式没有列格式的限制,更加灵活,但在编译阶段需要指定自由格式。
下面是一个简单的Fortran程序示例,用于计算并输出两个数的和:fortranprogram additionimplicit noneinteger :: a, b, sumprint *, "Enter two numbers:"read *, a, bsum = a + bprint *, "The sum is:", sumend program addition将以上代码保存为一个以.f90为后缀名的文件(例如addition.f90),然后使用编译器将其编译成可执行程序。
fortran 教学大纲
fortran 教学大纲Fortran 教学大纲Fortran(Formula Translation)是一种面向科学和工程计算的编程语言。
它在计算机科学的历史中扮演了重要角色,被广泛应用于科学计算、数值分析和大规模计算等领域。
本文将探讨 Fortran 教学的大纲,以帮助初学者系统地学习和掌握这门编程语言。
一、引言在本节中,我们将介绍 Fortran 的起源和发展,以及它在科学计算领域的重要性。
我们将讨论 Fortran 的特点,如其面向数值计算和高性能计算的优势,以及它对于科学家和工程师的实际应用。
二、基本语法和数据类型在这一部分,我们将介绍 Fortran 的基本语法规则和常用数据类型。
我们将讨论变量的声明和赋值,运算符的使用,以及控制流语句如条件语句和循环语句的编写方法。
此外,我们还将介绍 Fortran 中的基本数据类型,如整数、实数和字符类型,并讨论它们的使用场景和注意事项。
三、数组和矩阵运算Fortran 是一种强大的数组和矩阵运算语言。
在这一部分,我们将学习如何声明和操作一维和多维数组,以及如何进行矩阵运算。
我们将介绍 Fortran 中的数组索引和切片操作,以及常用的矩阵运算函数。
此外,我们还将讨论数组和矩阵的内存布局和性能优化技巧。
四、函数和子程序函数和子程序是 Fortran 中的重要概念,它们可以帮助我们组织和重用代码。
在这一部分,我们将学习如何声明和调用函数,以及如何编写和调用子程序。
我们将介绍函数的返回值和参数传递方式,以及子程序的参数传递和变量作用域。
此外,我们还将讨论递归函数和模块化编程的技巧。
五、文件操作和输入输出在科学计算中,数据的读取和保存是非常重要的。
在这一部分,我们将学习如何使用 Fortran 进行文件操作和输入输出。
我们将介绍如何打开和关闭文件,以及如何读取和写入数据。
此外,我们还将讨论格式化输入输出和二进制文件的处理方式,以及异常处理和错误处理的方法。
fortran 函数 没有声明
fortran 函数没有声明【实用版】目录1.Fortran 函数的基本概念2.Fortran 函数的声明方式3.Fortran 函数没有声明的后果4.如何避免 Fortran 函数没有声明的问题5.总结正文1.Fortran 函数的基本概念Fortran 是一种高级编程语言,广泛应用于数值计算和科学计算领域。
在 Fortran 中,函数是一种可以实现特定功能的子程序,可以被其他程序调用。
通过函数,程序员可以将复杂的计算任务分解为更小的、可管理的部分,从而提高代码的可读性和可维护性。
2.Fortran 函数的声明方式在 Fortran 中,函数需要通过声明来告诉编译器函数的名称、返回类型和参数。
Fortran 函数的声明方式有两种:(1)implicit none:这种方式要求显式声明所有变量和函数,可以提高代码的可读性,但会增加编程的复杂性。
(2)implicit:这种方式允许编译器自动推断变量和函数的类型,使代码更简洁,但在处理复杂类型时可能会导致错误。
3.Fortran 函数没有声明的后果如果 Fortran 函数没有声明,编译器将无法识别该函数,从而会导致编译错误。
在执行过程中,函数没有声明还可能导致运行时错误,如无法找到函数入口、类型不匹配等问题。
4.如何避免 Fortran 函数没有声明的问题为了避免 Fortran 函数没有声明的问题,程序员需要遵循以下步骤:(1)确保所有函数都具有正确的声明。
使用 implicit none 语句可以避免由于隐式声明导致的类型推断错误。
(2)检查函数名是否正确。
确保函数名与声明中的名称一致,且没有拼写错误。
(3)检查函数参数是否正确。
确保函数的参数数量、类型与声明一致。
(4)确保函数的返回类型与声明一致。
(5)在程序中调用函数时,使用正确的函数名和参数。
5.总结Fortran 函数没有声明会导致编译错误和运行时错误,影响程序的正确性和稳定性。
FORTRAN语言自学基础
《FORTRAN语言》自学提纲第一章1 FORTRAN基础1. 一个FORTRAN程序由一个主程序或一个主程序与若干个子程序组成。
但一个完整的FORTRAN程序只能有一个主程序,主程序的第一个语句是PROGRAM语句,用以说明主程序的名称。
这个语句也可以省略,省略时默认为主程序的名称为MAIN。
2.FORTRAN的子程序主要有三种:⑴函数子程序,其第一个语句为FUNCTION;⑵子例行子程序,其第一个语句为SUBROUTINE;⑶数据块子程序,其第一个语句为BLOCK DA TA。
主程序与各个子程序可以独立编译,最后再链接成一个可执行程序。
在编写并输入一个FORTRAN程序时,既可以将主程序与各个子程序存放在一个文件中,也可以将它们分别存放在不同的文件中。
但必须注意,主程序与各个子程序都是独立的程序单位,每个程序单位的最后一行必须用END语句作为结束。
在主程序中,虽然END语句还具有使程序停止运行的作用,但由于一个程序单位只能在最后一行有END语句,因此,在程序的其它位置处需要停止运行时,只能用STOP语句,不能用END语句。
同样的道理,在子程序中,虽然END语句还具有使程序流程返回到调用程序的作用,但在子程序的其它位置(不是最后一行)需要返回到调用程序时,只能用RETURN语句,不能用END语句。
3.FOPTRAN源程序的书写格式有严格的规定。
⑴一行中第一列为“C”或“*”时,该行被认为是注释行。
注释行可以写在四个区中的一个区,且注释行可以出现在程序单位的任何位置。
但注释行不能有续行,需要时可以将连续若干行都定义为注释行。
⑵FORTRAN语句部分不能占用标号区及续行标志区,只能从第七列开始。
当语句太长时,可以使用续行。
在继续行的标号区内必须为空白(即继续行不允许有标号),标号只能出现在起始行上。
⑶起始行与继续行或各继续行之间的空格不起作用,因此,对于一般的语句,可以不必到72列才转为继续行,继续行也不必一定要从第7列接着写,但是,包括在引号内的字符串中的空格是有效的,因此,对于字符串要使用继续行时应特别注意,最好写到一行的72列时再转为继续行,且要从继续行的第7列接着写。
fortran中procedure声明的用法
fortran中procedure声明的用法在Fortran中,procedure声明用于定义过程变量和过程指针。
过程可以是函数或子程序(subroutine)。
通过使用procedure声明,可以在其他过程中传递过程作为参数,或者在运行时动态选择要执行的过程。
过程声明的一般语法如下:```fortranprocedure([, attribute-list] :: procedure-name)```其中,`procedure`是关键字,`attribute-list`是过程的可选属性列表,`procedure-name`是过程的名称。
下面是一些常见的过程声明示例:1. 声明过程变量:```fortranprocedure :: my_function```这个过程变量可以引用名为`my_function`的函数。
2. 声明过程指针:```fortranprocedure :: my_subroutine => my_sub```这个过程指针可以引用名为`my_sub`的子程序。
3. 声明带有属性的过程指针:```fortranprocedure, pointer, nopass :: my_function => NULL()```这个过程指针具有`pointer`属性和`nopass`属性,可以引用名为`my_function`的函数。
过程声明的主要作用之一是在其他过程中传递过程作为参数。
例如,可以将过程作为参数传递给高阶函数,这样可以实现程序的灵活性和可重用性。
下面是一个例子,演示如何使用过程声明在Fortran中传递过程作为参数:```fortran! 定义一个接收过程参数的过程subroutine process(func)procedure(my_subroutine), pointer :: func ! 声明一个过程指针变量! 这里可以像调用子程序一样通过过程指针调用传递进来的过程call func()end subroutine! 定义一个子程序作为参数subroutine my_subroutine()print *, "Hello from my_subroutine!"end subroutine! 在主程序中调用过程参数program main! 将my_subroutine作为参数传递给process过程call process(my_subroutine)end program```通过过程声明,我们可以简化代码结构并实现更灵活的程序设计。
Fortran讲义 第七章
派生类 型的使 用
结构体的赋值
结构体成员单独赋值 用结构体构造函数赋值
结构体成员的引用:% 结构体成员的引用:
派生类 型的使 用
结构体的输入输出
整体操作时按派生类型定义的顺序 整体操作时不能包含可变大小的成员
exam_7_1
作为形参或函数的返回值
exam_7_2
BASIC_DATA.F90
派生类 型的使 用
结构体的声明
exam_7_1
变量声明语句中类型名用“type(派生类型名称) 变量声明语句中类型名用“type(派生类型名称)”替 换
结构体的初始化
派生类型定义时的初始化(缺省初始化) 派生类型定义时的初始化(缺省初始化) 结构体声明时用结构体构造函数初始化 显式初始化) 结构体构造函数初始化( 结构体声明时用结构体构造函数初始化(显式初始化) 语句中用结构体构造函数初始化 在data语句中用结构体构造函数初始化(显式初始化) 语句中用结构体构造函数初始化(显式初始化)
第七章 派生类型
派生类型 的基本概 念
派生类型用于表示包含不同类型 派生类型用于表示包含不同类型变量的集合 不同类型变量的集合
基本数据类型
指针类型
其它派生类型Leabharlann 派生类型的实例称为结构体派生类 型的定 义
type[[,<访问属性>]::]<派生类型名称> type[[,<访问属性>]::]<派生类型名称> [[,<访问属性>]::]<派生类型名称 [sequence] sequence] [private] private] {成员声明} 成员声明} end type [派生类型名称] 派生类型名称] <访问属性>→public|private 访问属性> public|
Fortran程序设计第7章属性的声明
第7章属性的声明最后,对于数据我们剩下的工作,就是如何运用FROTRAN语言来完整地加以描述。
FORTRAN语言完成对数据的描述的语法单位是数据声明语句,在前面2章里面,我们整理好问题当中需要涉及的数据及其结构之后,要以FORTRAN语言写下来,就是使用FORTRAN的声明语句,这些语句的句法设计保证能够完备的描述我们关于数据所需要说明的一切属性。
数据对象首先需要予以说明的当然就是它的类型,因此我们首先给出对象的类型声明语句,特别地,需要说明在最初FORTRAN标准里面遗留下来的一种数据类型描述方法——隐式类型描述法,然后讨论各种数据对象所可能具有的属性。
● 数组属性;● 指针属性;● 值特征;● 对象可访问性与使用属性;● 特征兼容性;● 自动数据对象;● 存储关联。
由于本章集中讨论FORTRAN的声明语句,而声明的对象除了数据之外,其他的程序对象,例如函数,过程等也需要声明其类型或属性,因此本章一并讨论对其他程序对象的声明:● 过程属性;● NAMELIST语句;7.1 属性及其声明方式所谓一个对象的属性,就是程序使用该对象的方式。
本章所讨论的属性的大体分类与作为其名称的关键词见表7-1:表7-1属性的分类及其关键词数据类型INTEGERREAL(以及DOUBLE PRECISION)COMPLEXLOGICALCHARACTERTYPE(派生类型的名称由用户命名)数组属性DIMENSIONALLOCATABLE指针属性POINTERTARGET值设置DATAPARAMETER对象可访问性与调用 PUBLICPRIVATEINTENTOPTIONALSAVE过程属性EXTERNALINTRINSIC对象关系属性NAMELISTEQUIVALENCECOMMON这些关键词的使用,或者说属性的声明有2种方式:●在类型声明时附加属性说明,这种语句形式侧重在给出数据对象,属性说明是附加的;●使用单独的属性声明语句,这种语句形式侧重在说明属性本身。
fortran 函数 没有声明
Fortran是一种编程语言,用于科学计算和数值计算的高级程序设计。
在使用Fortran编程时,函数声明是一项重要的操作,它可以帮助程序员正确地定义和调用函数,确保程序的正确性和可靠性。
然而,有时候在编写Fortran程序时,程序员会遇到一些没有声明的函数,这可能会导致程序出现错误或者无法正常运行。
本文将就这一问题展开讨论,并提出解决方法。
1. 为什么会出现没有声明的Fortran函数Fortran编程中出现没有声明的函数的原因有很多,常见的包括:(1)函数声明遗漏:有时候在编写Fortran程序时,程序员可能会忘记对函数进行声明,这可能是由于疏忽或者粗心造成的。
(2)函数定义错误:有时候程序员可能会在程序中直接定义函数而没有进行声明,这样会导致编译器无法正确识别函数的类型和参数。
(3)函数命名冲突:有时候程序员可能会在程序中使用了与其他库函数同名的函数而没有进行声明,这样会导致编译器无法确定到底应该调用哪一个函数。
2. 没有声明的Fortran函数可能会带来的问题出现没有声明的Fortran函数可能会导致以下问题:(1)编译错误:如果程序中调用了没有声明的函数,那么在编译阶段就会出现错误,编译器无法识别这个函数,从而导致编译失败。
(2)运行错误:即使程序能够顺利编译通过,但是在运行时调用了没有声明的函数也会导致程序运行错误,可能会出现未定义行为或者崩溃。
(3)难以调试:如果程序中存在没有声明的函数,那么调试起来会比较困难,因为程序员无法准确地确定函数到底做了什么,可能需要耗费更多的时间和精力来进行调试。
3. 如何解决没有声明的Fortran函数问题针对没有声明的Fortran函数问题,可以采取以下解决方法:(1)添加函数声明:在程序中的函数调用之前,确保要调用的函数已经被声明过,包括函数的类型、参数类型和个数等信息。
(2)修改函数定义:如果程序中存在直接定义但未声明的函数,可以通过在程序的开头添加函数声明来解决这一问题。
Fortran-第七讲
实参result的地址传递给形 参s,其余三个参数同理
SUBROUTINE solve(s,a,b,n)
要注意的问题
过程调用的参数传递要求: 调用中的参数要与过程中声明的参数在个数、类型 和位置摆放次序上保持一致。
如果不一致,一般会提示编译错误
7.3.2 变量的局部性
不做特别声明的情况下: 过程中所使用的变量仅在该过程中有效 因此,过程中使用的变量名可以和其它过程或主程序 的变量名同名
函数也可以写成子程序的形式
函数应用举例
REAL FUNCTION F1(x) REAL :: x F1=(x+1)/(x-1) END FUNCTION
函数应用举例
REAL FUNCTION F2(a,b,c,x) REAL :: a,b,c,x F2=a*x*x+b*x+c END PROGRAM
7.4 INTENT属性
地址传递的参数传递方式
实参的值在过程中可能会被修改 有些实参用户并没有意图去修改 程序书写错误导致实参改变且错误难以发现
引入INTENT属性规定形参的类别
SUBROUTINE sub1(input,output) IMPLICIT NONE REAL,INTENT(IN) :: input REAL,INTENT(OUT) :: output output =2.*input 试图对IN属性的形参操作,编译 input=-1. 器会报错 END SUBROUTINE
参数列表
argument_list
调用程序通过参数列表所列的参数将变量的值传递 给子程序
子程序的结构
和任何Fortran程序一样 子程序必须包含声明部分和执行部分 声明部分对子程序中所使用的变量、数组进行声明
fortran 参数
fortran 参数Fortran参数Fortran是一种编程语言,广泛应用于科学计算和工程计算领域。
在Fortran中,参数是一种在程序中声明的变量,用于存储特定值或常量。
参数的使用可以使程序更加灵活和易于维护。
本文将介绍Fortran中参数的基本概念和使用方法。
一、参数的声明和定义在Fortran中,参数的声明和定义都使用PARAMETER关键字。
参数的声明告诉编译器该变量是一个参数,而参数的定义则给出了参数的具体值。
参数的定义可以在程序的任何地方进行,但是一旦定义后就不能再修改。
参数的声明和定义示例:PARAMETER (N = 10, PI = 3.14159, MESSAGE = 'Hello, World!')在上面的示例中,N、PI和MESSAGE都被定义为参数。
N的值为10,PI的值为3.14159,MESSAGE的值为'Hello, World!'。
二、参数的作用参数在Fortran中有多种作用,包括但不限于以下几点:1. 定义常量:通过将变量声明为参数,可以将其定义为常量,使其值在程序执行期间保持不变。
这在一些需要使用固定值的场景中非常有用。
2. 提高代码可读性:通过使用参数,可以将一些常用的数值或字符串定义为具有描述性名称的变量,以提高代码的可读性。
这样一来,代码中的数值或字符串就不会被直接硬编码,而是使用具有意义的参数名称。
3. 简化程序修改:当程序中某个值需要修改时,如果该值被定义为参数,只需修改参数的定义,而无需在整个程序中逐个搜索和修改该值的实例。
这极大地简化了程序的维护和修改过程。
三、参数的使用在Fortran中,参数的使用与普通变量类似。
可以在程序中使用参数进行各种运算、赋值和比较操作。
下面是一些参数的使用示例:1. 运算操作:A = N + 1在这个示例中,N是一个参数,它的值为10。
A的值将被计算为11。
2. 赋值操作:B = PI在这个示例中,PI是一个参数,它的值为3.14159。
fortran课件 第7章_2_11
§7-2 自定义函数(FUNCTION)
与子程序的不同: 1)会返回一个数值,并对储存返回值的函数名要有 类型声明;
2)调用时不用call,但调用前要对自定义函数名声 明;
§7-3 全局变量(COMMON)
• 定义一块共享的内存空间,不同的程序单元之间 (函数之间,函数与主程序之间),声明的变量 使用相同的内存位置,以传递数据。 • FORTRAN 77使用 • 两种:1)无名公用区;2)有名公用区 • 各程序单元COMMON中的变量类型必须按位置一 一对应 • 用Block data 模块赋初值
write(6,"(I2,'th enter, n=',I2)") localcount, n … ans = n * fact(temp) write(6,"(I2,'th exit, n=',I2,' ans=',I5, ' count=', i3)")
localcount, n, ans, count
2)函数数组参数传递时,虚参数组不要超过实参数组的范围。 编译器不会辨别,但执行会出错. 3) 数组在声明时,要使用常数来确定数组的尺寸,当作为函 数的虚参,可用虚参变量来声明数组的尺寸。 4)作为函数虚参的多维数组,最高一维的大小可以不声明, 其他维必须声明尺寸。 三)传递函数 • 传递的参数可以是函数名(function,subroutine) • 作实参的函数名要先声明。 • 函数声明时,intrinsic 表示库函数;external表示自定义的 函数。
字符串数组的传递:传递字符串变量时可以不声明长度
不同于数组,不能写为str(8) Str(8:8)传递单个内存空间
fortran语法手册范本
1 FORTRAN77四如此运算符+ - * / ** (其中**表示乘方)在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→()2 FORTRAN77变量类型2.1 隐含约定:I-N规如此但凡以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。
如 IMPLICIT REAL (I,J)三种定义的优先级别由低到高顺序为:I-N规如此→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。
2.4 数组的说明与使用使用I-N规如此时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界〕,也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3)REAL IA(10),ND(80:99)使用隐含DO循环进展数组输入输出操作:例如WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2)10FORMAT(1X,5(A2,I2,1X,A2,I4))2.5 使用DATA语句给数组赋初值变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)DATA CHN/10*' '/INTEGER NUM(1000)DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/3 FORTRAN77程序书写规如此程序中的变量名,不分大小写;变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效;一行只能写一个语句;程序的第一个语句固定为PROGRAM 程序名称字符串某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容;某行的第1个字符为C或*号时,如此表示该行为注释行,其后面的内容为注释内容;某行的第6个字符位为非空格和非0字符时,如此该行为上一行的续行,一个语句最多可有19个续行;某行的第7至72字符位为语句区,语句区内可以任加空格以求美观;某行的第73至80字符位为注释区,80字符位以后不能有内容。
FORTRAN语言程序设计
n 是一个十进制数字(0~9)序列。
Kind值为:1、2、4、8之一。分别表示1、2、4、8个字节个数。
FORTRAN 90/95标准中整型常量的范围没有明确规定。
例如:122、0、-36、559_2
均为合法的整型常量
100.0、100,000、100 0、1002 均为非法的整型常量
5.6.2.2 实型常量
5.5 程序的书写格式 (1)固定格式:将一个语句行分为若干个区域,如下图所示
:
5.6 数据类型
5.6.1 基本概念 1.内部数据类型 FORTRAN语言将内部数据划分为以下类型: 整型 实型 算术型 数据类型 复型 逻辑型 字符型 2.种别 一个数据在内存中均占有一定字节个数的存储单元。上述每类数据都有 其不同的种别(即Kind)特性,即上述每类数据根据其种别特性(即 Kind值)的不同分别拥有不同字节个数的存储单元。 3.数据对象 1)常量:程序运行时,其值不能改变的量,称为常量。如:5,3等等。 2)变量:程序运行时,其值可以改变的量,如:变量a, a是一个存储单元
第四章 FORTRAN语言开发环境
详见教材:3.3 FORTRAN语言 开发环境
第五章 FORTRAN 语言基础知识
5.1 字符集
FORTRAN语言允许使用的字符集为:
_fortran-第七章 过程
Fortran 提供了一个特定机制,使得可以在构建 最终的程序前容易地独立开发和调试子任务。 可以把每个子任务作为独立的程序单元来编码, 该独立程序单元被称为外部过程( external procedure) ,每个外部过程都可以独立于程序 中的其它子任务(过程)来进行编译、调试。 Fortran 中有两种外部过程:子程序 ( subroutine) 和函数子程序( function subprogram)(或者就叫函数, function)
7.1 子程序
SUBROUTINE 语句标志着子程序的开始,定义了子 程序名和相关参数表。子程序名必须遵循标准的 Fortran 命名规则由字母和数字组成,最大长度可以 到31 个字符,但第一个字符必须是字母。参数表含 有一系列变量和/或数组,这些变量、数组的值将从 调用程序传递给子程序。这些变量被称为形参 (dummy agument ,形式参数),子程序实际上没有 为它们真正分配任何内存空间。对从调用程序单元传 递来的实际参数(实参)来说它们仅仅是占位符。
每个子程序是一个独立的程序单元,它开始于 SUBROUTINE 语句,结束于END SUBROUTINE 语句。 当程序调用子程序时,调用程序的执行暂时被 挂起,子程序执行部分开始运行。当运行到子 程序的RETURN 语句或END SUBROUTINE 语 句时,调用程序又开始运行调用子程序语句下 面的程序代码。 任何可执行程序单元都可以调用子程序,包括 另一个子程序。(但是,子程序不能调用它自 身,除非它被定义为递归类型(recursive) )。
Fortran95/2003程序设计
第七章 过程
本章学习目标: • 学习Fortran 语言中的过程如何帮助实现好的程序设 计 • 了解子程序与函数的不同 • 掌握创建和调用子程序 • 理解并学会使用INTENT 属性 • 理解使用地址传递方案实现变量传递 • 理解显式结构的形参数组、不定结构的形参数组和不 定大小的形参数组之间的区别 • 理解为什么不再使用不定大小的数组 • 掌握在过程之间使用模块实现共享数据 • 理解显式接口,以及为什么在模块内部定义过程更好 • 能创建并且调用用户自定义函数 • 掌握如何把Fortran 过程调用参数传递给其他过程。
fortran知识点总结
fortran知识点总结一、语法结构Fortran语言的语法结构遵循一套严格的规则。
下面是一些常见的语法结构:1. 程序单元:Fortran程序由一个或多个程序单元组成。
每个程序单元由一个或多个声明和执行语句组成。
2. 注释:在Fortran中,注释可以用来提高代码的可读性。
注释以感叹号(!)开头,直到行末为止。
3. 标识符:Fortran中的标识符由字母、数字和下划线组成,且区分大小写。
标识符用于表示变量、函数、子程序等。
4. 变量声明:在Fortran中,变量声明使用关键字“REAL”、“INTEGER”、“LOGICAL”等来指定变量的数据类型。
例如,REAL :: x 表示声明了一个实数类型的变量x。
5. 程序控制结构:Fortran提供了多种控制结构,包括顺序结构、条件结构和循环结构。
这些结构提供了程序的流程控制和逻辑控制。
6. 函数和子程序:Fortran支持函数和子程序的定义和调用。
函数和子程序可以帮助程序员组织和重用代码。
7. 模块和接口:Fortran中的模块和接口提供了一种组织代码的方式。
模块可以包含多个子程序和全局变量,接口可以用来定义子程序的接口。
二、数据类型在Fortran中,数据类型用于表示数据的类型和大小。
Fortran提供了多种数据类型,包括整数、实数、逻辑值、字符、复数等。
下面是一些常见的数据类型:1. 整数:整数类型用于表示整数值。
在Fortran中,整数类型包括“INTEGER”、“LOGICAL” 和“CHARACTER”类型。
2. 实数:实数类型用于表示实数值。
在Fortran中,实数类型包括“REAL”和“COMPLEX”类型。
REAL类型用于表示实数,COMPLEX类型用于表示复数。
3. 字符:字符类型用于表示字符值。
在Fortran中,字符类型使用CHARACTER关键字进行声明。
字符类型可以表示单个字符或者字符数组。
4. 数组:数组类型用于表示多个相同类型的数据。
Fortran程序设计基础
不使用,超过会被忽略,有的编译器会发出错误信 息
第一节 程序书写——固定格式
例2-4 固定格式的Fortran程序
1 2 3456
7至72
73至80
C
FIXCED FORMAT
*
已知a,b,c,求一元二次方程的根
例2-5 自由格式的Fortran程序
PROGRAM MAIN
REAL A,B,C,P,Q,X1,X2
A = 1.0; B = 3.0; C = -6.0
!一行书写多个语句,各语句之间用;分开
P = -B / (2.0 * A) Q = SQRT(B*B - 4.0*A*C)/& !下一行是续行
(2.0*A)
X1 = P + & &Q
X2 = P - Q
!下一行语句是续行 !此行是上一行的续行
WRITE (*, 10) X1, X2 10 FORMAT(1X, 2F6.2)
END
第二节 字符集和标识符——标识符
标识符是程序中变量、常量、例程等的名称 给变量、常量、函数等标识符命名时,必须以字母
开头,后面可接多达30个字母(A~Z、a~z)、 数字(0~9)或下划线(_) 只能以字母开头; 不能含有空格; 不区分字母大小写; 长度限定为31个字符(Fortran 77为6个字符); 避免与关键字、标准例程重名。
自定义数据类型(派生数据类型)
第三节 数据类型——整型
整型数的存储
01111111
27
11111111
215
fortran结构体用法
fortran结构体用法在Fortran中,结构体是一种用户自定义的数据类型,它可以包含多个不同的数据类型。
以下是Fortran结构体的基本用法:1. 结构体的定义:使用type关键字定义一个结构体,其语法如下:```Fortran`type type_name [attributes] :: var1 [attributes] :: var2 … [attributes] :: varnend type type_name````其中,type_name表示结构体名称,var1、var2…varn表示结构体中包含的变量名称,attributes表示可选的属性参数。
2. 结构体的声明:声明一个结构体变量时,需要使用type关键字和结构体名称,语法如下:```type(type_name) :: var_name```````fortrantype(Book) :: mybook```3. 结构体成员的访问:在定义一个结构体后,其中的字段(如title、author、id等)被称为该结构体的成员。
在Fortran中,通过%符号来访问一个结构体的成员。
例如,访问mybook的title成员可以使用以下语法:```fortranmybook%title```4. 结构体的使用:使用结构体的关键是它可以组合多个不同的变量类型,形成一个新的复合类型,以方便在程序中进行操作。
由于Fortran的强类型特性,结构体定义的变量和函数必须使用结构体的名称进行访问。
5. 结构体的初始化:可以使用赋值语句或构造语句对结构体进行初始化。
例如:mybook = Book("title", "author", "id")```6. 结构体的输入输出:可以使用输入输出语句对结构体进行输入和输出操作。
例如:```fortranread(,) mybook%title, mybook%author, mybook%idwrite(,) "Title:", mybook%title, "Author:", mybook%author, "ID:", mybook%id```以上是Fortran中结构体的基本用法,可以通过具体的示例代码进行进一步的学习和掌握。
fortran 教程
fortran 教程Fortran是一种古老而强大的编程语言,最初在1957年开发。
它被广泛用于科学和工程计算,特别是对大型和复杂的计算任务。
Fortran之所以如此受欢迎,是因为它在数学计算领域表现出色。
它拥有丰富的数学函数和运算符,并且支持高精度计算。
此外,Fortran还具有强大的数组处理能力,可以轻松处理大规模数据。
Fortran的语法相对简单,易于学习和使用。
它使用英语类似的语法,语句以换行符结束。
Fortran中的语句通常以关键字开始,例如"PROGRAM","SUBROUTINE"和"DO"等。
Fortran具有自己的变量类型,包括整数(INTEGER)、实数(REAL)和字符(CHARACTER)等。
变量必须在使用之前先声明,并且可以指定其大小和精度。
Fortran还支持过程式编程,包括子程序和函数的定义。
子程序可以接受输入参数,并返回结果。
这种模块化的编程方法可以提高代码的可读性和可维护性。
Fortran程序通常由一个主程序(PROGRAM)和若干个子程序(SUBROUTINE)组成。
主程序是程序的入口点,而子程序则可以被主程序或其他子程序调用。
Fortran还提供了许多控制结构,包括条件语句(IF-THEN-ELSE)和循环语句(DO)等。
这些结构可以帮助程序在不同的情况下做出不同的决策和重复执行特定的代码块。
在写Fortran程序时,编码风格非常重要。
良好的编码风格可以使程序更易于阅读和理解,减少错误的发生。
在Fortran中,常用的编码风格包括正确缩进、适当的变量命名和注释的使用等。
总结起来,Fortran是一种强大而易于学习的编程语言,特别适用于数学计算和科学工程领域。
通过掌握Fortran的基本语法和编码风格,您将能够编写高效且可靠的程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7章属性的声明最后,对于数据我们剩下的工作,就是如何运用FROTRAN语言来完整地加以描述。
FORTRAN语言完成对数据的描述的语法单位是数据声明语句,在前面2章里面,我们整理好问题当中需要涉及的数据及其结构之后,要以FORTRAN语言写下来,就是使用FORTRAN的声明语句,这些语句的句法设计保证能够完备的描述我们关于数据所需要说明的一切属性。
数据对象首先需要予以说明的当然就是它的类型,因此我们首先给出对象的类型声明语句,特别地,需要说明在最初FORTRAN标准里面遗留下来的一种数据类型描述方法——隐式类型描述法,然后讨论各种数据对象所可能具有的属性。
● 数组属性;● 指针属性;● 值特征;● 对象可访问性与使用属性;● 特征兼容性;● 自动数据对象;● 存储关联。
由于本章集中讨论FORTRAN的声明语句,而声明的对象除了数据之外,其他的程序对象,例如函数,过程等也需要声明其类型或属性,因此本章一并讨论对其他程序对象的声明:● 过程属性;● NAMELIST语句;7.1 属性及其声明方式所谓一个对象的属性,就是程序使用该对象的方式。
本章所讨论的属性的大体分类与作为其名称的关键词见表7-1:表7-1属性的分类及其关键词数据类型INTEGERREAL(以及DOUBLE PRECISION)COMPLEXLOGICALCHARACTERTYPE(派生类型的名称由用户命名)数组属性DIMENSIONALLOCATABLE指针属性POINTERTARGET值设置DATAPARAMETER对象可访问性与调用 PUBLICPRIVATEINTENTOPTIONALSAVE过程属性EXTERNALINTRINSIC对象关系属性NAMELISTEQUIVALENCECOMMON这些关键词的使用,或者说属性的声明有2种方式:●在类型声明时附加属性说明,这种语句形式侧重在给出数据对象,属性说明是附加的;●使用单独的属性声明语句,这种语句形式侧重在说明属性本身。
之所以会出现2种声明方式,完全是历史的缘故。
FORTRAN的早期版本里,任何的对象属性说明,都是运用单独的属性声明语句,如果一个数据对象同时具有多种属性,就需要使用相应的多个属性声明语句,从程序阅读的角度来看,会显得很烦琐,因此到了FORTRAN90和95版本,只要在程序单元当中需要声明一个数据对象的类型,那么就可以把它的其他所有属性都附加到它的类型声明语句当中,使得程序显得更加紧凑。
【例7-1】我们要定义2个实型变量X,Y,同时还要声明它们都具有指针属性,在早期FORTRAN语言里写为:REAL X,YPOINTER X,Y换一种更加紧凑的写法就是把这2条语句写为1句:REAL POINTER::X,Y之所以我们还需要讨论单独的属性语句,主要是有时候需要保持源码的向前兼容性,而且在少数情况下,这2种形式也并完全等价。
因此在本章在讨论各种属性的声明方式的时候,将首先给出面向数据对象的声明方式,然后给出等价的面向属性的声明方式。
在这2种表示属性的方式里,同样由于历史的缘故,数组的维度属性DIMENSION既可以附加在类型声明语句当中表述,也可以单独声明,实际上DIMENSION这个关键词属于老式FORTRAN的遗留物,在新的表述方式里面,完全可以省略它。
【例7-2】COMPLEX XDIMENSION X(35)SAVE XCOMPLEX X(35)SAVE XCOMPLEX,DIMENSION(35),SAVE::XCOMPLEX,SAVE::X(35)以上4种表述方式是完全等价的,显然最后一种最简洁。
在一个程序单元里面,引用一个数据对象的前提是已经声明了它的种种必需属性,数据对象的各种属性里面,最为基本的当然是数据对象的类型,然后还需要声明其各种必需的属性,这样该数据对象才能被程序正确地调用访问。
然而在一个实际的程序里面,数据对象的声明在表面上可能并不是完备的,同时又不是非法的语法,出现这种情况的原因如下:●在FORTRAN的早期版本里,为了求简化的缘故,使用了一种隐式约定数据类型的方式,即通过数据对象的名称的第一个字母来分辨其所属类型,这种类型声明方式被后来的FORTRAN版本一直沿用下来了,因此如果一个程序单元里出现的数据对象没有经过类型声明语句的专门声明,则需要考虑其是否属于隐式声明。
相反,如果想排除这种隐式声明的影响,则需要另外单独加以IMPLICIT NONE语句作为声明。
●任何其他的属性如果没有出现的话,或者是因为该数据对象不需要某种属性,或者是该数据对象的某种属性采取了默认设置。
从上面的分类表7-1可以看到,FORTRAN的属性除了用来说明数据类型的属性之外,其他属性都是针对不同的数据类型或程序对象,以及它们的各种特征的。
例如数组属性只是用来说明数组,指针属性只是用来说明指针,而过程属性只是用来说明过程,下面将分类讨论这些属性。
7.2 类型声明语句我们在讨论第5章讨论数据类型的时候给出数据类型的基本声明语句的句法形式,这里将侧重于数据类型的声明与其他相关属性的兼容,因为从语言的简洁与自然的角度出发,把一个数据对象的类型和其他属性都归结为一条数据声明语句是非常可取的,所以我们得到如下的一般的类型声明句法形式(R501):type-specification [[ ,attribute- specification]…:: ] entity-declaration-list即作为选项,在一条数据对象的类型声明(type-specification)语句当中,在数据项声明的列表(entity-declaration-list)之前,给出相应的属性说明(attribute- specification),方括号[]表示可选。
●类型说明(type-specification)的一般句法形式(R502)是如下几种形式之一:INTEGER [kind-selector]REAL [kind-selector]DOUBLE PRECISIONCOMPLEX [kind-selector]CHARACTER [character-selector]LOGICAL [kind-selector]TYPE(type-name)其中种别选择符(kind-selector)的句法形式(R506)为:([KIND = ] kind-value)其中种别值(kind-value)是一个标量整型表达式。
●属性说明(attribute- specification)的一般句法形式(R503)为如下几种形式之一:PARAMETERALLOCATABLEDIMENSION(array- specification)EXTERNALINTENT(intent-specification)INTRINSICOPTIONALPOINTERSAVETARGETaccess- specification其中的可访问性说明(access- specification)包括PUBLIC和PRIVATE。
●数据项声明的一般句法形式(R505)为如下2种形式之一:object-name [(array- specification)] [*character-length] [initialization]function-name [(array- specification)] [*character-length]其中初始化(initialization)的一般句法形式(R505)为如下2种形式之一:= initialization-expression=>NULL()类型声明的一般规则如下:● 对数据对象的说明优先于隐式类型描述,即隐式类型描述法永远只是在数据对象没有获得任何说明的情况下的默认法则,而显式说明既可以与隐式法则一致,也可以不一致。
● 在一个类型声明语句当中,同一个属性只能出现一次。
● 在一个作用域内,一个数据项的任何属性只要约定了一次,就不可再次约定。
● 种别选择符所取的种别值只能是编译系统所许可的相应类型的种别参数之一。
● 字符长度(character-length)选项只能出现在CHARACTER类型的声明语句当中。
● 如果使用初始化语句,则必须在数据项声明前使用双冒号(;;)。
● 如果数据变量被初始化设置为数组,那么该数组的形状一定要得到说明,或者是在类型声明语句当中,或者是在同一个作用域内此前的属性声明语句当中。
● 如果数据对象被赋予PARAMETER属性,那么其中必须包含初始化语句。
● 如果在初始化语句当中出现符号=>,那么该被初始化的对象必定具有POINTER属性;如果在初始化语句当中出现符号=,那么该被初始化的对象肯定不具有POINTER 属性。
● 所谓函数名称(function-name),或者是一个外部函数的名称,或者是一个固有函数的名称,或者是一个函数哑过程的名称,或者是一个语句函数的名称。
● 一个数组函数名称或者是被指定为显形数组,或者是具有POINTER属性,从而被指定为待定形数组。
有关属性声明的其他规则以及属性之间的兼容性在后面会详悉讨论。
【例7-3】下面是一些附加了其他属性的数据类型声明语句:REAL, INTENT(IN) :: COSREAL, INTRINSIC :: SININTEGER X(25)LOGICAL,DIMENSION(10,15)::RESULT1,RESULT2INTEGER,PARAMETER::SHORT=SELECTED_INT_KIND(4)COMPLEX :: SQUARE_ROOT = ( 2.76, -0.85)REAL, ALLOCATABLE :: X( : , : )TYPE, POINTER :: CURRENT_OF_SAMPLE => NULL()7.2.1 整型INTEGER语句声明了整型数据对象的名称,同时也可以附加种别参数以及其他属性。
如果给出种别选择符,即说明该整型数据的表示方法。
声明一个数据对象属于整型数据的基本语句句法为:INTEGER [ ( [ KIND = ] kind-value ) ] [ [ , attribute-list] :: ] entry-list【例7-4】以下这些声明语句主要是要说明数据项:INTEGER XINTEGER DIMENSION(:), POINTER :: days, hoursINTEGER(SHORT)RED_BALLINTEGER(2) POINTER :: k, limitINTEGER(1) DIMENSION(10) :: min【例7-5】以下这些声明语句主要是要说明数据的属性:INTEGER days, hoursINTEGER(2) k, limitINTEGER(1) minDIMENSION days(:), hours(:), min (10)POINTER days, hours, k, limit7.2.2 实型REAL语句声明了实型数据对象的名称,同时也可以附加种别参数以及其他属性。