搜档网
当前位置:搜档网 › fortran语法手册

fortran语法手册

fortran语法手册
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/-1.0,-1.0,-1.0/

DATA A/-1.0/,B/-1.0/,C/-1.0/

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字符位以后不能有内容。

4 FORTRAN77关系运算符

.GT. 大于

.GE. 天于或等于

.LT. 小于

.LE. 小于或等于

.EQ. 等于

.NE. 不等于 .AND. 逻辑与

.OR. 逻辑或

.NOT. 逻辑非

.EQV. 逻辑等

.NEQV. 逻辑不等

运算符优先级由高到低顺序为:()→**→*或/→+或-→.GT.或.GE.或.LT.

或.LE.或.EQ.或.NE.→.NOT.→.AND.→.OR.→.EQV.或.NEQV

5 FORTRAN77语句

6 FORTRAN77选择判断语句6.1 逻辑IF语句

IF (逻辑表达式) 程序语句

6.2 无ELSE块

IF (逻辑表达式) THEN

程序块

END IF

6.3 标准选择

IF (逻辑表达式) THEN

程序块1

ELSE

程序块2

END IF

6.4 多重选择块

IF (逻辑表达式1) THEN

程序块1

ELSE IF (逻辑表达式2) THEN

程序块2

ELSE IF (逻辑表达式2) THEN

程序块2

......

ELSE IF (逻辑表达式N) THEN

程序块N

ELSE

程序块N+1

END IF

7 FORTRAN77循环语句

7.1 GO TO语句

标号程序行

程序块

GO TO 标号

7.2 DO语句

DO 标号,记数变量=起始值,终止值,步距”语句,如DO 标号,N=1,100,1

程序块

标号CONTINUE

7.3 DO WHILE 语句

DO 标号,WHILE(PI.EQ.3.14159)

程序块

标号CONTINUE

7.4 DO UNTIL语句

DO 标号,UNTIL (逻辑表达式)”语句,如

DO 标号,UNTIL(PI.GT.3.14159)

程序块

标号CONTINUE

8 FORTRAN77内部函数

9 FORTRAN77函数与子程序

9.1 FORTRAN77语句函数

当函数十分简单,用一条语句足以定义时(允许使用继续行)才用;

应该放在所有可执行语句之前和有关类型说明语句之后,是非执行语句;

只在其所在程序单位中有意义;

语句函数中的虚参就是变量名,不能是常量、表达式或数组元素等;

语句函数定义语句中的表达式可以包含已经定义过的语句函数、外部函数或内部函数。

语句函数通过表达式得一个函数值,此数值类型必须与函数名的类型一致。语句函数的使用同内部函数相同。

语句函数例子:

YMJ(R)=3.14159265*R*R

ZMJ=YMJ(5)

9.2 FORTRAN77自定义函数

定义格式:

类型说明FUNCTION 函数名(虚拟参数1,虚拟参数2,……,虚拟参数N)

程序块(可以含有RETURN)

函数名=函数值

END

调用格式与内部函数相同。

9.3 FORTRAN77子程序

定义格式:

SUBROUTINE 子程序名(虚拟参数1,虚拟参数2,……,虚拟参数N) 程序块(可以含有RETURN)

END

调用格式:

CALL 子程序名(实在参数1,实在参数2,……,实在参数N)

数据块子程序:只是用来给有名公用区中的变量赋初值,格式如下:BLOCK DATA 子程序名

DATA语句块

END

附录一、FORTRAN77控制输入输出格式

1.

2.

3.输出字段宽度不够时用*号填充。

附录二、FORTRAN77控制输入输出格式语句

目录:

一、说明

二、概述

三、数据类型及基本输入输出

四、流程控制

五、循环

六、数组

七、函数

八、文件

一、说明

本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9 章,都是最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果有不妥的方,希望大家指正。

谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。

二、概述

1、名词解释 Fortran=For mula Tran slator/Translation 一看就知道有什么

特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始,IBM 设计的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一目标。ortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。

