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