0%

Fortran计算小题目:包含函数子程序定义,Parameter常量类型的定义等知识的运用

Fortran计算小题目:包含函数子程序定义,Parameter常量类型的定义等知识的运用

近期开始学习Fortran语言与程序设计,小有心得,特此分享。本次包含的内容有:

  1. Fortran的默认变量声明取消;
  2. 常量Parameter的类型声明与常量的应用;
  3. 自由格式与固定格式的区别;
  4. 函数子程序的定义与声明;
  5. do循环;
  6. if与Select case语句;
  7. 函数子程序的调用。

本次编程作业采用的编辑器为Visual Studio 2015,编译环境为Intel(R) Visual Fortran。

由于有多个题目要求,故将不同的题目内容分别作为函数定义在独立的文件中,使用项目主函数进行调用。

二、 第一题 圆柱体计算

(一) 题目要求

题目一

(二) 自由格式:函数子程序SV.f90

(1) 源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function SV(b) result(a)
implicit none
real , PARAMETER::PI = 3.1415927
real H,R,S,V
real a,b
H = 0
R = 0
print *,"请输入圆柱体的高 H/m:"
read *,H
print *,"请输入圆柱体的底面半径 R/m:"
read *,R
if(H==0)then
print *,"H数据未输入!"
else if(R==0)then
print *,"R数据未输入!"
else
S = 2.0*PI*(R**2.0)+2.0*PI*R*H
V = PI*R*R*H
print *,"圆柱体表面积为 S=",S,"平方米"
print *,"圆柱体的体积为 V=",V,"立方米"
endif
a = 1
!暂停
pause
END function SV
(2) 主函数调用及运行结果

!定义主函数

1
2
3
4
5
6
7
8
PROGRAM Main
IMPLICIT NONE
real SV,a
real:: b = 10.0
a=SV(b)
pause

END PROGRAM Main
图一 自由格式下的运行结果

在这里插入图片描述
图二 IF语句判断输入的数据合理性
在这里插入图片描述

(三) 固定格式:函数子程序SV.for

(1) 源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function SVou() result(a)	
IMPLICIT NONE
real a
real,PARAMETER::PIa = 3.1415927
real Ha,Ra,Sa,Va
Ha = 0
Ra = 0
print *,"请输入圆柱体的高 H/m:"
read *,Ha
print *,"请输入圆柱体的底面半径 R/m:"
read *,Ra
if(Ha==0)then
print *,"H数据错误!"
else if(Ra==0)then
print *,"R数据错误!"
else
Sa = 2.0*PIa*(Ra**2.0)+2.0*PIa*Ra*Ha
Va = PIa*Ra*Ra*Ha
print *,"圆柱体表面积为 S=",Sa,"平方米"
print *,"圆柱体的体积为 V=",Va,"立方米"
endif

a = 1

!暂停
pause

END
(2) 主函数调用及运行结果
1
2
3
4
5
6
7
8
9
10
11
!定义主函数
PROGRAM Main
IMPLICIT NONE
!第一题
real SV,a
real:: b = 10.0
!第一题
real SVou
a = SVou()
pause
END PROGRAM Main
图三 固定格式调用结果

在这里插入图片描述

三、 第二题 求几何图形参数

(一) 题目要求

在这里插入图片描述

(二) 源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
!第二题内容
FUNCTION sector(r,sita) RESULT(k)
REAL,PARAMETER:: PI = 3.1415927
real h,s,a,b
real k
a = 2*PI*sita/360
sita = sita*PI/180
h = 2*r*(sin(sita/4)**2)
b = 2*r*sin(sita/2)
s = a*r*r
print *,"拱高为 h =",h
print *,"弦长为 b =",b
print *,"面积为 s =",s

k = 1
END
(三) 主函数调用及结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
!定义主函数
PROGRAM Main
IMPLICIT NONE
real a
!第二题
real sector
real r,sita

print *,"请输入半径r:"
read *,r
print *,"请输入夹角角sita(°):"
read *,sita

a = sector(r,sita)
pause

END PROGRAM Main
图四 计算结果

在这里插入图片描述

四、 第三题 求解税率

(一) 题目要求

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

(二) IF选择结构
(1) 源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
FUNCTION Tax_IF(name,age,aunualIncome) RESULT(tax)
REAL tax
INTEGER age,aunualIncome
CHARACTER*7 name
if(age<50)then!年龄分段,小于50

if(aunualIncome<3000)then !归算收入对应税
tax = aunualIncome*0.05
else if(3000<=aunualIncome<=8000)then
tax = aunualIncome*0.09
else
tax = aunualIncome*0.12
endif

else!年龄大于等于50

if(aunualIncome<3000)then !归算收入对应税
tax = aunualIncome*0.03
else if(3000<=aunualIncome<=8000)then
tax = aunualIncome*0.07
else
tax = aunualIncome*0.10
endif
endif

print *,name,",",age,"岁,其税为:",tax,"元"
print *," 税后收入为:",(aunualIncome*1.0-tax)

END
(2) 主函数调用及结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
!定义主函数
PROGRAM Main
IMPLICIT NONE
REAL TAX_IF
REAL Tax_Case
real tax1,tax2
CHARACTER*7::name = "我是谁?"
INTEGER:: age,money,n

do n=1,3
write(*,*)"第",n,"组测试数据:"

print *,"请输入年龄 age = :"
read *,age
print *,"请输入年收入 moneyAlltheYears(元) = :"
read *,money
tax1 = TAX_IF(name,age,money)
!tax2 = Tax_Case(name,age,money)
print *,"-----------"
end do

pause

END PROGRAM Main

在这里插入图片描述

(三) Select case选择结构

(1) 源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
FUNCTION Tax_Case(name,age,aunualIncome) RESULT(resultq)
real resultq
CHARACTER*7 name
INTEGER age,aunualIncome
select case(age)
case(:50)
select case(aunualIncome)
case(:2999)
resultq = aunualIncome*0.05
case(3000:8000)
resultq = aunualIncome*0.09
case(8001:)
resultq = aunualIncome*0.12
case default
print *,"错误!"
end select


case default
select case(aunualIncome)
case(:2999)
resultq = aunualIncome*0.03
case(3000:8000)
resultq = aunualIncome*0.07
case(8001:)
resultq = aunualIncome*0.10
case default
print *,"错误!"
end select
end select
print *,name,",",age,"岁,其税为:",resultq
print *," 税后收入为:",(aunualIncome*1.0-resultq)

END
(2) 主函数调用与结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
!定义主函数
PROGRAM Main
IMPLICIT NONE
REAL TAX_IF
REAL Tax_Case
real tax1,tax2
CHARACTER*7::name = "我是谁?"
INTEGER:: age,money,n

do n=1,3
write(*,*)"第",n,"组测试数据:"

print *,"请输入年龄 age = :"
read *,age
print *,"请输入年收入 moneyAlltheYears(元) = :"
read *,money
!tax1 = TAX_IF(name,age,money)
tax2 = Tax_Case(name,age,money)
print *,"-----------"
end do

pause

END PROGRAM Main

在这里插入图片描述

五、 总结

本次内容能够通过动手编程去帮助我们熟悉、掌握并灵活应用新学的编程语言,包含了数据的键盘输入与屏幕输出、算法构建与计算等。从语法到编程习惯,都是促使我们去更深入地学习、掌握这一门编程语言。

-------------结束啦 我可是有底线的~ -------------

欢迎关注我的其它发布渠道