fortran初步学习资料

fortran初步学习资料
fortran初步学习资料

第一章: Fortran语言程序设计初步

Fortran语言的发展概况

本节介绍Fortran的起源与发展历史,讲述Fortran由产生到形成标准FortranIV、Fortran77,并进一步形成新标准Fortran90/95的发展历程。

1.1.1 Fortran的历史

a)a)FortranI FortranIV

Fortran是目前国际上广泛流行的一种高级语言,适用于科学计算。Fortran 是英文FORmula TRANslatio n的缩写,意为“公式翻译”。它是为科学、工程问题中的那些能够用数学公式表达的问题而设计的语言,主要用于数值计算。这种语言简单易学,因为可以像抄写数学教科书里的公式一样书写数学公式,它比英文书写的自然语言更接近数学语言。Fortran语言是第一个真正推广的高级语言。至今它已有四十多年历史,但仍历久不衰,始终是数值计算领域所使用的主要语言。Fortran语言问世以来,根据需要几经发展,先后推出形成了很多版本。

第一代Fortran语言是在1954年提出来的,称为FortranI。它于1956年在IBM 704计算机上得以实现。在此之前编写计算机程序是极为繁琐的,程序员需要详细了解为之编写代码的计算机的指令、寄存器和中央处理器(CPU)等方面的知识。源程序本身是用数学符号(八进制码)编写的,后来采用了助记符,即所谓机器码或汇编码,这些编码由汇编程序转换为指令字。在50年代书写和调试一个程序要很长时间,因为用这种方式编写程序显然是很不方便的,尽管它能使CPU高效地工作。正是这些原因,促使由John Backus率领的IBM公司的一个小组研究开发最早的高级程序设计语言Fortran。其目的是开发一种容易理解、简单易学又能几乎像汇编一样高效运行的语言,他们取得了极大的成功。Fortran 语言作为第一种高级语言不仅是一次创新,也是一次革命。它使程序员摆脱了使用汇编语言的冗长乏味的负担,而且它使得不再只是计算机专家才能编写计算机程序,任何一名科学家或工程技术人员,只要稍加努力学习和使用Fortran,就能按自己的意图编写出用于科学计算的程序。

经过不断发展,FortranI形成了很多不同版本,其中最为流行的是1958年出现的FortranII,它对FortranI进行了很多扩充(如引进了子程序),FortranII 在很多机器上得以实现。其后出现的FortranIII未在任何计算机上实现。1962年出现的FortranIV对原来的Fortran作了一些改变,使得FortranII源程序在FortranIV编译程序下不能全部直接使用,导致了语言不兼容的问题。这样就形成了当时同时使用FortranII和FortranIV两种程序设计语言的局面。

正因为Fortran满足了现实的需要,所以它传播得很快,在传播和使用过程中不可避免地产生了多种版本。各种Fortran语言的语义和语法的规定又不完全一致,这给用户带来了极大的不便。用户迫切希望有能在各种机型上能互换通用的Fortran语言。因此Fortran语言的标准化工作变得十分迫切。1962年5月,当时的美国标准化协会ASA(American Standard Association)(后来改名为ANSI —American National Standards Institute,现名为NIST—National Institute of Standards and Technology)成立了工作组开展此项工作,1966年正式公布了两个美国标准文本:标准基本Fortran X3.10-1966(相当于FortranII)和标准Fortran X3.9-1966(相当于FortranIV)。

由于Fortran语言在国际上的广泛使用,1972年国际标准化组织(International Standard Organization、简称ISO)公布了ISO Fortran标准,即《程序设计语言FortranISO 1539-1972》,它分为三级,一级Fortran相当于FortranIV,二级Fortran介于FortranII和FortranIV之间,三级Fortran相当于FortranII。

FortranIV(即Fortran66)流行了十几年,几乎统治了所有的数值计算领域。许多应用程序和程序库都是用FortranIV编写的。但很多编译程序并不向这一标准靠拢,它们往往为实现一些有用的功能而忽略标准;另外,在结构化程序设计方法提出以后,人们开始感到FortranIV已不能满足要求。FortranIV不是结构化的语言,没有直接实现三种基本结构的语句,在程序中往往需要用一些以GOTO 语句以实现特定的算法;而且为了使非标准的Fortran源程序能够交换移植,产生了“预处理程序”,通过预处理程序读入非标准的Fortran源程序,生成标准的Fortran文本,从而实现了源程序的交换移植,但这种自动生成的Fortran 程序通常让人难以理解。

b)b)Fortran77 Fortran90

美国标准化协会在1976年对ANSI X3.9-1966 Fortran进行了修订,基本上把各厂家行之有效的功能都吸收了进去,此外又增加了不少新的内容,1978年4月美国标准化协会正式公布将它作为美国国家标准,即ANSI X3.9-1978 Fortran,称作Fortran77。1980年,Fortran77被接受为国际标准,即《程序设计语言FortranISO 1539-1980》,这种新标准并不是各非标准Fortran的公共子集,而是自成一体的新语言。我国制订的Fortran标准,基本采用了国际标准(即Fortran77),于1983年5月公布执行,标准号为GB3057-82。Fortran77还不是完全结构化的语言,但由于增加了一些结构化的语句,使Fortran77能用于编写结构化程序。此外,还扩充了字符处理功能。使Fortran不仅可用于数值计算领域.还可以适用于非数值运算领域。

因为Fortran77有着明显的局限性,为了引入一些新的功能,适应语言的发展,ANSI在80年代初期开始准备制定Fortran8x标准。当初为了与前一标准相对应,设想是x=8。由于要将Fortran77作为一个子集,同时又要确保程序的高效率,其标准化的工作花了十几年,最终在1991年通过了Fortran90新标准ANSI X3.198-1991,相应的国际化标准组织的编号为ISO/IEC1539:1991。新的Fortran

标准废弃了过时的严格的源程序书写格式,改善了语言的正规性,并提高了程序的安全性,功能有更大的扩充,是一个能适应现代程序设计思想的现代程序设计语言。为了保护对Fortran77用户在软件开发上的巨大投资,整个Fortran77被作为Fortran90的一个严格子集。

1.1.2 Fortran的新发展

随着其他程序设计语言的迅速发展,Fortran语言不再是惟一适用的程序设计语言。然而,尽管在一些特殊领域,使用其他程序语言更为合适,但在数值计算、科学和工程技术领域,Fortran仍具有强大的优势。其强大的生命力在于它能紧跟时代的发展,不断更新标准,每次新的文本推出都在功能上有一次突破性进展。Fortran90不仅仅是将已有的语言进行标准化,更重要的是发展了Fortran 语言,吸取了一些其他语言的优点。所以,虽然Fortran语言历史悠久,但仍在日新月异地发展。

随着巨型计算机(向量机和并行机)的异军突起,出现了新的高性能Fortran 语言(HPF),它是Fortran90的一个扩展子集,主要用于分布式内存计算机上的编程,以减轻用户编写消息传递程序的负担。HPF-1.0的语言定义是在1992年的超级计算国际会议上作出的,正式文本是在1993年公布的。其后几年的会议上又对它进行了修改、重定义、注释等工作,于1997年发布了HPF2.0语言定义。Fortran95包含了许多HPF的新功能。在Fortran90出现之前,在并行机上运行程序需要结合专门的矢量化子程序库,或者是依赖Fortran编译系统进行自动矢量化。而Fortran90之后,程序员在编程时可有目的的控制并行化。

在当前程序设计语言层出不穷的今天,学习Fortran语言的意义在于继承传统和紧跟时代。不仅一些爱好者推崇Fortran语言[A Real Programmer],而且科学计算编程的专家也认为,科学与工程相关专业的学生应该采用Fortran而非C和C++编程[F90 for Science Student]。这是因为,Fortran90具有C++所有的重要功能(尚不具备的预计将在Fortran2k版本中推出),然而C语言主要是用于微机上的廉价开发,而Fortran的目的是为了产生高效最优化运行的可执行程序,用Fortran编写的大型科学计算软件较C语言编写的通常要快一个量级,其程序编写更为自然和高效,且易学易懂。尤其是在高性能并行计算逐渐成为时代必然的今天,不仅巨型机而且微机和工作站也有了多处理器,其串行机上的线性内存模式已不再适用,而只有Fortran具备处理相应问题的标准并行化语言,其独特的数组操作充分体现了它的先进性。Fortran90和C++语言的比较可参看: https://www.360docs.net/doc/6d17713409.html,/csep.html。

a)Fortran77 ?

既然已经有了Fortran90,那么是否就不用学习Fortran77了?事实上,由于很多用户在Fortran程序上作了巨大的投资,许多大型科学计算Fortran程序

(有些长达数十万条语句),如分子动力学模拟计算(C60-C240的碰撞:10eV,100eV,300eV)等程序仍在频繁地使用。在科技领域内某些标准程序库(International Mathematics and Statics Library, Numerical Algorithms Group)内有数千以上的子程序是用Fortran写的,特别是早期的程序都是用Fortran77编写的,这些程序库已通过长期使用验证了稳定性。科学研究经常需要使用或改编以前的程序,这时必须了解Fortran77的编程手法。

本教程仍然将Fortran77作为基础,但随时与Fortran90比较不同之处。

b)Fortran90 !

Fortran90并没有删去任何Fortran77的功能,而只是将某些功能看成是将要摒弃的。在Fortran95中则是已被删去的,但考虑到历史,厂家推出的Fortran90/95编译软件仍是支持这些功能的。在新编的程序中,应尽量避免使用过时的F77语句或功能。目前已有一些软件可将这些功能除去并自动转换成并行化的程序。Fortran90/95是具有强烈现代特色的语言,总结了现代软件的要求与算法应用的发展,增加了许多现代特征的新概念、新功能、新结构、新形式。Fortran90的现代特性表现在:

