| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1186 人关注过本帖
标题:当m=7时陷入死循环 怎么破
只看楼主 加入收藏
杏仁巧克力
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-4-1
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:4 
当m=7时陷入死循环 怎么破
#include<stdio.h>
int m;
int show(int a[],int p,int r)
{
  while(p<r)
  {
      if(m==(p+r+2)/2)
      {   printf("%d\n",a[(p+r)/2]);
      goto o;}
   
          if((m<(p+r+2)/2))
          r=(p+r)/2;
          else
          p=(p+r)/2;
      

  }
  if(m==p)
      printf("%d\n",a[p-1]);
  if(m==r)
      printf("%d\n",a[r-1]);
o:return 0;}

int main()
{
    int a[]={1,2,3,4,5,6,7};
    printf("想要输出第几小的数:");
    scanf("%d",&m);
    if
        (m>7) printf("-1");
    else show(a,0,6);
    return 0;}
搜索更多相关主题的帖子: return include 
2016-04-12 21:05
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:1 
先把你的代码准备做什么 说清楚

另外 代码的对齐缩进非常重要
绝不是可以随便敷衍的东西
请把对齐缩进写好

https://zh.
2016-04-12 22:14
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:1 
看不太懂你写的,你能保证除以2能整除?还是先把数组先排序再输出大小。

   唯实惟新 至诚致志
2016-04-12 22:15
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:1 
1、最好能把你的程序的目的是什么说清楚,便于分析你程序上的逻辑及算法
2、建议把代码的条理格式理清楚,具体什么格式,很多C书上都有强调,就像二楼说的;这其实是个非常重要的习惯,
尤其是刚开始写的时候更要注意:
一方面这样程序可读性更好,有时候自己写完就能看到哪里问题了。
另一方面代码还是给人看的,一看条理清晰,可读性高,心情就不一样,别人也更愿意给你解决问题的,你也就更容易得到你想要的结果。
2016-04-13 12:44
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:17 
#include<stdio.h>
int m;
int show(int a[],int p,int r)
{
      while(p<r)
    {
        if(m==(p+r+2)/2)           
           {
            printf("%d\n",a[(p+r)/2]);
              goto o;
          }
        if((m<(p+r+2)/2))
               r=(p+r)/2;               
        else
               p=(p+r)/2;               
     }
      if(m==p)                //此处p==0,p-1数组就越界了,所以你输入0也会出错
          printf("%d\n",a[p-1]);   
      if(m==r)                //此处r==6
        printf("%d\n",a[r-1]);
    o:return 0;
}

int main()
{
    int a[]={1,2,3,4,5,6,7};
    printf("想要输出第几小的数:");
    scanf("%d",&m);
    if(m>7)
         printf("-1");
    else show(a,0,6);
    return 0;
}

给你注释了点地方,你看下你的show函数,里面根本就没有考虑到m=7时候怎么处理啊,当然就会一直while了,
不光输入7有问题,你输入0试试,也有问题;代码编译通过,不代表程序就没有问题哦,你这个错误就是逻辑上的错误了,算法设计有问题吧。你说下你想实现的目的是啥,难道是  这句话:想要输出第几小的数?
如果只是这个目的,真没必要搞的这么麻烦啊你,你的数组a是赋初始值了的。后面也没有要更改其中的元素。所以想输出第几小的数很好弄啊:
#include<stdio.h>
int main()
{
    int m=0;
    int a[]={1,2,3,4,5,6,7};
    printf("想要输出第几小的数:");
    scanf("%d",&m);
    if(m>7||m<0)
         printf("-1");
    else printf("%d",a[m-1]);
    return 0;
}


[此贴子已经被作者于2016-4-13 13:14编辑过]

2016-04-13 13:07
快速回复:当m=7时陷入死循环 怎么破
数据加载中...
 
   



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

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