运算符
本节主要介绍Fortran中的运算符
数(整型,浮点型,复数型)
数的四则运算,幂次
三种数类型有除了有+-*/四则运算之外,还有**幂运算,其规则和数学上的算数运算相似,运算的优先级为**最高,*/次之,+-最低,如果为混合算式,将遵循从左到右的运算顺序。
举例
program main
   implicit none
   real,parameter::pi=3.14159
   real::r,area,circumference
   r=2.0
   area=pi*r**2          !计算圆的面积
   circumference=2*pi*r  !计算圆的周长
   write(*,*)"area=",area
   write(*,*)"circumference=",circumference
end program main
$ fpm run
Project is up to date
 area=   12.5663605
 circumference=   12.5663605
- 特别的,**是从右往左的运算顺序,例如2**3**3=2**(3**3)=2**27
- 如果对运算的顺序没有把握,则多加小括号来保证运算顺序
- 整数的除法计算的是商,即3/2=1而非1.5
数的比较
数的比较运算会返回一个逻辑类型,Fortran支持> < == >= <= /=的比较操作,其中==表示相等,/=表示不相等,一些语言使用!=来表示。
举例
program main
   implicit none
   write(*,*)1>2,2>=2,3==4,4/=3
   write(*,*)2.0>3.0
end program main
$ fpm run
Project is up to date
 F T F T
 F
- 由于浮点数的精度问题,一般不建议用浮点数进行相等比较。比如判断x是否等于0,
一般采用abs(x)<eps,其中abs(x)是一个函数,它可以取一个数的绝对值,eps是自己定义的一个变量,用于给定精度。
- 复数不能用来比较
逻辑类型
逻辑类型之间也有自己的运算,分别为与.and. 或 .or. 非 .not. 异或.neqv. 同或 .eqv.,运算之后返回一个逻辑类型。
| 逻辑值A | 逻辑值B | .and. | .or. | .neqv. | .eqv. | 
|---|---|---|---|---|---|
| .true. | .true. | .true. | .true. | .false. | .true. | 
| .true. | .false. | .false. | .true. | .true. | .false. | 
| .false. | .true. | .false. | .true. | .true. | .false. | 
| .false. | .false. | .false. | .false. | .false. | .true. | 
举例
program main
   implicit none
   real::x
   x=1.0
   write(*,*) x>0 .and. x<2
   write(*,*) x<0 .or.  x>1
end program main
$ fpm run
Project is up to date
 T
 F
- 可以自己加小括号来保证运算顺序
字符串
字符串的拼接
字符串的运算基本运算只有字符串的拼接//
举例
program main
   implicit none
   write(*,*)"hello "//"world!" 
end program main
$ fpm run
Project is up to date
 hello world!
字符串还有一些操作是通过内置函数来完成的,我们在函数的章节里再讨论
字符串的比较
字符串也有一系列的比较运算符,按照ascii码来进行比较,特别的
- Fortran字符串中的尾部空格不会计入比较,即"abc"=="abc ",两者是相等的
一些内置函数
由于Fortran中有一部分内置功能是通过函数来实现的,所以我们在此处先介绍一些用于数值的内部函数。后面的章节中我们会具体介绍函数。
在数值运算中,输入一些值,返回一个值被称为函数。
- 三角函数和反三角函数
- 弧度三角函数 :sin(x),cos(x),tan(x),asin(x),acos(x),atan(x),atan2(y,x)
- 角度三角函数(Fortran 2023):sind(x),cosd(x),tand(x),asind(x),acosd(x),atand(x),atan2d(y,x)
 
- 弧度三角函数 :
- 常用数学函数
exp(x),log(x),log10(x),min(x,y,....),max(x,y,....),mod(x,n),其中mod表示关于n取模。
- 特殊函数
- bessel函数 :bessel_j0(x),bessel_j1(x),bessel_jn(x),bessel_y0(x),bessel_y1(x),bessel_yn(x)
- 误差函数: erf(x),erfc(x),gamma(x),log_gamma(x)
 
- bessel函数 :
- 转换函数
- 整数转换函数:int(n),nint(n)
- 浮点转换函数:real(x),aint(n),anint(x)
- 复数转换函数:cmplx(x,y,kind)
 
- 整数转换函数:
- 字符串函数
- 去除字符串空格:trim(s)
- 字符串长度:len(s),len_trim(s)
- 字符串查找函数: index(str,sub)
 
- 去除字符串空格:
更多详细的介绍和示例可以在fortran-lang 内置函数中查看
练习
- 根据三角形的边长a,b,c,利用海伦公式计算三角形的面积
- 使用内置函数,计算3个数的最大值
- 使用内置函数,计算3个数的中间值