加强了程序的可读性、可维护性:淘汰所有转移语句,用新的控制结构实现选择分叉与重复操作,使程序结构化。同时增加了结构块、模块及过程的调用灵活形式,使程序易读易维护,新的模块装配取代了Fortran77的许多旧语句,使程序员更为清晰明确地定义全局数据。增加了新的数据种别说明,使得Fortran 程序在不同计算机编译环境下有更自由的移植性。

发展了现代算法功能:加强了数组的算法功能,引进了多种数组操作功能与概念,使数组像一个变量一样自由操作,使数组的并行化运算成为可能。增加了适于操作数据结构的派生类型,提高了文字处理功能,胜任信息管理系统、办公自动化的任务。特别是动态存储功能的引进极大地加强了它在数值计算领域中应用的威力。

扩大与编程者的友好界面:新的编程形式减少了烦琐与格式束缚,接近自然语言与公式演算。允许在字符数据中选取不同种别,在字符串中可使用各国文字(例如汉字),还可任意使用化学、物理、数学的各种专业字符。

Fortran程序简例

1.2.1编程实例

为了对Fortran程序有一个初步了解,下面先介绍几个简单的Fortran源程序。

c)a)基本语句

[例1.1] 输入两个数,求算数平均和几何平均值。

C------求两种平均値------

PROGRAM Example_1_1

REAL a, b, av1, av2

READ (*,*) a, b

av1 = (a + b)/2

av2 = sqrt(a*b)

WRITE(*,*) av1, av2

END

PROGRAM Example_1_1 ! 求两种平均値

REAL :: a, b, av1, av2

READ *, a, b

av1 = (a + b)/2; av2 = (a*b)**0.5

PRINT *, av1, av2

END

[计算例]

1.0

2.0 键盘输入(a,b)值

1.500000 1.414214 计算结果输出至屏幕

程序説明:

程序中第1行是注释行,对程序起说明作用。F77注释行是以“C”或“*”作为该行第一个字符的,F90可在任意一行末以“!”开始作为注释符。第2行是主程序名,第3行是变量类型定义,第4行是输入语句,第5-6行是赋值部分,第7行是打印输出语句,最后是程序结束。注意F77的固定书写格式和F90

的自由格式。F90中用“;”将两行并为一行。

PROGRAM语句:宣布程序开始,其后跟程序名。可省略。

REAL语句:定义a,b,...等变量为实数型数据。如为整数型,则用INTEGER 定义。

变量名:可用a,b等无具体意义的文字,或用average_value等英文缩写。使用的字符和文字长度有具体规定。

输入输出语句:可以用以下任一种默认格式,注意星号(*)和逗号(,)。星号意指默认的输入输出硬件(键盘和屏幕)及格式。

READ *, 变量名

READ(*,*) 变量名

PRINT *, 变量或常数,关系式

WRITE(*,*) 变量或常数,关系式

赋值语句:将等式右边的变量取值赋予左边的变量。

变量 = 变量、常数、关系式

例:sum = sum + x

算术运算:

2项运算:加(+),减(-),乘(*),除(/),乘方(**)。

运算的优先顺序:加,减<乘,除<乘方,括号中优先()。

单项运算:(例-a)

数据类型:按定义有整数、实数、复数、双精度数等。

d)a)输出字符

[例1.2] 输入圆錐底面半径r和高h,求体积和表面积。

! ------求圆錐体积和表面积------

PROGRAM Example_1_2

REAL :: pi, r, h, v, s

pi = 3.141593

PRINT *,'Input radius r and height h ?'

READ *, r, h

v = pi*h*r**2/3.0

s = pi*r*(r + sqrt(r**2 + h**2))

PRINT *, 'Volume =', v

PRINT *, 'Area =', s

END

[计算例]

Input radius r and height h ? 提示待输入数据的物理含义

3.0 5.2

Volume = 49.00885 打印计算值

Area = 84.85442

数据的输入:READ * 语句执行时进入等待数据输入的状态。数个数据输入时以英文逗号、空格或换行符作区别,单个数据中间不能有空格。

字符的输出:在执行READ语句时,计算机已经进入等待数据输入的状态,但它不会给出任何提示。除了程序员以外,谁也不会知道需要输入什

么数据,即使是程序员自己可能也会忘记。另外,PRINT语句打印

的数据到到底是什么物理含义也需指明。因此,需要输出文字内容。

PRINT *, 字符常量

WRITE(*,*) 字符常量

字符常量:用' '或" "括起来的文字字符。

[例1.3] 已知放射性元素的半衰期,求给定时间后的衰减量。[e_121_03.f90] [例1.4] 给定一整数,求其自平方至5次乗方的各次乘方。[e_121_04.f90] [例1.5] 函数的计算。[e_121_05.f90]

[例1.6] 分别求半径R=1,3,12.5时的圆周长。此源程序由二部分组成:主程序和子程序。[e_121_06.f90]

1.2.2Fortran程序的特点

从以上例子中可以看到:

一个Fortran程序由一个或若干个程序单位组成。主程序和辅

程序分别是一个独立的程序单位。主程序单元起整体控制作用,各辅程序单元完成总问题中的一个子问题。

每一个程序单位都是以END语句结束的。END既是一

个程序单位的结束标志,又是一个独立的语句(结束语句)。主程序中的END语句的作用是使程序“停止运行”。辅程序中的END语句是“使流程返回调用程序”。

一个程序单位包括若干行。

F77行分为下面两类。F77规定,一行只能写一个语

可以写在继续行(要用“续行标志”)

λ语句行。由一个Fortran语句组成, Fortran语句分为执行语句和非执行语句。执行语句使计算机在运行时产生某些操作,

如赋值语句、打印语句等。非执行语句(包括说明语句,数据语

句等)将有关信息通知编译系统,以便在编译时作出相应的处理,

例如类型说明语句、函数子程序语句等。Fortran程序的基本成

份是语句。

λ非语句行,即注释行。它不是Fortran语句,它不被翻译成机器目标指令。不产生任何机器操作。它仅仅是为了人们阅读程

序的方便而加到程序中的。一个程序中注释行的数目不受限制,

根据需要而定。但一个程序单位不能只由注释行组成。注释行的

内容完全是根据程序设计人员需要而写的,一般是为程序(或程

序中一部分)的作用作注释以易于理解程序。

λF90行不分类。注释可以写在任一行末尾,而且一行不限语句数,可以将几个F77行合并写入一行。这样,极大地简化了程序写法,

使得程序可以编写得更为清晰明了。因此F90的格式较F77有柔软

性。

Fortran程序中的语句可以有标号。一个语句有否标号是根据需

λ

元中不能有两个相同标号的语句。标号不影响语句的执行顺序。但在

F90中因为提倡结构化程序设计,一般不使用标号。

一个程序单位中各类语句的位置是有一定规定的。例如PROGRAM

λ

语句,END语句只能是程序单位中最后一行。程序中语句执行的顺序一

般依照它们在程序中的先后位置而定。

F77源程序必须按固定格式书写,即源程序中哪些内容应写在一

λ

Fortran程序的基本组成

1.3.1字符集

不是任何一种外文字母或数字符号都能被某一计算机语言接受。每一种计算机的高级语言分别规定了它允许使用的字符。

Fortran允许使用的字符如下:

英文字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

阿拉伯数字:0 1 2 3 4 5 6 7 8 9

特殊符号:空格 = + - * / ( ) , . ': " ! % & ; < > $? _ (F90中新增

的字符)

其中“$”和“?”号在程序中没有确切意义。应当注意,在F77语句中不区分大小写字母,例如写READ和read或Read是一样的,其它变量名和函数名中,大、小写字母也是等价的。但早期的Fortran卡片不允许小写,故老的程序代码都是大写的,很多人也养成了大写的习惯。

在每一种计算机系统所用的Fortran编译器中,可能对字符集或其功能作某些扩充。因此在使用某一具体的计算机时,应了解它的规定。例如“$”号可用于从屏幕上连接输出输入字符于同一行。标准还允许F90扩充进各国文字,各种专业用符号,这要看厂商装入的编译系统是否支持这些字符的使用。某些系统还可以用这些字符作为字符常数或注释,注意这类字符是2字节长度,在计算字符串长时要加倍。

1.3.2源码格式

e)a)固定格式

Fortran作为历史上第一种高级语言,其程序编写的规则与当时使用的计算机系统有很大的关系。早期的计算机系统须用卡片将源程序输入,一张卡片相应于源程序的一行。由于卡片物理宽度的限制,因此一行程序允许的字符数也是有限的。由此决定了F77的格式,既为F90/95中的固定格式。

图1-1 Fortran卡片。

一张卡片有12行80列。其中有10行分别印有0,l,2,3,4,5,6,7,8,9十个数字。第O行上面的第一行作为第11行,再上面一行为第12行。一个字符由相应一列上的1—3个孔个孔来代表。如源程序某行第11列为字符“A”,则在该列上第12行和第l行上各穿一个方孔。注意此卡片允许的特殊字符只有十一个。

实际操作时利用卡片穿孔机,按下卡片穿孔机上某一个字符,则机器就会自动将卡片相应列中的相应位置穿上孔。如果一个源程序有100行,则需要100

张卡片。在上机算题时,将穿好孔的卡片按顺序放入卡片输入机,启动机器,就将卡片上的信息输入计算机了。

