| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1079 人关注过本帖
标题:为什摸运行时是个死循环 求解
只看楼主 加入收藏
亲琪琪
Rank: 2
等 级:论坛游民
帖 子:55
专家分:38
注 册:2016-3-12
结帖率:70%
收藏
已结贴  问题点数:10 回复次数:7 
为什摸运行时是个死循环 求解
# include<stdio.h>
int main()
{
int a[7]={1,2,22,55,78,89},i=0,k,j;
printf("请输入一个数:");
scanf("%d",&k);
while(i<6&&k>a[i]) {i++;}
if(i==6) a[6]=k;
else
{
for(j=i+1;j<=6;j++)
a[j+1]=a[j];
}
a[j+1]=k;
for(i=1;1<=7;i++)
printf("%-4d",a[i]);
printf("\n");
return 0;
}
2016-04-05 10:08
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:2 
死循环是说无限循环吗?如果是请检查你退出循环的判断条件,一般都是这里问题
2016-04-05 10:11
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
另外还请说明你的程序准备做什么?这样有助于分析你的意图来分析你的函数逻辑是否有问题。
还有你的格式最好调整下,有的地方看的条理不清。
2016-04-05 10:18
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:2 
你后面有两处数组的下标都越界了。

   唯实惟新 至诚致志
2016-04-05 10:21
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:2 
最后打印结果的循环写错了
    for (i = 0; i < 7; i++)        //i写成了1
        printf("%-4d", a[i]);

另外最好把j定义的时候也初始化一下
2016-04-05 10:21
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
看到错误了,你看你的第17行,for(i=1;1<=7;i++) 这里,是不是把i写成1了,1<=7肯定成立,不是死循环了吗。不过我把1改成i后,编译没有错误了,但是没有输出,也没有生成可执行程序,不知道是编译器问题,还是你的逻辑有问题

[此贴子已经被作者于2016-4-5 10:27编辑过]

2016-04-05 10:24
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:2 
最后一个for循环里判断条件1<=7 ??  

好好学习,天天向上!
2016-04-05 11:01
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:2 
你这是一个插入程序
程序代码:
# include<stdio.h>
int main()
{
int a[7]={1,2,22,55,78,89},i=0,k,j;
printf("请输入一个数:");
scanf("%d",&k);
while(i<6&&k>a[i]) {i++;}
if(i==6) a[6]=k;
else
{
for(j=i+1;j<=6;j++)//这个循环错了,应该从后往前走不是从前往后复制,你想想,这样循环过后从i+1的位置开始全部偶一样了!--》for(int j=6;j>i;j--)
a[j+1]=a[j];
}
a[j+1]=k;    //这个赋值也错了,应该是我的那个循环出来后a[i]=k;并且这句话应该包括到上面的else板块
for(i=1;1<=7;i++)//1<=77的错误是粗心。。。另外C语言数组下标从0开始
printf("%-4d",a[i]);
printf("\n");
return 0;
}


总之问题比较多,在你的程序基础上我做修改如下:

# include<stdio.h>
int main()
{
int a[7]={1,2,22,55,78,89},i=0,k,j;
printf("请输入一个数:");
scanf("%d",&k);
while(i<6&&k>a[i]) {i++;}
if(i==6) a[6]=k;
else
{
for(j=6;j>i;j--)
a[j]=a[j-1];
a[i]=k;
}

for(i=0;i<7;i++)
printf("%-4d",a[i]);
printf("\n");
return 0;
} 


φ(゜▽゜*)♪
2016-04-05 11:07
快速回复:为什摸运行时是个死循环 求解
数据加载中...
 
   



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

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