请编写函数fun(),它的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(含p,p<n-1)的数组元素平移到数组的最后。例如:一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为: 5,6,7,8,9,10,1,2,3,4。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include<stdiO.h> #define N 80 void fun(int *w,int p,int n) { } main() {in[ a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int i,p,n=15; printf("The odginal data:\n"); for(i=0;i<n;i++)printf("%3d",a[i]); printf("\nEnter p:"); scanf("%d",&p); fun(a,p,n); printf ("\n The data after moving:\n"); for(i=0;i<n;i++)printf("%3d”,a[i]); }
参考答案:
解析:void fun(int*w,int p,int n) {int i,J; int a[N]; for(i=0;i<=p;i++)a[i]=w[i] for(i=p+1,j=0;i<n;i++,j++)w[j]=w[i]; for(i=0;i<=p;i++)w[n-p-1+i]=a[i]; } 将数组后面的元素向前平移,肯定会将前面的元素覆盖。因此,可以定义一个数组用来暂时存放前面的元素。可以先将w[0]~w[p]依次赋给a[0]~a[p];然后将w[p]~w[n-1)移到数组的前面:再将a[0]~a[p)依次赋给w[n-p-1+i]~w[n-1]。