当前位置: 代码迷 >> C语言 >> 指针问题,
  详细解决方案

指针问题,

热度:123   发布时间:2005-07-20 14:20:00.0
指针问题,

对输入n个整数排序并输出: #include<stdio.h> main() {int a[100],i,n,*p; p=a; /*指针指向数组*/ printf("\nInput the total of number:"); scanf("%d",&n); printf("Input the number:"); for(i=0;i<n;i++) scanf("%d,",&a[i]); p=a; sort( a, n); printf("The array number is:"); for (p=a,i=0;i<n;i++) printf("%d\t",*(p+i));

} sort(int *p,int n) /*冒泡法进行排序/* {int t,j,i; for (j=1;j<n;j++) {for (i=0;i<n-j;i++) if(*(p+i)>*(p+i+1)) {t=(*p+i); /*指针指向的值调换*/ *(p+i)=*(p+i+1); *(p+i+1)=t; } }

} 运行后输入是乱码 为什么???

搜索更多相关的解决方案: 指针  int  number  sort  

----------------解决方案--------------------------------------------------------
最后两行t=(*p+i)应该是t=*(p+i)其他没仔细看

----------------解决方案--------------------------------------------------------
冒泡算法错了,仔细看看!
p=a;  来回写这么多遍干什么?

[此贴子已经被作者于2005-7-20 18:08:09编辑过]



----------------解决方案--------------------------------------------------------
谢谢二楼兄弟提醒,那一行不小心写错了,
改回来了,可以用了,
三楼的兄弟,也谢谢你的关心啦
不过,那个冒泡法应该没有错吧
你按二楼的改一下去运行,
----------------解决方案--------------------------------------------------------

如果把后面三行 {t=*(p+i); *(p+i)=*(p+i+1); *(p+i+1)=t; } 改成是地址调换,而不是值调换,(前面的int i改成int*t)如: {t=p+i; p+i=p+i+1; p+i+1=t; } 整个新程序是这样子: #include<stdio.h> main() {int a[100],i,n,*p;

printf("\nInput the total of number:"); scanf("%d",&n); printf("Input the number:"); for(i=0;i<n;i++) scanf("%d,",&a[i]); sort( a, n); printf("The array number is:"); for (p=a,i=0;i<n;i++) printf("%d\t",*(p+i));

} sort(int *p,int n) {int *temp,j,i; for (j=1;j<n;j++) {for (i=0;i<n-j;i++) if(*(p+i)>*(p+i+1)) {temp=p+i; p+i=p+i+1; p+i+1=temp; } }

} 编译时,出现这样的错误: 错误 array.c 22: 需要逻辑0或非0在 sort 函数中 错误 array.c 23: 需要逻辑0或非0在 sort 函数中 警告 array.c 27: 'temp' 被赋值但却没有使用在 sort 函数中#include<stdio.h> 看不懂请解释一下,


----------------解决方案--------------------------------------------------------
地址交换?就算交换成功也只是指针指向的地址改变 而数据并没有真正的改变如果要改变地址来排序的话你要用到指针数组了而不是指针
----------------解决方案--------------------------------------------------------

#include<stdio.h> #include<malloc.h>

void main() { int a[100],i,n,*p;

printf("\nInput the total of number:"); scanf("%d",&n); p=(int*)malloc(n*sizeof(int)); printf("Input the number:"); for(i=0;i<n;i++) scanf("%d,",&a[i]); sort( a, n); printf("The array number is:"); for (p=a,i=0;i<n;i++) printf("%d\t",*(p+i));

} sort(int *p,int n) {int *temp,j,i; for (j=1;j<n;j++) {for (i=0;i<n-j;i++) if(*(p+i)>*(p+i+1)) {temp=*(p+i); *(p+i)=*(p+i+1); *(p+i+1)=temp; } }

} 试试这个


----------------解决方案--------------------------------------------------------
  相关解决方案