题目:
请编写函数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。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#define N 80
void fun(int *w, int p, int n)
{
int i,s,j;
for(j=0;j<=p;j++){
s=w[0];//保存第一个元素
for(i=1;i<n;i++){
w[i-1]=w[i];//将后一个元素前移一位
}
w[n-1]=s;//将第一个元素放到最后一位去
}
}
main()
{ int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int i,p,n=15;void NONO ();
printf("The original data:\n");
for(i=0; i<n; i++)printf("%3d",a[i]);
printf("\n\nEnter p: ");scanf("%d",&p);
fun(a,p,n);
printf("\nThe data after moving:\n");
for(i=0; i<n; i++)printf("%3d",a[i]);
printf("\n\n");
NONO();
getchar();
}
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf,*wf ; int a[N], i, j, p, n ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 5 ; i++) {
fscanf(rf, "%d %d", &n, &p) ;
for(j = 0 ; j < n ; j++) fscanf(rf, "%d", &a[j]) ;
fun(a, p, n) ;
for(j = 0 ; j < n ; j++) fprintf(wf, "%3d", a[j]) ; fprintf(wf, "\n") ;
}
fclose(rf) ; fclose(wf) ;
}