6.1 ex0601.f90
有一个4维数组a(2,2,2,2), 编写程序,根据a的元素在内存中的存储顺序,依次输出其下标。
代码:
program ex0601
implicit none
integer :: i, j, k, l
integer :: a(2,2,2,2)
a = reshape((/(i,i=1,16)/),(/2,2,2,2/))
do l=1,2
do k=1,2
do j=1,2
do i=1,2
write(*,10) a(i,j,k,l),":(",i,",",j,",",k,",",l,")"
end do
end do
end do
end do
10 format (i2,a,i1,a,i1,a,i1,a,i1,a)
End
结果:
分析:
这个编程题较为简单,主要在于理解数组在内存中的存储方式,与C语言等一些语言里按行存储不同,Fortran中数组是按列存储的,因此对于一个多维数组a(2,2,2,2),其下标依次应为(1,1,1,1),(2,1,1,1)等等。为了方便观察结果,将数组中的元素按下标的顺序编了号(Fortran中数组下标是从1开始的),另外,还要注意输出的格式。
6.2 ex0602.f90
设有10个测试数据,存放在一维数组a中,编写程序计算其方差。
代码:
program ex0602
implicit none
integer :: i, j, k
real ave, sum1, sum2, var
sum1 = 0
sum2 = 0
write(*,*) "comfirm the data"
read(*,*) (a(i),i=1,10)
do j=1, 10
sum1 = sum1 + a(j)
end do
ave = sum1 / 10
do k=1, 10
sum2 = sum2 + (a(k)-ave)**2
end do
var = sum2 / 10
write(*,*) var
end
结果:
分析:
这道题要求方差,方差等于每个元素减去平均数的平方再除以个数,因此按部就班的做,首先建立一个数组并读入数据,然后利用一个循环求出平均数,最后再求出方差,注意由于会出现小数所以不要全部用整型变量。