| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 812 人关注过本帖
标题:求出指定数的大于它的最小数或者小于它的最大数
只看楼主 加入收藏
ljh3675
Rank: 2
等 级:论坛游民
帖 子:14
专家分:12
注 册:2014-12-7
收藏
得分:0 
回复 9楼 wmf2014
如果输入的整数是数列中的数则得不到正确的结果,例如:数列中有数字9,当输入数字为9的时候得到的结果是7,9而不是7,23
2015-06-10 13:23
rolimi
Rank: 4
等 级:业余侠客
威 望:1
帖 子:43
专家分:232
注 册:2015-6-10
收藏
得分:0 
以下是引用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);
}



这段代码过于追求简短,不易阅读。我来加一点注释
程序代码:
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的数;

呆呆的逗比程序猿
2015-06-10 15:10
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
嗯,谢谢10/11楼的指正。
我想,我提供的更多的是思路和方法,我的确没有全覆盖测试。
对于11楼的把条件略做修改即可,如:if((a[i]>c&&a[i]<lamin)||lamin<=c)lamin=a[i]。对10楼所说的极端情况可能要做一下数据范围判断,不过把for语句改为for(i=0,limax=lamin=0;i<8;i++)后,根据结果再判断可能语句少些。

能编个毛线衣吗?
2015-06-10 15:12
ljh3675
Rank: 2
等 级:论坛游民
帖 子:14
专家分:12
注 册:2014-12-7
收藏
得分:0 
谢谢wmf2014和rolimi的帮助,这是稍加修改后的(借用了版主源代码哦
程序代码:
#include <stdio.h> 
int main()

 {
     int a,i,c,j,limax,lamin;//a[]={1,4,7,9,40,23,6,90};
     int s[100];
     printf("请输入整数个数:");
     scanf("%d",&a);
     printf("请输入%d个整数数:",a);
     for(j=0;j<a;j++)
     {
         scanf("%d",&s[j]);
     }
     printf("请输入一个整数:");
     scanf("%d",&c);
     for(i=0,limax=lamin=s[0];i<a;i++)
     {
         if((s[i]>c&&s[i]<lamin)||lamin<=c)lamin=s[i];
         if((s[i]<c&&s[i]>limax)||limax>c)limax=s[i];
     }
     printf("紧挨着%d的两个数是%d,%d\n",c,limax,lamin);
     return 0;

 }
2015-06-10 17:39
快速回复:求出指定数的大于它的最小数或者小于它的最大数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029332 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved