A-A+

请编写函数fun() 该函数的功能是:移动一维数组中的内容 若数组中有n个整数 要求把下标从

2022-08-05 20:13:14 问答库 阅读 171 次

问题详情

请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为1,2,3,4,5,6,7, 8,9,10,11,12,13,14,15,p的值为3。移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15, 1, 2, 3, 4。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
include <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;
printf("The original data:n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("nnEnter 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("nn");
}请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:void fun(int *wint pint n){int i j t;for(i=0; i<=p; i++) /*循环左移p+1次*/{t=w[0];for(j=1/j<n;j++) /*实现循环左移*/w[j-1]=w[j];w[j-1]=t;}}
void fun(int *w,int p,int n){int i, j, t;for(i=0; i<=p; i++) /*循环左移p+1次*/{t=w[0];for(j=1/j<n;j++) /*实现循环左移*/w[j-1]=w[j];w[j-1]=t;}} 解析:本题采用“循环左移”的算法(关于“循环左移”,我们在后面的试题中有详细的解释)。和我们在前面分析的稍有不同的是,一个是整型数组,一个是字符型数组。

考点:函数,下标