早期编写F77程序使用如上图的F77程序纸,一行有80列,每行一条程序语句。这80列分为四个区,分别书写不同的内容:

标号区:第l—5列

λ

号整数(无正负号或小数点)。标号大小顺序没有任何要求。假

如第二行的标号为1000,第三行的标号可以是10,也可以是

99999。

标号区内不得出现标号以外的内容,但注释行例外。注释行的内容可以写在标号区内,一行中第一列为C或*的,该行即

被认为注释行,编译时对该行内容不作翻译,对程序运行不产

生任何影响。如果在第一列上出现的不是数字、空格或C和*

的字符,编译时按出错处理。

λ

续行区:第6列

限于上面所列的,如 @ } ] ~ 等字符均可使用[e_132_01.f]。

F77允许一个语句有19个续行(即一个语句最多可以写成20

行)。有的程序中第6列上用“l”,“2”,…表示该行是第1个

或第2个续行,但用数字字符容易与第7列的数字形成连续的

数字串而引起错觉,故最好使用固定的特殊字符。

语句区:第7—72列

λ

满了72列,一旦在终端上修改程序时在该行又插入了一些字

符,就会使本行最后几个字符超出语句区而引起意料不到的错

误。特别注意到语句最后的空格将可能溢出72列,在某些计算

机系统上将导致难以查出的错误。应注意,引号内的字符串中

所包括的空格是有效的,不能忽略[e_132_02.f]。

注释区:第73—80列

λ

部分,在编译时不对72—80列作处理[e_132_03.f]。

f)a)自由格式

在F90中,用自由格式编写程序有很大的自由度。与固定格式相比,不易产生键入位置的错误,而且易读易懂。

行:一行为132列。可以有复数条程序语句,语句间用分号“;”分开。语句没有位置规定。

注释行:起始用注释符“!”号,此行其后的所有字符均作为注释(字符串中的!

号除外,如 print *,’help!!!!’ )。

续行:当一个语句非常长以至于132列都书写不下时,允许有39个续行。在语句行最后加上续行符“&”号。如果字符串跨2行以上,则在续行的

开始位置也要加&号。注意语句的有效字符是从“&”前和续行符“&”

之后的位置算起。[e_132_04.f90]

空格:在语句名和变量名中间不能有空格。需要空格的地方必须有一个以上空格(GOTO和GO TO,ELSEIF和ELSE IF,END构造名(构造名有:DO, PROGRAM,

FUNCTION, MODULE, SUBROUTINE)等有两种写法的除外),如关系运算

符 ==,<= 不能写成= =,< =(不能加空格)。这与F77有很大不同之

处,因为F77的设计中将编译源程序的空格忽略

[e_132_05.f][e_132_05.f90][e_132_06.f]。

当程序员要将自己编写的F90程序与现有的用F77编写的子程序库在源码级结合起来的话,需要特别注意格式的差别。

g)b)文件名

以上两种格式的源程序在编译时可以用选项来指定,对应的默认文件扩展名为:

λ固定格式:.for 或.f [fixed.for]

λ自由格式:.f90 [free.f90]

1.3.3程序组成

a)a)程序总体构造

Fortran90程序是一种分块形式的程序,整个程序由若干个程序模块组成。各模块都有相似的语句组织形式,其中主程序起整体控制作用,各辅程序模块各自完成问题中的一个算法。在解决一个比较复杂的问题时,先把求解的问题分解为若干相对独立的子算法,每一个子算法编为一个辅程序,然后按搭积木一样将各有关程序模块组成一个程序。主程序依次调用各辅程序模块,控制各子算法的实施,通过主程序对子程序的调用,形成程序的整体运行,完成问题的解。

若某一子程序算法仍复杂,可再把它分解为若干更小的算法,分别编写为更低一层次的辅程序,由其他辅程序分别去调用。这种情况可以类推到其它子程序或更低一层次。所以,Fortran程序=n个程序单位=1主程序单位+(0~n-1)个子程序单位。在最简情况下, Fortran程序只由一个主程序构成而没有辅程序,所有算法都由主程序自身完成。按现代要求,即使功能比较简单的问题,也最好写成主程序调用辅程序的形式,以便于维护。

F77中定义的辅程序对所有其它辅程序都是公开的,即除自己本身以外都可以加以引用。而在F90中,辅程序可以被本身应用,且可以定义不能被其它辅程序应用的内部辅程序。

b)b)程序单位

主程序

[PROGRAM 程序名] 语句可省略

.....

END [PROGRAM [程序名]] END必须有

辅程序(过程)

SUBROUTINE 子程序

FUNCTION 函数

BLOCK DATA 块数据????

MODULE 模块 (F90)

内部过程CONTAINS (F90)

程序单位是Fortran中的基本成分,包括主程序、辅程序、块数据单元和内部过程。辅程序可以是函数辅程序或子程序辅程序。模块中包含可由其他程序单位访问的各种实体。块数据单元用来对有名公用块的数据对象规定初始值。一个执行程序总是由一个主程序单位和任意个(可以为零)其他类型的程序单位组成,任何程序单位都不能调用主程序。在主程序中定义的内部过程必须跟在CONTAINS语句之后,主程序是它的内部程序的宿主。过程包括函数和子程序,对一个子程序的引用是通过CALL语句或定义的赋值语句来引用的。

MODULE过程在主程序中通过USE语句与之相联系。模块用于组装若干功能(如过程、类型定义、语义扩展等)为一集团,是F90中极具柔软性的程序单位,它取代了F77中的某些不安全的特性。

BLOCK DATA辅程序的用处是定义全局常数或全局初始化,在F90中是不推荐使用的,其功能已被MODULE和USE取代。

c)c)程序体和语句顺序

各程序单位(除模块程序单位外)的程序体形式相同,共分两部分:前面是说明部分,后面是执行部分(模块程序单位只有说明部分),两部分之间没有确切的分界,紧密衔接,但不准彼此穿插。即:程序单位=单位起始语句+程序体+单位结束语句。程序体=说明部分+执行部分。

Fortran要求严格的语句顺序。在每个程序单位中,根据语句种类按如下的次序排列。F77中的顺序可简单归纳为:

λPROGRAM,FUNCTION,SUBROUTINE,BLOCK DATA等程序单位开始语句

λ变量类型和语句函数等定义语句(说明部分)

λ执行语句,DATA语句,FORMAT语句(执行部分)

END语句

在F90中将新增加的语句功能综合后,其顺序为:

整个程序中只能有一个PROGRAM,一个BLOCK DATA,可以有多个各自命名的FUNCTION和SUBROUTINE辅程序。

d)d)英文名

变量名和程序名等使用的英文名是由(F77:6;F90:31)个字符(包含英文字母A-Z、数字0-9、F90:下划线 _)构成,且第一个字符必须是字母。其英文名的有效使用范围原则上限于一个程序单位之内(内部过程除外)。如下面的语句是错误的:

INTEGER :: 1A ! 不是以字母开头

INTEGER :: A_name_made_up_of_more_than_31_letters ! 太长

INTEGER :: China:0 ! 含有不允许的字符

INTEGER :: A-3 ! 减号在此是无意义的

Fortran没有规定保留字,即可以用函数名或语句定义符作变量名。但为了避免混淆,建议不要使用Fortran中已有特定含义的字作变量名。如SIN是正弦函数的名字,如果有以下语句:

SIN=3.5

PRINT *,SIN

则语句中的SIN是变量名而不代表正弦函数。系统会根据它后面有无自变量而作出判断,又如:

READ *,PRINT

此时PRINT是一个变量名而不代表“打印输出”的操作。系统会认定语句的第—个字READ为代表操作的语句定义符,而把PRINT作为READ语句中读数的变量。但在同一个程序单位(主程序或子程序分别是一个程序单位)中,变量名和函数名或语句定义符不能同名。以下是错误的:

SIN=3.5

A=SIN*SIN(2.0)

PRINT *,PRINT

e)e)标号和标签

可在语句开头加上标号或标签,用于指定特定的语句。有效范围限于一个程序单位内。

标号:1-5位的10进制整数,且至少一位不为0,前导0不起作用。F90中,不可对空语句加上语句标号。

标签:英文名,后面接“:”(冒号)(F90) ????????

例:

DO 10 k = 1,100

...

10 CONTINUE

注:不能使用整型变量来指定转向语句的标号。如下是错误的。

n = 10

GOTO n

例:(F90)

DO k = 1,100

loop2: DO

....

END DO loop2 已有标签名时不能省略标签名。

END DO

数学运算

1.4.1常量和变量类型

关于常量

常量是指其值始终不变的一些量。整型、实型、双精度和复型常量是算数型常量,也为常数。

整型:默认值为4字节(其它为1,2,8字节,Compaq Visual Fortran允许在Alpha机上使用8字节整数)。4字节32位(bit)中用一位存放数值的符号,其余为数本身(用二进制表示)。第1位为O表示“正”,“1”表示“负”。

由于用有限的内存单元存储一个整数,因此整数的范围是有限的:

-231 -->231-1,即-2147483648—2147483647之间,大约为±21亿。

11111111 11111111 11111111 11111111 = -1

11111111 11111111 11111111 11111110 = -2

10000000 00000000 00000000 00000000 = -2147483648

01111111 11111111 11111111 11111111 = 2147483647

例:12345678 -256 (1,000,000 或 125. 是错误的)

1234567890123_8 (8字节整数) (F90)

912345678901_k (k为定义精度的参量) (F90)

实型:默认值为4字节(其它为8字节)。实数是有小数点的数,有效位数为7位,其绝对值的范围与计算机系统和精度型(单精度和双精度)有关。实

