写一个FORTRAN程序

写一个FORTRAN程序,第1张

IMPLICIT NONE

CHARACTER(LEN=100):: C1,C2

INTEGER::I,N=0

WRITE(,) ' 请输入一个字符串(长度从1到100):'

READ(,'(A)') C1

DO I=1,100

IF(C1(I:I<>' '))THEN

N=N+1

C2(N:N)=C1(I:I)

ENDIF

WRITE(,'(A)') C2(1:N)

ENDDO

输出的数是这样的

1   2

3   4

5   6

(1X,2I4)意思是,每一次输出一个空格,然后是两个占4位的整数然后就该换行了

因此一共生成三行数据,6/2=3

输出的值是J,J的大小是1到6,因此生成的记录数应该是A  6个

program main

implicit none

integer::i

real::a(1000)=(/(i,i=1,1000)/)

a=2a

write(,)a

pause

endprogram

一百万的数组我机子带不动,先给一千你试试,要一百万自己把一千改成一百万。

!一个求数组最大值或最小值的程序

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

program dataread

implicit none

integer::I,J,K

integer::Mx1,Mx2,N1,N2

character(len=20)::file1,file2,file3

character ans

real,dimension(:),allocatable::data1,data2

file1="1txt"

file2="2txt"

file3="3txt"

open(11,file= trim(file1),status="old",err=998)

open(12,file= trim(file2),status="old",err=998)

open(13,file= trim(file3))

Mx1=0

N1=0

do

read(11,,end=22)I

write(,)"1",I

if (Mx1<I) Mx1=I

N1=N1+1

enddo

22 Mx2=0

N2=0

do

read(12,,end=23)I

write(,)"2",I

if (Mx2<I) Mx2=I

N2=N2+1

enddo

if(N1neN2) then

write(,)"Data Numbers in two files are not the same, do you still wanna continue(Y/N)"

read(,)ans

if(anseq"N") stop " Sorry, merge data can not be finished"

endif

23 allocate(data1(N1),data2(N2))

rewind 11

rewind 12

do I=1,min(N1,N2)

read(11,)J,data1(I)

read(12,)K,data2(I)

if(JneK) then

write(,) "Warning, numbers are not the same in two files"

endif

write(13,"(2F103)")data1(I),data2(I)

enddo

goto 999

998 stop "File can not be found!"

999 stop "Normal End"

end

由于不是很了解数据到底是什么样的,所以在写程序的时候并没有前面编号不一致的情况,但是扩展性还是留下了,那个Mx1和Mx2目的就是为了防止楼主万一要拓展,要求用编号控制对应的数字或者编号不是按照对应顺序的。反正这个代码是基本能实现楼主的要求了。如果1和2文件中的数字个数不一致的话,程序会提醒并询问是否继续,要是继续的话就按照个数最小的那个文件个数来排序。

do i=1,10

if(mod(i,2) eq 0 ) cycle

print,i

enddo

end

输出结果:

1

3

5

7

9

意思是循环体中cycle之后的语句不再被执行,而是直接开始新一轮的循环。

1、fortran循环

program main

implicit none

integer::i,sum

i=0

sum=0

do while (i < 10)

sum = sum + i

end do

endprogram

对应C循环

#include <stdioh>

#include <stdlibh>

int main ()

{

int i,sum;

i=0;

sum=0;

while (i < 10)

{

sum = sum + i;

}

return 0;

}

2、fortran选择

program main

implicit none

integer::i,sum

i=0

sum=0

select case(i)

case(0)

sum=i+0

case(1)

sum=i+3

case default

sum=i+5

end select

endprogram

对应C选择

#include <stdioh>

#include <stdlibh>

int main ()

{

int i,sum;

i=0;

sum=0;

switch(i)

{

case 0:

sum=i+0;

break;

case 1:

sum=i+3;

break;

default:

sum=i+5;

break;

}

return 0;

}

假设1角需要x个,2角y个,5角z个,那么满足要求的条件是,

      x+2y+5z= 10,

其中,0≤x≤10,0≤y≤5,0≤z≤2,且 x,y,z 均为正整数 因此最直观的程序可以写成

program money_assignment

implicit none

integer  x, y, z, id

  write(,)

  write(,) ' 方法号   1角硬币个数    2角硬币个数   5角硬币个数'

  

  id = 0

  do z = 0, 2

    do y = 0, 5

      do x = 0, 10

        if ( (x+2y+5z) == 10 ) then

          id = id + 1

          write(,999) id, x, y, z

        end if

      end do

    end do

  end do

999 format( 3x,i2,10x,i2, 2(13x,i2) )

end program money_assignment

题目要求用子程序,直接将program改成subroutine即可。

以上就是关于写一个FORTRAN程序全部的内容,包括:写一个FORTRAN程序、FORTRAN语言程序、求一个简单的fortran循环程序示例等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10133296.html

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

发表评论

登录后才能评论

评论列表(0条)

保存