| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 670 人关注过本帖
标题:碰到不明白的地方,请帮忙。
只看楼主 加入收藏
tongxun
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-3-10
收藏
 问题点数:0 回复次数:1 
碰到不明白的地方,请帮忙。
main()
{
int line(int *q,int n);
int *p,i,a[3];
p=a;
for(i=0;i<3;i++)
scanf("%d",p++);
p=a;
line(p,3);
for(p=a,i=0;i<3;i++)
{printf("%d ",*p);p++;}
}
int line(int *q,int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(*(q+k)>*(q+j)) k=j;
if(k!=i)
{t=*(q+i);*(q+i)=*(q+k);*(q+k)=t;}
}
}
假设输入3个数:1 4 3 回车,运行结果为1 3 4。
我的想法是(肯定是错的,但不知道错那了,请大家指出来):
第一次外循环:i=0,k=i=0;
第一次外循环里的第一次内循环:j=1,if(*(q+k)>*(q+j)),k=j=1. if(k!=i) 把*(q+0)与*(q+1)互换 结果为4 1 3
第一次外循环里的第二次内循环:j=2,if(*(q+k)>*(q+j)),k=j=2.if(k!=i)  把*(q+0)与*(q+2)互换 结果为3 1 4
第二次外循环:i=1,k=i=1;
第二次外循环里的第一次内循环:j=2,if(*(q+k)>*(q+j)),k=j=2. if(k!=i) 把*(q+1)与*(q+2)互换结果为3 4 1
到这里因为j<3,所以循环结束,但和运行的结果不对。郁闷啊!!!请大家解释的时候详细点。
搜索更多相关主题的帖子: 错那 
2005-03-10 12:58
nyq1999
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2005-2-22
收藏
得分:0 
你的想法错了呵呵
第一次外循环:i=0,k=i=0
第一次外循环的第一次内循环:j=1,if(*(q+k)>*(q=j)),k=j=1,if(k!=i) 把*(q+0)与*(q+1)互换,但是这里并没互换成功啊,(1不可能大于4)k仍然等于i,结果依然是 1 4 3
同样第一次外循环的第二次内循环仍然没有变,没互换,(1和3比较)结果仍然是 1 4 3

第二次外循环:i=k=1
第二次外循环的第一次内循环:j=2,这里*(q+k)>*(q=j)即(4和3 比较),互换才成功一次 结果就是1 3 4,然后退出循环输出数组
2005-03-10 21:49
快速回复:碰到不明白的地方,请帮忙。
数据加载中...
 
   



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

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