数有两种表示形式:

小数形式:即日常习惯使用的小数形式。

3.141592,-0.125,3.0,-2. 等

3.14159265358979_8 (8字节实数) (F90)

2.7182818_p (p为定义精度的参量) (F90)

指数形式:用指数形式表示的实数由两部分组成,即数字部分和指数部分。

7.8E-12 -0.125E5

0.125D+45(双精度,8字节)

在计算机内存中存储一个实数(不论是用小数形式表示或以指数形式表示)时情况与整数不同。实数在内存中一律以指数形式存放,它由三个部分组成:

(1)数符;

(2)指数包括符号;

(2)数字部分。

数字部分最前面有一个隐含的小数点。用4个字节(32bit)来存储时,1位存储数的符号,7位存储指数部分,24位存储数字部分。由于存储指数部分和数字部分的值(bit)长是有限的,因此一个实数的有效数字和数的范围都是有限的。

如果以24位来存储一个数,它最大可以存储十进数为224-l(减1是因为规定小数点后第一个数字不能为零,以便充分利用有限的bit位来存储有效数字),即16777215。也就是说可以存放0—16777215这个范围内的数,超过这个范围的数是不能存储的。可见,只能有7位有效数字(16777215虽然是八位数,但并不是所有8值数都能有效存储)。如果某计算机系统用n个二进位来存储一个实数的数字部分,则该实数的十进制数的有效数字位数大体上略小于n/3。

一个实数的范围也是有限的,这主要是由于存储实数的指数部分的位长是有限的。如果一个数的绝对值超过此范围,就会出现“溢出”,绝对值比上界大的称为“上溢”,系统对此按数据出错处理。比下界还小的称为“下溢”,大多数计算机系统将该数据做赋零处理。[e_141_01.f] [e_141_02.f90]

复型:默认值为2×4字节(其它为8字节)。实部与虚部用括号围起来表示:(实数,实数)。

逻辑型:默认值为4字节(其它为1字节)。其值只能为:.TRUE.(真)和 .FALSE.

(假)。

字符型:1个字符为1字节(中文系统中为2字节)。用 ' '(F90:" ")围起来的字符串。

例:"I'm a boy." (長为10字节)

'I''m a boy.' (長为10字节)

数组:这不是一种单独的类型,可把同类型的常量用一维维数括起来表示:(/常量,常量,...,常量/)。(F90)

关于变量

变量是指在程序运行期间其值是可以变化的量。系统为程序中的每一个变量开辟一个存储单元,用来存放变量的值。

常量是分为类型的,而变量是用来存放常量的,因此变量也相应地区分为整型变量INTEGER、实型变量REAL、双精度变量DOUBLE PRECISION、复型变量COMPLEX、逻辑型变量LOGICAL、字符型变量CHARACTER。在程序中应当说明哪些变量是整型变量,哪些变量是实型变量。变量在内存中所占的字节数和数据存储形式与相应类型的常数相同。例如,实型变量一般占4个字节,按指数形式存放。在程序中规定变量的类型可以用以下几种方法。

隐含约定:Fortran规定,凡以字母I,J,K,L,M,N六个字母开头的变量名,如无另外说明则为整型变量。以其它字母开头的变量为实型变量。可

以将这个隐含约定称为“I—N规则”,表示用I到N之间的字母开

头的变量为整型。例如:I,J,IMAX,NUMBER,LINE,JOB,Kl为整

型变量,而A,Bl,COUNT,AMOUNT,TOTAL,BOOK为实型变量。

类型指定:如果想改变“I—N规则”对变量类型的约束,可以用类型说明语句专门指定某些变量的类型。Fortran中有六个类型说明语句:

(1)INTEGER语句(整型说明语句)

(2)REAL语句(实型说明语句)

(3)DOUBLE PRECISION语句(双精度说明语句)

(4)COMPLEX语句(复型说明语句)

(5)LOGICAL语句(逻辑型说明语句)

(6)CHARACTER语句(字符型说明语句)

IMPLICIT语句(隐含说明语句)指定:可以用IMPLICIT语句将某一字母开头的全部变量指定为所需的类型,还可以用一个IMPLICIT语句同时指定几

种类型。例如:

IMPLICIT INTEGER (A,C,T-V)

IMPLICIT REAL (I,J)

IMPLICIT INTEGER (A,B),REAL(I,K),INTEGER (X-Z)

注:(1) 以上三种方法中,以类型说明语句最优先,IMPLICIT语句次之,“I—N 规则”的隐含约定级别最低。如下程序中IMAX变量为整型,而其它

以I、J开头的变量为实型:

IMPLICIT REAL(I,J)

INTEGER IMAX

(2) 类型说明语句和IMPLICIT语句是非执行语句。

(3) 类型说明只在本程序单位(?????)内有效。

(3)IMPLICIT 语句和类型说明语句应该出现在本程序单位中的所有执行语句之前,其中IMPLICIT 语句又应在所有的类型说明语句之前。

1.4.2内在函数

用Fortran 解题往往要用到一些专门运算。如求三角函数x sin ,x cos ,开根x ,绝对值x ,对数x ln ,指数)exp(x ,求一组数中最大数和最小数等。Fortran 提供了一些系统内在函数来完成这些运算。程序设计者不必自己设计进行这些运算的语句组(即程序段或子程序),只需写出一个函数的名字以及结出一个或若干个自变量,就可以得到所需的值。例如:

SQRT(4.0) 4

SIN(2.0) 2(弧度)的正弦值,注意三角函数中的自变量单位为弧度!

EXP(3.5) 5.3e

LOG(3.0) 3ln

λ 内在函数的执行方法

Fortran 将这些内在函数分别编成单个子程序,组成函数库,存在于外部介

质(如磁盘)上。在完成源程序的编译之后,用LINK命令实现连接,即将已翻译成二进制指令的目标程序与函数库连接。也就是将程序中出现函数名的地方用函数库中相应的一组指令代入之,组成一个统一的“可执行目标块”。例如程序中出现一个SIN函数,在连接时就将一组求正弦值二进制指令直接插入到程序中出现SIN的地方。由于是插入到程序内部的,所以称为“内在函数”。

一个内在函数可要求一个或多个自变量

λ

例如,SQRT函数只能有一个自变量,而MOD函数要求两个自变量,MAX和MIN函数要求两个以上自变量。注意当自变量个数规定为2个时,自变量的顺序不应任意颠倒,如MOD(8,3)表示8被3除的余数,其值为2,而MOD(3,8)则表示3被8除的余数,其值为3。当自变量个数为>2时,自变量的顺序无关。

函数的自变量是有类型的,函数值也是有类型的

λ

例如MOD(8,3)中自变量8和3是整型,函数MOD(8,3)的值“2”也是整型,如果写成MOD(8.0,3.0),自变量是实型的,函数值也是实型的,其值为2.0。

函数名分为“通用名”和“专用名”

λ

例如求余函数的“通用名”为MOD,“专用名”有三个(MOD,AMOD,DMOD)。根据自变量的类型就自动确定了函数值的类型,如MOD(8,3)的值为整型,而MOD(8.0,3.0)的值为实型。当调用子程序时如果用内在函数作为自变量(实参),必须使用该内在函数的专用名(涉及数据类型的问题)。

1.4.3算术表达式

a)a)算术运算符和运算优先级

FORTRAN规定可以使用五种算术运算符号。它们是:

+ 表示“加”(或正号)

- 表示“减”(或负号)

* 表示“乘”

/ 表示“除”

** 表示“乘方”

请注意:乘号用“*”表示,不能写成“×”,以免与字母“X”混淆,也不能用“.”代替乘号。除号不能用“÷”号。两个运算符不能紧邻,如A*-B是不合法的,应写成A*(-B)。

不同的运算符按以下优先级次序:加,减<乘,除<乘方,括号()中优先。同一优先级的两个运算,乘方按“先右后左”,其它按“先左后右”原则。

例: x + y*z → x + (y*z)

x*y**2 → x*(y**2)

x/y/z → (x/y)/z

x**y**z → x**(y**z)

3+5-6.0*8.0/4**2 → 3+5-48.0/16.0 = 5

例: 4b分之a → a/(4*b) 或 a/4/b,而a/4*b 和 a/4b是错误的。

如无自信时可用括号(),对运算时间几乎无影响。

b)b)算术表达式的含义和表示方法

所谓表达式是指一个或多个运算的组合。它是由Fortran的运算符和括号将各运算元素(包括常量、变量、函数、数组元素)连结起来的一个有值的式子。Fortran77允许使用四种表达式,即:算术表达式,关系表达式,逻辑表达式,字符表达式。

算术表达式中各运算元素都是算术量,使用的运算符只能是算术运算符,表达式的值也是一个算术量(即数值)。例如,下面就是一个Fortran算术表达式:(A-B)/C**2+SIN(X+Y) 。

请注意:

(1)由于用“/”号作为除号,因此在写除法运算式子时应加上必要的括号。

a sin,必须写成A*SIN(X),而不能写成ASIN(X)。

(2)乘号不能省略,如x

(3)Fortran中无大、中、小括号之分,一律用小括号。

(4)乘方按“先右后左”原则处理。

(5)对单项运算符(如-A中的符号)相当于在它前面有一个运算量“0”,如:-A**2相当于0-A**2而非(-A)**2。

Fortran算术表达式的求值运算的优先次序为:①括号 > ②函数 > ③** > ④ * / > ⑤+-,即括号内的运算级别最高,加减最低。例如,

()26。

