关于fortran90的问题,急求。寻找1000以内所有的素数,用子程序。下面的程序软件报错。请教。
subroutinesushu(n,a,m)integera(n)doi=1,na(i)=ienddodoi=1,n-1if(a(i)>0)thendoj=i+1,nif...
subroutine sushu(n,a,m)
integer a(n)
do i=1,n
a(i)=i
enddo
do i=1,n-1
if(a(i)>0) then
do j=i+1,n
if(mod(a(j),a(i)==0) then
a(j)=0
endif
enddo
endif
enddo
m=1
do i=2,n
if((a(i)>0) then
m=m+1
a(m)=a(i)
endif
enddo
endsubroutine sushu
program sushu_pro
parameter(n=1000)
integer a(n)
call subroutine(n,a,m)
write(*,100)(a(i),i=2,m)
100 format(1x,8i10)
end program sushu_pro 展开
integer a(n)
do i=1,n
a(i)=i
enddo
do i=1,n-1
if(a(i)>0) then
do j=i+1,n
if(mod(a(j),a(i)==0) then
a(j)=0
endif
enddo
endif
enddo
m=1
do i=2,n
if((a(i)>0) then
m=m+1
a(m)=a(i)
endif
enddo
endsubroutine sushu
program sushu_pro
parameter(n=1000)
integer a(n)
call subroutine(n,a,m)
write(*,100)(a(i),i=2,m)
100 format(1x,8i10)
end program sushu_pro 展开
2个回答
展开全部
我试了一下,有3个错误:
1、第9行少一个右括号;
2、第17行多了一个左括号;
3、第28行,调用子程序不是这么写的,是call sushu(n,a,m)。
×××××××××××××××××××××××××××××××××××××××××××××××××××××
另外,子程序算法写的有问题吧,运行一遍结果只有一个1。
还有像if(a(i)>0) then……end if没什么意义,都已知是1到1000的数了为什么还判断是否大于0呢?
我简单改了一下:
subroutine sushu(n,a,m)
integer a(n)
logical temp
m=1
do i=2,n
temp=.true.
do j=2,i-1
if(mod(i,j)==0)then
temp=.false.
exit
endif
enddo
if(temp)then
a(m)=i
m=m+1
endif
enddo
end subroutine
program sushu_pro
parameter(n=1000)
integer a(n)
call sushu(n,a,m)
do i=1,m-1
write(*,100) a(i)
enddo
100 format(1x,8i10)
end program
1、第9行少一个右括号;
2、第17行多了一个左括号;
3、第28行,调用子程序不是这么写的,是call sushu(n,a,m)。
×××××××××××××××××××××××××××××××××××××××××××××××××××××
另外,子程序算法写的有问题吧,运行一遍结果只有一个1。
还有像if(a(i)>0) then……end if没什么意义,都已知是1到1000的数了为什么还判断是否大于0呢?
我简单改了一下:
subroutine sushu(n,a,m)
integer a(n)
logical temp
m=1
do i=2,n
temp=.true.
do j=2,i-1
if(mod(i,j)==0)then
temp=.false.
exit
endif
enddo
if(temp)then
a(m)=i
m=m+1
endif
enddo
end subroutine
program sushu_pro
parameter(n=1000)
integer a(n)
call sushu(n,a,m)
do i=1,m-1
write(*,100) a(i)
enddo
100 format(1x,8i10)
end program
展开全部
你的程序中有好几处错误,mod那儿少了个括号,下面循环if多了括号......我帮你写了一个简单的。
program sushu_pro
implicit none
integer, parameter :: m = 1000
integer :: i
do i=2, m
call sushu(i)
end do
end program sushu_pro
subroutine sushu(n)
implicit none
integer :: n
integer :: i, tag
tag = 1
do i=2, n-1
if ( mod(n,i) == 0 ) then
tag = 0
exit
end if
end do
if (tag == 1) then
write(*,*) n
end if
end subroutine
program sushu_pro
implicit none
integer, parameter :: m = 1000
integer :: i
do i=2, m
call sushu(i)
end do
end program sushu_pro
subroutine sushu(n)
implicit none
integer :: n
integer :: i, tag
tag = 1
do i=2, n-1
if ( mod(n,i) == 0 ) then
tag = 0
exit
end if
end do
if (tag == 1) then
write(*,*) n
end if
end subroutine
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询