这道题我们先简化讨论,我们先考虑m=3的情况, 代码如下:
#include <stdio.h> #include <stdlib.h> #include <math.h> #define M 10 void sort(int *p1,int n) { int b[100]={0}; //数组初始化 int i,j,k,*p2=b; //定义p2指向b数组 for(i=0,j=n-3;i<3,j<n;i++,j++) //a数组后m=3个赋值给b数组的前三个 { *(p2+i)=*(p1+j); } for(i=3,j=0;i<n,j<n-3;i++,j++) //b数组从b【3】到b【n】(即b数组的后n-m个),将a数组a【0】到 a【n-m】赋值给b数组 (a数组的前n-m个) { *(p2+i)=*(p1+j); } printf("The end of array is :"); for(p2=b;p2<(b+n);p2++) //打印输出b数组 { printf("%d ",*p2); } } void set_array(int *p,int n) { int i; printf("Please enter %d number.\n",n); for(i=0;i<n;i++) { scanf("%d",p+i); } } int main(void) { int i,n; int *p=NULL; //防止野指针出现 printf("Please enter N:"); scanf("%d",&n); //输入数组元素个数 int a[n]; set_array(a,n); //调用输入函数赋值 sort(a,n); //调用处理函数进行调换 return 0; }
总结:在主函数中传入数组,在构造函数中再创建另一个数组,分别接收主数组的值,最后进行输出即可。