SQRT(3.*2)**2 →

c)c)表达式运算中的类型

Fortran中的常量和变量是分类型的,允许在不同类型的算术量(包括整型、实型、双精度、复型)之间进行算术运算,但不允许在算术量和非算术量(如逻辑型、字符型)之间进行算术运算。F77作如下规定:

同类型的算术量之间运算的结果仍保持原类型。

λ

如果参加运算的两个算术量为不同类型,则编译系统会自动将它

λ

转换的规律是:将低级类型转换成高级类型。类型的级别如下:整型(低)→实型(高)。类型的转换是从左向右进行的,在遇到不同类型的算术量时才进行转换。例如:1/2*1.0等于0(先计算1/2=0,整型,再计算0*1.0=0.0*1.0=0.0);

1./2*1对于0.5。

d) d) 运算的误差

整型量的运算是准确的,没有任何误差(只要在整数范围内)。而实型量的运算会出现一些误差。例如:11111.1×1111.11本应得12345654.321,但由于受实数有效位数的限制,只能得到12345654.0。又如:0.001+1246825.0-1246820.0本应得5.001。但由于有效位数的限制,也将产生误差。[e_143_01.f90] 为减小误差,在写表达式时应尽量使每一次运算结果都在有效位数范围之内:

尽量不要使两个相差很大的数值直接相加或相减 在判断两个实数是否相等时,要特别慎重,最好改为判断ε≤-B A ,即A 和B 之差的绝对值如果小于ε(ε为一个很小的数,如10-10),则认为A 和B 相等

总之,在实数运算中应充分考虑到其可能出现的误差,而且在运算过程中误差会不断积累而增大,有时可能达到一个可观的程度。

1.4.4赋值语句

e) e) 算术赋值语句

赋值语句的作用是将一个确定的值赋给一个变量。其一般格式为:V =e ,V 代表一个变量名,e 代表一个表达式。

λ Fortran77的赋值语句有三类:算术赋值语句、逻辑赋值语句、字

符赋值语句。这里只讨论算术赋值语句。算术赋值语句的作用是将一个算术量赋予一个算术型变量。

λ 赋值语句中的“=”号是“赋值”的符号,而不是等号。它的作

用是将赋值号右边的表达式的值赋给其左边的变量。例如:赋值语句“A =3.0”的作用是将3.0送到变量A 中。因此在阅读程序时对赋值号的理解应是带方向的。赋值语句“N =N 十l ”的作用是将N 的原值加1再送回变量N 中。

λ 算术赋值语句兼有计算和赋值双重功能。即先计算出表达式的值;

然后将该值赋给一个变量。在Fortran 程序中的求值计算主要是用赋值语句来实现的。

λ 赋值号左边只能是变量名(或数值元素名),而不能是表达式,赋

值号右边可以是常量、变量或表达式。“X+Y=3.0”语句是不合法的,因为在内存中找不到一个“X+Y ”的单元来存放3.0这个数值。

f) f) 执行时的类型转换

一个算术赋值语句中的被赋值的变量(V)和表达式(e)的类型可以相同,也可以不相同。F77作如下规定:

λ 如果变量V 与表达式e 的类型相同,则直接进行赋值。

λ 如果类型不同,则应先进行表达式的求值,然后将该表达式的值

FORTRAN程序设计复习题及答案

FORTRAN程序设计复习题 一、选择题 B (1)下列各FORTRAN表达式中合法的是 A) S+T*2P >= B) .NOT. (A*B+C) C) A2+B2/(C+D) <= D) (A+B).NOT.A*B.GT.(.NOT.只跟一个表达式) C (2)数学式(3/5)ex+y的FORTRAN表达式是 A) 3*EXP(X+Y)/5 B) 3*E* *(X+Y)/ C) (3/5)*EXP(X+Y)D) EXP(X+Y) D (3)下列FORTRAN77表达式中不合法的是 A) A.GT.B.EQV.C.GT.D B) A.AND.B.AND.C.AND.D C) .NOT.(X.LE.D) A.LT.B.LT.C.LT.D D(4)下列叙述中不正确的是 A) FORTRAN子程序可以单独编译 B) 对一个FORTRAN源程序进行编译和连接无误后可生成可执行文件 C) 即使编译和连接都正确无误,FORTRAN程序运行时仍可能出错 D) FORTRAN连接的主要任务是把函数库中的函数翻译成机器指令(正确描述:主要任务为连接目标文件) B (5)在下列FORTRAN77运算符中,优先级最高的是 A) .AND. B) .NOT. C) .OR. D) .EQ. B (6)FORTRAN表达式"6/5+9/2**3/2"的值为 A) 33 B) 1 C) 5 D) 3 A (7)下列FORTRAN77表达式中,合法的是: A) .AND.. B) 10.0 C) D) 提示:A)相当于 .AND.(.NOT.()) D (8)关于编译一个FORTRAN源程序文件,下列说法中错误的是 A) 允许编译只有一个主程序而没有子程序的源文件 B) 允许编译有多个子程序的源文件 C) 允许编译只有一个子程序而没有主程序的源文件 D) 允许编译有多个主程序的源文件 C (9)在FORTRAN77源程序中,续行标志符必须放在 A) 第1列 B) 第1-6列C) 第6列D) 第5列 D (10)下列关于"SUBROUTIN E MAP(X,Y)"语句行的叙述中,不正确的是 A) 这是子程序的第一个语句 B) 字符串"MAP"是子程序名 C) 变量X是子程序的形参D) 子程序执行后,MAP将返回整型数据 提示:子程序无返回值,自定义函数才有) A (11)FORTRAN表达式"2/4+"的值是 A) B) 1 C) D) 0 提示:2/4默认等于整型,=》 D (12)FORTRAN表达式"MOD,"的值是 A) B)0.0 C) D) A (13下列FORTRAN运算符中,优先级最低的是 A)逻辑运算符.AND. B)算术运算符*

国内认知语言学研究综述

国内外认知语言学研究综述 摘要:认知语言学是20世纪70年代在认知科学的基础上发展起来的一个语言学流派。80到90年代,诞生于美国的认知语言学,迅速影响到其他国家,并被越来越多的语言学学者所接受和采纳。国内语言学界自90年代开始接触认知语言学之初,就发现其在解决汉语具体问题上的可适用性,从而越来越多地关注这一学派的动向。三十年来,国内学者在这一领域也做出了许多贡献,同时也有很多不足的地方。此文主要就认知语言学在中国的发展情况进行介绍,同时简单回顾认知语言学的发展历程和主要理论方法。 关键词:认知语言学,国内研究,国外研究,综述 认知是当今人类最感兴趣的课题之一,因为它关系到我们对人类思维过程的破译,因此越来越多的学者投入认知科学的研究。随着结构主义学派和转换生成语言学派的学者们在语言学各领域研究的深入,他们越来越发觉自身理论和方法的局限,为了解决现有理论方法力所不及的问题,学者们开始寻求新的办法。认知科学无疑给语言学家们指明了一条道路。乔姆斯基的转换生成语言学就已经在语言学研究中加入了认知概念,他认为语言是认知系统的一部分。认知与语言学的结合是不可避免的一种趋势,当这种趋势越来越显露,认知语言学的出现也就成为了必然。20世纪70年代诞生于美国的认知语言学,从80到90年代开始迅速影响到其他国家,其发展势头大有成为继结构主义学派和转换生成学派之后又一个在语言学史上具有重大历史意义的学派,在21世纪成为占主导地位的显学。国内语言学界和外语界从90年代开始陆续引进认知语言学派的一些理论和方法。三十年来,认知语言学在中国的发展也是势如破竹,几乎所有语言学的刊物中都会有相关论文。国内学者在这一领域都做出了许多贡献,特别是用认知语言学理论来解释汉语中的具体问题方面。但是也存在着明显的不足,如最主要的是重理论引进和解释,轻创新。 一、何为认知语言学? 最早提出“认知语言学”这一术语的是Sidney Lamb,他在1971年就在论文中采用这一术语,并将其解释为:“用以指真正研究大脑中的语言,语言与心智、神经之间的关系。”对于认知语言学的界定,学者们从一开始就有所争议。于是跟其他的学科一样,学者们一般使用狭义和广义来区别不同的观点。认知语言学理论家Tayler(2002)在术语上用以区别狭义和广义的认知语言学的办法是:将狭义的认知语言学用“Cognitive Linguistics”表示,而将广义的认知语言学用“cognitive linguistics”表示。显然作为心理学家的Sidney Lamb 的观点是广义的。在语言学领域里的讨论,一般都是从狭义的角度。国内学者王寅(2007)将狭义的认知语言学可以定义为:“坚持体验哲学观①,以身体经验和认知为出发点,以概念、结构和意义研究为中心,着力寻求语言事实背后的认知 ①王寅在《Lakoff和Johnson的体验哲学》文中提到,“Lakoff认为认知语言学的哲学基础既不是经验主义,又不是理性主义,而是体验哲学。”

认知语言学主要内容

