请编写函数fun,函数的功能是:移动一维数组中的内容:若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,

题目

请编写函数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。

注意:部分源程序在文件PROGl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有一个数组,内放N个整数,要求编写函数int processor(int *p)找出最小的数和它的下标,然后把它和数组中最前面的元素调换,下标返回给主函数输出,原始数组和改变后的数组由void output(int *p) 输出。


C

第2题:

程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m。

例如:若m的值为2,a数组中的值为:

注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


正确答案:
解析:该程序功能是使数组右上半三角元素中的值乘以m。本题中首先要确定右上角半角元素的特点,然后对元素逐个进行乘以m的操作。其中,右上角的元素是行下标小于等于列下标的元素。

第3题:

请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:876 675 896 10l 30l 401 980 431451 777则输出结果为:6,980

注意:部分源程序在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


正确答案:
解析:(1)该程序功能是求最大元素在数组中的下标。它的解题思路是,用最大值变量max标记第一个待找数据,逐个把所有待找数据和max进行比较,并用pos标记其当前最大值所在位置,从而找出最大值。(2)从已给部分源程序的main主函数开始入手,核心函数“fun(a,10,&k);”中的参数a存放着给出的整数,fun函数实现查找最大元素的下标。

第4题:

请编写函数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("\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");

}


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

第5题:

以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空:includefind

以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空: #include<stdio.h> findmax(int*s,int t,int*k) { int p; for(p=0,*k=p;p<t;p++) if(s[p]>s[*k])________; } main() { int a[10],i,k; for(i=0;i<10;i++)scanf("%d",&a[i]); findmax(a,10,&k); printf("%d,%d\n",k,a[k]); }

A.k=p

B.*k=p-s

C.k=p-s

D.*k=p


正确答案:D
解析:k是—个指针,它的值是—个地址,要通过它为主函数的变量改变数据,必须使用*p,边样就可以把—个下标数赋给p指针指向的那个内存单元,所以横线处应填入*k=p。

第6题:

请编写函数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*wint pint n) {int iJ; int a[N]; for(i=0;i=p;i++)a[i]=w[i] for(i=p+1j=0;in;i++j++)w[j]=w[i]; for(i=0;i=p;i++)w[n-p-1+i]=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+1,j=0;in;i++,j++)w[j]=w[i]; for(i=0;i=p;i++)w[n-p-1+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]。

第7题:

下面函数返回数组中最大元素的下标,数组中元素个数为t,将程序补充完整。

int findmax(int s[],int t) {

int k,p;

for(p=0,k=p;p<t;p++) {

if 【 】

k=p;

}

return k;

}


正确答案:(s[p]>s[k])
(s[p]>s[k]) 解析:分析程序其他部分,k存放最大元素的下标。

第8题:

请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p~n-1(p<n-1)的数组元素平移到数组的前面。

例如,一维数组中的原始内容为1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, P的值为6。移动后,一维数组的内容应为7, 8, 9, 10, 11, 12, 13, 14, 15, 1, 2, 3, 4, 5, 6。

[注意] 部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

[试题源程序]

inciude <stdio.h>

define N 80

void fun(int *w, int p, int n)

{

}

main()

{

int a[N]=(i, 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("\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");

}


正确答案:void fun(int *w int p int n) { int i J t; for(i=p; i=n-i; i++) { t=w[n-1]; for(j=n-2; j>=0; j--) w[j+1]=w[j]; w[0]=t; } }
void fun(int *w, int p, int n) { int i, J, t; for(i=p; i=n-i; i++) { t=w[n-1]; for(j=n-2; j>=0; j--) w[j+1]=w[j]; w[0]=t; } }

第9题:

请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p到n-1(p≤n-1)的数组元素平移到数组的前面。

例如,一维数组中的原始内容为1,2,3,4,5,6,7, 8,9,10,11,12,13,14,15,p的值为6。移动后,一维数组中的内容应为7,8,9,10, 11,12,13,14,15,1, 2, 3, 4, 5, 6。

注意:部分源程序给出如下。

请勿改动主函数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("\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");

}


正确答案:void fun(int *w int p int n) { int i.jt; for(i=p;i=n-1;i++) /*循环右移n-p次*/ {t=w[n-11; for(j=n-2;j>=0;j--) /*实现循环右移*/ w[j+1]=w[j]; w[0]=t; }
void fun(int *w, int p, int n) { int i.j,t; for(i=p;i=n-1;i++) /*循环右移n-p次*/ {t=w[n-11; for(j=n-2;j>=0;j--) /*实现循环右移*/ w[j+1]=w[j]; w[0]=t; } 解析:本题采用“循环右移”的算法。和我们在前面分析的稍有不同的是,—个是整型数组,—个是字符型数组。