当前位置: 代码迷 >> C语言 >> [求助]为什么交换是无效的
  详细解决方案

[求助]为什么交换是无效的

热度:439   发布时间:2005-06-01 19:11:00.0
[求助]为什么交换是无效的

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

void swap(int *,int *); void input(int *,int); void process(int *,int); void output(int *,int);

int main() { int *n; n=(int*)malloc(10*sizeof(int)); if(!n) { printf("Cannot allocate memory!\n"); return 0; } input(n,10); printf("Before processing\n"); output(n,10); process(n,10); printf("After processing\n"); output(n,10); free(n); getch(); return 1; }

void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; }

void input(int *num,int size) { register int i; printf("Please input %d numbers\n",size); for(i=0;i<size;i++) scanf("%d",num++); }

void process(int *num,int size) { register int i; int *p,*maxp=num,*minp=num; int maxnum=*num,minnum=*num; int *bkbegin=num,*bkend=num+size-1; for(p=num;p<=bkend;p++) { if(maxnum<*p) maxp=p; if(minnum>*p) minp=p; } /* 为什么交换是无效的? */ swap(minp,bkbegin); swap(maxp,bkend); }

void output(int *num,int size) { register int i; for(i=0;i<size;i++) printf("%4d",*num++); printf("\n"); }

[此贴子已经被作者于2005-6-1 19:13:05编辑过]

搜索更多相关的解决方案: void  include  process  memory  

----------------解决方案--------------------------------------------------------
问题已经解决了,是我输入的测试数据有点问题。。
----------------解决方案--------------------------------------------------------
我看不是数据输入的问题。
交换是有效的,只是minp,maxp没有找出数列中的最小和最大的数。
----------------解决方案--------------------------------------------------------

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

void swap(int *,int *); void input(int *,int); void process(int *,int); void output(int *,int);

int main() { int *n; n=(int*)malloc(10*sizeof(int)); if(!n) { printf("Cannot allocate memory!\n"); return 0; } input(n,10); printf("Before processing\n"); output(n,10); process(n,10); printf("After processing\n"); output(n,10); free(n); getch(); return 1; }

void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; }

void input(int *num,int size) { register int i; printf("Please input %d numbers\n",size); for(i=0;i<size;i++) scanf("%d",num++); }

void process(int *num,int size) { register int i; int *p,*maxp=num,*minp=num; //int maxnum=*num,minnum=*num; int *bkbegin=num,*bkend=num+size-1; for(p=num;p<=bkend;p++) { if(*maxp<*p) maxp=p; if(*minp>*p) minp=p; } /* 为什么交换是无效的? */ swap(minp,bkbegin); swap(maxp,bkend); }

void output(int *num,int size) { register int i; for(i=0;i<size;i++) printf("%4d",*num++); printf("\n"); }


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