1-声明 输出 输入 变量

本章内容:

对fortran程序的一般结构,输入,输出方式,以及变量的格式进行了介绍。

前言:

(1)fortran不区分大小写

(2)fortran不区分单引号和双引号,但有时候需要转义

(3)fortran的三角函数使用的单位是弧度不是角度

(4)两个**表示^,幂运算

一、fortran格式:

program main        !fortran语言以program作为做程序开头,main是程序名,随便取
implicit none       !表示变量必须声明,防止疏忽
...                 !主程序代码
end program main    !主程序结束,用来封装这一段代码

二、声明

2.1基本信息

位置: 一般紧接着 program name 下面 ,必须在执行程序之前

含义: 在后面的程序中提到变量或者数组的时候,需要“声明一下”,我要提前占用一定的空间储存这些变量或者数组。

格式:

类型(属性),形容词,形容词...::变量名   

类型: 代表后面变量名的格式,有integer(整数型),real(浮点型),complex(复数型),character(字符串型),logical(布尔变量)

属性: 根据类型的不同,可选的属性也不同(可看后面详细类型介绍)。

形容词: 形容变量是什么,有parameter表示常量等。

变量名: 自订

2.2属性详细介绍:

2.2.1整型

含义: 整数

例子:

integer::A                        !最简单的声明整型变量
integer(kind=4),parameter::A=10   !kind=4表示采用4byte的内存储存这个变量,可取1,2,4,8(有的编译器可能是1,2,3,4)
                                  !默认(kind=4),此时可省略。一般来说A的位数越多,kind则需越多。一般kind=4足够
                                  !parameter是形容词,代表常量,也就是说必须给A赋值,而且A在后面程序中无法更改。
                                  !双冒号不建议省略
                                  !将10赋值于A,在声明中赋值是可行的也比较常见,后面将介绍更多赋值方式

ps: 两个整型进行计算,那么结果还是整型。比如3/2=1,舍了余数。其中一个换成浮点型即可破解

2.2.2浮点型

含义: 小数

例子:

real::A
real(kind=4)::A=3     !kind=4代表单精度,有效位数6-7位,kind=8是双精度,有效位数15位
                    !对于超过位数的话,应选择指数表示,比如2.5E23,或者2.5D23。E表示单精度,D表示双精度

ps: 对于声明了是浮点型的变量,其与整数或者整型计算得到的结果都是浮点型(可自行对比)

2.2.3复数型

含义: 复数

例子:

complex::a
complex(kind=8)::a=(1,2)         !kind与浮点型一致,因为实部和虚部都是两个浮点型的数。
                                 !a=(1,2)表示1+2i

2.2.4字符串

含义: 数字,字母,符号的组合

例子:

character(len=20)::a         !属性len=20,表示这个字符串长20个长度
                             !需要把长度带上,如果不确定就写一个比较大的值
a='hello world'              !给变量a赋予一串字符。别忘了加引号
a(2:2)='o'                     !结果变为'hollo world',可以用变量后加括号的方法改变对应位置的字符

ps: 介绍几个跟字符串相关的函数

char(num):求出ASCII码值=num的对应的字符

ichar('A'):求出字符'A'对应的ASCII码值

len(string):求出字符串的长度

len_trim(string):求出消除尾部空格后字符串的长度

2.2.5布尔变量

含义: 又名逻辑变量。只有两种结果。TRUE(T),FALSE(F)

例子:

logical::a                !因为只有两种结果,通常不设置属性,也就是占用空间的大小
a=.truec                  !设置为“真”,这是设置变量的方法。

2.2.6不同类型之间的运算

可以在执行的过程中作转换

integer::a=1,b=2
real::c
c=real(a)/real(b)     !这样得到的结果才是0.5

三、输出函数

3.1write

write(*,*) content  !这个函数代表写出后面content的内容,如果content是字符,要加引号,如果是变量或者表达式则不用

结构分析:

第一个星号代表默认的输出位置,通常是默认屏幕(unit=6),一般不用更改。

第二个星号代表不限定输出格式,在很多情况需要替换。

例子:

write(*,*)'I love u'
write(*,*)a*b+3           
wreite(*,*)10,10

3.2print

print *,content   !这个函数和write的效果一样,content与write的要求一样

结构分析: 少了一个星号,代表输出位置无法更改,默认屏幕

这个星号对应 write 的第二个星号是一样的,代表不限定输出格式

3.3对比

一般用write

四、输入函数

read(*,*)a    !和write基本一样。只不过第一个星号的默认输入设备是unit=5(键盘)。
                !a表示从键盘输入的值,通常是变量

4.1设置输入输出格式

前面讲到第二星号表示要设置输入输出的格式。

在write中就是无论变量之前是什么格式,只要设定了,那么他的输出只能按照这个格式。

在read中就是输入的时候只能按照这个格式输入,否则会报错

详细的格式见下表

例子:

write(*,'(1x,F5.2)') a      !这个逗号只是阅读方便,可以删去
write(*,'(I3,I3)')10,10     !把其中的逗号换成/表示换行输出
write(*,'(3(1XF5.2))')a,b,c !表示a,b,c三个的格式都相同,前面3表示3倍   
read(*,'(I2)')a           

五、自定义数据类型

含义: 将许多变量归为一类,比如体重,身高,年龄皆可归为到人中

例子:

type::person
character(len=30)::name