主题:请教关于do循环
			 lwlwd04lwlwd04
				 [专家分:0]  发布于 2010-03-18 18:10:00
 lwlwd04lwlwd04
				 [专家分:0]  发布于 2010-03-18 18:10:00							
			请问一下,我想对数组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个回复)
		
								
				沙发
				
					 jrl506 [专家分:250]  发布于 2010-03-18 18:22:00
jrl506 [专家分:250]  发布于 2010-03-18 18:22:00				
				if(p(i).ge.t)then
   m=p(i)
   p(i)=t
   t=m
endif
这里
							 
						
				板凳
				
					 yy3780 [专家分:110]  发布于 2010-03-18 21:03:00
yy3780 [专家分:110]  发布于 2010-03-18 21:03:00				
				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 楼
				
					 lwlwd04lwlwd04 [专家分:0]  发布于 2010-03-22 19:25:00
lwlwd04lwlwd04 [专家分:0]  发布于 2010-03-22 19:25:00				
				
谢谢,通过您的方式,可以解决问题。不过,我还是没懂为什么会出现问题?请提示!谢谢啦~~~
							 
						
				4 楼
				
					 lwlwd04lwlwd04 [专家分:0]  发布于 2010-03-22 19:25:00
lwlwd04lwlwd04 [专家分:0]  发布于 2010-03-22 19:25:00				
				
谢谢,通过您的方式,可以解决问题。不过,我还是没懂为什么会出现问题?请提示!谢谢啦~~~
							 
						
				5 楼
				
					 asymptotic [专家分:16630]  发布于 2010-03-23 00:48:00
asymptotic [专家分:16630]  发布于 2010-03-23 00:48:00				
				楼主还要下一番功夫,多加修炼!另外,不妨学习 调试。
							 
						
				6 楼
				
					 lwlwd04lwlwd04 [专家分:0]  发布于 2010-03-24 08:25:00
lwlwd04lwlwd04 [专家分:0]  发布于 2010-03-24 08:25:00				
				
谢谢asymtopic的建议,请问有什么专门的书籍么?关于fortran调试的?
请您推荐一下,谢谢!我手里的书都是fortran教材的
							 
						
				7 楼
				
					 asymptotic [专家分:16630]  发布于 2010-03-24 09:45:00
asymptotic [专家分:16630]  发布于 2010-03-24 09:45:00				
				CVF、IVF 的帮助文档中有一些关于调试的技巧;
还有一本书 Dubbing in C++ 专门讲这个。
							 
						
				8 楼
				
					 fengzhi [专家分:90]  发布于 2010-03-27 00:01:00
fengzhi [专家分:90]  发布于 2010-03-27 00:01:00				
				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 楼
				
					 blitheli [专家分:440]  发布于 2010-03-30 21:27:00
blitheli [专家分:440]  发布于 2010-03-30 21:27:00				
				
楼上说的极是,现在已经有很多支持数组的内部函数了,没必要自己编了。
							 
						
									
			
我来回复