fortran 学习笔记

20180907运行 CRTL+F5

编译器: 一般编译器本身都是控制台程序(console),没有界面。 命令行

IDE : 集成开发环境,用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。如Microsoft Visual Studio和Code::Blocks等

编辑器 : UEStudio 

 

Intel Visual Fortran 配合 Visual Studio

GFortran 配合Code::Blocks

固定格式:.f .for .fpp          语言版本:f66 f77

自由格式:.f90 .f95 .f2k      语言版本: f90, f95,f2003,f2018,f2015

 

开发环境:计算机、操作系统、编译器

安装的时候,vs仅需 C++ 组件,ivf仅需安装编译器并集成于vs

先装VS,然后ivf

  ivf安装目录下会带有帮助文档。 .chm

默认下是单精度的。

图中 1.6 表示单精度数据,1.6d0 是双精度数据。 单精度有误差,尽量可以用到双精度。

implicit real*8(a-z) 说明 从从a到z开头的变量都是浮点数。

implicit none 关闭默认类型功能,所有变量都事先声明。

默认情况下,第一个字母为I,J,K,L,M,N的变量会视为整数类型,其他的变量则会被当成浮点数来使用。

ivf帮助文档中,所有绿色字体标注的内容均为非标准用法

Fortran数据类型

类型

character

logical

integer

real

complex

 

kind

(单个数据占用内存字节数)

1

1

1

 

 

 

 

2

2

 

 

 

 

4

4

4

4

complex*8

 

8

8

8

8

complex*16

 

 

 

16

16

complex*32

ivf中dollar($)也可用于标识符中,且可以为首字符;$开头的变量一般为系统变量。

readwrite语句至少包含两个参数,即通道号(unit)和格式(fmt):

20180908

运行项目

第一步,打开调试环境(按装后在开始中会有):
第二步,如果没有project 的话,新建一个project;
第三步,将已有的fortran文件放到project里
第四步,built(就是编译);
第五步,执行程序即可(运行编译后程序)。

build菜单下,编译(compile)、连接(build)
debug菜单下,run或start debugging就是运行

编译 -> 链接 -> 执行

LAPACK — Linear Algebra PACKage

2. F10 

    F11

 

 

 

3.  mod 

    allocatetable

    size

    init 最接近的整数

20180908

赋初值的问题

主程序和子程序里面的变量都需要定义么?

(1)        REAL :: A(N,N)=(/ 6.0,2.0,1.0,-1.0,2.0,4.0,1.0,0.0,1.0,1.0,4.0,
                                            ! -1.0,-1.0,0.0,-1.0,3.0/)

(2)             real :: A(M,N)

                 DATA A /1.0 2.0 3.0 4.0/ 

主程序开始:program 程序名
主程序结束:end

子程序开始:subroutine 程序名()
子程序结束:end
注:子程序可置于主程序之前或之后,一般置后
例:subroutine xuanzhuyuanfa(a,b,n)
    end
注:a,b,n的值由主程序中导入而来

外部函数开始:function 函数名()
外部函数结束:end function
注:外部函数可置于主程序之前或之后,一般置后
例: function y(x)
    real*8 y,x
    y=x**2
    end function y
注:x的值由主程序中导入而来

输入输出格式: format
例:format(5f5.2)   前面的5表示一行输出5个数字,f表示输出结果类型为实型,5.2表示输出的数字长度(包括小数点)为5位,小数点后2位
    format('a=',x)  如果输入的x的值为3.0,则输出结果为:a=3.0
    format(1x,i2,2x) 表示首先输出一个空格,再输出一个长度为2的整型数字,最后再输出两个空格

implicit none 取消定义变量时的隐式声明规则。该规则为:在程序中,凡是变量名以字母
I,J,K,L,M,N,i,j,k,l,m,n开头的变量被默认为整型变量,以其他字母开头的变量被默认为
实型变量。

parameter(变量=表达式) 例:parameter(pi=3.1415) 表示在程序中的所有pi的值都为3.1415


输入语句:read*,变量名    从键盘输入数据给该变量
          read k,变量名    以k所限定的格式从键盘输入数据给该变量,k为任意数字  例:
                 read 10, a
                 10 format(f10.6)  表示以10所限定的格式输入数据到a中
          read(*,*),变量名
           例  open (1,file='wenjian.txt')
                read(1,10),a
                10 format(f10.6)  表示将wenjian.txt中的内容以10所限定的格式输入给a
      

输出语句:print*,变量名    输出该变量中的内容
          print k,变量名    以k所限定的格式输出该变量中的内容,k为任意数字  例:
                print 20, a
                20 format(f5.3)  表示将a以20所限定的格式输出
             
          write(*,*),变量名   格式输出,
           例1  open (1,file='out.txt')
                write(1,10),a
                10 format(f10.6)  表示将a以10所限定的格式输出到名为out的文本文件中

           例2  write(*,*),a    表示输出a到界面上,没有格式限制  


常用变量的定义:

