问答题
请编写函数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的花括号中填入你编写的若干语句。
#inolude<stdio.h>
#define N 80
void fun(int *w, int p, int n)
{

}
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();
}
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);
}
【正确答案】
【答案解析】int i, j=0, b[N];
for(i=p+1; i<n; i++)b[j++]=w[i];
for(i=0; i<=p; i++)b[j++]=w[i];
for(i=0; i<n; i++)w[i]=b[i];
答案考生文件夹 [解析] 该程序功能是移动一维数组中的内容。解题思路首先将字符串拷贝到一个临时的数组,然后将字符串进行前移操作,最后将由于前移覆盖掉的字符,由临时数组中拷贝到指定字符串。
[考点] 一维数组、for循环结构。