Fortran基础知识
- Fortran对字母大小写不敏感。
- 一行语句太长可以换成多行,用 & 连接。一行代码的最后是&,表示将与下一行相连;一行代码的开头是&,表示将与上一行相连;
output = input1 + input2 ! Sum the inputs
output = input1 &
+ input2 ! Sum the inputs
output = input1
& + input2 ! Sum the inputs
- 语句标号(statement label)是Fortran语句的名字,使用它可以在程序的其它部分引用这条语句,除此之外,语句标号没有其它作用。现代Fortran程序中很少使用语句标号,若要使用,必须是唯一的。语句标号可以是1~99999间的任一一个数字。
999 output = input1 + input2 ! Sum the inputs
- Fortran程序分为声明部分、执行部分、终止部分。
- 声明部分:由不可执行语句组成,位于程序的开头,定义程序名和程序引用的数据以及变量的类型。其第一条语句是PROGRAM语句,对编译器指定程序的名字,可以是字母、数字和下划线,但第一个字符必须是字母。
- 终止部分:其由STOP和END PROGRAM语句组成。STOP语句告诉计算机停止运行,它可以出现在程序的任何地方,程序执行到这个命令就会中止。除非必要,不要把STOP命令使用在主程序结束之外的其他地方。因为一个程序如果有太多的终止点会容易出错。前面提到过STOP这个命令在此并不是必要的,因为主程序的程序代码执行完毕后,程序会自动终止。本程序加上STOP命令只是为了更明确表示程序到此结束而己。END PROGRAM语句告诉编译器不再编译。END是用来封装程序代码使用的,说明程序代码已经编写完毕。 FORTRAN90标准中,可以使用下列的3种方法来表示程序代码编写结束:
END !FORTRAN77只使用该方法
END PROGRAM
END PROGRAM main !main指的是PROGRAM的名字
-
保留字要全部大写,变量名、过程名小写。
常数与变量
- 整型数据(INTEGER):仅可以存储整型数据值,不能表示数据的小数部分。
- 实型数据(REAL):由存储的实数和小数组成。
- 复数(COMPLEX):以a+bi形式表示的数值。
- 字符数据(CHARACTER):字符类型由字母字符串组成,一个字符常数是单引号‘’或双引号“”括住的字符串。字符串最少的字符个数是1。引号间的字符叫字符文本(character context)。
- 逻辑判断(LOGICAL):只能保存“是TRUE”,“否FALSE”。1表示TRUE,0表示FALSE。
基本命令
- WRITE:命令的作用是显示后面双引号中所包含的字符串。而
WRITE(*,*)
括号中的两个星号都有各自的意义,第一个星号代表输出的位置使用默认值,也就是屏幕;第二个星号则代表不特别设置输出格式。总归一句话,WRITE这个命令的最简单用法,就是在括号中挂上两个星号,再把所要输出的字符串用两个双引号引起来放在后面,例如:WRITE(*,*) "Hello World"
上面的命令执行后会显示:"Hello World"这几个字。上面的写法是使用简写的方法所显示的描述,完整的写法应该像下面这样:WRITE(UNIT=*,FMT=*) "Hello World"
这种写法的程序执行结果不变,在 WRITE中加上了UNIT=*,FMT=*
这两个描述,只是为了明确地表示输出位置使用默认值以及不限定输出格式。通常在程序中都会使用简写的方法,事实上,使用WRITE在屏幕上印字符串时,最严谨的方法应该像下面这样:WRITE(UNIT=6,FMT=*) "Hello World"
因为屏幕的输出UNIT位置就是6,而UNIT=*
时,就是指UNIT=6
。关于WRITE还有两点要注意:(1)每一次执行 WRITE命令后,会自动换到下一行来准备做下一次的输出(2)因为双引号是用来“输出”字符串的,所以想要输出双引号时,要连用两个双引号。 - PRINT:PRINT用法与功能与WRITE大致相同,只是PRINT无括号,且只有一个星号,这一个星号定义的是输出格式,PRINT命令只作用于屏幕。
PRINT *, "Hello World"
- 声明:当一个计算机程序需要调用内存空间时,对内存发出的“占位”指令。
- 关于字符串的一些操作
CHARACTER(LEN=14) h,i
CHARACTER(LEN=28) j
h = "Good morning "
i = "and good night"
WRITE(UNIT=6,FMT=*) h
h(6:12) = "evening" !修改字符串第6到12的字符为引号里面的内容
WRITE(UNIT=6,FMT=*) h
h(12:12) = "@" !修改字符串中第13个字符为#
WRITE(UNIT=6,FMT=*) h
j = h//i !连续两个除号将前后两个字符串相连
WRITE(UNIT=6,FMT=*) j
program ex0413
character(len=20) string
string = "Good morning."
write(*,*) string
string(6:) = "evening." ! 重设设定从第6个字符之后的字符串
write(*,*) string
end
program ex0415
character(len=20) string
character(len=5) substring
string = "Have a nice day."
substring = "nice"
write(*,*) ichar('A') ! 输出字符A的ASCII码
write(*,*) char(65) ! 输出ASCII码65所代表的字符,也就是A
write(*,*) len(string) ! 输出字符串string声明时的长度
write(*,*) len_trim(string) ! 输出字符串string内容的长度
write(*,*) index(string, substring) ! nice在Have a nice day的第8个位置
end
一些 Fortran 中有关字符串运行的函数 :
语法 | 描述 |
---|---|
CHAR(num) | 返回计算机所使用的字符表上, 数值 num 所代表的字符.(个人计算机使用 ASC II 宇符表 ) |
ICHAR(char) | 返回所给入的 char 字符 在计算机所使用的 字符表中所代表的 编号,返回值是整数类型 |
LEN(string) | 返回枪入字符串的声明长度,返回值是整数类型 |
LEN_TRIM(string) | 返回字符串去除尾烙空格后的实际内容长度 |
INDEX(string,key) | 所输入的 STRING 和 KEY 都是字符串。这个函数会返回KEY这个“子字符串”在“母字符串" STRING 中第一次出现的位置 |
TRIM(string) | 返回把string字符串尾端多余空格清除过后的字符串 |
- 逻辑变量LOGICAL
program ex0416
logical a,b
a=.true. !设忤为“真”值,注意true的前后荌加上两个点
b=.false. !设置为“假”值,注意false的前后要加上两个点
write(*,*) a,b
end
- CYCLE命令跳过当前循环,进行下一次循环
- EXIT命令跳出循环,不再执行循环