整型变量:integer(或integer*4,或integer(4))  常用
          integer*1(或integer(1)),integer*2(或integer(2)),integer*8(或integer(8))
          例: integer i,j,k    定义整型变量i,j,k
 
实型变量:real(或real*4,或real(4)) 单精度,有效位数7位
          real*8(或real(8))  双精度,有效位数15位  常用
          例: real*8 a,b,x(n),c(n,n)   定义双精度的实型变量a,b及一维数组x(n),二维数组c(n,n)
         

复型变量:complex(或complex*4,或complex(4))  单精度
          comple*8(或complex(8))   双精度   常用

字符型变量:character*k(或character(k),或character(len=k))   k表示字符串的长度
            character   定义长度为一的字符型变量

逻辑型变量:logical*4(或logical(4))  常用
            logical*1(或logical(1))
            logical*2(或logical(2))
            logical*8(或logical(8))

 

常用函数:
abs(x)  求x的绝对值
mod(x,y) 求x/y的余数
max(x1,x2,x3,...) 求x1,x2,x3,...中的最大值
min(x1,x2,x3,...) 求x1,x2,x3,...中的最小值
exp(x) 求e指数
sqrt(x) 求x的平方根,结果类型同x,x为实数
log(x) 求自然对数,结果类型同x,x为实数
log10(x) 求以10为底对数,x为实数,结果类型同x
sin(x),cos(x),tan(x) 求x的正弦,余弦,正切,x取值弧度,结果类型同x
sind(x),cosd(x),tand(x),cotan(x) 求x的正弦,余弦,正切,余切,x取值度,结果类型同x
sinh(x),cosh(x),tanh(x) 求x的双曲正弦,双曲余弦,双曲正切,结果类型同x
precision(x) 查询x的有效数字位数
len(s) 求字符串s的长度
len_trim(s) 求字符串s去掉尾部空格后的字符数

 

选择语句:
  if (条件) then
    语句
  else
    语句
  end if

  if (条件) then
    语句
  else if (条件) then
    语句
  else if (条件) then
    语句
      .
      .
      .
  else
    语句
  end if


循环语句:
  do 循环变量
    语句
  end do  

强制性终止循环过程的语句:
  exit  退出整个循环,转循环语句后的第一条语句执行,只能在do和do while循环语句内使用
  cycle 终止本次循环,回到循环语句开始(do语句)继续执行

逻辑运算符的优先级:(高-低) .not.--.and.--.or.--.xor.--.eqv.--.neqv.

 

完整的程序举例: 将区间(0,1)等分100个节点(99段),计算每个节点的值存入数组x(n)中,然后根据y=5x的法则,计算与每个节点相应的y的值存入数组y(n)中

          program main      !main为程序名
          implicit none     !取消定义变量时的隐式声明规则
          integer i,j,k,m,n   !定义整型变量i,j,k,m,n
          parameter(n=100)    !给n赋值,以下程序中出现的n的值为100
          real*8  a,b,h,x(n),f   !定义实型变量a,b,h及数组x(n),y(n)及外部函数 f
          a=0.d0            !给a赋值
          b=1.d0            !给b赋值
          h=(b-a)/(n-1)     !根据a,b的值计算h
          x(1)=a;x(n)=b     !将a,b的值分别赋给x(1),x(n)     
          do i=2,n-1
            x(i)=x(1)+(i-1)*h  !计算数组x(n)中除两端点之外的其它点的值
          end do
          do i=1,n
            y(i)=f(x(i))    ! 对应给定的一个坐标x(i),调外部函数f,计算出与该坐标相应的y(i)的值
          end do
          open(1,file='shuchu.txt')         !新建一个名为shuchu的文本文档
          do i=1,n
            write(1,10) y(i)                 !将y的值以10所规定的格式输出到名为shuchu的文本文档中
          end do
          10 format(1f10.6)                  !一行输出一个值,每个数值的总长度为10位,小数点后为6位
          close(1)               !关闭文本文档shuchu              
          end

          function f(x)   !定义外部函数y,x由主程序中导入
          implicit none
          real*8 f,x
          f=5.d0*x        !函数y=5x
          end function f

5 prop(16,1) 

   16个量的一维数组。    props(1 2 3 4)

   两个子程序传递 prop,第一子程序比如是call abc(a,props(3))

subroutine(a,prop)

prop(1)=3 prop(2)=4

6. 彭国伦到第9章了。

20180911

最常用编辑符A, I, F, G, X

(f8.4)  8-4要大于整数部分 

real

Ew.d

Dw.d

指数形式,整数部分等于0

0.123E+03

0.123D+03

ESw.d

科学计数法,整数部分只有1

1.230E+02

ENw.d

工程计数法,首先满足整数部分取值1-999.

123.000E+00

 

编辑符

描述

nX

文件指针向右移动n个字符,等同TR

[r]/

换行符,执行r次换行

\, $

续行符,仅用于输出,ivf扩展语法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值