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

发布于 2020-09-08  297 次阅读


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) 源代码
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) 主函数调用及运行结果

!定义主函数

PROGRAM Main
IMPLICIT NONE
real SV,a
real:: b = 10.0
a=SV(b)
pause

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

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

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

(1) 源代码
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) 主函数调用及运行结果
!定义主函数
PROGRAM Main
IMPLICIT NONE
!第一题
real SV,a
real:: b = 10.0
!第一题
real SVou
a = SVou()
pause
 END PROGRAM Main
                                图三 固定格式调用结果

在这里插入图片描述

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

(一) 题目要求

在这里插入图片描述

(二) 源代码
!第二题内容
    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
(三) 主函数调用及结果
!定义主函数
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) 源代码
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) 主函数调用及结果
!定义主函数
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) 源代码
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) 主函数调用与结果
!定义主函数
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

在这里插入图片描述

五、 总结

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