一、认知语言学的起源 二、主要内容 19 世纪末20 世纪初,当心理学从哲学中分离出来成为一门独立的实验学科之时,语言的认知研究便已开始。1987年是认知语言学正式的诞生年,虽然此前已有一些零星的文章预示着一种新的语言学理论即将诞生。但是一般认为,这一年出版的Lakoff“Women, Fire ,and Dangerous Things”和Langacker“Foundations of Cognitive Grammar”标志着认知语言学作为一种独立语言学理论的诞生。认知语言学研究的主要代表人物是Langacker,Lakoff,Jackendoff, Taylor 和Talmy等人。 认知语言学包括认知音系学、认知语义学、认知语用学等分支,研究内容广,覆盖面大,概括起来主要有以下几点:一、范畴化与典型理论 语言学在方法论和本质上都与范畴化(categorization)紧密相关。范畴化能力是人类最重要的认知能力之一,是“判断一个特定的事物是或不是某一具体范畴的事例”(Jackendoff , 1983∶77) 。 Labov和Rosch对范畴的研究,打破了范畴的“经典理论”或称“亚里士多德理论”一统天下的局面。“经典理论”认为:范畴是由必要和充分特征联合定义的;特征是二分的;范畴有明确的边界;范畴内的所有成员地位相等。这一理论却

受到了认知科学的有力挑战。Rosch 还提出了“典型理论”(prototype theory) ,认为大多数自然范畴不可能制定出必要和充分的标准,可以公认为必要的标准往往不是充分的;一个范畴的成员之间的地位并不相同,典型成员具有特殊的地位,被视为该范畴的正式成员,非典型成员则根据其与典型成员的相似程度被赋予不同程度的非正式成员地位。例如,在“鸟”范畴内“知更,鸟”常被视为典型成员,而“企鹅”、“驼鸟”等则为非典型成员。当然,一个范畴的典型成员会因不同的人、文化、地理位置而有所不同,但一个范畴中总有典型的。 典型理论对认知科学最有价值的贡献在于它把注意力集中在内部结构上,集中在范畴具有“核心”和“边缘”这个事实上。目前,它已用于语音、句法、词义、语用、语言习得、失语症等方面的研究,并取得了可喜的成绩。 二、概念隐喻 隐喻的认知研究可追溯到18 世纪。约在1725 年,意大利哲学家和修辞学家G. Vico就发现了隐喻的认知功能,后在其《新科学》一书中阐述了其认知观点。然而,把隐喻的研究纳入认知语言学领域的重要标志却是Lakoff &Johnson (1980)。认知语言学家认为,比喻性语言与非比喻性语言本质上无甚差别;日常语言中充满了隐喻,完全不带隐喻的句子大概只占极少数。隐喻是“我们对抽象范畴进行概念化的有

fortran基本函数

FORTRAN 90标准函数(一) (2012-07-03 17:14:57) 转载▼ 分类:学习 标签: fortran 函数 教育 符号约定: ●I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型。 ●s:P表示s类型为P类型(任意kind值)。s:P(k)表示s类型为P类型(kind值=k)。 ●[…]表示可选参数。 ●*表示常用函数。

注:三角函数名前有C、D的函数为复数、双精度型函数。 注:指数函数名、平方根函数名、对数函数名前有C、D的函数为复数、双精度型函数。 表4 参数查询函数

atan2函数的值域是多少?我从网上找到一个fortran函数的日志,说此值域是-π~π,但正常反正切函数的值域应该是-π/2~π/2。对atan2函数不够了解,所以不知道你的答案对不对,我个人认为不对。我是用正常的反正切函数atan(v/u)来算的: FORTRAN: if (u>0..and.v>0.) dir=270-atan(v/u)*180/pi if (u<0..and.v>0.) dir=90-atan(v/u)*180/pi if (u<0..and.v<0.) dir=90-atan(v/u)*180/pi if (u>0..and.v<0.) dir=270-atan(v/u)*180/pi if (u==0..and.v>0.) dir=180 if (u==0..and.v<0.) dir=0 if (u>0..and.v==0.) dir=270 if (u<0..and.v==0.) dir=90 if (u==0..and.v==0.) dir=999 其中uv等于零的五种情况要单独挑出来,不然程序会有瑕疵。atan函数换成atand函数的话直接是度数,不用*180/pi 我四个象限和轴都试了,应该没错。 最需要注意的问题,一个是函数值域,另一个是uv矢量方向和风向是反着的,并且风向角度数是从正Y轴开始顺时针算,和三角函数里度数从正X轴开始逆时针算不一样。

Fortran95程序设计课后习题答案(word版方便)

第四章 1.program main implicit none write(*,*) "Have a good time." write(*,*) "That's not bad." write(*,*) '"Mary" isn''t my name.' end program 2.program main real, parameter :: PI=3 implicit none.14159 real radius write(*,*) "请输入半径长" read(*,*) radius write(*,"(' 面积='f8. 3)") radius*radius*PI end program 3.program main implicit none real grades write(*,*) "请输入成绩" read(*,*) grades write(*,"(' 调整后成绩为'f8.3)") SQRT(grades)*10.0 end program 4.integer a,b real ra,rb a=2 b=3 ra=2.0 rb=3.0 write(*,*) b/a ! 输出1, 因为使用整数计算, 小数部分会无条件舍去write(*,*) rb/ra ! 输出1.5 5.p rogram main implicit none type distance real meter, inch, cm end type type(distance) :: d write(*,*) "请输入长度:" read(*,*) d%meter d%cm = d%meter*100 d%inch = d%cm/2.54 write(*,"(f8.3'米='f8.3'厘米='f8.3'英寸')") d%meter, d%cm, d%inch end program 第五章 1.program main implicit none integer money real tax write(*,*) "请输入月收入" read(*,*) money if ( money<1000 ) then tax = 0.03 else if ( money<5000) then tax = 0.1 else tax = 0.15 end if write(*,"(' 税金为'I8)") nint(money*tax) end program 2.program main implicit none integer day character(len=20) :: tv write(*,*) "请输入星期几" read(*,*) day select case(day) case(1,4) tv = "新闻" case(2,5) tv = "电视剧" case(3,6) tv = "卡通" case(7) tv = "电影" case default write(*,*) "错误的输入" stop end select write(*,*) tv end program 3.program main implicit none integer age, money real tax write(*,*) "请输入年龄" read(*,*) age write(*,*) "请输入月收入" read(*,*) money if ( age<50 ) then if ( money<1000 ) then tax = 0.03 else if ( money<5000 )then tax = 0.10 else tax = 0.15 end if else if ( money<1000 ) then tax = 0.5 else if ( money<5000 )then tax = 0.7 else tax = 0.10 end if end if write(*,"(' 税金为'I8)") nint(money*tax) end program 4.program main implicit none integer year, days logical mod_4, mod_100, mod_400 write(*,*) "请输入年份" read(*,*) year mod_4 = ( MOD(year,4) == 0 ) mod_100 = ( MOD(year,100) == 0 ) mod_400 = ( MOD(year,400) == 0 ) if ( (mod_4 .NEQV. mod_100) .or. mod_400 ) then days = 366 else days = 365 end if write(*,"('这一年有'I3'天')") days stop end program 第六章 1.program main implicit none integer i do i=1,5 write(*,*) "Fortran" end do stop end program 2.program main implicit none integer i,sum sum = 0 do i=1,99,2 sum = sum+i end do write(*,*) sum stop end program 3.program main implicit none integer, parameter :: answer = 45 integer, parameter :: max = 5 integer weight, i do i=1,max write(*,*) "请输入体重" read(*,*) weight if ( weight==answer ) exit end do if ( i<=max ) then write(*,*) "猜对了" else write(*,*) "猜错了" end if stop end program 4.program main implicit none integer, parameter :: max=10 integer i real item real ans ans = 1.0 item = 1.0 do i=2,max item = item/real(i) ans = ans+item

计算机程序设计语言(FORTRAN语言)

计算机程序设计语言(FORTRAN语言) (总分:36.00,做题时间:90分钟) 一、 (总题数:36,分数:36.00) 1.编译程序能将高级语言编写的源程序转换成( )。 A.解释程序 B.汇编程序 C.映象程序 D.目标程序 (分数:1.00) A. B. C. D. √ 解析: 2.一个完整的FORTRAN源程序( )。 A.至少包括一个主程序 B.至少包括一个主程序和一个子程序 C.由一个主程序与一个以上的子程序组成 D.由一个主程序与一个子程序组成 (分数:1.00) A. √ B. C. D. 解析: 3.语句函数定义语句在程序内合法的位置是( )。 A.在程序块开头语句之后,END语句之前 B.在程序块开头语句之后,可执行语句之前 C.在说明语句之后,END语句之前 D.在说明语句之后,可执行语句之前 (分数:1.00) A. B. C. D. √ 解析: 4.下列关于函数子程序虚实参数的错误说法是( )。 A.可以没有形参数 B.虚实结合的数组长度可以不同 C.实参表与虚参表类型可以不同 D.函数名可以作为虚参

(分数:1.00) A. B. C. √ D. 解析: 5.下列叙述中正确的是( )。 A.FORTRAN程序块中,无名公用语句只能有一个B.FORTRAN子程序中,至少应有一个RETURN语句C.FORTRAN程序块中,最后一行必须是END语句D.FORTRAN程序块中,必须有变量说明语句 (分数:1.00) A. B. C. √ D. 解析: 6.运行下面的程序时得不到所需的结果,其主要原因是( )。INTEGER X(11) DATA X/9,8,7,6,5,4,3,2,1,0,-1/ DO 10 1=1,X(1) ,-1 WRITE(*,*)1.0/SQRT(25.0-REAL(X(1) )* * 2) 10 CONTINUE END A.没有给X(11) 赋初值 B.发生除以零的情况 C.发生负数开平方的情况 D.循环参数设置错误 (分数:1.00) A. B. C. D. √ 解析: 7.下列数据中,不符合FORTRAN常量表示法的是( )。 A.-25.6 B.2.758D3 C.'FOOT"=' D.TRUE (分数:1.00) A. B. C. D. √ 解析:

计算机技术基础(Fortran)试题库

