回 帖 发 新 帖 刷新版面

主题:请教关于do循环

请问一下,我想对数组p找出其最大值,并且输出其位置,不过不知道为什么找位置的时候出现了p(1)=0呢?



dimension p(10)
    integer p,t
    read(*,*)(p(i),i=1,10)----比如说输入一组数字/9,5,6,9,5,9,6,9,9,6/
    t=0
    n=0
    do 10 i=1,10
    if(p(i).ge.t)then
     m=p(i)
    p(i)=t
    t=m
    endif
10    continue
    write(*,'(i16)')t---------找到了最大值




    do 20 i=1,10
    write(*,*)p(i)---------为什么此处的p(1)=0呢???也就是说,如果第一个数是最大值,则这个第一的位置并没有输出来

    
    if(p(i).eq.t)then
    
    n=i

    write(*,'(i15)')n---------输出其位置
    
    endif

20    continue    

    end
    
谢谢大家的热心回复

回复列表 (共10个回复)

沙发

if(p(i).ge.t)then
   m=p(i)
   p(i)=t
   t=m
endif
这里

板凳

dimension p(10)
    integer p,t
    read(*,*)(p(i),i=1,10)----比如说输入一组数字/9,5,6,9,5,9,6,9,9,6/
   [color=FF00FF][color=000080]t=0[/color][/color] !!!!!修改成t=p(1)
 n=0
    do 10 i=1,10
    if(p(i).ge.t)then
     m=p(i)
    p(i)=t
    t=m
    endif
10    continue
    write(*,'(i16)')t---------找到了最大值




    
   

3 楼


谢谢,通过您的方式,可以解决问题。不过,我还是没懂为什么会出现问题?请提示!谢谢啦~~~

4 楼



谢谢,通过您的方式,可以解决问题。不过,我还是没懂为什么会出现问题?请提示!谢谢啦~~~

5 楼

楼主还要下一番功夫,多加修炼!另外,不妨学习 调试。

6 楼


谢谢asymtopic的建议,请问有什么专门的书籍么?关于fortran调试的?
请您推荐一下,谢谢!我手里的书都是fortran教材的

7 楼

CVF、IVF 的帮助文档中有一些关于调试的技巧;
还有一本书 Dubbing in C++ 专门讲这个。

8 楼

program main
implicit none
integer p(10)
integer i,val ,loc
val=0
read(*,*)(p(i),i=1,10)
do i=1,10
if(p(i).ge.val)then
val=p(i)
loc=i
end if
end do

write(*,*)val,loc
end

供楼主参考,楼主你的程序中m=p(i)
    p(i)=t
    t=m
已经把p(i)重新赋值了,所以必然p(1)=0,再仔细看看你的程序就明了
p.s. 关于这个数组问题楼主可以使用maxloc 和maxval函数,而不用自己编这么长的程序。[em2][em2]

9 楼


楼上说的极是,现在已经有很多支持数组的内部函数了,没必要自己编了。

10 楼

谢谢大家的help,小弟在此拜谢啦

我来回复

您尚未登录,请登录后再回复。点此登录或注册