用指针做
从键盘上输入10个数字降序排列
#include<stdio.h>
main()
{
float a[10],*p;
int max_id,i,j,t;
p=a;
printf("输入10个数字\n");
for(p=a;p-a<10;p++)
scanf("%f",p);
for(i=0;i<9;i++)
{max_id=i;
for(j=i+1;j<10;j++)
if(*(p+max_id)>*(p+j))
max_id=j;
t=*(p+i);
*(p+i)=*(p+j) ;
*(p+j)=t;
}
for(p=a;p-a<10;p++)
printf("%12f",*p);}
请教大虾错在那?
----------------解决方案--------------------------------------------------------
p没有返回到首地址.
----------------解决方案--------------------------------------------------------
最后不是返回了吗?
for(p=a;p-a<10;p++)
printf("%12f",*p);}
----------------解决方案--------------------------------------------------------
for(i=0;i<9;i++)
{max_id=i;
for(j=i+1;j<10;j++)
if(*(p+max_id)>*(p+j))
max_id=j;
t=*(p+i);
*(p+i)=*(p+j) ;
*(p+j)=t;
}
这部分p没有返回到首地址.再检查一下.
----------------解决方案--------------------------------------------------------
for(p=a;p-a<10;p++)
scanf("%f",p);
是不是把这里该了?????改成
for(i=0;i<10;i++)
scanf("%f",p+i)
----------------解决方案--------------------------------------------------------
还是没解决。。。。
----------------解决方案--------------------------------------------------------
for(p=a,i=0;i<9;i++)
{max_id=i;
for(j=i+1;j<10;j++)
if(*(p+max_id)>*(p+j))
max_id=j;
t=*(p+i);
*(p+i)=*(p+j) ;
*(p+j)=t;
}
----------------解决方案--------------------------------------------------------
#include<stdio.h>
main()
{
float a[10],*p;
int max_id,i,j,t;
p=a;
printf("输入10个数字\n");
for(i=0;i<10;i++)
scanf("%f",p+i);
for(p=a,i=0;i<9;i++)
{max_id=i;
for(j=i+1;j<10;j++)
if(*(p+max_id)>*(p+j))
max_id=j;
t=*(p+i);
*(p+i)=*(p+j) ;
*(p+j)=t;
}
for(p=a;p-a<10;p++)
printf("%12f",*p);
}
还是出错晕了
----------------解决方案--------------------------------------------------------
用指针形式,我并不是很熟练,有花一段
建设:先不要用指针,而是用其它形式,保证结果正确在用指针不迟。
----------------解决方案--------------------------------------------------------
for(p=a,i=0;i<9;i++)
{max_id=i;
for(j=i+1;j<10;j++)
if(*(p+max_id)>*(p+j))
max_id=j;
t=*(p+i);
*(p+i)=*(p+j) ;
*(p+j)=t;
}
排序这块是怎么一回事啊。我都看晕了!
----------------解决方案--------------------------------------------------------