一、选择题 1、下列关于"SUBROUTINE MAP(X,Y)"语句行的叙述中,不正确的是( ) A) 这是子程序的第一个语句B) 字符串"MAP"是子程序名 C) 变量X是子程序的形参D) 子程序执行后,MAP将返回整型数据 2、FORTRAN表达式"2/4+"的值是( ) A) B) 1 C) D) 0 3、阅读下列FORTRAN程序: PI=3. WRITE(*,' ')PI END 程序运行后输出结果是( ) A) B) 3.1415 C) D) 4、圆的直径存放在整型变量K之中,下列计算圆面积的表达式中正确的是( ) A) *K*K/4 B) *(K*K/4) C) *(K/2)**2 D) *(K/2)*(K/2) 5、要判断"月收入M在2000元以上(含2000元)且5000元以下)不含5000元)"的职工,应该使用的逻辑表达式是( ) A) M .GE. 2000 .AND. M .LE. 5000 B) M .GE. 2000 .OR. M .LE. 5000 C) M .GE. 2000 .AND. M .LT. 5000 D) M .GE. 2000 .OR. M .LT. 5000 6、设FORTRAN子程序如下: SUBROUTINE SUB(I,X) B=I+1 X=X+B END 若主程序中的变量M,B已按I-N规则赋值,则调用上述子程序的语句中正确的是( ) A) CALL SUB(M,M) B) CALL SUB(M+4,B) C) CALL SUB(B,B) D) CALL SUB(M,B+4) 7、下列不是FORTRAN常量的是( ) A) , B) +00 C) 2/3 D) 'Very good!' 8、阅读下列FORTRAN程序: F= DO 20 K=3, 7, 3 DO 20 L=K-1, K

认知语言学的研究目标_原则和方法