2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortr an90。ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。以下是77和90的一些格式上的区别。Fortran 77:固定格式(fixed format),程序代码扩展名:.f或.for (1)若某行以C,c或*开头,则该行被当成注释;(2)每行前六个字符不能写程序代码,可空着,或者1~5字符以数字表明行代码(用作格式化输入出等);7~72为程序代码编写区;73往后被忽略;(3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。Fortran 90:自由格式(free format),扩展名:.f90 (1)以"!"引导注释;(2)每行可132字符,行代码放在每行最前面;(3)以&续行,放在该行末或下行初。以下都是讨论Fortran 90。

3、Fortran的一些特点,和C的一些不同其实很多,在下面涉及具体方面时可以看到。这里只是大致提一些。(1)不分大小写(2)每句末尾不必要写分号(3)程序代码命令间的空格没有意义(4)不像C,Fortran不使用{ } (5)

数据类型多出了复数和逻辑判断类型。比如复数类型complex :: a !声明复数的方法。复数显然方便了科学计算,满足了工程方面需求a=(1.0,2.0) ! a=1+i (6)多出了乘幂运算(**)。乘幂除了整数还可以是实数形式。如开方,开立方a=4.0**0.5,a=8.0**(1.0/3.0)。(7)数组有一些整体操

作的功能;可以方便的对部分元素进行操作(8)有些情况下可以声明大小待定的数组,很实用的功能

4、Fortran 的基本程序结构

先看一看所谓的"Hello Fortran"程序。

program main !程序开始,main是program的名字,完全自定义

write(*,*) "Hello" !主程序

stop !终止程序

end [program[main]] !end用于封装代码,表示代码编写完毕。[ ]中的内容可省略,下同。

再看一段实用一些的程序,好有点感性认识。程序用于计算圆柱的表面积,要求

输入底面半径和。其中展示了Fortran的一些特色用法。程序摘自维基。其

实是一个叫https://www.sodocs.net/doc/b114230655.html,的网上引的维基的网页。推荐去看看!能查到不少有意思的东西。

program cylinder !给主函数起个名字

! Calculate the area of a cylinder.

! Declare variables and constants.

! constants=pi

! variables=radius squared and height

implicit none ! Require all variables to be explicitly declared !这个一般都是要写上的。下面会进一步说明。

integer :: ierr

character :: yn

real :: radius, height, area

real, parameter :: pi = 3.1415926536 !这是常量的声明方法interactive_loop: do !do循环,Fortran 中的循环可以加标签,如d前

面的 !interactive_loop就是标签

! Prompt the user for radius and height and read them.

write (*,*) 'Enter radius and height.' !屏幕输出

read (*,*,iostat=ierr) radius,height !键盘输入。isotat的值用

判断输入成功否。

! If radius and height could not be read from input, then cycle through the loop.

if (ierr /= 0) then

write(*,*) 'Error, invalid input.'

cycle interactive_loop !cycle 相当于C里的continue

end if

! Compute area. The ** means "raise to a power."

area = 2 * pi * (radius**2 + radius*height) ! 指数运算比C方

便

! Write the input variables (radius, height)and output (area) to the screen.

write (*,'(1x,a7,f6.2,5x,a7,f6.2,5x,a5,f6.2)') & !"&"表示续

行。这里还显示了格式化输出

'radius=',radius,'height=',height,'area=',area yn = ' ' yn_loop: do !内嵌的另一个do循环

write(*,*) 'Perform another calculation? y[n]'

read(*,'(a1)') yn

if (yn=='y' .or. yn=='Y')

exit yn_loop

if (yn=='n' .or. yn=='N' .or. yn==' ')

exit interactive_loop

end do yn_loop !结束内嵌do循环

end do interactive_loop end program cylinder

Fortran 程序的主要结构就是这样了。一般还会有些module的部分在主函数前,函数在主函数后。

三、数据类型及基本输入输出

1、数据类型,声明及赋初值

(1)integer:短整型kind=2, 长整型kind=4

integer([kind=]2) :: a=3如果声明成integer:: a,则默认为长整型。 !"::" 在声明并同时赋初值时必须要写上;类型名后面有形容词时也必须保留::;其他情况可略去 !所谓形容词,可以看一下这个。比如声明常数real,parameter :: pi=3.1415926。parameter就是形容词。

(2)real:单精度kind=4(默认),双精度kind=8

real([kind=]8) :: a=3.0还有指数的形式,如1E10为单精度,1D10为双精度

(3)complex 单精度和双精度complex([kind=]4) b

(4)character character([len=]10) c !len为最大长度

(5)logical logical*2 :: d=.ture. (等价于

logical(2)::d=.ture.)

(6)自定义类型type:类似于C中的struct

Fortran 77中给变量赋初值常用DATA命令,可同时给多个变量赋初值

data a,b,string /1, 2.0, 'fortran'/

与C不同的是,Fortran 中变量不声明也能使用,即有默认类型(跟implicit 命令有关)。按照默认的定,以i,j,k,l,m,n开头的变量被定义为integer,其余为real。取消该设置需在程序声明部分之前implicit none。彭国伦建议一般都使用该语句。

另一点关于声明的不同是Fortran有"等价声明":integer a,b equivalence(a,b)使得a,b使用同一块内存。这样可以节省内存;有时可精

简代码。如:equivalence(很长名字的变量如三维数组的某个元素,a),之后使用a来编写程序就简洁多了。

2、基本输入输出

输入:read(*,*) a !从键盘读入

输出:write(*,*) "text" !在屏幕上输出。

Fortran 77用' text'。Fortan 90中一般" "和' '都可

print *,"text" !只能用于屏幕输出(*,*)完整写为(unit=*,fmt=*)。

其中unit为输入/输出位置,如屏幕,文件等;fmt为格式。如这两项都写成*,则按默认的方式进行,即上面描述的。print后面的*表示按默认格式输出。

四、流程控制

1、运算符

(1)逻辑运算符

== /= > >= < <= !Fortran 90用法

.EQ. .NE. .GT. .GE. .LT. .LE. !Fortran 77用法

(2)涉及相互关系的集合运算符

.AND. .OR. .NOT. .EQV. .NEQV. ! 仅.NOT.连接一个表达式,其余左右两边都要有表达式(可以是logical类型的变量) !.EQV.:当两边逻辑运算值相同时为真, .NEQV.:当两边逻辑运算值不同时为真

2、IF

(1) 基本:

if(逻辑判断式) then

……

end if

如果then后面只有一句,可写为

if(逻辑判断式) …… !then和end if可省略

(2) 多重判断:

if(条件1) then

……

else if(条件2)then

……

else if (条件3)then

……

else

……

end if

(3) 嵌套:

if(逻辑判断式) then

if(逻辑判断式) then

if(逻辑判断式) then

else if(逻辑判断式) then

……

else

……

end if

end if

end if

(4) 算术判断:

program example

implicit none

real c

write (*,*) "input a number"

read (*,*) c

if(c) 10,20,30 !10,20和30为行代码,根据c小于/等于/大于0,执行10/20/30行的程

10 write (*,*) "A"

goto 40 !goto可实现跳到任意前面或后面的行代码处,但用多了破坏程序结

20 write (*,*) "B"

goto 40

30 write (*,*) "C"

goto 40

40 stop

end

3、SELECT CASE

类似于C的switch语句

select case(变量)

case(数值1) ! 比如case(1:5)代表1<=变量<=5会执行该模块

……!case(1,3,5)代表变量等于1或3或5会执行该模块

case(数值2) !括号中数值只能是integer,character或logical型常量,不能real型

case default

……

end case

4、PAUSE, CONTINUE

pause暂停程序执行,按enter可继续执行

continue貌似没什么用处,可用作封装程序的标志

五、循环

1、DO

do counter=初值, 终值, 增/减量!counter的值从初值到终值按增/减量变,……!counter每取一个值对应着一次循环。增/减量不写则认为1 ……

……!循环主体也没有必要用{}

end do

Fortran 77中不是用end do来终止,而是下面这样子:

do 循环最后一行的行代码 counter=初值, 终值, 增/减量

……

行代码……!这是do的最后一行

2、DO WHILE

do while(逻辑运算)

……

……

end do类似于C中的while(逻辑运算) {……}。一开始那个计算圆柱表面积

的程序中,应该也算是这一类。不过它是通过内部的if语句来控制循。看来也是可以的,不过在这本书上没看到这样写。其实应该也可以归于下面这种。3、没看到和C里面的do{……}while(逻辑运算); 相对应的循环语句,不过可以这样,保证

至少做一循环:

do while(.ture.)

……

……

if(逻辑运算)

exit !exit就好比C里面的break。C里的continue在Fortran里是

cycle

end do

4、Fortran的一个特色:带署名的循环可以这样,不易出错:

outer: do i=1,3

inner: do j=1,3

……

end do inner

end do outer

还可以这样,很方便:

loop 1: do i=1,3

loop2: do j=1,3

if(i==3)

exit loop1 !exit终止整个循环loop1

if(j==2)

cycle loop2 !cycle跳出loop2的本次循环,进行loop2的下次循环

write(*,*) i,j

end do loop2

end do loop1

还有一些循环主要用于Fortran中的数组运算,为Fortran特有,很实用。

六、数组

1、数组的声明和C不同的是,Fortran 中的数组元素的索引值写在()内,且高维的也只用一个(),如

integer a(5) !声明一个整型一维数组

real :: b(3,6) !声明一个实型二维数组

类型可以是integer, real, character, logical或type。最高可以到7维。数组大小必须为常数。但是和C语言不同,Fortran也有办法使用大小可变的数组,方法如:

integer, allocatable :: a(:) !声明小可变经过某个途径得知所需数组大小size之后,用下面的语句:allocate(a(size)) !配置内存空间之后该数组和通过一般方法声明的数组完全相同。与C不同,Fortran索引值默认为从1开始,而且可以在声明时改变该规则:

integer a(-3:1) ! 索引值为-3,-2,-1,0,1

integer b(2:3,-1:3) !b(2~3,-1~3)为可使用的元素

2、数组在内存中的存放和C不同,Fortran 中的数组比如a(2,2)在内存中

存放顺序为a(1,1),a(2,1),a(1,2),a(2,2 )。原则是放低维的元素,再放高维的元素。此规则称为column major。

3、赋初值

(1)最普通的做法:

integer a(5)

data a /1,2,3,4,5/

或integer :: a(5)=(/1,2,3,4,5/)

若integer :: a(5)=5,则5个元素均为5

对于integer :: a(2,2)=(/1,2,3,4/) 根据数组元素在内存中存放的方

式,等价于赋值a(1,1)=1,a(2,1)=2,a(1,2)=3,a(2,2)=4

(2)利用Fortran的特色:隐含式循环。看例子就明白了。

integer a(5)

integer i

data (a(i),i=2,4)/2,3,4/ !(a(i),i=2,4)表示i从2到4循环,增量为默认值1 还可以这样:

integer i

integer :: a(5)=(/1,(2,i=2,4),5/) !五个元素分别赋值为1,2,2,2,5

integer :: b(5)=(/i, i=1,5/) !五个元素分别赋值为1,2,3,4,还可以嵌套

data

((a(i,j),i=1,2),j=1,2)=/1,2,3,4/ !a(1,1)=1,1(2,1)=2,a(1,2)=3,a (2,2)=4

4、操作整个数组

设a,b为相同类型、维数和大小的数组

a=5 !所有元素赋值为5

a=(/1,2,3/) !这里假设a为一维,a(1)=1,a(2)=2,a(3)=3

a=b !对应元素赋值,要求a,b,c维数和大小相同,下同

a=b+c a=b-c a=b*c a=b/c a=sin(b) !内部函数都可以这样用

5、操作部分数组元素

a为一维数组

a(3:5)=(/3,4,5/) !a(3)=3,a(4)=4,a(5)=5

a(1:5:2)=3 !a(1)=3,a(3)=3,a(5)=3

a(3:)=5 !a(3)以及之后的所有元素赋值为5

a(1:3)=b(4:6) !类似于这种的要求左右数组元素个数相同

a(:)=b(:,2) !a(1)=b(1,2),a(2)=b(2,2),以此类推

6、WHERE

where形式上类似于if,但只用于设置数组。

设有两个同样类型、维数和大小的数组a,b

where(a<3) b=a !a中小于3的元素赋值给b对应位置的元素

end where

再如:

where(a(1:3)/=0) c=a !略去了end where,因为只跟了一行where可嵌,也 !可类似do循环有署名标签。

7、FORALL

有点像C中的for循环:

forall(triplet1[,triplet2 [,triplet3…]],mask)

其中triplet形如i=2:6:2,表示循环,最后一个数字省略则增量为1 例如:

forall(i=1:5,j=1:5,a(i,j)<10) a(i,j)=1 end forall

又如:

forall(i=1:5,j=1:5,a(i,j)/=0) a(i,j)=1/a(i,j)

forall也可以嵌套使用,好比C中for循环的嵌套。

七、函数

Fortran中函数分两类:子程序(subroutine)和自定义函数(function)。自定义函数本质上就是学上的函数,一般要传递自变量给自定义函数,返回函数值。子程序不一定是这样,可以没有返值。传递参数要注意类型的对应,这跟C是一样的。

1、子程序

目的:把某一段经常使用的有特定功能的程序独立出来,可以方便调用。习惯上一般都把子程序放在主程序结束之后。

形式:

subroutine name (parameter1, parameter2) !给子程序起一个有意义的名字。可以传递参数,这样可以有返回值。括号内也可以空着,代不传递参数。

implicit none

integer:: parameter1, parameter2 !需要定义一下接收参数的类型。

……!接下来的程序编写跟主程序没有任何别。

…… return !跟C不同,这里表示子程序执行后回到调用它的地方继续执行下

面的程序。不一定放在最后。可以放在子程序的其他位置,作用相同;子程序中return之后的部分不执行。

end [subroutine name]

调用:使用call命令直接使用,不需要声明。在调用处写:

call subroutine name(parameter1,parameter2)

注意点:

a.子程序之间也可相互调用。直接调用就是了,像在主程序中调用子程序一样。

b.传递参数的原理和C中不同。Fortran 里是传址调用(call by

address/reference),就是传递时用参数和子程序中接收时用的参数使用同一个地址,尽管命名可以不同。这样如果子程序的执行改子程序中接收参数的值,所传递的参数也相应发生变化。

c.子程序各自内部定义的变量具有独立性,类似于C。各自的行代码也具有独立性。因此各个子程序主程序中有相同的变量名、行代码号,并不会相互影响。

2、自定义函数

和子程序的明显不同在于:需要在主程序中声明之后才能使用。调用方式也有差别。另外按照惯例用函数不去改变自变量的值。如果要改变传递参数的值,习惯上用子程序来做。

声明方式:

real, external :: function_name一般自定义函数也是放在主程序之后。

形式:

function function_name(parameter1, parameter2)

implicit none real:: parameter1, parameter2 !声明函数参数类型,这是必需的

real::function_name !声明函数返回值类型,这是必需的

……

……

function_name=….!返回值的表达式

return

end

也可以这样直接声明返回值类型,简洁些:

real function function_name(parameter1, parameter2) implicit none

real:: parameter1, parameter2 !这个还是必需的

……

……

function_name=….!返回值表达式

return

end

调用:

function_name(parameter1,parameter2)不需要call命令。自定义函

数可以相互调用。调用时也需要事先声明。总之,调用自定义函数前需要做声明,调用子程序则不需要。

3、关于函数中的变量

(1)注意类型的对应。

Fortran 中甚至可以传递数值常量,但只有跟函数定义的参数类型对应才会到想要的结果。如call ShowReal(1.0)就必须用1.0而不是1。

(2)传递数组参数,也跟C一样是传地址,不过不一定是数组首地址,而可以是数组某个指定元素地址。比如有数组a(5),调用call function(a)则传递a(1)的地址,调用call functio n(a(3))则递a(3)的地址。

(3)多维数组作为函数参数,跟C相反的是,最后一维的大小可以不写,其他维大小必须写。这决于Fortran中数组元素column major的存放方式。(4)在函数中,如果数组是接收用的参数,则在声明时可以用变量赋值它的大

小,甚至可以不指定小。例如:subroutine Array(num,size)

implicit none

integer:: size integer num(size) !可以定义一个数组,其大小是通

过传递过来的参数决定的。这很实用

……

……

return

end

(5)save命令:将函数中的变量值在调用之后保留下来,下次调用此函数时该变量的值就是上次保的值。只要在定义时加上save就行:

integer, save :: a=1

(6)传递函数(包括自定义函数、库函数、子程序都是可以的)。类似于C中

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/-1.0,-1.0,-1.0/ DATA A/-1.0/,B/-1.0/,C/-1.0/ 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字符位以后不能有内容。 4 FORTRAN77关系运算符 .GT. 大于 .GE. 天于或等于 .LT. 小于 .LE. 小于或等于 .EQ. 等于 .NE. 不等于 .AND. 逻辑与 .OR. 逻辑或 .NOT. 逻辑非 .EQV. 逻辑等 .NEQV. 逻辑不等 运算符优先级由高到低顺序为:()→**→*或/→+或-→.GT.或.GE.或.LT. 或.LE.或.EQ.或.NE.→.NOT.→.AND.→.OR.→.EQV.或.NEQV 5 FORTRAN77语句

(完整)Fortran经典编程语言笔记(你值得拥有)

FORTRAN笔记 2014.10.07 目录 第七讲_FORTRAN的基本知识.ppt (2) FORTRAN语言程序设计初步 (2) FORTRAN源程序的书写格式(以77为例) (2) 变量 (2) 变量类型 (2) 算术运算符和运算优先级 (3) 赋值语句 (3) 参数语句(PARAMETER语句) (3) END语句 (3) PAUSE语句 (3) 逻辑运算和选择结构 (4) 关系表达式 (4) FORTRAN中数组的定义及使用 (4) 其他 (5) 1. fortran语言定义CHARACTER*6 TTL(14,3),CNAM(400)是什么意思? (5) 2. fortran里character*10 是什么意思 (5) 3. Fortran中kind是什么函数? (5)

第七讲_FORTRAN的基本知识.ppt FORTRAN语言程序设计初步 FORTRAN是Formula Translation的缩写,意为“公式翻译”,它是为科学、工程问题或企事业管理中的那些能够用 数学公式表达的问题而设计的,其数值计算的功能较强。 常用的是FORTRAN77和FORTRAN90两种标准。 1、一个程序由若干个程序单位组成。主程序和每一个子程序分别是一个独立的程序单位。 2、每一个程序单位都是以“END”结束的。 3、一个程序单位包括若干行。 1)语句行。由一个FORTRAN语句组成。 2)非语句行,即注释行。 4、FORTRAN程序中的语句可以没有标号,也可以有标号,根据需要而定。标号的作用是标志一个语句以便被其 他语句引用。 5、一个程序单位中各类语句的位置是有一定规定的。 6、FORTRAN源程序必须按一定的格式书写。 FORTRAN源程序的书写格式(以77为例) 每一行有80列,分别如下: 1、第1-5列为标号区。一行中第一列为“C”或“*”,该行即被认为是注释行。 2、第6列为“续行标志区”,如果在一行的第6列上写一个非空格和非零的字符,则该行作为其上一行的续行。 3、第7-72列为语句区。 4、第73-80列,注释区。 变量 变量名:一个变量需要用一个名字(变量名)来识别。在同一个程序单位中不能用同一个变量名代表两个不同的变 量。 FORTRAN的变量名按以下规则选定: 1)第一个字符必须是字母,即变量名必须以字母开头; 2)在一个字母后面可以跟1-5为数字或字母。 如果选定的变量名超过6个字符,则只有前面6个字符有效。 注:在变量名中大写与小写字母是等价的。 变量类型 整型变量Integer、实型变量Real、双精度变量Double Precision、复型变量Complex、逻辑型变量Logical和字符型变量Character。 1、隐含约定(I-N规则) FORTRAN规定:在程序中的变量名,凡以字母I,J,K,L,M,N六个字母开头的,即认为该变量为整型变量。 在程序中,凡是变量名以字母I,J,K,L,M,N,i,j,k,l,m,n开头的变量被默认为整型变量,以其他字母开头的变量被 默认为实型变量。 2、用类型说明语句确定变量类型 1)INTEGER语句(整型说明语句) 2)REAL语句(实型说明语句) 3)DOUBLE PRECISION语句(双精度说明语句) 4)COMPLEX语句(复型说明语句) 5)LOGICAL语句(逻辑型说明语句)

