回复 9楼 wmf2014
如果输入的整数是数列中的数则得不到正确的结果,例如:数列中有数字9,当输入数字为9的时候得到的结果是7,9而不是7,23
以下是引用wmf2014在2015-6-10 10:01:36的发言:
没那么复杂吧,又是排序、又是函数,还有指针,还多级指针,这岂不让初学者畏难而退么?其实就一个循环,两三行代码即可搞定的。#include <stdio.h>
void main()
{
int i,c=11,limax,lamin,a[]={1,4,7,9,40,23,6,90};
for(i=0,limax=lamin=a[0];i<8;i++)
{
if((a>c&&a<lamin)||lamin<c)lamin=a;
if((a<c&&a>limax)||limax>c)limax=a;
}
printf("紧挨着%d的两个数是%d,%d\n",c,limax,lamin);
}
没那么复杂吧,又是排序、又是函数,还有指针,还多级指针,这岂不让初学者畏难而退么?其实就一个循环,两三行代码即可搞定的。#include <stdio.h>
void main()
{
int i,c=11,limax,lamin,a[]={1,4,7,9,40,23,6,90};
for(i=0,limax=lamin=a[0];i<8;i++)
{
if((a>c&&a<lamin)||lamin<c)lamin=a;
if((a<c&&a>limax)||limax>c)limax=a;
}
printf("紧挨着%d的两个数是%d,%d\n",c,limax,lamin);
}
这段代码过于追求简短,不易阅读。我来加一点注释
程序代码:
if((a[i]>c&&a[i]<lamin)||lamin<c)lamin=a[i]; // // 由于||的两个操作数都没有修改值(没有副作用)。这个if的结果可以等效为 // if(lamin < c) lamin = a[i]; 找第一个不小于c的元素 // else if(c<a[i] && a[i]<lamin) lamin = a[i]; 找比c大比lamin小的元素 //
1,对楼上的情况只要把lamin<c改成lamin<=c就可以了
2,边界条件可以在循环后加判断, if(lamin <= c)没有大于c的数;