问题 问答题

请编写函数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+A,j=0;i<n;i++,j++)w[j]=w[i];

for(i=0;i<=p;i++)w[n-p-A+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]。

单项选择题
判断题