国内认知语言学研究综述

国内外认知语言学研究综述 摘要:认知语言学是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认为认知语言学的哲学基础既不是经验主义,又不是理性主义,而是体验哲学。”

FORTRAN内部函数库

FORTRAN内部函数 用FORTRAN解题往往要用到一些专门运算,如求三角函数sinx, cosx,对数lnx,指数ex,求一组数中最大数和最小数等。 FORTRAN提供了一些系统函数(称为内部函数)来完成这些运算。程序设计者不必自己设计进行这些运算的语句组(即程序段或子程序),只需写出一个函数的名字以及给出一个或若干个自变量,就可以得到所需的值,例如: SQRT(4.0)求出4.0的平方根, SIN(2.0)求出2(弧度)的正弦值, EXP(3.5)求出e3.5, LOG(3.0)求出3, 常用的函数如下表,FORTRAN77提供的全部函数明细见FORTRAN77内部函数。 函数名含义应用例子相当于数学上的运算 ABS 求绝对值ABS(A) |a| EXP 指数运算EXP(A) e^a SIN 正弦值SIN(X) sin x COS 余弦值COS(X) cos x ASIN 反正弦ASIN(X) sin^(-1)a ACOS 反余弦ACOS(X) cos-1a TAN 正切TAN(X) tan x ATAN 反正切ATAN(A) tan^(-1)a LOG 自然对数LOG(A) lna,或loge(a) LOG10 常用对数LOG10(A) log10a INT 取整INT(A) int(a),取a的整数部分 MOD 求余MOD(A1,A2) a - int(a1/a2)*a2 SIGN 求符号SIGN(A1,A2) |a1|(若a2>0) -|a1|(若a2<0) REAL 转换为实型REAL(I) MAX 求最大值MAX(A1,A2,A3) max(a1,a2,a3) MIN 求最小值 MIN(A1,A2,A3) min(a1,a2,a3) 说明: (1)FORTRAN77将这些系统函数分别编成一个个子程序,组成函数库,存贮于外部介质(如磁盘)上。在完成源程序的编译之后,用LINK命令实现连接,即将已翻译成二进制指令的目标程序与函数库连接。也就是将程序中出现函数名的地方用函数库中相应的一组指令代入之,组成一个统一的“可执行目标块”。例如,程序中出现一个SIN函数,在连接时就将一组二进制指令(它们是实现求正弦值的运算的)直接插入到程序中出现SIN的地方。由于是插入到程序内部的,所以称为“内部函数”。 (2)一个内部函数要求一个或多个自变量。例如,SQRT函数只能有一个自变量SQRT(4.6),MOD函数要求两个自变量MOD(8,3),MAX和MIN函数要求两个以上自变量MAX(6,-8,10),MIN(-6,8,0)。当自变量个数规定为2个时,自变量的顺序不应任意颠倒,MOD(8,3)表示8被3除的余数,其值为2,而MOD(3,8)则表示3被8除的余数,其值为3。当自变量个数>2时,自变量的顺序无关,MAX(6,8,10)和MAX(8,10,6)结果是一样的。

