
max里的叫形参,可以随便用哪个都一样的,大概你是新手,不知道什么是形参和实参吧~
形参与实参的区别:
高级语言在设计程序模块时,模块名定义后,紧跟其后所定义的参数(括弧内)被称为形参(也称虚参)。当该模块被调用时,在主调模块中,出现在被调用的模块名后的参数被称为实参。实参代替虚参的过程被称为虚、实结合,也称换参。多数高级语言的换参是由编译系统来完成,比如C语言和FORTRAN语言亦是如此。BASIC语言的换参则是由程序设计人员来完成的。如果只允许实参向虚参传递,则被称为“单向传递”,C语言的变量类虚、实结合即是“单向传递”。如果同时允许虚参向实参传递,这种传递被称为“双向传递”,FORTRAN 语言定义的子程序即是如此。 当C语言的形参为数组时,形参不另辟存储单元,形参与实参共用内存存储单元。这样,可以节省内存。 C语言在定义函数的同时,对于有参函数,也同时定义了形参。在调用该函数的同时,也指明了实参。实参与形参在内存分别占有两套不同的存储单元(数组除外),但是形参只有在函数被调用过程中才分配存储单元,调用结束后形参占用的单元被释放。数组元素作为实参时,也做为变量来处理。
cpu_time返回的是一个浮点型,表示当前CPU运行时间(以秒计)
示例:
program test_cpu_time
real :: start, finish
call cpu_time(start)
! put code to test here
call cpu_time(finish)
print '("Time = ",f63," seconds")',finish-start
end program test_cpu_time
摘自 http://gccgnuorg/onlinedocs/gcc-404/gfortran/CPU_005fTIMEhtml
date_and_time稍微复杂,但包括很多信息,包括日期,时间,时区,最后一个参数是一个大小为8的整型数组,记录了年,月,日,时区差(以分钟计),小时,分钟,秒,毫秒。
program test_time_and_date
character(8) :: date
character(10) :: time
character(5) :: zone
integer,dimension(8) :: values
! using keyword arguments
call date_and_time(date,time,zone,values)
call date_and_time(DATE=date,ZONE=zone)
call date_and_time(TIME=time)
call date_and_time(VALUES=values)
print '(a,2x,a,2x,a)', date, time, zone
print '(8i5))', values
end program test_time_and_date
摘自 http://gccgnuorg/onlinedocs/gfortran/DATE_005fAND_005fTIMEhtml
system_clock用于决定处理器时钟周期。count_rate用于决定每秒CPU的时钟计数,
PROGRAM test_system_clock
INTEGER :: count, count_rate, count_max
CALL SYSTEM_CLOCK(count, count_rate, count_max)
WRITE(,) count, count_rate, count_max
END PROGRAM
摘自 http://gccgnuorg/onlinedocs/gfortran/SYSTEM_005fCLOCKhtml
求绝对值的内部函数是abs,求数组最大值的内部函数是maxval,最小值minval,他们都支持数组运算,所以程序编起来相当简单。比如一个数组为A(N),属实数域,其程序可写为
integer,parameter :: N = 10
real A(N)
real A_abs_max, A_abs_min
! set value for A
A = (/ 10, 20, -15, 21, -13, 27, 33, 15, -33, 18 /)
A_abs_max = maxval( abs(A) )
A_abs_min = minval( abs(A) )
! output the results
print , '绝对值最大数是:', A_abs_max
print , '绝对值最小数是:', A_abs_min
end
对于矩阵,直接取出要求的数据到A里在用上面的程序即可,非常简单!
program main
real 8 s(10)
read(,) s(1:10) !这里需要你对这个数组进行赋值
max=s(1)
min=s(1)
t1=0d0
t2=0d0
do i=1,10
if (s(i)gtmax) then
max=s(i)
t1=i
endif
if(s(i)ltmin) then
min=s(i)
t2=i
endif
enddo
write(,) '最大值+位置',max,t1,'最小值+位置',min,t2
end
!一个求数组最大值或最小值的程序
program main
implicit none
integer::n,v,p,a(3,3)
write(,) '按行输入数组元素,元素间以空格分隔,输入完一行后回车'
do n=1,3
read(,) a(n,:)
enddo
write(,) '查询最大值输入0,查询最小值输入1'
read(,) p
if(p==0) then
call MatMax(a,v)
else
call MatMin(a,v)
endif
write(,) '查询的值为',v
end
subroutine Matmax(m,max)
implicit none
integer::m(3,3),max
max=maxval(m)
end subroutine
subroutine MatMin(m,min)
implicit none
integer::m(3,3),min
min=minval(m)
end subroutine
首先,读文件,或者是在程序中输入你这51行数据
设置行数n=51,这样你后面可以直接通过变换n的值来控制数据行数的变化
parameter(n=51)
integer mm(n,6) ! 二维数组,516 第一列表示序号,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='resulttxt',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
基本上如此,你结果并不都是一维数组,输出的时候,最好加以说明,或者分行或者分不同的文件……
另外,统计相邻两行之间有多少个数是相同的,这段程序我大概表达一下那意思,你自己看着修改。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)