
关于Fortran90中二维数组的输入输出和计算问题
有以下数组100010206071721100020306111719100030510161920......100510810131722第一列是数组元素的行号,即序...
有以下数组
10001 02 06 07 17 21
10002 03 06 11 17 19
10003 05 10 16 19 20
......
10051 08 10 13 17 22
第一列是数组元素的行号,即序号,后面5列是该行的5个元素。
请问:
1、我要统计第二列元素的范围,即最小数到最大数,该怎么运算?、
2、我要统计相邻两行之间有多少个数是相同的,该怎样计算?
3、我要统计每行的2-6列之和,该怎么计算?
4、最关键的问题,目前是51行,如果以后我要不定期增加一行或几行,但是又不想再重复输入前面的数,这个数组该怎么定义和调用?
5、我想把所有计算结果输出到一个TXT文本文件,便于打印,该怎么写?
谢谢。
谢谢QWSFWS朋友的关注,我需要FORTRAN90来编程,C语言我一点基础都没有,拿到也看不懂,谢谢。 展开
10001 02 06 07 17 21
10002 03 06 11 17 19
10003 05 10 16 19 20
......
10051 08 10 13 17 22
第一列是数组元素的行号,即序号,后面5列是该行的5个元素。
请问:
1、我要统计第二列元素的范围,即最小数到最大数,该怎么运算?、
2、我要统计相邻两行之间有多少个数是相同的,该怎样计算?
3、我要统计每行的2-6列之和,该怎么计算?
4、最关键的问题,目前是51行,如果以后我要不定期增加一行或几行,但是又不想再重复输入前面的数,这个数组该怎么定义和调用?
5、我想把所有计算结果输出到一个TXT文本文件,便于打印,该怎么写?
谢谢。
谢谢QWSFWS朋友的关注,我需要FORTRAN90来编程,C语言我一点基础都没有,拿到也看不懂,谢谢。 展开
3个回答
展开全部
首先,读文件,或者是在程序中输入你这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
enddo;enddo
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
基本上如此,你结果并不都是一维数组,输出的时候,最好加以说明,或者分行或者分不同的文件……
另外,统计相邻两行之间有多少个数是相同的,这段程序我大概表达一下那意思,你自己看着修改。
设置行数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
enddo;enddo
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
基本上如此,你结果并不都是一维数组,输出的时候,最好加以说明,或者分行或者分不同的文件……
另外,统计相邻两行之间有多少个数是相同的,这段程序我大概表达一下那意思,你自己看着修改。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询