标题:[求助]简单的指针数组,交换的时候出现错误
只看楼主
gaga
Rank: 1
等 级:新手上路
威 望:2
帖 子:307
专家分:0
注 册:2006-4-5
 问题点数:0 回复次数:18 
[求助]简单的指针数组,交换的时候出现错误

下面是输入10个整数,把最小的与第一个换,最大的与最后一个换;要求是无论实参还是形参,都用指针实现,不用数组
大家最好 是能帮我找下我下面写的这个的错误,因为找不到这个错误让我心里很不舒服,就算是看到其它写的对的程序,可是这个错误找不出来,以后还会犯同样的错误的
我在这里谢谢了啊


#include"stdio.h"

void swap(int *p1,int *p2)
{
int temp;

temp=*p1;
*p1=*p2;
*p2=temp;
}

void sort(int *q,int n)
{
int *max,*min;
*min=*max=*q;

for(q=q+1;q<q+n;q++)
{
if(*q>*max)
max=q;
else min=q;
}

swap(q,max);//此时的q指向的是数组的最后一位数
if(min==q)
swap(q-n+1,max);
else swap(q-n+1,min);

}


main()
{
int a[10],i=0;

printf("Input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);

p=a;
sort(p,10);
for(i=0;i<10;i++)
printf("\n%3d",a[i]);
return 0;

}

搜索更多相关主题的帖子: 指针 int temp void 
2006-05-03 10:19
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 

老大,这好象是潭书题解上的吧


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-03 10:20
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 
p=a;



你的p在什么地方定义的

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-03 10:21
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 
int *max,*min;
*min=*max=*q;
swap(q,max);//此时的q指向的是数组的最后一位数
void swap(int *p1,int *p2)

思路有问题,自己在想想

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-03 10:25
诸神的黄昏
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-4-27
得分:0 

2006-05-03 10:28
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 
你不用刻意的家'*'这个东西,数组名就是指针,而不是有'*'就是指针,没有就不是指针,该是指针的它还是指针,改变不了,你对指针理解有误

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-03 10:28
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 
for(q=q+1;q<q+n;q++)


这能停止循环吗

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-03 10:31
knight110
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-4-13
得分:0 
void sort(int *q,int n)
这个好像是无返回值的吧,

2006-05-03 10:31
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 

#include"stdio.h"

void swap(int *p1,int *p2)
{
int temp;

temp=*p1;
*p1=*p2;
*p2=temp;
}

void sort(int *q,int n)
{
int *max,*min,*temp;
int counter=0;
temp=min=max=q;

for(q=q+1;q<temp+n-1;q++)
{
counter++;
if(*q>*max)
max=q;
if(*q<*min)
min=q;
}

swap(q,max);
if(min==q)
swap(q-n+1,max);
else swap(q-n+1,min);

}


main()
{
int a[10],i=0;
int *p;
printf("Input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);

p=a;
sort(p,10);
for(i=0;i<10;i++)
printf("\n%3d",a[i]);
return 0;

}
你自己比较下就知道错在哪了。


对不礼貌的女生收钱......
2006-05-03 10:48
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 
楼上的好人啊,程序都写了

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-03 10:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-61664-1-1.html




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

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