高手进来看看哪里编错了,多谢!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/02 15:32:27
给定主函数,编写三个函数input()、sort()、output(),分别实现数组元素的输入,数组元素的排序(升序)和数组元素的输出
#include<stdio.h>
main()
{
void input(int *a,int n);
void sort(int *a,int n);
void output(int *a,int n);
int a[10];
input(a,10);
sort(a,10);
output(a,10);
}
void input(int *a,int n)
{
int *p;
for(p=a;p<(a+n);p++)
scanf("%d",&*p);
}
void sort(int *a,int n)
{
int i,*p,t;
i=n;
for(i=0;i<(n-1);i++)
for(p=a;p<(a+n-i);p++)
if(*p>*(p+1))
{
t=*p;
*p=*(p+1);
*(p+1)=t;
}
}
void output(int *a,int n)
{
int *p;
for(p=a;p<(a+n);p++)
printf("%d",*p);
}

排序后输出,第二个元素永远是-30,为什么????

我觉得应该是你的排序那里吧,
在你的冒泡排序的第二个for(p=a;p<(a+n-i);p++)
我觉得应该是for(p=a;p<(a+n-i-1);p++)
你忘了减1了,,还有你用P++这种修正,好像有点不太好吧,
因为p是个指针,你加1它值(指的地址)会加sizeof(基类型)的,更何况你的基类型为int
sizeof(int)会等于2 的,,
所以觉得应改为
for(i=0;i<n-1;i++)
{
for(k=0;k<n-i-1;k++) /*k是事先定义的*/
{
if(*p>*(p+k))
.
.
.
这种结构的冒泡比较好点吧,,,

... ...不会

没见错误啊,你输入是啥?输出是啥?

么 问题啊

未见错误,输出正常,不过&*p这个用法很奇怪,&*p与p是等价的,加那么多符号做什么?

你的程序是对的,我运行了,得到的是正确的结果,你再看看
还有就是 &*p和p是等价的的建议用p看的清楚