C语言怎么定义max函数?

C语言怎么定义max函数?,第1张

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

基本上如此,你结果并不都是一维数组,输出的时候,最好加以说明,或者分行或者分不同的文件……

另外,统计相邻两行之间有多少个数是相同的,这段程序我大概表达一下那意思,你自己看着修改。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12184331.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存