fortran第7章2
FORTRAN知识点总结
F O R T R A N第2章FORTRAN90基础知识:程序单元的概念:fortran90程序是一种分块形式的程序,整个程序由若干程序单元块组成。
每个程序只有一个主程序单元。
各单元体的程序体形式上相同。
程序单元可以是主程序、子程序(外部过程或内部过程)、模块MODULE (供其他程序单元引用即把该程序单元内的全部语句复制到程序单元中)或块数据程序单元BLOCK 。
语言元素:指在程序设计中用到的基本成分,如字符集、常量、变量、记号(标号、关键字、名字、常数、运算符和定界符)以及其他的基本结构等。
字符集:英文字母、阿拉伯数字、下划线、21个特殊字符($和?没有规定用法)。
数据结构:整型INTEGER (34-2下划线后面是种别参数),n 位字长的计算机的数据表示范围一般为12~211-+---n n ,种别参数由内在询问函数KIND 送回,种别值提供的最小范围由内在函数SELECTED-INT-KIND 送回,表示十进制幂的范围由内在函数RANGE 送回;实型REAL ,小数形式和指数形式;复型COMPLEX (种别类型参数值取实部与虚部中较大者);字符型CHARACTER,由一对单撇号或双撇号之间的字符序列组成;逻辑型LOGICAL。
派生数据类型TYPE;数组INTEGER,DIMENSION(1,50)::A,可直接对数组元素进行运算如3*A,SQRT(A);字符子串,在字符串CHARACTER(LEN=80)::ROW中,ROW(1:3)就表示字符串ROW中第1到第3个元素组成的子串。
变量名的命名规则:不能超过31个字符;组成成分是字母、数字、下划线;第一个字符必须是字母。
第3章基本语句:类型说明语句:类型说明(种别说明),属性说明::变量名表尽量避免把两个实数作相等或不相等的比较。
淘汰隐式说明IMPLICIT NONE种别说明:种别参数即对可移植数据精度和范围进行选择的机制KIND(X) 返回变元X的种别参数值SELECTED-REAL-KIND(n,m) 产生一个种别值,它表示某一精度和范围。
第07章 实现
12
(1)序言性注释 通常臵于每个程序模块的开头部分,它应当给出 程序的整体说明,对于理解程序本身具有引导 作用。有些软件开发部门对序言性注释做了明 确而严格的规定,要求程序编制者逐项列出。 有关项目包括: – 程序标题;
– 有关本模块功能和目的的说明; – 主要算法; – 接口说明:包括调用形式,参数描述, 子程序清单;
4
应用领域
数值计算(科学计算):FORTRAN 、True BASIC、 QBasic .商业和管理 : COBOL、 数据库系统(dBASE、FoxBASE、Foxpro) .人工智能 : Lisp、ProLog .系统设计 : C语言,C++ .多媒体(图、声、文技术) Visual BASIC .计算机网络: 分布处理数据库系统:SYBASE、ORACLE WWW文件:HTML(Hyper Text Markup Language)、 Java
32
当 i<j 时, i / j = 0 当 j<i 时, j / i = 0 得到的数组 当 i ≠j 时 V[i][j] = ( i/j ) * ( j/i ) = 0 当 i= j 时 V[i][j] = ( i/j ) * ( j/i ) = 1 这样得到的结果 V 是一个单位矩阵
33
写成以下的形式,就能让读者直接了解程 序编写者的意图。 for ( i=1; i <= n; i++ ) for ( j=1; j <= n; j++ ) if ( i == j ) V[i][j] = 1.0; ELSE V[i][j] = 0.0;
15
(2)功能性注释
功能性注释嵌在源程序体中,用以描述其 后的语句或程序段是在做什么工作,或是 执行了下面的语句会怎么样。而不要解释 下面怎么做。 例如,
fortran有限元程序课程设计
fortran有限元程序课程设计一、课程目标知识目标:1. 掌握Fortran语言的基本语法和程序结构;2. 理解有限元方法的基本原理及其在工程问题中的应用;3. 学会使用Fortran编写有限元程序,解决简单的物理问题;4. 了解有限元程序的调试与优化方法。
技能目标:1. 能够运用Fortran语言编写简单的有限元程序;2. 能够对有限元程序进行调试和性能优化;3. 能够运用所学知识解决实际工程问题,具备一定的编程实践能力;4. 能够通过团队合作,共同完成较复杂的有限元程序编写。
情感态度价值观目标:1. 培养学生对编程和计算物理学的兴趣,激发学生的求知欲和探索精神;2. 培养学生严谨、细致、勤奋的学习态度,提高学生的问题解决能力;3. 培养学生的团队合作精神,提高沟通与协作能力;4. 增强学生的民族自豪感,认识我国在有限元领域的发展成果。
课程性质:本课程为高年级专业选修课,旨在使学生掌握Fortran有限元程序的编写和应用,提高学生的编程实践能力和解决实际问题的能力。
学生特点:学生已具备一定的数学、物理和编程基础,具有较强的逻辑思维能力和动手能力。
教学要求:结合课本内容,注重理论与实践相结合,强化编程实践,提高学生的实际操作能力。
同时,注重培养学生的团队合作精神,提高学生的综合素质。
通过本课程的学习,使学生能够独立编写和优化有限元程序,为后续学习和工作打下坚实基础。
二、教学内容1. Fortran语言基础:变量定义、数据类型、运算符、控制结构、数组、函数与子程序等;2. 有限元方法原理:有限元离散化、单元划分、形函数、刚度矩阵、载荷向量、边界条件处理等;3. 有限元程序编写:根据实际问题,运用Fortran语言编写有限元程序,包括前处理、核心计算和后处理;4. 程序调试与优化:调试技巧、性能分析、优化方法等;5. 实际工程案例:选取具有代表性的工程问题,运用所学的Fortran有限元程序解决。
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数组详细介绍
7.5
DATA
给数组赋初值
一、使用DATA语句赋初值 使用DATA语句赋初值 DATA
项目表/常量表/[[,]项目表/常量表/]… 项目表/常量表/[[,]项目表/常量表/]… /[[,]项目表 项目表:变量名、数组名、数组元素名、 项目表:变量名、数组名、数组元素名、 字符子串名和隐DO循环。 DO循环 字符子串名和隐DO循环。 个数、类型、顺序一一对应。 与常量 个数、类型、顺序一一对应。 例: REAL PP(6) COMPLEX*8 LPP INTEGER, DIMENSION(20) :: A DATA PP, LPP/6*0, (8.0, -89)/ DATA(A(I),I=1,20,2)/10*1/, (A(I), I=2, 20, 2)/10*0/
7.3 数组元素的存储结构
例:INTEGER A(10),B(3,4)
A(1) A(2) A(3) A(4) B(1,1) B(2,1) B(3,1) B(1,2) B(2,2) B(3,2)
数组元素 按列存放
B(2,4) A(10) B(3,4)
7.4
数组的输入输出
特点: 特点:每执行一个输入 语句输入一个数组元素 值(一个数组元素值组 成一个输入记录) 成一个输入记录)。 每执行一个输出语句输 出一个数组元素值( 出一个数组元素值(每 一行输出一个数组元素 值 )。
二、以数组名作为输入输出项
数组元素按照在内存中的排列顺序一次全部输入输出。 数组元素按照在内存中的排列顺序一次全部输入输出。 将矩阵存放在数组中并输出。 例:将矩阵存放在数组中并输出。 INTEGER W(3, 3) READ(*,*) W !按列的顺序输入 WRITE(*, 10) W !按列的顺序输出 10 FORMAT(1X, 3I3) 输入: , , , , , , , , 输入:1,4,7,2,5,8,3,6,9 输出: 输出: □□1□□4□□7 □□2□□5□□8 □□3□□6□□9 1 2 3 4 5 6 7 8 9
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)传递单个内存空间
编译原理作业集-第七章(精选.)
编译原理作业集-第七章(精选.)第七章语义分析和中间代码产⽣本章要点1. 中间语⾔,各种常见中间语⾔形式;2. 说明语句、赋值语句、布尔表达式、控制语句等的翻译;3. 过程调⽤的处理;4. 类型检查;本章⽬标掌握和理解中间语⾔,各种常见中间语⾔形式;各种语句到中间语⾔的翻译;以及类型检查等内容。
本章重点1.中间代码的⼏种形式,它们之间的相互转换:四元式、三元式、逆波兰表⽰;3.赋值语句、算术表达式、布尔表达式的翻译及其中间代码格式;4.各种控制流语句的翻译及其中间代码格式;5.过程调⽤的中间代码格式;6.类型检查;本章难点1. 各种语句的翻译;2. 类型系统和类型检查;作业题⼀、单项选择题:1. 布尔表达式计算时可以采⽤某种优化措施,⽐如A and B⽤if-then-else可解释为_______。
a. if A then true else B;b. if A then B else false;c. if A then false else true;d. if A then true else false;2. 为了便于优化处理,三地址代码可以表⽰成________。
a. 三元式b. 四元式c. 后缀式d. 间接三元式3. 使⽤三元式是为了________:a. 便于代码优化处理b. 避免把临时变量填⼊符号表c. 节省存储代码的空间d. 提⾼访问代码的速度4. 表达式-a+b*(-c+d)的逆波兰式是________。
a. ab+-cd+-*;b. a-b+c-d+*;c. a-b+c-d+*;d. a-bc-d+*+;5. 赋值语句x:=-(a+b)/(c-d)-(a+b*c)的逆波兰式表⽰是_______。
a. xab+cd-/-bc*a+-:=;a. xab+/cd-bc*a+--:=;a. xab+-cd-/abc*+-:=;a. xab+cd-/abc*+--:=;6. 在⼀棵语法树中结点的继承属性和综合属性之间的相互依赖关系可以由________来描述。
Fortran基础教程
2024/8/9
18
3.5 常 量
3.5.2 实型常量
(有二种表示形式)
⒈小数形式
例:15.8,-21.05,14.0 ,14.,.17, 0.0 ,…
⒉指数形式(通常表示较大或较小的数)
例:100000000→1.0E+8
0.0000125→1.25E-05
数字部分
指数部分
2024/8/9
19
3.5 常 量
2024/8/9
31
3.7 Fortran内部函数
注意几点:
⑴函数自变量(参数)必须用括号括起来。
例:sinx+cosx → sin(x)+cos(x)
⑵函数自变量可以是常量、变量或表达式。
例: exp(3.0)
sin (x+cos(x))
⑶有些函数的类型是由自变量的类型确定的。
例:mod(8.0,3.0) →2.0
2024/8/9
24
3.6 变 量
注意几点: ⑴变量名不区分大小写字母。
例:TOTAL,Total,total 代表同一变量 ⑵变量名中的空格不起作用。
例:abc,a bc,ab c,a b c 代表同一变量 ⑶变量名尽量做到“见名知义” AVER、SUM、Imax ⑷允许变量名与语言中具有特定含义的字(“保留字”)
2024/8/9
13
3.4 Fortran程序的编辑与运行
一、Fortran PowerStation 4.0的启动
选“开始”→“程序”→“Fortran PowerStation 4.0”→“Microsoft Developer Studio”。
二、创建项目工作间
选“File”→“New”→“Project Workspace”→“Console Application”,并 输入项目工作间名称(如:aaa)和存放项 目工作间的位置或路径(如:c:\for\) → Create。
_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 过程调用参数传递给其他过程。
Fortran77中文帮助教程
第一章 FORTRAN语言程序设计初步...................................................................................................1 1.1 FORTRAN语言发展概况..........................................................................................................1 1.2 简单的FORTRAN程序分析......................................................................................................1 1.3 FORTRAN 源程序的书写格式................................................................................................1 1.4 Fortran程序的编辑与运行 ........................................................................................................1 1.5 常 量 ..........................................................................................................................................1 1.5.1 整型常量 .........................................................................................................................1 1.5.2 实型常量 .........................................................................................................................1 1.6 变 量 ..........................................................................................................................................2 1.6.1 变量的概念 .....................................................................................................................2 1.6.2 变量名 .............................................................................................................................2 1.6.3 变量类型 .........................................................................................................................2 1.7 Fortran内部函数 ........................................................................................................................2 1.8 Fortran算术表达式 ....................................................................................................................3 1.8.1 算术运算符和运算优先级 .............................................................................................3 1.8.2 表达式运算中的类型问题 .............................................................................................3 1.8.3 运算的误差问题 .............................................................................................................3 1.9 赋值语句 ....................................................................................................................................3 1.10 简单输出语句 ..........................................................................................................................3 1.11 简单输入语句 ..........................................................................................................................4 1.12 PARAMETER语句 ..................................................................................................................5 1.13 END,STOP,PAUSE语句 ....................................................................................................5 总结 ...................................................................................................................................................5
fortran语言教程第7章
第7章 模块化程序设计7.1 程序的模块化思想引例: 输入M 、N ,计算并输出:)!(!!n m n m c n m -= 源程序(I ) READ(*,*) M, N DO 5 WHILE(M.LT.N) READ(*,*) M,N 5 CONTINUE X=M T=1.0 DO 10 I=1,X T=T*I 10 CONTINUE S=T X=N T=1 DO 20 I=1,X T=T*I 20 CONTINUE S=S/T X=M-NT=1DO 30 I=1,XT=T*I30 CONTINUES=S/TWRITE(*,*) SEND源程序(II )FUNCTION FA(N)T=1.0DO 10 I=1,NT=T*I 程序段110 CONTINUEFA=TENDREAD(*, *)M, NDO 5 WHILE(M.LT.N)READ(*,*) M,N5 CONTINUE 程序段2S=FA(M)/(FA(N)*FA(M-N))WRITE(*,*) SEND源程序(I )中,加粗的3段完全相同,我们可以将其提炼出来,独立写成一个程序单位,构成一个子程序单元,写成源程序(II )的形式,这样的程序就形成了主程序和子程序的多部分、多模块的格局。
一般而言,模块是指可以独立存盘,并且可以分别编译的源程序文件,是一种构成FORTRAN 程序的独立成分。
即是说子程序与主程序可以分别编辑存盘、编译,此时即形成所谓的多模块程序。
程序模块化的优点是:(1)体现了算法和功能上的模块化,符合人们解决复杂问题的一般思路,也为结构化程序设计提供了有力支持。
(2)使复杂的软件开发工作可以化整为零,便于多人分工协作,减少开发人员之间的相互干扰与重复劳动,从而有利于缩短开发周期,节省开发费用,提高软件质量。
(3)可以设计一块,调试一块,设计完成,调试也随之完成,能够方便有效地防止数据之间的相互干扰,增加整个系统的稳定性与可靠性。
Fortran77中文帮助教程
Fortran语言――Fortran77结构化程序设计第一章 FORTRAN语言程序设计初步 (1)1.1FORTRAN语言发展概况 (1)1.2 简单的FORTRAN程序分析 (1)1.3FORTRAN 源程序的书写格式 (1)1.4Fortran程序的编辑与运行 (1)1.5 常量 (1)1.5.1 整型常量 (1)1.5.2 实型常量 (1)1.6 变量 (2)1.6.1 变量的概念 (2)1.6.2 变量名 (2)1.6.3 变量类型 (2)1.7Fortran内部函数 (2)1.8Fortran算术表达式 (3)1.8.1 算术运算符和运算优先级 (3)1.8.2 表达式运算中的类型问题 (3)1.8.3 运算的误差问题 (3)1.9 赋值语句 (3)1.10 简单输出语句 (3)1.11 简单输入语句 (4)1.12PARAMETER语句 (5)1.13END,STOP,PAUSE语句 (5)总结 (5)第二章逻辑运算和选择结构 (6)2.1 引言 (6)2.2 关系表达式 (6)2.3 逻辑表达式 (6)2.4 用块 IF 实现选择结构 (6)2.5 逻辑IF语句 (7)2.6 算术IF语句 (7)第三章循环结构的实现 (8)3.1 用GOTO语句实现循环 (8)3.2 用DO语句实现循环 (8)3.3 当型循环的实现 (9)3.4 直到型循环的实现 (9)3.5 几种循环形式的关系和比较 (9)第四章 FORTRAN的数据结构 (10)4.1 程序中的数据结构 (10)4.2 双精度数据类型 (10)4.3 复型类型数据 (10)4.4 四种数值型数据之间的转换和运算 (10)4.5 字符型数据 (10)第五章数据的输入和输出 (12)i5.1 概述 (12)5.2 有格式的输出 (12)5.3 有格式的输入 (13)5.4 在PRINT,WRITE和READ语句中包含格式说明 (13)第六章数组 (14)6.1 数组的说明和数组元素的引用 (14)6.2 数组的逻辑结构和存储结构 (14)6.3 数组的输入和输出 (14)6.4 使用DATA语句给数组赋初值 (15)第七章语句函数 (16)7.1 语句函数的定义 (16)7.2 语句函数的引用 (16)第八章子程序 (17)8.1 函数子程序 (17)8.2 子例行程序 (18)8.3 实参和虚参之间的数据传递 (18)第九章数据共用存储单元 (20)9.1 等价语句 (EQUIV ALENCE语句) (20)9.2 公用语句 (20)9.2.1 无名公用区 (20)9.2.2 有名公用区 (21)9.3 数据块子程序 (22)第十章文件 (24)10.1 概述 (24)10.2 文件的基本概念 (24)10.3 数据文件的建立和使用 (24)ii第一章 FORTRAN语言程序设计初步1.1FORTRAN语言发展概况Formula Translation适用于工程及科学计算的一种高级程序设计语言1951年由约翰·贝克斯等人开始研究Fortran语言;1957年第一个Fortran程序在IBM704机上运行;1958和1962年先后推出FortranⅡ和FortranⅣ;1966和1978年先后颁布Fortran66和Fortran77;1991年颁布了Fortran90,1997年颁布Fortran95,2004年颁布Fortran20031.2 简单的FORTRAN程序分析Fortran程序的基本结构:⑴一个Fortran源程序由一个或多个程序单位组成,每个独立的程序单位以“end”语句结束。
FORTRAN语言第7章(共8章)
二维数组,其中第一个下标代表元素所在行号,第二个下 标为该元素所在列号。
第一节 数组的概念
引入数组以后,让一批同类型数据共享一个名字,不 必为每一对象都取一个名字。数组元素是按顺序号连续 存放的,我们可以用循环语句控制下标的变化,这给在 同一方式下处理多个同类型数据带来极大方便。例如: REAL P(5),AVER DO I=1,5 READ(*,*)P(I) AVER=AVER+P(I) ENDDO AVER=AVER/5 !定义P数组 !输入成绩并存入P数组 !求成绩之和 !求平均成绩
PROGRAM example
num=0 DO i=1,15
REAL a(20),sum,av
INTEGER num sum=0.0
IF (a(i)>av) num=num+1 ENDDO PRINT *,'平均值为:',av PRINT *,'大于平均值的数据个数为:,num END
DO i=1,15
只要给出数组名和下标就可以表示某一数组元素。例如:
一个班30个学生的FORTRAN语言课程成绩组成一个数组 G,每个学生的成绩可表示为:
G(1),G(2),G(3),…,G(i),…G(30)
一、变量与数组的区别 例:30个学生4门课程的成绩 S(1,1),S(1,2),S(1,3),S(1,4) S(2,1),S(2,2),S(2,3),S(2,4) …… S(30,1),S(30,2),S(30,3),S(30,4) 二、数组的分类 在上例中,区分G数组的元素需要一个顺序号(下标),故称 为一维数组;而区分S数组的元素需要两个顺序号,故称为
名字后个别说明大小 个别优于统一
上例中说明了三个整型一维数组A,B,C,一个二维实 型数组D,其中A,C各含有5个元素,B含有4个元素;D中 含有12个元素。 在说明数组时,可以在数组名后面给出维说明,这时以 该数组名后的维说明为准。
第7章 程序设计语言
华南理工大学计算机教学团队
27
7.4.3 运算符与表达式(2)
• 不同类型的数据可以参与的运算不同。即不 同类型数据的操作使用的运算符也不一样。 VB 主要有4类运算符。算术运算符、字符串
运算符、关系运算符和逻辑运算符。由这4类
运算符组成的表达式分别称为算术表达式、
字符串表达式、关系表达式和逻辑表达式。
不同型号的计算机上运行,程序可移植性差。
华南理工大学计算机教学团队
6
7.1.2 汇编语言(1)
汇编语言也是一种面向机器的语言,为了帮 助人们记忆,它采用了符号(称为助记符) 来代替机器语言的二进制码,所以又称为
符号语言。
用汇编语言书写的程序,计算机不能直接识
别,需要一种程序将汇编语言翻译成机器
语言 才能在计算机上执行,这种翻译程序
• 程序员的工作是编写源程序,然后将其转化为可 执行(机器语言)程序,交给计算机执行。该过 程主要由以下三步构成。
– 编辑程序
– 编译程序 – 执行程序
华南理工大学计算机教学团队
13
7.3 程序设计方法
程序设计的常用方法有结构化程序设计 (Structured Programming) 方 法 和 面 向 对 象 的 程 序 设 计 (Object-oriented Programming)方法。
„如果mark>85, 则输出 Excellent.
华南理工大学计算机教学团队 33
7.4.4 程序控制结构(2)
2. 循环语句:循环语句实现循环结构。
格式:While <条件>
<语句>
Wend
功能说明:其中<条件>为关系表达式或逻辑表达式,如果<条件 >为True,则执行<语句 >,遇到Wend时,返回到 While语句, 继续对<条件>进行测试;如果仍为True,则重复上述过程。直 到<条件> 为False,则不再执行<语句>, 而执行Wend后面的 语句。该循环语句实现的是当型循环结构。
5软件技术第7章:算法+程序语言+软件工程
–语言编译和解释系统 –网络软件 –数据库管理系统(DBMS) –各种服务程序
应用软件
–业务软件
–科技计算软件 –个人计算机软件 –人工智能软件 …
School of Computer Science
软件开发过程?
有一个工程:建一座桥梁。我们会怎么做? 了解桥梁的要求、用途—设计—维护
开发大型软件: 定义—开发—维护
1.枚举法
枚举法是一种比较笨但却很有效的算法, 他针对问题所有的可能一一查看是不是符合 条件, 一种情况他都不想落下,有宁可错杀 一千,不可放过一个的作风。
先依据题目的部分条件确定答案的大致范围, 在此范围内对所有可能的情况逐一验证,直到全 部情况验证完。
若某个情况使验证符合题目的条件,则为本 题的一个答案;若全部情况验证完后均不符合题 目的条件,则问题无解。
?软件质量得不到保证软件越来越多的应用于安全犹关safetycritical的系统对软件质量提出更高的要求80年代欧洲亚丽安娜火箭的发射失败原因是软件错误美国阿托拉斯火箭的发射失败原因是软件故障我国某型号导弹由于软件问题致使打靶失败?进度难以控制项目延期比比皆是由于进度问题而取消的软件项目较常见只有一小部分的项目能够按期完成?维护非常困难软件维护的多样性软件维护的复杂性软件维护的副作用产生软件危机的根源?复杂性高逻辑产品逻辑复杂性远高于硬件复杂性软件的复杂性随规模呈指数级上升?规模大应用扩大代码量1000万行仍在不断膨胀影响软件生产率和质量的因素比较复杂人员的能力和水平团队合作?缺乏有效系统原理原则方法和工具的指导和辅助softwareengineeringvs
School of Computer Science
2.控制结构
1)算法的控制结构,决定了各操作的执行次序。 用流程图可以形象地表示出算法的控制结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
形状: 形状:各维维长的序列 判定维数,求各维维长 判定维数,求各维维长d2-d1+1 函数值为数组
Fortran 90
练习2:阅读下列程序,写出运行结果 练习 :阅读下列程序, IMPLICIT NONE INTEGER,DIMENSION(0:1,-1:1,2):: , )::M ( , , ):: INTEGER,DIMENSION(3)::A , M=RESHAPE(( ,2,3,4,5,6,7,8,9,& ((/1, , , , , , , , , (( 1,2,3/),(/2,3,2/)) , , ),( , , ) ), A= SHAPE(M) ( ) PRINT*,A , END 答案: 答案:2 3 2
答案: 答案:B 其它函数: 其它函数:参见附录
Fortran 90
7.3.4 屏蔽数组赋值
由where语句或where结构实现。 where语句或where结构实现。 语句或where结构实现 功能:按照逻辑数组表达式的值, 功能:按照逻辑数组表达式的值, 屏蔽数组赋值语句中表达式的求值和赋值。 屏蔽数组赋值语句中表达式的求值和赋值。 写法与执行过程:类似于逻辑IF语句或IF结构 写法与执行过程:类似于逻辑IF语句或IF结构 IF语句或IF 区别: where语句或where结构作用在数组上 区别: where语句或where结构作用在数组上 语句或where结构 IF语句或IF结构作用在非数组上(标量上) 语句或IF结构作用在非数组上 IF语句或IF结构作用在非数组上(标量上)
函数值为数组 MAXLOC、 同MAXLOC、 MINLOC
Fortran 90
练习3:阅读下列程序, 练习 :阅读下列程序,写出运行结果 PROGRAM main INTERFACE SUBROUTINE S(b) INTEGER,DIMENSION(:,:)::b END SUBROUTINE 假定形状数组: 假定形状数组: ENDINTERFACE INTEGER,DIMENSION(2,3)::a 调用时形状取 对应实元的形 a=RESHAPE((/1,2,3,4,5,6/),(/2,3/)) 状 Call s(a) End SUBROUTINE S(b) 答案: 答案: 2 3 INTEGER,DIMENSION(:,:)::b Print*,shape(b); End
5 10 16 8 程序阅读方法: 程序阅读方法: 利用数组逻辑结 构,跟踪处理结 果
函数值是数 组 按列序输出
8
Fortran 90
练习1:阅读下列程序, 练习 :阅读下列程序,写出运行结果 PROGRAM main IMPLICIT NONE INTEGER,DIMENSION(2,-1:1,2)::a INTEGER::i a= RESHAPE((/(i, i=1,12)/),(/2,3,2/)) print*, sum(a,3) end 答案: 答案:8 10 12 14 16 18
Fortran 90
数组内在函数(续 §7.3.3 数组内在函数 续) 数组名1, 数组名2) 9、 DOT_PRODUCT (数组名1, 数组名2)
求两个同形状的一维数组(向量) 求两个同形状的一维数组(向量)的点积 同形状
点积: 点积:
REAL, REAL,DIMENSION(3)::a REAL, REAL,DIMENSION(0:2)::b DOT_PRODUCT (a,b): a(1)*b(0)+a(2)*b(1)+a(3)*b(2) 对应位置相乘再相加
Fortran 90
例2:阅读下列程序,写出运行结果 :阅读下列程序, PROGRAM MAIN IMPLICIT NONE INTEGER,DIMENSION(3)::M INTEGER,DIMENSION(1)::A M=(/1,2,3/) A= SHAPE(M) PRINT*,A END 答案: 答案: 3
INTEGER,DIMENSION(1:2,1:3,1:2)::B 1 1 4 2 5 8 14 3 6 10 16 7 2 8 9 12
10 11 12 18
Fortran 90
例1:阅读下列程序,写出运行结果 :阅读下列程序, PROGRAM main IMPLICIT NONE INTEGER,DIMENSION(2,3,2)::M INTEGER,DIMENSION(2,2)::S M=RESHAPE((/1,2,3,4,5,6,7,8,9,1,& 2,3/),(/2,3,2/)) S=SUM(M,2,MASK=M>3) PRINT*,S END 答案: 答案:5 10 16
(1)函数值个数 )函数值个数≥2,函数值一定为数组 , 函数值不是数组, (2)函数值个数 )函数值个数=1,一般函数值不是数组, ,一般函数值不是数组 但maxloc、minloc、shape函数值是数组 、 、 函数值是数组
Fortran 90
常用数组内在函数
1、SIZE(数组名[,DIM=n]) SIZE(数组名[,DIM=n]) 求数组大小(数组元素的总数) 求数组大小(数组元素的总数) MAXVAL(数组名[,DIM=n][,MASK=数组逻辑表达式]) [,DIM=n][,MASK=数组逻辑表达式 2、MAXVAL(数组名[,DIM=n][,MASK=数组逻辑表达式]) 求数组的最大值元素 MINVAL(数组名[,DIM=n][,MASK=数组逻辑表达式]) [,DIM=n][,MASK=数组逻辑表达式 3、MINVAL(数组名[,DIM=n][,MASK=数组逻辑表达式]) 求数组的最小值元素 MAXLOC(数组名[,DIM=n][,MASK=数组逻辑表达式]) [,DIM=n][,MASK=数组逻辑表达式 4、MAXLOC(数组名[,DIM=n][,MASK=数组逻辑表达式]) 求数组的最大值元素位置 MINLOC(数组名[,DIM=n][,MASK=数组逻辑表达式]) [,DIM=n][,MASK=数组逻辑表达式 5、MINLOC(数组名[,DIM=n][,MASK=数组逻辑表达式]) 求数组的最小值元素位置 6、 SUM(数组名 数组名[,DIM=n][,MASK=数组逻辑表达式 数组逻辑表达式]) 、 数组名 数组逻辑表达式 求数组各元素之和
DIM=2:选中列维,分别按行求和 :选中列维, DIM=3:选中页维,分别按行列求和 :选中页维,
选项2: 选项 :凡满足条件的元素求和 没有满足MASK条件的元素时,结果为0 条件的元素时,结果为 没有满足 条件的元素时
Fortran 90
INTEGER,DIMENSION(1:2,1:3)::A 1 1 2 1 4 2 2 5 3 3 6
函数值为2 函数值为2 是数组
Fortran 90
数组内在函数(续 §7.3.3 数组内在函数 续) 数组名[,DIM=n][,MASK=数组逻辑表达式]) [,DIM=n][,MASK=数组逻辑表达式 7、 PRODUCT (数组名[,DIM=n][,MASK=数组逻辑表达式])
求数组各元素之积
注意:没有满足 条件的元素时, 注意:没有满足MASK条件的元素时,结果为 条件的元素时 结果为1 MASK=可省略不写 可省略不写
例如:PRODUCT(A, 2, A>3) 例如:
Fortran 90
数组内在函数(续 §7.3.3 数组内在函数 续) 数组名) 8、 shape (数组名)
求数组的形状
Fortran 90
练习5 练习5、单项选择题 若数组说明语句为: 若数组说明语句为: REAL,DIMENSION(-2:2,REAL,DIMENSION(-2:2,-4:4, -3:3)::a 的值是_______ 则UBOUND(a ,DIM=2)的值是_______。 UBOUND( ,DIM=2)的值是_______。 A. 2 B. 4 C. 9 D. 3
函数值不是 数组函数值源自数组Fortran 90例:INTEGER,DIMENSION(2,3)::A INTEGER,DIMENSION(2)::B A= RESHAPE((/1,2,6,3,4,5/),(/2,3/)) B=MAXLOC(A,A<4)
函数值是数组 可省 例:INTEGER,DIMENSION(2,3)::A MASK=可省 略
Fortran 90
§7.3.3 数组内在函数
例如: 例如: ① SUM(A) ②SUM(A,2) ③SUM(A,MASK=A>0) , ④SUM(B,1,MASK=B>0) A中大于 的所有元 中大于0的所有元 中大于 素之和,函数值不是 素之和 函数值不是 数组
A中每列大于 的元 中每列大于0的元 中每列大于 素之和,函数值是数 素之和 函数值是数 选项1: 选项 : DIM=1:选中行维,分别按列求和 :选中行维, 组
INTEGER,DIMENSION(3)::B A= RESHAPE(/1,2,6,3,4,5/,(/2,3/)) B=MAXLOC(A,1)
函数值是数组
函数值一定为一维数组,位置从 开始 函数值一定为一维数组 位置从1开始 位置从
Fortran 90
INTEGER,DIMENSION(0:2)::A INTEGER,DIMENSION(1)::B A= (/1,2,6/) B=MAXLOC(A) PRINT*,B END
函数值均不是数组
Fortran 90
例: INTEGER,DIMENSION(2,3)::A MAXVAL(A) MAXVAL(A,2) MAXVAL(A,1,MASK=A>2) DIM=1:选中行维 求每列的最大值 选中行维,求每列的最大值 选中行维 DIM=2:选中列维 求每行的最大值 选中列维,求每行的最大值 选中列维
程序阅读方法: 程序阅读方法: 利用数组逻辑结 构,跟踪处理结 果
Fortran 90