Files
Fortran-95-2003-Program-3rd…/20210415-第6章习题.f90
2025-09-25 16:46:47 +08:00

350 lines
13 KiB
Fortran
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

! 2021-04-15 01:14:04 6.7.3 6-5(c)
! program name
! !
! ! 目的:
! ! 测试数组之间比较会输出什么,最后确认会一个一个比较,然后输出一个数组
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-15 01:14:04 Sola 编写源代码
! !
! ! 程序结构:
! !
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! INTEGER, PARAMETER :: arrayLength=6 ! 数组基准长度
! ! 声明变量
! integer, dimension(arrayLength) :: a, b ! 使用的数组
! ! 变量初始化
! a = (/1,-3,0,-5,-9,3/)
! b = (/-6,6,0,5,2,-1/)
! write(*,*) a > b
! ! 数据输入
! ! 运算过程
! ! 结果输出
! end program name
! 2021-04-15 01:14:04 6.7.3 6-10 6-11
! program name
! !
! ! 目的:
! ! 极坐标转换为直角坐标; 直角坐标转化为极坐标
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-15 01:14:04 Sola 编写源代码
! ! 2021-04-15 01:14:04 Sola 增加反向转换功能
! !
! ! 程序结构:
! !
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! INTEGER, PARAMETER :: arrayLength=2 ! 数组基准长度
! ! 声明变量
! integer :: errorLevel
! real, dimension(arrayLength) :: polar, reat ! 极坐标数组、直角坐标数组
! ! 变量初始化
! open(unit=1, status='scratch')
! write(1,1)
! 1 format(1X, "5, -36.87"/&
! &1X, "10, 45"/&
! &1X, "25, 233.13")
! rewind(unit=1)
! ! 数据输入
! write(*,3)
! 3 format(1X, " Table of 6-10 "/&
! &1X, " x y "/&
! &1X, "======= =======")
! do
! read(1,*,iostat=errorLevel) polar(1), polar(2)
! if (errorLevel/=0) exit
! reat(1)=polar(1)*cos(polar(2)/360.*PI)
! reat(2)=polar(1)*sin(polar(2)/360.*PI)
! write(*,2) reat(1), reat(2)
! 2 format(1X, T2, F6.2, T10, F6.2)
! end do
! rewind(unit=1)
! write(1,4)
! 4 format(1X, "3, -4"/&
! &1X, "5, 5"/&
! &1X, "-5, 12")
! rewind(unit=1)
! write(*,5)
! 5 format(1X/&
! &1X, " Table of 6-11 "/&
! &1X, " V θ "/&
! &1X, "======= =======")
! do
! read(1,*,iostat=errorLevel) reat(1), reat(2)
! if (errorLevel/=0) exit
! polar(1)=sqrt(reat(1)**2+reat(2)**2)
! polar(2)=atan(reat(2)/reat(1))
! write(*,2) polar(1), polar(2)
! ! write(*,*) atan2(reat(2),reat(1))
! end do
! ! 运算过程
! ! 结果输出
! end program name
! 2021-04-15 01:14:04 6.7.3 6-12
! program name
! !
! ! 目的:
! ! 计算一组数据中正数、负数和0的个数
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-15 01:14:04 Sola 编写源代码
! !
! ! 程序结构:
! !
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! INTEGER, PARAMETER :: arrayLength=20 ! 数组基准长度
! ! 声明变量
! real, dimension(-50:50) :: values
! integer :: positiveSum, zeroSum, negativeSum ! 正数、零、负数的个数
! integer :: i ! 循环参数
! ! 变量初始化
! positiveSum=0
! zeroSum=0
! negativeSum=0
! values=[(i, i=-50,50)]
! do i=-50,50
! if (values(i) > 0) then
! positiveSum=positiveSum+1
! else if (values(i) < 0) then
! negativeSum=negativeSum+1
! else
! zeroSum=zeroSum+1
! end if
! end do
! write(*,1) positiveSum, negativeSum, zeroSum
! 1 format(1X, "统计结果:输入数组中共有正数", I2, "个,负数", I2, "个,零", I2, "个")
! ! 数据输入
! ! 运算过程
! ! 结果输出
! end program name
! 2021-04-15 01:14:04 6.7.3 6-14
! program name
! !
! ! 目的:
! ! 6-14 计算点积
! ! 6-15 作用于物体的功率
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-15 01:14:04 Sola 编写源代码
! ! 2021-04-15 01:14:04 Sola 计算作用于物体的功率
! !
! ! 程序结构:
! !
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! INTEGER, PARAMETER :: arrayLength=3 ! 数组基准长度
! ! 声明变量
! real, dimension(arrayLength) :: array1, array2 ! 点积的两个矢量
! real, dimension(arrayLength) :: arrayResult ! 点积结果矢量
! real :: result ! 点积结果
! integer :: i ! 循环参数
! ! 变量初始化
! array1 = [4, 3, -2]
! array2 = [4, -2, 1]
! result=0
! arrayResult = array1*array2
! do i=1,arrayLength
! result=result+arrayResult(i)
! end do
! write(*,1) result
! ! 1 format(1X, "两矢量的点积结果为 ", F6.2)
! 1 format(1X, "作用于物体的功率为 ", F6.2)
! ! 数据输入
! ! 运算过程
! ! 结果输出
! end program name
! program name
! !
! ! 目的:
! ! 6.7.3 6-16 计算差积
! ! 6.7.3 6-17 计算绕轨道运行物体的速度
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-15 01:14:04 Sola 编写源代码
! ! 2021-04-15 09:28:26 Sola 计算绕轨道运行物体的速度
! !
! ! 程序结构:
! !
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! INTEGER, PARAMETER :: arrayLength=3 ! 数组基准长度
! ! 声明变量
! real, dimension(arrayLength) :: array1 ! 矢量1
! real, dimension(arrayLength) :: array2 ! 矢量2
! real, dimension(arrayLength) :: arrayResult ! 结果矢量
! real :: v ! 运行速度
! ! 变量初始化
! array1 = [5,-3,2]
! array2 = [2,3,4]
! arrayResult = array1((/2,3,1/))*array2((/3,1,2/))-array2((/2,3,1/))*array1((/3,1,2/))
! write(*,1) arrayResult
! 1 format(1X, "矢量V1与矢量V2的差积为", 3(1X, F6.2))
! array1 = [300000,400000,50000]
! array2 = [-6E-3,2E-3,9E-4]
! arrayResult = array1((/2,3,1/))*array2((/3,1,2/))-array2((/2,3,1/))*array1((/3,1,2/))
! v=(arrayResult(1)**2+arrayResult(2)**2+arrayResult(3)**2)**1./3.
! write(*,2) v
! 2 format(1X, "绕轨道运行物体的速度为:", F11.2, " m/s")
! ! 数据输入
! ! 运算过程
! ! 结果输出
! end program name
! program name
! !
! ! 目的:
! ! 集合的交集与并集运算
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-15 10:05:11 Sola 编写源代码
! !
! ! 程序结构:
! !
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! INTEGER, PARAMETER :: arrayLength=20 ! 数组基准长度
! ! 声明变量
! character(len=8), dimension(arrayLength) :: aggregateA! 集合A
! character(len=8), dimension(arrayLength) :: aggregateB! 集合B
! character(len=8), dimension(arrayLength) :: aggregateC! 集合C交集
! character(len=8), dimension(arrayLength) :: aggregateD! 集合D并集
! integer :: i, j, k ! 循环参数
! integer :: errorLevel ! 错误代码
! character(len=40) :: temp ! 临时保存
! ! 变量初始化
! i=0
! j=0
! k=0
! aggregateA='NaN'
! aggregateB='NaN'
! open(unit=1, status='scratch')
! open(unit=2, status='scratch')
! write(1,*) ' 0,1,-3,5,-11,6,8,11,17,15'
! write(2,*) ' 0,-1,3,6,-6,16,5,12,21'
! rewind(unit=1)
! rewind(unit=2)
! read(1,*,iostat=errorLevel) aggregateA
! read(2,*,iostat=errorLevel) aggregateB
! do i=1,arrayLength
! if (aggregateA(i) /= 'NaN') then
! if (any(aggregateA(i)==aggregateB)) then
! k=k+1
! aggregateC(k)=aggregateA(i)
! end if
! else
! exit
! end if
! end do
! write(*,'(1X, "集合A与集合B的交集为", 20(A3))') aggregateC(1:k)
! k=0
! do i=1,arrayLength
! if (aggregateA(i) /= 'NaN') then
! if (any(aggregateA(i) /= aggregateD)) then
! k=k+1
! aggregateD(k)=aggregateA(i)
! end if
! else
! exit
! end if
! end do
! do i=1,arrayLength
! if (aggregateB(i) /= 'NaN') then
! if (.not. any(aggregateB(i)==aggregateD(1:k))) then
! k=k+1
! aggregateD(k)=aggregateB(i)
! end if
! else
! exit
! end if
! end do
! write(*,'(1X, "集合A与集合B的并集为", 20(A4))') aggregateD(1:k)
! ! 数据输入
! ! 运算过程
! ! 结果输出
! end program name
! program name
! !
! ! 目的:
! ! 计算三维空间中两点间距离
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-15 11:08:39 Sola 编写源代码
! !
! ! 程序结构:
! !
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! INTEGER, PARAMETER :: arrayLength=3 ! 数组基准长度
! ! 声明变量
! real, dimension(arrayLength) :: pointA ! 点A坐标
! real, dimension(arrayLength) :: pointB ! 点B坐标
! real, dimension(arrayLength) :: arrayTemp ! 临时数组
! real :: distance ! 两点间距离
! real :: temp ! 临时变量
! integer :: i ! 循环参数
! ! 变量初始化
! pointA=[-1,4,6]
! pointB=[1,5,-2]
! temp=0
! arrayTemp=(pointA-pointB)**2
! do i=1,arrayLength
! temp=temp+arrayTemp(i)
! end do
! distance=sqrt(temp)
! write(*,1) distance
! 1 format(1X, "两点间距离为:", F6.2)
! ! 数据输入
! ! 运算过程
! ! 结果输出
! end program name