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

921 lines
34 KiB
Fortran
Raw Permalink 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:12 17:39:07 5-1
! program example
! implicit none
! real :: numSquareRoot
! integer :: i, numSquare, numCube
! ! write(*, '(1X, "Table of Square Roots, Squares, and Cubes"')
! write(*, 1)
! 1 FORMAT(1X, "Table of Square Roots, Squares, and Cubes"/&
! &1X, " Number Square Root Square Cube"/&
! &1X, " ====== =========== ====== ===="/&
! &1X)
! ! write(*, '(1X, " Number Square Root Square Cube")')
! ! write(*, '(1X, " ====== =========== ====== ===="')
! DO i=1,10,1
! numSquareRoot = sqrt(real(i))
! numSquare = i**2
! numCube = i**3
! write(*, 2) i, numSquareRoot, numSquare, numCube
! 2 FORMAT(1X, T5, I2, T13, F8.6, T27, I3, T36, I4)
! END DO
! end program example
! 2021:04:13 01:41:33 5-3.1
! program example
! implicit none
! integer :: inforError
! OPEN (UNIT=25, FILE='IN052691', STATUS='OLD', ACTION='READ', IOSTAT=inforError)
! if ( inforError == 0 ) then
! write(*,'(1X, "成功打开文件")')
! else
! write(*,'(1X, "打开文件失败,错误代码为", I3)') inforError
! end if
! close (unit= 25)
! end program example
! 2021:04:13 01:57:01 5-3.2
! program example
! implicit none
! integer :: inforError
! character(len=8) :: out_name
! out_name='12345678'
! open (unit=1, STATUS='new', ACTION='readwrite', file=out_name, IOSTAT=inforError)
! if ( inforError /= 0 ) then
! write(*, '(1X, "新建文件失败")')
! else
! write(*, '(1X, "新建文件成功")')
! endif
! close (unit=1)
! end program example
! 2021:04:13 02:19:06 5-3.4
! program name
! implicit none
! character(len=20) :: first, last, varName, varValue
! integer :: i=0, errorLevel=0, length=0
! open(unit=1, file='content', status='old', action='read', iostat=errorLevel)
! if ( errorLevel > 0 ) stop "出现了错误"
! do
! read(1,*, iostat=errorLevel) varName, varValue
! if ( errorLevel < 0 ) EXIT
! length=length+1
! if ( varName == 'first' ) first=varValue
! if ( varName == 'last' ) last=varValue
! end do
! rewind (unit=1)
! read(1,'(T1, A)') varValue
! write(*,*) first, last, varValue
! close (unit=1)
! end program name
! 2021:04:13 10:13:10 5.6.3 5-3.a
! program name
! implicit none
! integer :: i
! character(len=20) :: fmt
! fmt="('1','i= ', I6.5)"
! i=-123
! write(*,fmt) i
! end program name
! 2021:04:13 10:25:00 5.6.3 5-3.c
! program name
! implicit none
! integer :: i1, i2
! i1=10
! i2=4**2
! write(*, 300) i1 > i2
! 300 format (' ','Result = ', L6)
! end program name
! 2021:04:13 16:56:13 5.6.3 5-7
! program name
! implicit none
! integer :: i=0, j=0, writeLocate
! real :: value0, value1, value2, value3, value4, value5, value6, value7, value8, value9
! write(*, '(T13, "表格1~10之间以0.1为一级各个数的以10为底的对数")')
! write(*,1)
! 1 format (T9, 'X.0', T16, 'X.1', T23, 'X.2', T30, 'X.3', T37, 'X.4', T44, 'X.5', T51, 'X.6',&
! & T58, 'X.7', T65, 'X.8', T72, 'X.9')
! do i = 1, 10, 1
! value0=log10(real(i)+0)
! value1=log10(real(i)+0.1)
! value2=log10(real(i)+0.2)
! value3=log10(real(i)+0.3)
! value4=log10(real(i)+0.4)
! value5=log10(real(i)+0.5)
! value6=log10(real(i)+0.6)
! value7=log10(real(i)+0.7)
! value8=log10(real(i)+0.8)
! value9=log10(real(i)+0.9)
! write(*,2) real(i), value0, value1, value2, value3, value4, value5, value6, value7, value8, value9
! 2 format (T2, F4.1, T8, F5.3, T15, F5.3, T22, F5.3, T29, F5.3, T36, F5.3, T43, F5.3, T50, F5.3,&
! & T57, F5.3, T64, F5.3, T71, F5.3)
! end do
! end program name
! 2021:04:13 17:40:36 5.6.3 5-8
! program name
!
! implicit none
! integer :: i=0, errorLevel, j=0
! real :: average=0, sum=0, standardDeviation=0, value=0
! open (unit=1, file='content', status='old', action='read', iostat=errorLevel)
! if ( errorLevel /= 0 ) stop "Open file fatal!"
! do
! read(1,*,iostat=errorLevel) value
! if ( errorLevel < 0 ) exit
! sum=sum+value
! i=i+1
! end do
! average=sum/i
! rewind (unit=1)
! do j=1,i,1
! read(1,*,iostat=errorLevel) value
! if ( errorLevel /= 0 ) exit
! standardDeviation=(value-average)**2+standardDeviation
! end do
! standardDeviation=sqrt(standardDeviation/i)
! write(*,2) i, sum, average, standardDeviation
! 2 format (1X, '共统计', I3, '个数值,样本总和为', F8.1, ',平均值为', F8.1, ',标准偏差为', F8.1)
! close (unit=1)
!
! end program name
! 2021:04:13 20:11:58 5.6.3 5-13
! program name
!
! implicit none
! integer :: timeSecond, errorLevel, HH, MM, SS
! write(*,'(1X, "Please enter the start time in second(0~86400)")')
! do
! read(*,*, iostat=errorLevel) timeSecond
! if ( errorLevel /= 0 ) then
! write(*,'(1X, "输入数值格式不正确请输入在0~86400之间的整数")')
! else
! if ( timeSecond > 86400 .or. timeSecond < 0 ) then
! write(*,'(1X, "请在正确的范围内输入数值(0~86400)")')
! else
! exit
! end if
! end if
! end do
! SS=timeSecond-timeSecond/60*60
! MM=(timeSecond-timeSecond/(60*60)*3600)/60
! HH=timeSecond/(60*60)
! write(*,1) HH, MM, SS
! 1 format (1X, "当前的时间为:", I2.2, ":", I2.2, ":", I2.2, ' (24h)')
!
! end program name
! 2021:04:13 20:31:14 5.6.3 5-14
! program name
! implicit none
! integer :: h
! real :: G, M, R, gg=0
! G=6.672E-11
! M=5.98E24
! R=6371E3
! write(*,'(1X, "表格:高度相对于重力加速度一览表"/&
! &1X, "高度(km)", T17, "重力加速度(米/秒2"/&
! &1x, "=========", T15, "==================")')
! do h=0,40000,500
! gg=-G*M/(R+real(h)*1000)**2
! write(*,1) h, gg
! 1 format (T3, I5, T18, F8.2)
! end do
! end program name
! 2021-04-13 21:48:55 5.6.3 5-21
! program name
! implicit none
! integer :: unit=8, errorLevel
! open (UNIT=unit, status="scratch", iostat=errorLevel)
! write(*,*) errorLevel
! end program name
! 2021-04-13 21:58:06 5.6.3 5-26
! program name
! implicit none
! integer :: i, errorLevel
! real :: max, min, value
! character(len=20) :: maxRow, minRow, str
! open (unit=1, file='content', status='old', action='read', iostat=errorLevel)
! if ( errorLevel /= 0 ) stop "Open file fatal!"
! i=0
! do
! read(1, *, iostat=errorLevel) value
! if (errorLevel /= 0) exit
! i=i+1
! if (i == 1) then
! max=value
! min=value
! write(maxRow,6) i
! write(minRow,6) i
! 6 format (I2)
! else
! if (value > max) then
! max=value
! write(maxRow,6) i
! else if (value < min) then
! min=value
! write(minRow,6) i
! else if (abs(value-max) < 1 ) then
! write(str,4) i, maxRow
! maxRow=str
! else if (abs(value-min) < 1) then
! write(str,4) i, minRow
! minRow=str
! end if
! 4 format (I2, ',', A10)
! end if
! write(*,3) i, maxRow, max, minRow, min
! 3 format (1X, "第", I2, "次读取,文件在第", A14, "行取到最大值为:"&
! &, F8.1, ",在第", A14, "行取到最小值为:", F8.1)
! end do
! write(*,2) maxRow, max, minRow, min
! 2 format (1X, "文件在第", A20, "行取到最大值为:", F8.1, ",在第", A20, "行取到最小值为:", F8.1)
! end program name
! 2021:04:14 16:33:55 5.6.3 5-27
! program name
! implicit none
! ! 以只读形式打开旧文件
! ! j=1
! ! DO
! ! 读取第j行字符并赋值给字符变量1长度小于133
! ! IF 错误等级<0 退出循环
! ! IF 错误等级>0 停止并报错
! ! DO i从1到字符变量1长度除去空格
! ! 抽取字符变量1第i个字符并赋值给一个长度为1的字符变量2
! ! IF 字符变量2不是逗号或者没有到达字符串末尾
! ! 跳过
! ! ELSE
! ! IF 到达了字符串末尾
! ! 结尾位数=i
! ! ELSE
! ! 结尾位数=i-1
! ! END IF
! ! sum=sum+实数1
! ! 计数1=计数1+1
! ! 字符变量3=空
! ! END IF
! ! END DO
! ! j=j+1
! ! END DO
! ! 平均值=sum/计数1
! integer :: i, j, k, errorLevel, valueStart, valueEnd
! real :: sum, value, average
! character(len=128) :: allValue, selectValue, readValue
! open (unit=1, file='content', status='old', action='read', iostat=errorLevel)
! if (errorLevel > 0) stop "读取文件出错"
! j=1
! k=0
! valueStart=1
! do
! read(1, '(A128)', iostat=errorLevel) allValue
! ! write(*,*) allValue
! if (errorLevel < 0) exit
! if (errorLevel > 0) stop "读取第j行出错"
! ! write(*,*) "读取第", j, "行"
! do i=1, len_trim(allValue), 1
! selectValue=allValue(i:i)
! ! write(*,*) "读取第", j, "行", "第", i, "列"
! if ( .not. ( trim(selectValue) == ',' .or. i == len_trim(allValue)) ) then
! ! ! readValue=trim(readValue) // trim(selectValue)
! ! ! write(*,*) '1', readValue
! ! else if ( trim(selectValue) == ' ') then
! ! ! write(*,*) '2', readValue
! cycle
! else
! if ( i == len_trim(allValue) ) then
! valueEnd=i
! else
! valueEnd=i-1
! end if
! readValue=allValue(valueStart:valueEnd)
! read(readValue, '(F5.1)', iostat=errorLevel) value
! if (errorLevel > 0) stop "第j行第i列附件的字符非合法数值请检查"
! sum=sum+value
! k=k+1
! ! write(*,*) '3', readValue
! readValue=''
! valueStart=i+1
! end if
! end do
! j=j+1
! end do
! average=sum/k
! write(*,2) k, sum, average
! 2 format (1X, "共计算", I3, "个数值,总和为", F5.1, ",平均值大小为", F5.1)
! close (unit=1)
! end program name
! 2021:04:14 17:31:01 一个用于读取文件中所有数值的程序案例
! program name
! ! =============================================================
! ! 目的:
! ! 遍历一个文件内的所有变量(需要全部是实数或整数)
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-14 17:46:57 Sola 编写源代码并校正格式
! ! =============================================================
! implicit none
! ! 数据字典
! ! 结构需要
! integer :: i ! 控制读取字符所在位置
! integer :: errorLevel ! 检查错误信息
! integer :: valueStart ! 读取数值开始位置
! integer :: valueEnd ! 读取数值结束位置
! real :: value ! 读取的数值内容
! character(len=128) :: allValue ! 所在行字符内容
! character(len=128) :: selectValue ! 读取所在行第i个字符内容
! character(len=128) :: readValue ! 读取的字符内容
! ! 使用者自定义
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! ! 声明变量
! ! 变量初始化
! valueStart=1
! ! 打开文件
! open (unit=1, file='content', status='old', action='read', iostat=errorLevel)
! if (errorLevel > 0) stop "读取文件出错"
! ! 遍历数值
! do
! read(1, '(A128)', iostat=errorLevel) allValue ! 读取行内容
! if (errorLevel < 0) exit ! 如果到达最后一行, 退出循环
! if (errorLevel > 0) stop "读取行出错" ! 读取行内容出错, 退出程序
! ! 遍历行内字符
! do i=1, len_trim(allValue), 1
! selectValue=allValue(i:i) ! 读取第i个字符
! if ( .not. ( trim(selectValue) == ',' .or. i == len_trim(allValue)) ) then
! cycle ! 如果不是逗号或到达末尾, 则跳过此次循环
! else ! 如果是逗号或到达末尾
! if ( i == len_trim(allValue) ) then
! valueEnd=i ! 如果是到达末尾, 则数值结束位置为i
! else
! valueEnd=i-1 ! 如果并未达到末尾, 则数值结束位置为i-1
! end if
! readValue=allValue(valueStart:valueEnd) ! 读取当前数值
! read(readValue, '(F5.1)', iostat=errorLevel) value ! 将当前数值赋值给一个实数
! if (errorLevel > 0) stop "存在非合法数值,请检查" ! 赋值存在错误, 退出程序
! valueStart=i+1 ! 下一次数值的开始位置为i+1
! end if
! end do
! valueStart=1 ! 开始新一行, 并将数值开始位置重置
! end do
! close (unit=1) ! 关闭文件
! end program name
! 2021:04:14 17:56:25 5.6.3 5-28
! program name
! ! =============================================================
! ! 目的:
! ! 遍历一个文件内的所有变量(需要全部是实数或整数)
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-14 17:46:57 Sola 编写源代码并校正格式
! ! 2021:04:14 17:57:21 Sola 将弧度转化为角度
! ! =============================================================
! implicit none
! ! 数据字典
! ! 结构需要
! integer :: i ! 控制读取字符所在位置
! integer :: errorLevel ! 检查错误信息
! integer :: valueStart ! 读取数值开始位置
! integer :: valueEnd ! 读取数值结束位置
! real :: value ! 读取的数值内容
! character(len=128) :: allValue ! 所在行字符内容
! character(len=128) :: selectValue ! 读取所在行第i个字符内容
! character(len=128) :: readValue ! 读取的字符内容
! ! 使用者自定义
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! ! 声明变量
! real :: angle ! 角度
! real :: radian ! 弧度
! integer :: angleDegree ! 度
! integer :: angleMinute ! 分
! integer :: angleSecond ! 秒
! ! 变量初始化
! valueStart=1
! ! 打开文件
! open (unit=1, file='content', status='old', action='read', iostat=errorLevel)
! if (errorLevel > 0) stop "读取文件出错"
! ! 遍历数值
! do
! read(1, '(A128)', iostat=errorLevel) allValue ! 读取行内容
! if (errorLevel < 0) exit ! 如果到达最后一行, 退出循环
! if (errorLevel > 0) stop "读取行出错" ! 读取行内容出错, 退出程序
! ! 遍历行内字符
! do i=1, len_trim(allValue), 1
! selectValue=allValue(i:i) ! 读取第i个字符
! if ( .not. ( trim(selectValue) == ',' .or. i == len_trim(allValue)) ) then
! cycle ! 如果不是逗号或到达末尾, 则跳过此次循环
! else ! 如果是逗号或到达末尾
! if ( i == len_trim(allValue) ) then
! valueEnd=i ! 如果是到达末尾, 则数值结束位置为i
! else
! valueEnd=i-1 ! 如果并未达到末尾, 则数值结束位置为i-1
! end if
! readValue=allValue(valueStart:valueEnd) ! 读取当前数值
! read(readValue, '(F10.6)', iostat=errorLevel) radian ! 将当前数值赋值给一个实数
! if (errorLevel > 0) stop "存在非合法数值,请检查" ! 赋值存在错误, 退出程序
! angle=radian/PI*360
! angleDegree=int(angle)
! angleMinute=int((angle-real(angleDegree))*60)
! angleSecond=nint((angle-real(angleDegree)-real(angleMinute)/60)*60*60)
! write(*,2) radian, angleDegree, angleMinute, angleSecond
! 2 format (1X, F10.6, " 转换为角度为", I4, "度 ", I2, "分 ", I2, "秒")
! valueStart=i+1 ! 下一次数值的开始位置为i+1
! end if
! end do
! valueStart=1 ! 开始新一行, 并将数值开始位置重置
! end do
! close (unit=1) ! 关闭文件
! end program name
! 2021:04:14 20:02:17 标准程序格式
! program name
! ! =============================================================
! ! 目的:
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! =============================================================
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! ! 声明变量
! ! 变量初始化
! end program name
! 2021:04:14 20:02:17 5.6.3 5-31
! program name
! ! =============================================================
! ! 目的:
! ! 天线放大率程式
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021:04:14 20:05:37 Sola 编写源代码
! ! =============================================================
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! ! 声明变量
! real :: G ! 天线放大率
! integer :: angle ! 角度
! real :: radian ! 弧度
! ! 变量初始化
! g=0
! radian=0
! angle=0
! write(*,1)
! 1 format (1X, "Form. 天线放大率与角度"/&
! &1X, T4, "radian", T15, "天线放大率"/&
! &1X, T2, "==========", T15, "==========")
! do angle=0,90,1
! radian=angle/360.*PI
! if ( (radian-0) < 0.01 ) then
! g=abs(1)
! else
! g=abs(sin(6*radian)/(6*radian))
! end if
! write(*,2) radian, G
! 2 format (1X, T3, F8.6, T16, F8.6)
! end do
! end program name
! 2021:04:14 22:45:42 5.6.3 5-32
! program name
! ! =============================================================
! ! 目的: 计算发动机输出功率
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021:04:14 22:46:13 Sola 编写源代码
! ! =============================================================
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! ! 声明变量
! real :: p ! 功率 瓦特
! real :: t_ind ! 转矩
! real :: w_m ! 角速度 rad/s
! integer :: t ! 时间 1/4s
! ! 变量初始化
! write(*,1)
! 1 format (1X, "Form. 发动机随时间变化输出功率变化情况"/&
! &1X, T4, "Time(s)", T20, "P(w)"/&
! &1X, T1, "===========", T15, "===============")
! do t=0,40,1
! t_ind=10*e**(-0.25*0.25*t)
! w_m=377*(1-e**(-0.25*0.25*t))
! p=t_ind*w_m
! write(*,2) t*0.25, p
! 2 format (1X, T5, F5.2, T17, F10.5)
! end do
! end program name
! 2021:04:14 23:00:23 5.6.3 5-33 5-34
! program name
! ! =============================================================
! ! 目的: 计算轨道
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021:04:14 23:00:53 Sola 编写源代码
! ! 2021:04:14 23:50:44 Sola 增加新题目的功能
! ! =============================================================
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! REAL, PARAMETER :: r_earth=6.371E3 ! 地球半径
! ! 声明变量
! real :: r ! 卫星距离地球中心的距离 km
! real :: p ! 确定轨道大小的参数
! real :: x ! 轨道离心率的参数
! real :: distanceMax ! 轨道最远距离 km
! real :: distanceMin ! 轨道最近距离 km
! integer :: errorLevel ! 错误参数
! integer :: i ! 循环用变量
! ! 变量初始化
! p=10000
! write(*,1)
! 1 format (1X, "Form. 卫星轨道信息一览表"/&
! &1X, " ε min(km) max(km)"/&
! &1X, "===== ========= =========")
! ! open (unit=2, status='scratch', iostat=errorLevel)
! ! write(2,'("0"/"0.25"/"0.5")')
! ! rewind (unit=2)
! ! do i = 1,3
! ! read(2,*) x
! ! distanceMax=p/(1-x)
! ! distanceMin=p/(1+x)
! ! write(*,2) x, distanceMin, distanceMax
! ! 2 format (1X, T2, F5.3, T9, F7.1, T19, F7.1)
! ! end do
! do i=0,10,1
! x=i*0.05
! distanceMax=p/(1-x)-r_earth
! distanceMin=p/(1+x)-r_earth
! write(*,2) x, distanceMin, distanceMax
! 2 format (1X, T2, F5.3, T9, F7.1, T19, F7.1)
! end do
! end program name
! 2021:04:15 00:39:05 5.6.3 5-35
! program name
! ! =============================================================
! ! 目的: 动态修改格式描述符
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021:04:15 00:39:50 Sola 编写源代码
! ! =============================================================
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! ! 声明变量
! integer :: errorLevel ! 错误代码
! real :: x1, x2, x3, x4 ! 用于保存读取到的变量
! integer :: i ! 循环参数
! character(len=8) :: varType ! 输出格式
! ! 变量初始化
! open (unit=1, status="scratch", iostat=errorLevel)
! if (errorLevel /= 0) stop "Open file error!"
! write(1,1)
! 1 format("0.00012, -250., 6.02E23, -0.012"/&
! &"0.0, 12345.6, 1.6E-19, -1000.")
! rewind(unit=1)
! do i=1,2
! read(1,*) x1, x2, x3, x4
! if ( x1 == 0 .or. ( 0.01 <= abs(x1) .and. 1000.0 >= abs(x1) ) ) then
! varType='(F14.6)'
! else
! varType='(ES14.6)'
! end if
! write(*,trim(varType)) x1
! if ( x2 == 0 .or. ( 0.01 <= abs(x2) .and. 1000.0 >= abs(x2) ) ) then
! varType='(F14.6)'
! else
! varType='(ES14.6)'
! end if
! write(*,trim(varType)) x2
! if ( x3 == 0 .or. ( 0.01 <= abs(x3) .and. 1000.0 >= abs(x3) ) ) then
! varType='(F14.6)'
! else
! varType='(ES14.6)'
! end if
! write(*,trim(varType)) x3
! if ( x4 == 0 .or. ( 0.01 <= abs(x4) .and. 1000.0 >= abs(x4) ) ) then
! varType='(F14.6)'
! else
! varType='(ES14.6)'
! end if
! write(*,trim(varType)) x4
! end do
! end program name
! 2021-04-15 01:14:04 5.6.3 5-36
! program name
! ! =============================================================
! ! 目的:
! ! 最小二乘法回归并计算相关系数如果相关系数小于0.3,发出警告
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-15 01:12:35 Sola 编写源代码
! ! =============================================================
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! ! 声明变量
! real :: x, y ! 坐标xy
! integer :: errorLevel ! 错误代码
! real :: m, b ! 拟合斜率和截距
! real :: x_bar, y_bar ! xy均值
! real :: r ! 相关系数
! real :: x_sum, y_sum ! xy总和
! real :: x2_sum, xy_sum, y2_sum ! 各种参数
! integer :: i ! 循环变量
! ! 变量初始化
! x_sum=0
! y_sum=0
! x2_sum=0
! y2_sum=0
! xy_sum=0
! i=0
! ! 输入数据
! open (unit=1, status='scratch', iostat=errorLevel)
! if (errorLevel /= 0) stop "Error!"
! write(1,1)
! 1 format("1.1, 1.01"/&
! &"2.2, 2.30"/&
! &"3.3, 3.05"/&
! &"4.4, 4.28"/&
! &"5.5, 5.75"/&
! &"6.6, 6.48"/&
! &"7.7, 7.84")
! rewind(unit=1)
! ! 计算参数
! do
! read(1,'(F10.4,F10.4)', iostat=errorLevel) x, y
! if (errorLevel<0) exit
! if (errorLevel>0) stop "Warning: Error!"
! x_sum=x_sum+x
! y_sum=y_sum+y
! x2_sum=x2_sum+x**2
! y2_sum=y2_sum+y**2
! xy_sum=xy_sum+x*y
! i=i+1
! end do
! x_bar=x_sum/real(i)
! y_bar=y_sum/real(i)
! m=(xy_sum-x_sum*y_bar)/(x2_sum-x_sum*x_bar)
! b=y_bar-m*x_bar
! r=(real(i)*xy_sum-x_sum*y_sum)/sqrt((real(i)*x2_sum-x_sum**2)*(real(i)*y2_sum-y_sum**2))
! ! 输出结果
! if (abs(r)<0.3) write(*,*) 'Warning: r is too low!'
! write(*,2) m, b, r
! 2 format(1X, "方程拟合的结果为: y = ", F5.2, " x + ( ", F5.2, " ) , 相关系数为: ", F5.3)
! end program name
! 2021-04-15 01:14:04 5.6.3 5-37
! program name
! ! =============================================================
! ! 目的: 计算飞行器旋转半径
! !
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-15 01:14:04 Sola 编写源代码
! ! =============================================================
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! REAL, PARAMETER :: g=9.8 ! 重力加速度, g/s^2
! REAL, PARAMETER :: mach=340 ! 马赫, 声速, m/s
! ! 声明变量
! real :: a
! real :: v
! real :: r
! integer :: i
! ! 变量初始化
! i=0
! ! 输出数据
! write(*,1)
! 1 format(1X, "Form1. 飞行器转弯半径与飞行器速度关系表"/&
! &1X, " v(m/s) r(m) "/&
! &1X, "========== ======================")
! do i=5,20,1
! v=real(i)/10.*mach
! a=2*g
! r=v**2/a
! write(*,2) v, r
! 2 format(1X, T3, F8.1, T17, F17.3)
! end do
! write(*,3)
! 3 format(1X, "========== ======================"/&
! &/&
! &1X, "Form2. 飞行器转弯半径与向心加速度关系表"/&
! &1X, " a(m/s^2) r(m) "/&
! &1X, "========== ======================")
! do i=4,16,1
! a=real(i)*0.5*g
! v=0.85*mach
! r=v**2/a
! write(*,2) a, r
! end do
! write(*,4)
! 4 format(1X, "========== ======================")
! end program name
! ! 2021-04-15 01:14:04 测试
! program name
! implicit none
! real :: error(-3:0)
! error(-3)=0.00012
! error(-2)=0.0152
! error(-1)=0.0
! write(*,500) error
! 500 format(T6,"error = ",/,(3X,F6.4))
! end program name
! 2021-04-15 01:14:04 排序算法
! program name
! ! =============================================================
! ! 目的: 对输入数据进行排序
! ! 程序结构:
! ! 打开文件
! ! DO
! ! 读入数据赋值给数组对应位置, 并获取错误代码
! ! IF 错误代码 < 0 EXIT
! ! 记录数+1
! ! END DO
! ! DO i从1到记录数-1
! ! 最小值=数组(i)
! ! 最小值位置=i
! ! DO j从i+1到记录数
! ! IF 数组(j)<最小值 THEN
! ! 最小值=数组(j)
! ! 最小值位置=j
! ! END IF
! ! END DO
! ! IF 最小值位置/=i THEN
! ! 数组(最小值位置)=数组(i)
! ! 数组(i)=最小值
! ! END IF
! ! END DO
! ! 输出数组
! ! 修订记录:
! ! 日期 编程者 改动描述
! ! =================== ============= ======================
! ! 2021-04-15 01:14:04 Sola 编写源代码
! ! 2021-04-15 01:14:04 Sola 防止数据溢出
! ! 2021-04-15 09:48:33 Sola 避免错误数据
! ! =============================================================
! implicit none
! ! 数据字典
! ! 声明常量
! REAL, PARAMETER :: PI=3.14159265 ! PI值
! REAL, PARAMETER :: e=2.718281828459 ! 自然对数
! ! 声明变量
! integer, parameter :: arrayLength = 20 ! 数组长度
! real, dimension(arrayLength) :: array ! 定义数组
! integer :: errorLevel ! 错误代码
! integer :: i, j, k ! 循环参数
! integer :: minLocate ! 最小值位置
! real :: min ! 最小值
! logical :: excess ! 数据溢出判断参数
! real :: temp ! 储存临时数值
! ! 变量初始化
! k=0
! i=0
! excess=.FALSE.
! open(unit=1, status='scratch')
! write(1,1)
! 1 format(1X, "123.5"/&
! &1X, "563"/&
! &1X, "586.3"/&
! &1X, "12"/&
! &1X, "0"/&
! &1X, "-l99"/&
! &1X, "67"/&
! &1X, "24"/&
! &1X, "51"/&
! &1X, "999"/&
! &1X, "30"/&
! &1X, "-1a11"/&
! &1X, "666"/&
! &1X, "787"/&
! &1X, "720"/&
! &1X, "98u0"/&
! &1X, "985")
! rewind(unit=1)
! do
! read(1,*,iostat=errorLevel) temp
! if (errorLevel < 0) exit
! i=i+1
! if (errorLevel > 0) then
! write(*,3) i
! 3 format(1X, "程序在输入数据的第", I3, "行读取到非法输入,&
! &请检查数据源,已跳过该数据")
! ! 3 format(1X, I3)
! cycle
! end if
! if (k < arrayLength) then
! k=k+1
! array(k)=temp
! else
! excess=.TRUE.
! exit ! 从程序一般只有一个出口来看这边最好不要有exit
! end if
! end do
! if ( .not. excess ) then
! do i=1,k-1
! minLocate=i
! do j=i+1,k
! if (array(j) < array(minLocate)) then
! minLocate=j
! end if
! end do
! if (minLocate /= i) then
! min=array(minLocate)
! array(minLocate)=array(i)
! array(i)=min
! end if
! end do
! write(*,2) array
! 2 format(10(F7.2, 1X))
! else
! write(*,*) '输入参数过多!'
! end if
! close(unit=1)
! end program name