回 帖 发 新 帖 刷新版面

主题:do while用法有个地方模糊

do i=0,200,1
    ef=(i*0.01d0-1d0)*1
    i1=1
    do while((ek(i1)-1d-8)<ef)
    i1=i1+1
    end do
        end do
ek(:)包含很多数字,是一个矩阵的特征值,大约从-3---3的很多数。模糊地地方在这:
i=0
ef=-1
do while开始检查ek(:)里的数,第一个数,比如是-3吧,-3-1d-8<ef,成立,然后i1=1.
但是我要检查的是这样一个数:ef(1)>=ek(i1),ef(1)<ek(i1+1),上面这个语句好像也可以实现。
但是它到底是实现哪个思路呢?

回复列表 (共2个回复)

沙发

首先的的ek(:)是否已经大小排序了, 这点你没有说明.
do while((ek(i1)-1d-8)<ef)
  i1=i1+1
end do
就是检查出首次出现(ek(i1)-1d-8)<ef不符合的位置i1而已. (就是条件不成立,循环不在继续,也就是这时候的i1是不符合这个条件的,具体什么含义你自己再想想了)

随便指出的是,如果ek(:)所有元素都满足(ek(i1)-1d-8)<ef, 你这段代码不就数组越界了吗? 你的具体问题能够确保这种情况不出现?

板凳

多谢yeg001
ek(:)已经按照大小排序了。
针对我的具体情况我看了,总是有元素不满足(ek(i1)-1d-8)<ef,所以不会出现越界的情况。多谢啊!!

我来回复

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