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_assignmentimplicit 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循环程序示例等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)