
use imsl
implicit none real::a(3,3)=(/1,3,2,&
1,2,1,&
2,1,3/)
real::b(3,1)=(/4,6,6/)
real::x(3,1) call lin_so_gen(a,b,x)!用于求解a*x=b这样一个三元一次方程组
write(*,'(3f5.2)')xend program linear运行程序前确认你的编译器上已经装了IMSL(有的编译器有内置的)要想自己编程来求,最简单的可以用高斯消去法,还有很多求解这类问题的方法,可以参见“数值计算原理”这类书籍,自己编出来的可能没有用IMSL里面的数值计算过程函数的执行效率高,练习一下对熟悉一门计算机语言还是很有提高的。 对于你的第二个问题可以用一个递归程序做,也可以用循环做下面是一个用递归来演示任意整数阶乘的程序PROGRAM SHOWIMPLICIT NONEINTEGER::N,MINTEGER,EXTERNAL::FACTORIAL PRINT *,'输入要计算的阶乘的阶数'READ(*,*)NM=FACTORIAL(N)PRINT * ,N,'!=',M END !FACTORIAL函数用于计算N!RECURSIVE INTEGER FUNCTION FACTORIAL(N) RESULT(B)
IMPLICIT NONE !INTEGER,SAVE::MUL=0
INTEGER::N
!INTEGER::I,J IF(N<0)THEN
B=-1
RETURN
ELSE IF(N==0)THEN
B=1
RETURN
END IF
B=N*INITIALIZE(N-1)
!RETURN
END FUNCTION INITIALIZE
在一个程序中实现你的要求:dimension no(100),score(100)
integer no,score
n=10
c 读数据
do 10 i=1,n
read(*,*) no(i),score(i)
10 continue
c 将数据输出到屏幕
do 12 i=1,n
write(*,*) no(i),score(i)
12 continue
write(*,*)
c 将数据写入文件cj.out
open(99,file='cj.out',status='unknown')
do 15 i=1,n
write(99,*) no(i),score(i)
15 continue
close(99)
c 读刚生成的cj.out文件
open(1,file='cj.out')
do 18 i=1,n
read(1,*) no(i),score(i)
18 continue
close(1)
m=0
do 19 i=1,n
if (score(i).lt.60) then
m=m+1
write(*,*) no(i),score(i)
endif
19 continue
write(*,*) '不及格人数=',m
write(*,*)
m=0
do 20 i=1,n
if (score(i).ge.60.and.score(i).lt.70) then
m=m+1
write(*,*) no(i),score(i)
endif
20 continue
write(*,*) '60~70之间人数=',m
write(*,*)
m=0
do 21 i=1,n
if (score(i).ge.70.and.score(i).lt.80) then
m=m+1
write(*,*) no(i),score(i)
endif
21 continue
write(*,*) '70~80之间人数=',m
write(*,*)
m=0
do 22 i=1,n
if (score(i).ge.80) then
m=m+1
write(*,*) no(i),score(i)
endif
22 continue
write(*,*) '80以上人数=',m
write(*,*)
pause
end
好吧,大概的程序如下:program outcar
implicit none
real, dimension(:,:), allocatable :: coor, diff
character(len=128) :: line
integer :: num, ios, i
real :: frac
open(unit=12, file='OUTCARf', status='old')
open(unit=13, file='Result', status='new')
do
read(12,'(a)', iostat=ios) line
if (ios /= 0) exit
if (index(line, 'f/i') /= 0) then
read (12, '(a)') line
exit
end if
end do
num = 0
do
read (12, '(a)') line
! write(*,*) trim(line)
if (len_trim(line) == 0) exit
num = num + 1
end do
write (*,*) num
rewind 12
allocate(coor(num,3), diff(num,3))
write(*,*) 'please input the frac: '
read(*,*) frac
do
read(12,'(a)', iostat=ios) line
if (ios /= 0) exit
if (index(line, 'f/i') /= 0) then
read (12, '(a)') line
do i=1,num
read (12, *) coor(i,1:3), diff(i,1:3)
write(13,'(3F11.6)') coor(i,1:3) + diff(i,1:3) * frac
end do
write(13,*)
end if
end do
end program outcar
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)