fortran入门学习笔记

文章参考:
【1】《fortran 95 程序设计》-彭国伦
【2】https://www.bilibili.com/video/BV1oe4y1E7VL/?p=42&spm_id_from=333.880.my_history.page.click
【3】https://www.bilibili.com/video/BV1Lv41117Lz/?spm_id_from=autoNext&vd_source=66b0773d043c6771a39076e23ddfb6af

一、书面格式

在这里插入图片描述

二、一些注意的点(区别于其他语言)

  • 每行末尾不需要加分号

  • 输出:

    write(*,*)a        ! 括号里面是*号   
    
  • 写完程序后最后一行要写end,对所写程序进行封装

  • 在program的下一行加上以下内容以取消它的默认设置(会把IJKLMN开头的字符串设置成整型)

    implicit none
    
  • 常量声明

    real,**parameter**::pi=3.1415926
    
  • 等价声明

    equivalence(a,b)  !两个变量使用同一块内存空间,改变a的同时也会改变b
    
  • 声明的位置:使用Fortran时所有变量都需要先声明后使用,意思是所有变量的声明都需要统一放在操作之前,这和一般的语言使用方式是有差别的。

    type::person   !自定义数据类型  
    
    a%name="zhangsan"      !变量a的值会逐个访问name这个字符串,并给它赋值
    

三、选择判断语句

  • if 语句

    if(判断条件1) then
    执行命令语句1
    else if(判断语句2) **then**
    执行命令语句2
    ... 执行完所有命令后要对这个条件判断语句的程序进行封装
    end if
    
  • 逻辑预算符 不等于 /=

  • 要表示一个变量大于1小于3时

    if(x>1**.and.**x<3)
    
  • do循环

    do counter=1,lines,1      (计数器,名称可以自己命名,表示初始值为1,循环lines次,后面的1可以省略,默认执行一次循环就在计数器加1)  
    ...... 
    end do
    
  • do while循环

      do while(逻辑运算) 
      ....... 
      end do
    
  • cycle命令可以跳出本次循环,进行下一次的循环,相当于C里面的continue

  • exit命令可以跳出本层循环,意思是所在位置的循环全部终止,但不会影响外层的循环,相当于C里面的break

四、数组

4_1、一维数组

数据类型 数组名(数组大小)

integer arr(10)

4_2、二维数组

数据类型 数组名(size1,size2)

integer arr(2,3)

4_3、数组索引

由于Fortran中数组的索引值都是从1开始,但是可以经过特别声明的方法来改变这个默认的规则,在声明时,可以特别赋值数组的坐标值使用范围,例如:integer a(0:5) 可以将数组的索引值设置为从0到5。

4_4、数组的初始化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4_5、数组的存储规则

在这里插入图片描述

4_6、数组的操作

在这里插入图片描述

在这里插入图片描述
需要注意第七条,数组b需要满足浮点数的条件

4_7、where命令:判断数组的部分元素

在这里插入图片描述

4_8、forall命令:循环判断使用数组元素

在这里插入图片描述

4_9、大小可变的数组

在这里插入图片描述
注意,用完之后一定要及时释放内存

五、子函数

5_1、子程序

在这里插入图片描述

program example
	implicit none
	integer::a=2,b=3
	call message() !请调用message函数
	call add(a,b) !请调用add子程序
	end
!子程序message
subroutine message()
	implicit none
	write(<em>,</em>) &quot;hello&quot;
	return
end
!子程序add
subroutine add(first,second)
	implicit none
	integer::first,second
	write(<em>,</em>) first+second
	return
end

输出3+2的结果是 5

在这里插入图片描述
在这里插入图片描述
如果是自定义函数,调用的时候就无需使用call命令,且子程序无法返回数值
(其实我暂时没懂这句话的意思)

5_2、自定义函数

在这里插入图片描述
在这里插入图片描述

5_3、子程序的局部变量

COMMON /group1/ inf, e

这表示在公共区 group1 中有变量 infe。无论在主程序还是子程序中给这些变量赋值,它们的值都会保持一致。

现在更推荐使用module来代替,Fortran不分大小写

5_4、函数的只读操作

(中间有两部分比较简单的部分此处省略,因为后面也会提及)
在这里插入图片描述2,3知道即可

<p>program example
    implicit none
    integer,external::func
    integer::f
    integer::a=1
    write(<em>,</em>) a
    call sub(a)
    write(<em>,</em>) a
    f=func(a)
    write(<em>,</em>) a
end program</p>

<p>subroutine sub(num)        !num是形参,值可以随着子程序变化
    integer::num              !会改变a这个实参的值,可以加上integer,intent()in::a来固定a
    num=3
    return
end subroutine</p>

<p>integer function func(num)
    integer::num
    num=7       
    return
end function</p>

输出1 3 7(纵向排列)

注意:一个项目只能有一个主函数,【main函数(C语言),program(Fortran)】

5_5、函数的使用接口

在这里插入图片描述

5_6、不定个数的参数传递

在这里插入图片描述

5_7、函数递归

  1. 改变参数传递位置的方法

在这里插入图片描述

  1. 函数递归

在这里插入图片描述
在这里插入图片描述
fact不能返回,只能当作函数来使用,只能通过ans返回

5_8、内部函数模块(contains和module)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

先输出1 2

在输出5 9
在这里插入图片描述
这种方式不需要函数声明,也不需要函数接口
在这里插入图片描述
在这里插入图片描述

输出的结果不一样,当调用show时会根据输入的实参类型来决定调用哪个子程序
在这里插入图片描述
在这里插入图片描述

当调用进入口entry时,只执行entry后面的子程序,前面的不执行

在Fortran中我们定义一个自定义类型后无法直接使用加减乘除这些操作符,但是我们可以自己定义一个内部函数对自定义类型来进行操作

在这里插入图片描述
在这里插入图片描述

.dot.注意两边的.是不能省略的

六、总结

1.数据类型定义及使用

在这里插入图片描述

2.文件类型

1)主函数

program main
···
end program main

在这里插入图片描述

2)子函数

module constant
···
end module constant

在这里插入图片描述

fortran里面的use相当于python里面的import,用来调用子函数模块

在这里插入图片描述

3.子程序的嵌套使用

在这里插入图片描述
在这里插入图片描述

乘方3**8

除余mod(3,8)

log(3)

exp(8)

注释:在语句前加上!或者C

4.选择判断和循环语句

在这里插入图片描述

5.打开文本

用完后得关闭文本,把这个文本取一个代称3

打印用print *,

输出用write(3,*) a指的是把3这个文件输出到l_list这个新的文件里
在这里插入图片描述

6.转换文件数据类型

在这里插入图片描述

7.运行Fortran需要的命令

使用Fortran之前需要compile,下面是相应的运行命令
在这里插入图片描述
FC:运行Fortran。电脑安装的是iFortran就写成ifort,安装的是gFortran就写成gfortran
在这里插入图片描述

要注意前后顺序,constant要写在calculate的前面,这样calculate才能使用constant成功compile之后的数据

example:

在这里插入图片描述
在这里插入图片描述

make clean会把之前complie的数据删掉
在这里插入图片描述
在这里插入图片描述

会print结果,里面存储的res:7.00000

以及call output会出来out.log文件,里面存储的是l_list的数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值