c中10个数取反,帮忙看看拿错了

来源:百度知道 编辑:UC知道 时间:2024/06/02 01:09:14
#include<stdio.h>
void inv(a,n)
{int *p,*j,*x,k;
j=a+n-1,x=(n-1)/2;
for(p=a;p<=x;p++,j--)
{k=*p;*p=*j;*j=k;}
return;
}

main()
{int a[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("the origal num\n:");
for(i=0;i<10;i++)
printf("%3d",a[i]);
inv(a,10);
printf("\nthe sort num:\n");
for(i=0;i<10;i++)
printf("%2d",a[i]);
getch();
}

不就是反序吗?搞这么复杂呢?

最简单的,输入时按for(i=0;i<10;i++) scanf( ...... , &a[i] ); 输入数据。
输出时按 for(i=n-1;i>=0;i--) printf( ...... , a[i] ); 输出。

输入按正序输入,输出按反序输出就可以了,根本不用再写个函数的。

要是非写个函数,也一样,先正序for一下,再反序for一下。
比如这样:
void inv(int *a, int n)
{
int *p=new int; // 初始化指针

for(int i=0;i<n;i++) *(p+i)=*(a+i); // 复制数组

for (i=0;i<n;i++) *(a+i)=*(p+n-1-i); // p按反序再覆盖回a
}

注意你原来的程序,主程序a是数组,所以a代入inv()里是个地址。
那你定义inv()函数就要定义个指针类型void inv(int *a, int n){}

还有你原来定义函数void inv(a,n)都不写a,n的类型?肯定不对嘛。

最后主程序getch()不对,应该是getchar();