一段错误的C代码?

Gongqingshuai 2009-06-16 01:17:44
#include <stdio.h>
main()
{
int a[10];
int i,j,t;
int *p;
printt("intput 10 number :\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
p=&a;
for(j=0;j<9;j++)
{
for(i=0;i<9-j;i++)
{
if(*(p+i)<*(p+i+1))
{
int temp;
temp=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=temp;
}
}
}
for(i=0;i<10;i++)
{
printf("%d",p++);
}


}
我想用指针来实现对数据的排序,写了上面的代码,结果不能,谁能告我哪儿错了?
...全文
76 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
starcat 2009-06-22
  • 打赏
  • 举报
回复
#include <stdio.h>
main()
{
int a[10]={3,4,2,0,1,5,7,8,6,9};
int i,j,t;
int *p;
p=a;
for(j=0;j <9;j++)
{
for(i=0;i <9-j;i++)
{
if(*(p+i) <*(p+i+1))
{
int temp;
temp=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=temp;
}
}
}
p=a;
for(i=0;i <10;i++)
{
printf("%d ",*p++);
}
printf("\n");


}

为什么不用稍微简单一点的算法?
不知要交换多少次,看得我头都晕了,总算明白了楼主的排序思路。
starcat 2009-06-21
  • 打赏
  • 举报
回复
怎么看都感觉for循环的算法有问题。
zfm1988 2009-06-21
  • 打赏
  • 举报
回复
把a=&p改成p=a;通过
reenwoo 2009-06-21
  • 打赏
  • 举报
回复
把printt改成printf
shunyou 2009-06-21
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{
int a[10];
int i,j,*p,temp;
printf("intput 10 number :\n");
for(i=0;i <10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
p=a;
for(j=0;j <9;j++)
{
for(i=0;i <9-j;i++)
{
if(*(p+i)<*(p+i+1))
{

temp=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=temp;
}
}
}
for(i=0;i <10;i++)
{
printf("%d",*(p++));
}
}
老邓 2009-06-16
  • 打赏
  • 举报
回复
嗯,打印时用:

printf("%d\n",*(p+i));
老邓 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 Gongqingshuai 的回复:]
还有你那个P++添得没道理吧?把它去了就对了
[/Quote]
看我13楼的代码,已经去了。
我误会你的代码了。
Gongqingshuai 2009-06-16
  • 打赏
  • 举报
回复
还有你那个P++添得没道理吧?把它去了就对了
Gongqingshuai 2009-06-16
  • 打赏
  • 举报
回复
printf("%d \n",p++); 应是这样的吧?printf("%d \n",*p++);
老邓 2009-06-16
  • 打赏
  • 举报
回复
试试这个:
#include <stdio.h>
int main()
{
int a[10];
int i,j,t;
int *p;
printf("intput 10 number :\n");
for (i=0;i <10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
p=a;
for (j=0;j <9;j++)
{
for (i=0;i <9-j;i++)
{
if (*(p+i) <*(p+i+1))
{
int temp;
temp=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=temp;
}
}
}
for (i=0;i <10;i++)
{
printf("%d \n",p++);
}

return 0;
}
Gongqingshuai 2009-06-16
  • 打赏
  • 举报
回复
#include <stdio.h>
int main()
{
int a[10];
int i,j,t;
int *p;
printf("intput 10 number :\n");
for (i=0;i <10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
p=a;
for (j=0;j <9;j++)
{
for (i=0;i <9-j;i++)
{
if (*(p+i) <*(p+i+1))
{
int temp;
temp=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=temp;
}
}

p++;
}
for (i=0;i <10;i++)
{
printf("%d \n",p++);
}

return 0;
}

就是这段!
Gongqingshuai 2009-06-16
  • 打赏
  • 举报
回复
大哥 我把你的代码复制了下 运行好像结果也不对啊?
askcyg 2009-06-16
  • 打赏
  • 举报
回复

for(j=0;j <9;j++)
{
for(i=1;i <9-j;i++)
{
if(*(p+j) <*(p+i+j))
{
int temp;
temp=*(p+j);
*(p+j)=*(p+i+j);
*(p+i+j)=temp;
}
}
}

老邓 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 superstar_pig 的回复:]
C/C++ code
for(i=0;i <10;i++)
{
printf("%d",p++); //这里打印也不对。你打得是地址。要取个内容。
}
[/Quote]
看错了吧,不是:
printf("%d\n",*(p+i));

已经取值了。
加个\n倒是真的。
不然看不出来,都连在一起了。
lingyin55 2009-06-16
  • 打赏
  • 举报
回复
p=&a; 改为p=a;///这里已经是把数组的首地址赋给p了。
superstar_pig 2009-06-16
  • 打赏
  • 举报
回复

for(i=0;i <10;i++)
{
printf("%d",p++); //这里打印也不对。你打得是地址。要取个内容。
}

老邓 2009-06-16
  • 打赏
  • 举报
回复
for (j=0;j <9;j++)
{
...
p++;
}
yu3000 2009-06-16
  • 打赏
  • 举报
回复
void sort()
{
int a[10];
int i,j,t;
int *p;
printf("intput 10 number :\n");
for(i=0;i <10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
p = a;
for(j=0;j <9;j++)
{
for(i=0;i <9-j;i++)
{
if(*(p+i) <*(p+i+1))
{
int temp;
temp=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=temp;
}
}
}
for(i=0;i <10;i++)
{
printf("%d\n",*(p+i));
}
}
老邓 2009-06-16
  • 打赏
  • 举报
回复
GCC4.4通过:
#include <stdio.h>
int main()
{
int a[10];
int i,j,t;
int *p;
printf("intput 10 number :\n");
for (i=0;i <10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
p=a;
for (j=0;j <9;j++)
{
for (i=0;i <9-j;i++)
{
if (*(p+i) <*(p+i+1))
{
int temp;
temp=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=temp;
}
}

p++;
}
for (i=0;i <10;i++)
{
printf("%d \n",p++);
}

return 0;
}
superstar_pig 2009-06-16
  • 打赏
  • 举报
回复

#include <stdio.h>
main()
{
int a[10];
int i,j,t;
int *p;
printt("intput 10 number :\n");
for(i=0;i <10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
p=&a; //这里什么意思啊。应该是 p = a;吧
for(j=0;j <9;j++)
{
for(i=0;i <9-j;i++)
{
if(*(p+i) <*(p+i+1))
{
int temp;
temp=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=temp;
}
}
}
for(i=0;i <10;i++)
{
printf("%d",p++);
}


}

加载更多回复(2)

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