Fortan的一些笔记...
牛蛙牛蛙
Foratan大致分为3个语句: 结构语句,声明语句,执行语句
例: subroutine Fcode_Test (a,x)
use mymoule -------------这里应该是调用一个模块吧
Implict None ------------这里是用于取消IN规则,在程序最开始就定义完成变量类型,虽然有点麻烦----------毕竟Fortan也算是强变量类型语言。
Real , araameter :: PI =3.1415 -------------这里就是声明语句
Real , Intent(IN) :: a
Real , Intent(OUT) :: x
Integer :: v = 2 , N = 30 , i
x = 0.0 //-------
Do i = 1 , n
x = x+1
End DO //--------- 到这里应该是执行语句
End subroutine Fcode_Test -------------------表明结束这个语句 类似于C语言中子函数
变量类型
interge(整型) integer(kind=??) ::
character(字符型) character(kind=??,len=??) ::
type(派生) type(??) ::
real(实型/浮点型) Real(kind=??) ::
complex(复数型) complex(kind=??) ::
logical(布尔型) logical(kind=??) ::
当然是整型变量用的最多
对整数(int)来说,kind会影响表达的最大范围 -------------------------- 对于大多数编译器来说,kind默认为4
字符型变量kind一般为1
数据除了类型之外,还有一定的属性,通常属性用类型之后的形容词进行表示。
变脸声明的步骤:
类型(属性),形容词,形容词,....... :: 变量名(数组外形) = 赋值,变量名(数组外形)= 赋值。 -------------------------这里的形容词可以有多个或者一个,双冒号表示形容词的结束,在一个变量声明完成后,可以使用逗号隔开,对第二个变量进行声明。
一些例子:
Real(kind=8) , parameter , private :: Var = 20.0 -------------这里就是一个对实型变量Var的赋值,且初值赋值为20
字符串于整数之间相互转换 read(字符串*) 字符串变为数字 write(字符串*) 数字变成字符串
字符允许使用子字符串表示字符串的一部分
例子 character(kind=1,len=12) :: c = "www.?????.com"
有 c (5:9) = “xiaohai” 则此时C变成www.xiaohai.com
c(:3) 表示前3位
c(10:) 表示从第十个开始
语法中,也有很多内容本身就是字符串,可以实现文件的批量处理
例:Integer :: i //这里表明了定义一个整数的变量I
Character(kind=1,len=12) :: cfile //这里表明了是一个12长度的字符串是cfile 字符串默认kind值是1
Do i = 1 , 10 //这里表明是i从1到10 的一个循环 类似于C语言中的for循环
write(cfile, *) i //write(_ ,*)A 表示把A的变量写入_中
Open(10+i , File = trim(cfile)//".txt" ) //这个trim表示换行 因为I是一个由0到10的数 由于10之前的数字计算机本身可能会占用,所以这里一般是从11开始,这条语句实现了从 1.txt,2.txt 到10.txt 文件的打开
End do //结束循环 没啥好说的
Fortan的一些流程控制 --------------------- 主要介绍IF ,DO, 及 Select选择
1,条件判断---IF语句
常见的IF判断语句------------- IF(Expression) Then 还有一种较为常见 IF(Expression)
......... .............
...........
END IF
两者区别就是前者内部可以包含多条执行语句,后者只能执行一条语句 灵活运用
2,稍微复杂一点的IF判断则有 //类似于C语言的if else if ....else 相比于if else 执行效率更快 没什么好说的
IF(CconditionA) THEN
.....
ELSE IF(ConditionB) THEN
....
ELSE IF (ConditionC) THEN
......
ELSE //逻辑较为复杂时,要写ELSE 防止程序的跳出以及考虑的不周到情况的出现
.......
END IF //注意定义函数的部分只能有一个 IF END IF 标志着开始与结束
3,值得注意的是,IF结构中的逻辑表达式必须是一个单值,如果是数组的判断,则需要去使用all(),any(),的逻辑变换
4,Fortan中的IF判断的署名
直接看例子吧: -------------------------------我起了,一枪秒了,有什么好说的啊
inner : IF(ConditionA) THEN 当然还有另一种署名方式 inner :IF(ConditionA) THEN 这种用的比价少,还是推荐前面的,只在开始和结尾加上署名即可
........ ........
ELSE IF(ConditionB) THEN ELSE IF(ConditionB) THEN inner
....... .......
ELSE IF(ConditionC) THEN ELSE inner
...... .......
ELSE END IF inner
.......
END IF inner //这样就完成了IF语句的署名,个人建议还是在较长的IF判断语句中属名,方便调用以及二次开发人员的可读性
SELECT CASE语法这里不做过多介绍
Fortan中的循环
最常见的的循环就是DO , //类似于C语言中的FOR循环
DO循环例子:
DO i = 1, 100 //这里表明i从1开始,一直到100结束 完成循环 就相当于一个子函数
........
END DO
DO循环实例 :
sum=0
DO i = 1 , 100 , 2 //这里完成了sum由0到1,3,5即计算了所有奇数的和,默认值是1,也可以自己指定,这里指定为2
sum = sum +i
END DO
另一种常见循环为 DO WHILE 满足条件则一直在循环中不会跳出
Fortan中含有循环控制语句,其中, CYCLE则不执行CYCLE之后的语句,直接开始下一次循环。EXIT则是不执行EXIT后的语句,而跳出本循环函数 --------------------具体函数具体分析吧
GOTO语句一般不使用,太容易出错了 同C
数组和结构体----------------------麻了
再定义一个数据时,可以使用枚举。即在定义类型后,形容词:: 变量即可。 例 : INTEGER :: I = 1
数组也是一种定义类型,程序中一般和循环语句配套使用
结构体中的数据据类型可以不同,整型,浮点型等等
数组
数组可分为2类,一种是固定大小数组,一种是动态分配数组。
数组的定义: 类型,大小,属性,::名字
数组定义具体例子 : INTEGER , DIMENSION(100) :: IARR ---------------------- 表明了是一个整型,大小为100的数组,且数组名字为IARR
数组的使用: 整体,元素,片段,不连续段
ARR = 1 ----------------- 表明将数组全部元素变成1
ARR(1)=-1 ------------表明将数组第一个元素变成1
ARR(2:4)=1 -------------表明数组第二,3,4个元素变成1