题目
请编写函数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。
考点
一维数组、循环
代码
#include <stdio.h>
#define N 80
void fun(int *w, int p, int n)
{/*分析:* 0-p部分的内容是要移到后面去的* n 是所给列表的长度*//*定义变量*/int i,j,temp;int pp = p;/*第一步:取出要移到后面去的内容*/for(i=0;i<=pp;i++){temp=w[0];/* 永远取出第一位数字*//*第二步 所有数字往前移动一位*/for(j=1;j<n;j++){w[j-1] = w[j];}/*第三步 将最后一位设置为取出来的数*/w[n-1] = temp;}}
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) ;
}