2002年3月 第34卷 第2期 外语教学与研究(外国语文双月刊) F oreign Language T eaching and Research(bim onthly) Mar.2002 V ol.34N o.2 认知语言学的研究目标、原则和方法 西南师范大学 文 旭 提要:认知语言学是语言学中的一种新范式,它包含许多不同的理论和研究方法。由于认知语言学把人们的日常经验看成是语言使用的基础,因此,在许多方面它与生成语言学存在很大的差别。本文在整合认知语言学各种理论方法的基础上,探讨了这一认知范式的研究目标、基本原则及研究方法。 关键词:认知语言学、语义、语法 [中图分类号]H0[文献标识码]A[文章编号]100020429(2002)02-009028 一、引言 认知语言学是语言学中的一种新范式,它包含许多不同的理论、方法及研究课题。认知语言学肇始于20世纪70年代,80年代中期以后其研究范围扩展到了语言学中的许多领域,如句法、意义、音系以及语篇等。其成熟的重要标志是1989年春在德国杜伊斯堡召开的第一次国际认知语言学会议以及1990年出版的《认知语言学》杂志。自诞生之日起,认知语言学就把自己置于认知科学这一大学科中,与哲学、心理学、人类学、计算机科学以及神经科学等结下了不解之缘,并逐渐成为当代语言学中的一门“显学”。 在过去20多年里,认知语言学研究在几个重要领域里已卓有成效,如范畴化、概念隐喻、转喻、多义性、拟象性以及语法化等(参见文旭1999,2001)。尽管认知语言学家内部在具体方法、感兴趣的课题、研究的切入点等方面还存在一些差别,但他们的研究目标和基本原则有许多共同之处。为了进一步理解并准确把握这一新的认知范式,本文拟对认知语言学的研究目标、基本原则、研究方法作一些解释与探讨。二、认知语言学的研究目标 语言是人类表达观念和思想的最明确的方式之一。从“表达观念和思想”的角度来研究人类语言,这种观点就是通常所说的“认知观”。这种观点认为,语言是认知系统的一部分,而认知系统由感知、情感、范畴化、抽象化以及推理等组成。这些认知能力与语言相互作用并受语言的影响,因此从某种意义上来说,研究语言实际上就是研究人类表达或交流观念和思想的方式。 当代语言学的一个基本特点就是对认知现实主义(cognitive realism)的承诺,即确认语言是一种心理或认知现象。语言学诸多门派都以探索隐藏在大脑中具有普遍性的人类语言机制作为终极目标,换句话说,语言分析的目的不只是描写人们的语言行为,而是解释引起语言行为的心理结构和心理过程,揭示语言行为背后内在的、深层的规律。像乔姆斯基、杰肯道夫(R. Jackendoff)、兰格克(https://www.360docs.net/doc/6d17713409.html,ngacker)、雷科夫(G. Lakoff)、比尔沃思(M.Bierwisch)以及赫德森(R.Huds on)这些代表不同理论方法的语言学家,他们的研究都具有这一目的。如果仅从这一目的来看,那么乔姆斯基的生成语法、杰肯道夫的概念语义学、赫德森的词语法(w ord gram2 ? 9 ?

Fortran基本用法小结档

Fortran基本用法小结 目录: 一、说明 二、概述 三、数据类型及基本输入输出 四、流程控制 五、循环 六、数组 七、函数 八、文件 一、说明 本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9章,都是些最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九章应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。 另外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没来得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果有不妥的地方,希望大家指正。谢谢! 文中蓝色的部分是程序代码,!后面的内容为注释。 二、概述 1、名词解释 Fortran=Formula Translator/Translation 一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始,IBM设计它的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一目标。Fortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。 2、Fortran的主要版本及差别 按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortran90。Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看懂77程序。以下是77和90的一些格式上的区别。

Fortran基本用法小结

【以下文字转载自D_Atmosphere 讨论区】 【原文由superjyq 所发表】 我的Fortran基本用法小结 高级语言和算法组heavensky 目录: 一、说明 二、概述 三、数据类型及基本输入输出 四、流程控制 五、循环 六、数组 七、函数 八、文件 一、说明 本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9章,都是些最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九章应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。 另外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没来得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果有不妥的地方,希望大家指正。谢谢! 文中蓝色的部分是程序代码,!后面的内容为注释。 二、概述 1、名词解释 Fortran=Formula Translator/Translation 一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始,IBM设计它的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一目标。Fortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。 2、Fortran的主要版本及差别 按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortran90。Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所

认知语言学的发展

龙源期刊网 https://www.360docs.net/doc/6d17713409.html, 认知语言学的发展 作者:刘志茹 来源:《文教资料》2014年第05期 摘要:认知语言学是语言学的一门分支学科,脱胎自认知心理学或认知科学,成型于20世纪80年代至90年代。它涉及人工智能、语言学、心理学、系统论等多种学科,针对生成语言学,提出语言的创建、学习及运用,能够通过人类的认知加以解释,因为认知能力是人类知识的根本。认知语言学吸收了作为一门实验科学的认知心理学的研究成果,拓宽了我们的研究视野,为语言研究增加了新的视角,也提高了语言学研究的科学性。 关键词:认知语言学成型发展 认知语言学的哲学基础是身心合一说(Monism),也就是体验哲学,主要观点是:人的大脑(brain)和思想(mind)是无法分开的,我们对世界的认知主要来自于体验(embodiment)。正如认知语言学的奠基人之一George Lakoff所说:认知语言学的兴起是基于认知科学的某些基本研究成果,如色觉的神经生理学研究,原型和基本范畴,Talmy的空间关系理论,Fillmore的框架语义学等。认知语言学的早期理论基础是生成语义学,这一理论形成于20世纪60年代末和70年代初期,其认为语义无所不在,且促发所有的语言结构,即语义和语言形式密不可分,且语义影响语言形式。因此,“当今的认知语言学是建立在认知语义学基础上的一门研究语言、大脑和社会-物理经验之间密切关系的、具有多学科交融本质的较新学科”。 1.认知语言学的成型阶段 一般来说,我们认为认知语言学出现于20世纪70年代中期,Langacker教授在70年代提出了“空间语法”,当时还仅仅是一个理论,之后随着认知科学的不断发展,许多学者在此基础上提出了一些基于经验的关于语言研究的新的研究方法和范式,认知语言学渐露雏形。其诞生的两个主要标志是Lakoff(1987)和Langacker(1987)两部著作的面世;1989年春,由Rene Diren组织在Duisburg举行了认知语言学专题讨论会。会后,出版了《认知语言学杂志》,成立了国际认知语言学会(ICLA),并由Mouton de Gruyter出版认知语言学研究系列丛书。 这一领域中有深远影响力的研究成果和重要理论框架主要有:Fillmore(1976;1982)的框架语义学理论(Frame Semantics)及其后来与其他人(Fillmore et al.1988)一道发展而来的建构语法(Construction Grammar)、Talmy(1978,1988)的意象图式(Imaging Schemata)理论、Lakoff and Johnson(1980)的认知隐喻理论和Lakoff(1987)的认知借代理论和理想认知模型、Langacker(1987;1990;1991)的认知语法理论、Fauconnier(1985)的心理空间理论及后来和Mark Turner(2002)一道发展起来的概念整合理论(Conceptual Blending),以及由Jeff Elman(1989)和Brian MacWhinney(1988)发展而来的语言处理联结模式(connectionist models),该模式的研究焦点在于运用联结网络研究模块学习(modeling

fortran文件操作

fortran文件操作 From: 《Fortran 95 程序设计》彭国伦 1.文件读取的概念: 读取:“顺序读取”和“直接读取”。 保存:“文本文件”和“二进制文件”。 二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。 ---------------------------------- 2. 文件的操作: ---------------------------------- open的使用:使用open命令打开文件之后,就可以对文件来做输入输出。 example: program ex0901 impicit none open(unit=10, file='hello.txt') ! 打开hello.txt文件, unit指定文件代码,file 指定文件名称。 write(10, *) "hello" !在代码为10的文件中写入hello stop end program ex0901 open中有很多参数可以使用,详细如下: OPEN(UNIT=number, FILE='filename', FORM='...', STATUS='...', ACCESS='...', RECL=length, ERR=label, IOSTAT=iostat, BLANK='...', POSITION='...', ACTION=action, PAD='...', DELIM='...') UNIT='number': number必须是一个正整数,它可以使用变量或是常量来赋值。number最好避开1,2,5,6。因为2,6是默认的输出位置,也就是屏幕。1,5则是默认的输入位置,键盘。 FILE='filename':指定要打开的文件名称,文件名要符合系统规定。windows下不区分大小写,unix下则会区分大小写,最好不要使用中文文件名。 FORM='FORMATTED' OR 'UNFORMATTED' FORM字段只有两个值可以设置: FORM='FORMATTED' “文本文件”格式来保存 FORM='UNFORMATTED' “二进制文件”格式保存 这一栏不给定时候的默认值是: FORM='FORMATTED' STATUS='NEW' or 'OLD' or 'SCRATCH' or 'UNKNOWN' 用来说明打开一个新的文件或已经存在的旧文件。 STATUS='NEW' 打开一个原本不存在的新文件 STATUS='OLD' 打开一个原来已经存在的文件 STATUS='REPLACE' 若文件已经存在则重新创建一次,原来的内容消失;若不存在则会创建新文件。 STATUS='SCRATCH' 表示要打开一个暂存文盘,这个时候可以不需要指定文件名称,也就是FILE这个一栏可以忽略。因为程序本身会自动取一个文件名,至于文件名是啥也不重要,因为暂存盘会在程序结束后自动删除。 STATUS='UNKNOWN' 由各编译器自定义。通常会同REPLACE的效果。 !这一栏不给定时,默认为STATUS='UNKNOWN'。 ACCESS='SEQUENTIAL' or 'DIRECT' 设置读写文件的方法:

Fortran95第9章 基本计算(一)赋值语句

第9章基本计算(一)赋值语句 从计算机的实际状态来看,给出表达式并不意味着计算的开始,真正能够驱动计算的是可执行语句,而最直接驱动表达式的计算过程的就是赋值语句,完成一个赋值步骤,就意味着机器的状态的局部或全局发生了一个根本的变化。 从语法的角度来看,一个表达式还只是一个比较复杂的复合词汇,还不能构成一个完整的语句,而赋值语句则是一个在语法意义上的完整的语句,表达式在赋值语句中扮演关键的语法作用。 从计算问题的角度来看,赋值可以说是基本的计算步骤,考虑一下我们人工计算的过程就可以发现,任何一个完整的计算步骤,都可以说就是一个赋值步骤,特别是公式演算和数值计算,完成一个局部运算过程的标志,往往就是求出某个中间变量的数值或表达式。 FORTRAN语言作为一种以公式翻译为初衷的高级语言,它的赋值语句的一般形式就是一个数学等式,当然不是那种公式恒等变换得到的恒等式,而是要把运算的结果赋予一个变量,因此它的一般句法形式为: variable = expression variable => expression 可以看到一个赋值语句作为一个完整的语句,分为三个部分: ● 被赋值的变量 ● 赋值符号 ● 计算(表达式) 其中被赋值的变量,通过赋值,就拥有了明确的取值形式,如果该变量含有下标,片断下标或子串范围,则赋值的前提是它们都已经获得具体的取值。 基于表达式结果的不同种类,赋值语句分为: ●固有赋值:固有赋值是把任意类型的值赋予一个非指针变量,或把一个指针变量赋 予一个与之相关联的目标。 ●自定义赋值:自定义赋值得以构成的前提是存在一个可访问的子例行程序,它包含 一个具有ASSIGNMENT形式的赋值界面,其属性与自定义赋值语句里的变量和表达式的属性保持一致。 ●指针赋值:指针赋值把一个指针变量关联到它的目标对象,或者说把一个目标对象 赋予到一个指针变量。在形式上它使用符号=>。 ●过滤数组赋值:这个赋值过程是对满足一定条件的数组元素进行赋值,而不是对数 组整体进行赋值。 ●并行指标数组赋值。这种赋值形式给出了一种有效的并行机制,能够大规模地对多 重指标变量进行赋值。 下面我们将分节讨论这5类赋值形式,首先给出一些例子如下:

认知语言学

近年来,认知语言学已经成为国内外学者研究语言学的重点,认知语言学能很好地解释一些其他语言学理论无法解释的语言现象。认知语言学反映了人类认知过程。英语倒装句作为复杂的语言学现象引起很多语言学家的关注。各种不同的语法学派,语言学家和学者在不同的方面做出了很多贡献,但是由于这一复杂的句法特征,很多研究不能系统地解释倒装句。本文以象似性理论为认知原理,对英语倒装句中全部倒装,部分倒装及修辞性倒装进行解释,认为象似性尤其是接近象似性原则和顺序原则是形成倒装的主要原因。 关键字:象似性;倒装句;象似性原则

倒装句作为一种语法形式,是当今语言学研究的一个重要内容。传统理论对倒装的研究忽视了语言外部的因素,未重视认知对语序的制约作用,研究不够全面。 本文以认知理论为基础,对英语倒装句进行分析研究,以象似性原理为理论为依据,对英语中的不同倒装现象进行了分析和解释。在对句首倒装成分做出解释的基础上,本文对倒装句中动词全部活部分出现于主语之前的情况进行了解释,认为邻近象似性是英语倒装句中动词或全部或部分地随着突显成分提到主语之前的原因。 2 文献综述 国内外学者对认知语言学的研究做出了很多贡献,如王寅著的《认知语言学》,赵艳芳的《认知语言学概论》,Lackoff. G& M. Johnson’s Metaphors We Live by等等。所以,以期刊、论文方式讨论倒装句的研究出了许多成果。传统研究主要是从修辞、句法、语用和语篇的角度进行的。徐盛桓,以语料统计为依据,研究英语倒装句,认为倒装是为实现句中各种成分的信息状态合理分布的调节装置,通过调节,使语句的成分有恰当的错位,达到全息的语用目的。余笑,从Verschuern 提出的语用综观说出发,探讨英语和汉语中倒装语序的语用功能。发现英汉倒装语序均具有焦点分离突出和情景设定的功能。 而从认知语言学角度研究英语倒装句日益增多。杨壮春,用射体(trajectory)-界标(landmark)理论从认知的角度对倒装句的焦点突显功能作出解释,认为倒装句是该理论在语言学中的现实化,它把“射体-界标”转化为“界标-射体”结构形成句末焦点,以使人们注意的焦点落在新信息上,从而达到英语倒装句的凸显效果。更多的是以图形与背景理论为视角,对英语倒装句的焦点凸显功能进行重新阐释,认为英语倒装句符合图形-背景理论中的凸显原则,如王冰营,吕娜;刘先清;王海欧等。 用传统的修辞、句法、语用和语篇的角度进行的分析有其自身的缺陷,仅仅将倒装句认为是一种表示强调手段的句子。而用图形与背景理论分析可以解决为什么句子应该倒装即英语倒装句起始部分的问题,但是却解决不了为什么动词或者功能词应该放在主语前面这样的问题。象似性作为认知语言学中重要的概念,可以进一步研究英语倒装句中的问题。 3 倒装句 英语句子的正常语序是主语位于谓语之前,然后是宾语或表语或其他句子成分。如果将全部谓语或谓语的一部分,或将宾语、表语、宾语补足语提到主语之前,就称为倒装语序(Inverted Order)。

Fortran95程序设计习题答案

Fortran95程序设计习题答案 第四章 1.program main implicit none write(*,*) "Have a good time." write(*,*) "That's not bad." write(*,*) '"Mary" isn''t my name.' end program 2.program main real, parameter :: PI=3 implicit none.14159 real radius write(*,*) "请输入半径长" read(*,*) radius write(*,"(' 面积='f8. 3)") radius*radius*PI end program 3.program main implicit none real grades write(*,*) "请输入成绩" read(*,*) grades write(*,"(' 调整后成绩为 'f8.3)") SQRT(grades)*10.0 end program 4.integer a,b real ra,rb a=2 b=3 ra=2.0 rb=3.0 write(*,*) b/a ! 输出1, 因为使用整数计算, 小数部分会无条件舍去 write(*,*) rb/ra ! 输出 1.5 5.program main implicit none type distance real meter, inch, cm end type type(distance) :: d write(*,*) "请输入长度:" read(*,*) d%meter d%cm = d%meter*100 d%inch = d%cm/ 2.54 write(*,"(f8.3'米 ='f8.3'厘米 ='f8.3'英寸')") d%meter, d%cm, d%inch end program 第五 章 1.program main implicit none integer money real tax write(*,*) "请输入月收入" read(*,*) money if ( money<1000 ) then tax = 0.03 else if ( money<5000) then tax = 0.1 else tax = 0.15 end if write(*,"(' 税金为 'I8)") nint(money*tax) end program 2.program main implicit none integer day character(len=20) :: tv write(*,*) "请输入星期几" read(*,*) day select case(day) case(1,4) tv = "新闻" case(2,5) tv = "电视剧" case(3,6) tv = "卡通" case(7) tv = "电影" case default write(*,*) "错误的输入" stop end select write(*,*) tv end program 3.program main implicit none integer age, money real tax write(*,*) "请输入年龄"

相关文档
最新文档