C语言:定义3个整型变量以及整形指针利用指针输入3整数,从小到大排序然后输出。 怎么结果总是不对呢?

#include<stdio.h>
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
int main()
{
int i,j,a[3],*p;
p=&a[0];
for(i=0;i<3;i++)
scanf("%d",p+i);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
if(a[i]>a[j])
swap(p+i,p+j);
for(i=0;i<3;i++)
printf("%d",*(p+i));
return 0;
}

for(i=0;i<2;i++)
for(j=0;j<3;j++)
这两个for循环错误,j至少要保证大于等于i,否则你前面交换的值后面又被换回去了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-17
#include<stdio.h>
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
int main()
{
int i,j,a[3],*p;
p=&a[0];
for(i=0;i<3;i++)
scanf("%d",p+i);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(a[i]<a[j])
swap(p+i,p+j);
for(i=0;i<3;i++)
printf("%d",*(p+i));
return 0;
}
第2个回答  推荐于2016-03-26
#include<stdio.h>
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
int main()
{
int i,j,a[3],*p;
p=a;
for(i=0;i<3;i++)
scanf("%d",p+i);
for(i=0;i<2;i++)
for(j=i;j<3;j++)
if(a[i]>a[j])
swap(p+i,p+j);
for(i=0;i<3;i++)
printf("%d",*(p+i));
while(1);
return 0;
}本回答被提问者采纳
相似回答