算术运算符用于对数值进行基本数学计算,本文在狭义上讲四则运算符(加减乘除)与乘方(幂运算符)。此外fortran还提供许多数值计算相关的内置函数,如sqrt()、abs()、mod()、modulo() 等。
运算符
| 符号 | 意义 | fortran语句示例 | 输出 |
| + | 加法运算符 | print *,4+2 | 6 |
| – | 减法运算符 | print *,4-2 | 2 |
| * | 乘法运算符 | print *,4*2 | 8 |
| / | 除法运算符 | print *,4/2 | 2 |
| ** | 乘方运算符 | print *,4**2 | 16 |
本文我举例一元二次方程求解的计算,在此之前重申一些基础概念,便于在fortran编程中对应逻辑。
- 一元二次方程是等式方程,只有1个未知项,未知项最高次数为2。
- 一般形式为,满足1个未知项也满足未知项最高次数为2。
- 判别式为
- 若,该方程有两个不等的实数根。
- 若,该方程有两个相等的实数根。
- 若,该方程有一对共轭复数根。
- 本文演示实数解过程,其中判别式且,感兴趣的还可写韦达定理语句验算。
- 文中使用了sqrt(),不作详细介绍。
本文代码
! 公式:ax^2+bx+c=0,根为x=(-b±sqrt(b^2-4ac))/(2a)。
! 代码:用+ - * / **写出判别式和两个根。
program arithmeticOperatorsDemo
implicit none
real :: a
real :: b
real :: c
real :: discriminant
real :: root1
real :: root2
print "(A)","算术运算符与幂运算符:"
print "(A)","公式:ax^2+bx+c=0,x=(-b±sqrt(b^2-4ac))/(2a)"
print "(A)","请输入a、b、c,三个数之间用空格分隔:"
read *,a,b,c
discriminant=b**2-4.0*a*c
root1=(-b+sqrt(discriminant))/(2.0*a)
root2=(-b-sqrt(discriminant))/(2.0*a)
print "(A,F8.4)","a=",a
print "(A,F8.4)","b=",b
print "(A,F8.4)","c=",c
print "(A,F8.4)","判别式=",discriminant
print "(A,F8.4)","root1=",root1
print "(A,F8.4)","root2=",root2
end program arithmeticOperatorsDemo
定义
| 变量 | 意义(全都是实数类型) |
| a | 二次项系数 |
| b | 一次项系数 |
| c | 常数项 |
| discriminant | 判别式 |
| root1 | 解1 |
| root2 | 解2 |
关键表达式
discriminant=b**2-4.0*a*c ! b^2-4ac的判别式,其中**是幂运算,*是乘法,-是减法。最终输出为实数,通过瞪眼法判断判别式>0 =0 <0
root1=(-b+sqrt(discriminant))/(2.0*a) ! 按公式计算x_1
root2=(-b-sqrt(discriminant))/(2.0*a) ! 按公式计算x_2
编译运行
(base) hong@hongdeMacBook-Pro 016.arithmeticOperators % gfortran exampleArithmeticOperators.f90
(base) hong@hongdeMacBook-Pro 016.arithmeticOperators % ./a.out
算术运算符与幂运算符:
公式:ax^2+bx+c=0,x=(-b±sqrt(b^2-4ac))/(2a)
请输入a、b、c,三个数之间用空格分隔:
2 8 8
a= 2.0000
b= 8.0000
c= 8.0000
判别式= 0.0000
root1= -2.0000
root2= -2.0000
(base) hong@hongdeMacBook-Pro 016.arithmeticOperators % ./a.out
算术运算符与幂运算符:
公式:ax^2+bx+c=0,x=(-b±sqrt(b^2-4ac))/(2a)
请输入a、b、c,三个数之间用空格分隔:
1 5 4
a= 1.0000
b= 5.0000
c= 4.0000
判别式= 9.0000
root1= -1.0000
root2= -4.0000
(base) hong@hongdeMacBook-Pro 016.arithmeticOperators %
结果分析
关于前文《015.basicInputAndOutput_基础输入输出》讲到的输入合法判断,在本例中非常适合用作对判别式的判断,但为了兼顾知识密度暂且按下不表。
- 第一次运行
- 输入2,8,8代表a,b,c。
- 判别式=0,表示有两个相等的实数根。
- 正确
- 第二次运行
- 输入1,5,4
- 判别式=9>0,表示有两个不等的实数根。
- 正确