当前位置:首页
建筑知识
阅读 下列FORTRAN程序:DIMENSION M (6)READ(*,*)MDO 10J=1,6DO 10K=J,6IF(M (K) .LT.M (J) )THENN=M(K)M(K)=M(J)M
阅读 下列FORTRAN程序:DIMENSION M (6)READ(*,*)MDO 10J=1,6DO 10K=J,6IF(M (K) .LT.M (J) )THENN=M(K)M(K)=M(J)M(J)=NEND IF10 CONTINUEWRITE(*,100)(M(),I=1,6)100 FORMAT(2X,614)END键盘输入10,7,9,2,1,3;程序运行后的输出结果是:
A 、1237910
B 、109732 1
C 、7921310
D 、31297 10
【正确答案:A】
数组赋值以后,各数组元素的值为: M (1) =10, M (2) =9, M (3) =9,M (4) =2, M (5) =1, M (6) =3。 当循环一次后 M (1) 的值就确定下来了,因此不需要再做下去。此时M (1) =1。
首先,读文件,或者是在程序中输入你这51行数据
设置行数n=51,这样你后面可以直接通过变换n的值来控制数据行数的变化
parameter(n=51)
integer mm(n,6) ! 二维数组,51*6 第一列表示序号,2至5列表示数据内容
integer msum(n),num(n-1)
! msum是和,num是统计相同数的个数的数组,每两行有一个num,故为长度为n-1
open(1,file='这个数据文件',form='formatted')
do i=1,n
read(1,*) (mm(i,j),j=1,6)
enddo
max=mm(1,2)
min=mm(1,2) ! 2表示第二列,可视情况都改为3,4,5,6……
do i=1,n
if(mm(i,2)>max)then
max=mm(i,2)
endif
if(mm(i,2)<min)then
min=mm(i,2)
endif
msum(i)=0
do j=2,6
msum(i)=msum(i)+mm(i,j)
enddo
enddo
! 这样,max,min就分别是第二列元素的最大值和最小值,msum即存放每行之和
do i=1,n-1
num(i)=0
do j=2,6
do k=2,6
if(mm(i,j)==mm(i+1,k))then
num(i)=num(i)+1
endif
enddoenddo
enddo
open(2,file='result.txt',form='formatted')
write(2,*),'max=',max,' min=',min
do i=1,n
write(2,*),i,'sum=',msum(i)
enddo
do i=1,n-1
write(2,*),i,'number of same =',num(i)
enddo
end
基本上如此,你结果并不都是一维数组,输出的时候,最好加以说明,或者分行或者分不同的文件……
另外,统计相邻两行之间有多少个数是相同的,这段程序我大概表达一下那意思,你自己看着修改。
第一次:K=1
K=K*I/J
其中I = 1 , J=1
所以 K = 1*1/1 = 1
第二次
K=K*I/J
其中I = 1 , J=2
所以 K = 1*1/2 = 0
以后 K 乘任何数都是 0,所以最终结果是 0
请注意:
1、/2 = 0 因为 1 和 2 都是整数,除了以后还是整数,0.5 转换成整数就是取整,即为 0
如果你要实现你的期望。应当把 K 定义为实数,即:
Real K
并且把
K=K*I/J
改为
K=K * I * ( 1.0 / J )