(完整版)FORTRAN90用法总结,推荐文档

FORTRAN90用法总结 1、数据类型 整型 INTEGER 实型 REAL 复型 COMPLEX 字符型 CHARACTER 逻辑型 LOGICAL 2、特殊函数 1>定值函数 PARAMETER(变量列表) 或类型说明符,PARAMETER::变量列表 2>IMPLICIT 类型说明符(字母表)类型定义函数(默认I-N规则,取消IMPLICIT NONE) 3>** 乘方 4>STOP[标号]终止执行 5>PAUSE[标号]暂停程序 6>字符串长度函数 LEN(String)、 LEN_TRIM(String) 7>除去字符串尾部空格 TRIM(String) 8>字符串位置函数 INDEX(String1,String2) 9>字符串比较函数 LGE(String1,String2) LGT(String1,String2) LLE(String1,String2) LLT(String1,String2) 10>字符串空格首位调整 ADJUSTL(String)、ADJUSTR(String) 11>字符串、ASSII码互相转化函数 ①化为ASSII码 ICHAR(String)、IACHAR(String) ②化为字符串CHAR(I)、ACHAR(I) 12>.LT.(<) .LE.(<=) .EQ.(=) .NE.(/=) .GT.(>) .GE.(>=) 13>.AND.与 .OR.或 .NOT.非 .EQV.等于 .NEQV.不等 .XOR.异或 3、IF函数 1> 单支IF IF(逻辑表达式) THEN 块语句 END IF 2> 双支IF IF(逻辑表达式) THEN 块语句1 ELSE 块语句2 END IF 3>多支IF IF(逻辑表达式1) THEN 块语句1 ELSE IF(逻辑表达式2) THEN

认知语言学主要内容

一、认知语言学的起源 二、主要内容 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是世界上最早出现的高级编程语言,是工程界最常用的编程语言,它在科学计算中(如航空航天、地质勘探、天气预报和建筑工程等领域)发挥着极其重要的作用。经过40多年的发展,伴随着FORTRAN语言多次版本的更新及相应开发系统的出现,其功能不断完善,最新版本的开发系统几乎具备了VC、VB的所有特点,如图形界面编程、数据库等。目前,工科院校开设的计算机编程语言课首选仍然是FORTRAN :< 说实话,从科技发展的趋势来说这不是好事。您可以设想一下,如果需要用鹅毛笔抄写大量的古籍是什么感受! 强烈建议阅读《发掘C#特性赋予科学计算项目以威力》 1 FORTRAN77四则运算符 + - * / ** (其中**表示乘方) 在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→() 2 FORTRAN77变量类型 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 用类型说明语句确定变量类型:可以改变I-N规则

用IMPLICIT语句将某一字母开头的全部变量指定为所需类型 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3)

FORTRAN 95 语法速查

FORTRAN 95 语法速查 ----------白云、李学哲、陈国新、贾波编著《FORTRAN95程序设计》读书笔记 目录:一、应用程序的创建与运行/FORTRAN 95所用的字符/ 变量类型及其声明,常量声明/表达式与运算符 二、输入与输出:表控、有格式 三、选择语句与结构:IF语句、CASE结构 四、DO循环结构 五、数组:数组的声明,数组的引用,数组的算术运算,数组的输入、输出,给数组赋初值, 动态数组,WHERE、FORALL语句 六、子程序:语句函数,内部子程序,调用子程序时的虚实结合:形参为数组、非定界数组、子 程序名、星号,递归子程序,外部子程序,纯子程序,逐元子程序 七、派生数据类型与结构体 八、指针与动态链表 九、文件:存取方式,基本操作语句,各类文件的读写操作 十、接口、模块 十一、公用区、存储关联、数据块子程序 十二、绘图:坐标系、设置图形颜色、创建图形程序/ 常用过程:设置线型、绘一像素点、设置当前位置、绘直线、绘弧线、绘矩形、绘多边形、绘制扇形(圆、椭圆)/ 文字信息的显示 附/录:标准函数与标准子例行程序 一、基础部份 1-1 FORTRAN 95 应用程序的创建与运行 创建或运行FORTRAN 95程序必须在Microsoft Developer Studio平台上进行。尽管程序文本及相关文件的编辑可以在任一文本编辑器上进行,然后再拷到Studio的文档窗口中。但最好还是一开始就进入Studio环境。创建FORTRAN 95 程序的步骤大致如下: 1)启动Microsoft Developer Studio 可以通过不同方式运行dfdev.exe程序以启动Microsoft Developer Studio [开始] \ Compaq Visual Fortran 6 \ Developer Studio \ dfdev.exe:或 ……\CVF66 \https://www.sodocs.net/doc/b114230655.html,\MSDEV98\dfdev.exe Microsoft Developer Studio的界面如下图所示: 文档窗口 工作空间窗口 输出窗口

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轴开始逆时针算不一样。

fortran语法手册

1F O R T R A N77四则运算符+ - */ ** (其中**表示乘方) 在表达式中按优先级次序由低到高为:+或-→*或/→**→函数→() 2 FORTRAN77变量类型 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 数组的说明与使用 使用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)) 使用DATA语句给数组赋初值 变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如 DATA A,B,C/,, DATA A/,B/,C/ DATA A,B,C/3*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程序书写规则

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

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.sodocs.net/doc/b114230655.html,ngacker)、雷科夫(G. Lakoff)、比尔沃思(M.Bierwisch)以及赫德森(R.Huds on)这些代表不同理论方法的语言学家,他们的研究都具有这一目的。如果仅从这一目的来看,那么乔姆斯基的生成语法、杰肯道夫的概念语义学、赫德森的词语法(w ord gram2 ? 9 ?

Fortran常用函数

1、RANDOM_NUMBER Syntax ['sint?ks] n. 语法 CALL RANDOM_NUMBER (harvest结果) Intrinsic Subroutine(固有子程序):Returns a pseudorandom number greater than or equal to zero and less than one from the uniform distribution. 返回大于或等于0且小于1,服从均匀分布的随机数 2、RNNOA/ DRNNOA (Single/Double precision) Generate pseudorandom numbers from a standard normal distribution using an acceptance/rejection method. 产生服从标准正态分布的随机数 Usage(用法) CALL RNNOA (NR, R) Arguments(参数) NR— Number of random numbers to generate. (Input) 要产生随机数的个数 R— Vector of length NR containing the random standard normal deviates. (Output) 输出长度为NR,随机正态分布的向量 Comments(注解) The routine RNSET can be used to initialize the seed of the random number generator. The routine RNOPT can be used to select the form of the generator. 程序RNSET可以用来初始化随机数发生器的种子 Example In this example, RNNOA is used to generate five pseudorandom deviates from a standard normal distribution. INTEGER ISEED, NOUT, NR REAL R(5) EXTERNAL RNNOA, RNSET, UMACH C CALL UMACH (2, NOUT) NR = 5 ISEED = 123457 CALL RNSET (ISEED) CALL RNNOA (NR, R) WRITE (NOUT,99999) R 99999 FORMAT (' Standard normal random deviates: ', 5F8.4) END Output Standard normal random deviates: 2.0516 1.0833 0.0826 1.2777 -1.2260

(完整版)Fortran之COMMON语句

Fortran之COMMON语句 FORTRAN程序中各程序单位之间的数据交换可以通过虚实结合来实现,还可以通过建立公用区的方式来完成。公用区有两种,一种是无名公用区,任何一个程序中只可能有一个无名公用区;一种是有名公用区,一个程序中可以根据需要由程序员开辟任意多个有名公用区。建立无名和有名公用区都通过COMMON语句来进行。 按照结构化程序设计的指导思想,通常主张通过虚实结合的途径来传送数据而不主张使用公用区。因为前者使程序有较好的可读性,而且容易跟踪数据的流向,便于对程序进行调试和维护。但是虚实结合的传送方式速度较慢,特别是在各程序单位之间有大量的数据需要传送时速度问题就更为突出。不同程序单位利用公用区交换数据的速度却比虚实结合的方式传送速度快得多。所以在很多应用程序中如果各程序单位之间有大量数据需要传送时,程序员一般仍然采用开辟公用区的方式。 11.2.1 无名公用区 开辟无名公用区COMMON语句的一般形式如下: COMMON a1,a2,… 其中a1,a2,…允许是普通变量名、数组名和数组说明符(注意:不是数组元素),它们之间用逗号隔开。例如: 在主程序中写:COMMON X,Y,I,Z(3) 在子程序中写:COMMON A,B,J,T(3) 于是,在无名公用区中变量X和A,Y和B,I和J分别分配在同一个存储单元中,数组Z和T同占三个存储单元。占同一个存储单元的那些变量在不同的程序单位中,它们的名字不需要相同。

FORTRAN编译程序在编译时为COMMON语句开辟一个无名公用区,当把不同的程序单位连接在一起的时候,不同程序单位在COMMON语句中的变量按其在语句中出现的先后顺序占用无名公用区连续的存储单元,也就是说每个程序单位中的COMMON语句总是给出现在语句中的第一个变量分配在无名公用区的第一个存储区单元。 COMMON语句开辟公用区的主要用途就是使不同程序单位的变量之间 进行数据传送,另一种用途是用来节省存储空间。下面的例子通过公用区进行交换数据: PROGRAM MAIN COMMON Z1,Z2 READ(*,*)A1,A2,A3 CALL QUAD(A1,A2,A3) WRITE(*,*)Z1,Z2 END SUBROUTINE QUAD(A,B,C) COMMON X1,X2 . . . END 或者: PROGRAM MAIN COMMON Z1,Z2,A1,A2,A3 READ(*,*)A1,A2,A3 CALL QUAD() WRITE(*,*)Z1,Z2 END

fortran语言内部函数

附录 FORTRAN 90标准函数 符号约定: ●I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型。 ●s:P表示s类型为P类型(任意kind值)。s:P(k)表示s类型为P类型(kind值=k)。 ●[…]表示可选参数。 ●*表示常用函数。 表1 数值和类型转换函数 函数名说明 ABS(x)*求x的绝对值∣x∣。x:I、R,结果类型同x; x:C,结果:R AIMAG(x)求x的实部。x:C,结果:R AINT(x[,kind])*对x取整,并转换为实数(kind)。x:R, kind:I,结果:R(kind) AMAX0(x1,x2,x3,…)*求x1,x2,x3,…中最大值。x I:I,结果:R AMIN0(x1,x2,x3,…)*求x1,x2,x3,…中最小值。x I:I,结果:R ANINT(x[,kind])*对x四舍五入取整,并转换为实数(kind)。x:R, kind:I,结果:R(kind) CEILING(x)*求大于等于x的最小整数。x:R,结果:I CMPLX(x[,y][,kind]))将参数转换为x、(x,0.0)或(x,y)。x:I、R、C, y:I、R,kind:I,结果:C(kind) CONJG(x)求x的共轭复数。x:C,结果:C DBLE(x)*将x转换为双精度实数。x:I、R、C,结果:R(8) DCMPLX(x[,y])将参数转换为x、(x,0.0)或(x,y)。x:I、R、C, y:I、R,结果:C(8) DFLOAT(x)将x转换为双精度实数。x:I,结果:R(8) DIM(x,y)*求x-y和0中最大值,即MAX(x-y,0)。x:I、R, y的类型同x,结果类型同x DPROD(x,y)求x和y的乘积,并转换为双精度实数。x:R, y:R,结果:R(8)

fortran中批处理实现

********************************************* fortran中批处理命令的实现函数: 利用systemqq命令(需要调用DFLIB 数据库) ********************************************* 例1: USE DFLIB character*100 CMD LOGICAL(4) res CMD="dir/a-d/b/s "//trim(fPath)//" >"//trim(outPut) res=SYSTEMQQ(CMD) 例2: USE DFLIB LOGICAL(4) result result = SYSTEMQQ('copy e:\dir.txt e:\test\dir.txt') !将e:\dir.txt 复制到e:\test\dir.txt文件中。!****************实例3:复制文件************************* 例3: programmain_pro USE DFLIB implicit none integer,parameter::sta_num=123 character(5),dimension(sta_num)::sta_ID character(500)::filein,fileout character(5000)::cmd logical(4)::judge

integer::status,is open(1,file='山东.txt',status='old',action='read',iostat=status) read(1,*) do is=1,sta_num read(1,*) sta_ID(is) filein='Z:\data\降水逐小时数据-戴至修\precip_data\'//sta_ID(is)//'_precip.txt' open(2,file= filein,status='old',action='read',iostat=status) if(status/=0) goto 1000 fileout='Z:\data\降水逐小时数据-戴至修\山东省-降水数据\'//sta_ID(is)//'_precip.txt' cmd='copy '//filein//' '//fileout judge=SYSTEMQQ( cmd) 1000 continue enddo end program

fortran90-知识点整理

Fortran90关于变量说明的新功能: 1.在变量说明的同时,可以给变量赋初值。 INTEGER::I=5,J=126 REAL::X=7.2,Z,W=774.2 2.在说明变量的同时也可说明其种别 REAL(KIND=4)::X,Y 或REAL(4)::X,Y 3.在说明变量的同时,还可说明变量的属性 INTEGER,PARAMETER::I=5,J=123 Ps :PARAMETER 属性 (1)功能:用一个符号代表一个常量,称为符号常量(常数) (2)写法: Real,Parameter ::G=9.8 &&说明类型时赋值 (3)位置:位于可执行语句之前 REAL,DIMENSION(1:10)::A 2.3.6 派生数据类型 根据需要而由基本数据类型定义新的数据类型。在一个派生类型中可包含多个基本类型。 如:TYPE STUDENT (定义开始) CHARACTER(LEN=20)::DEPARTMENT CHARACTER(LEN=10)::CLASS CHARACTER(LEN=15)::NAME INTEGER::NUMBER (成员定义) END TYPE STUDENT (定义结束)

派生类型变量的定义: TYPE(STUDENT)::PERSON 变量的赋值: PERSON=(”COMPUTER”,”92_2”,”LI LIN”,21) 成员的表示: PERSON%CLASS=“92_2” PERSON%NAME=“LI LIN” 主程序其他限制 主程序的可执行部分不能包含有RETURN语句或者ENTRY语句。 程序名对可执行程序是全局的,而且不得于该可执行程序中的任何其它程序单元名、外部过程名或公用块名相同,也不得于主程序内的任何局部名相同。 在主程序的作用范围内的说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们的等价属性,在主程序内SAVE语句不起作用。 主程序内的任何内部过程的定义必须跟在CONTAINS语句之后。 2.3.2 子程序 子程序是可以完成某一独立算法或功能的程序单元,但它功能的具体体现要通过主程序(或子程序)的调用来实现。 按子程序与主程序的位置关系分为内部过程和外部过程。 2.4.3 模块 模块也是一种在程序单元之外独立编写的程序单元。它有独特的形式,即模块程序单元内没有可执行语句,除了说明语句外,最多包含内部过程。模块的主要作用是供其它程序单元引用。 程序单元引用模块,实际是将模块内的全部语句复制到本程序单元。因此模块起共享及复制的作用。 模块的引用采用语句: USE 模块1,模块2,…

认知语言学的发展

龙源期刊网 https://www.sodocs.net/doc/b114230655.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

相关主题