k=i
k=j
i=j
i=n
第1题:
以下程序段是函数返回a所指数组中最大的值所在的下标值,横线处的语句为( )。 fun(int*a, int n) { int i,j=0,k; k=j; for(i=j;i<n;i++) if[a[i]>a[k])______; return(k); }
A.k=i
B.k=j
C.i=j
D.i=n
第2题:
请编一个函数void fun( int tt[M][N], int pp[N], tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
include <conio.h>
include <stdio.h>
define M 3
define N 4
void fun(int tt[M][N],int pp[N])
{
}
main()
{
int t[M] [N]={{68,32,54,12},{14,24,88,
58},{42, 22, 44, 56}};
int p[N],i,j,k;
clrscr();
printf("The riginal data is:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nThe result is:\n");
for(k=0;k<N;k++)
printf("%4d",p[k]);
printf("\n");
}
第3题:
下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
include <stdio.h>
define SIZE 20
fun (double *s, double *w)
{ int k, i; double sum;
for(k=2, i=0; i<SIZE; i++)
{s [i]=k; k+=2;}
sum=0.0;
for(k=0, i=0; i<SIZE;i++)
{sum+=s[i];
/*************found**************/
if(i+1%5==0)
{w[k]=sum/5; Sum=0; k++;}
}
return k;
}
main()
{ double a[SIZE],b[SIZE/5];
int i, k;
k=fun(a/b);
printf ("The original data:\n");
for(i=0;i<SIZE;i++)
{
if(i%5==0)printf("\n");
printf("%4.0f"/a[i]);
}
printf{"\n\nThe result:\n");
for(i=0; i<k; i++) printf("%6.2f",b[i]);
printf("\n\n");
}
第4题:
以下函数模板max()的功能是返回数组a中最大元素的值。请将横线处缺失部分补充完整。
template<typename T>T max(T a[],int n)
{
T m=a[0]
for(int i=1;i<n;i++)
if(a[i]>m)______;
return m;
}
第5题:
下列给定程序中,函数fun()的功能是找出100~n(n不大于1000)之间百位数字加十位数字等于个位数字的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
include<stdio.h>
define N 100
int fun(int *s,int n)
{
int i,j,k,a,b,c;
j=0;
for(i=100;i<n;i++)
{
/*************found***********/
k=n;
a=k%10;
k/=10;
b=k%10;
c=k/10;
if(a==b+c)
/************found**************/
s[j]=i;
}
return j;
}
main()
{
int a[N],n,num=0,i;
do
{
printf("\nEnter n(<=1000):”);
scanf("%d",&n);
}
while(n>1000);
num=fun(a,n);
printf("\n\nThe result:\n”);
for(i=0;i<num;i++)
printf("%5d",a[i]);
printf("\n\n");
}
第6题:
以下函数返回a所指数组中最大值所在的下标值fun(int *a,int n){ int i,j=0,p; p=j; for(i=j;i<n;i++) if(a[i]>a[p])_________; return(p);}在下画线处应填入的内容是A.i=p B.a[p]=a[i] C.p=i D.p=j
第7题:
请编写一个函数fun(),它的功能是:找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。
主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
include<stdlib.h>
include<stdio.h>
void fun(int a[],int n, int *max,int *d)
{
}
main()
{
int i, x[20], max, index, n=10;
randomize();
for(i=0; i<=n; i++)
{
x[i]=rand()%50;
printf("%4d",x[i]);
/*输出一个随机数组*/
}
printf("\n");
fun(x,n,&max,&index);
printf("Max=%5d,Index=%4d\n",max,index);
}
第8题:
以下函数实现按每行8个输出W所指数组中的数据:
在横线处应填人的语句是( )。
A.if(i/8==0)printf(”\n”);
B.if(i/8==O)continue;
C.if(i%8==0)prinff(’’\n”);
D.if(i%8==0)continue;
第9题:
以下函数返回a所指数组中最小的值所在的下标值:
A.i=p
B.a[p]=a[i]
C.p=j
D.p:i
第10题:
以下fun函数返回数组中最大值的下标
在横线处应填入的内容是
A.++k
B.i=k
C.k++
D.k=i
第11题:
以下函数返回a所指数组中最大值所在的下标值: fun(int *a,int n) { int i,j=0,p; p=j; for(i=j;i<n;i++) if(a[i]>a[p])______; return(p); } 在下划线处应填入的内容是( )。
A.i=p
B.a[p]=a[i]
C.p=j
D.p=i
第12题:
(11)己知a所指的数组中有N个元素。函数fun的功能是,将下标k(k>0)开始的后续元素全部向前移动一个位置。请填空。
void fun(int a[N],int k)
{ int i;
for(i=k;i<N;i++) a[ 【11】 ]=a[i];
}
第13题:
试题二
下面程序中函数fun的功能是:在含有10 个元素的s数组中查找最大数,及最大数所在位置(即,下标值),最大数可能不止一个。最大数作为函数值返回,最大数的个数通过指针变量n传回,所在位置由数组pos传回。
例如:
若输入 2 8 5 7 8 4 5 3 2 8
则应输出:
The max: 8
Total: 3 //最大数出现次数
The positions: 1 4 9
请补充下列空缺:
include<stdio.h>
include<conio.h>
define M 10
int fun(int *a, int *n, int pos[])
{int i, k,max=-32767;
(1)
for(i=0; i<M; i++)
if( (2) ) max=a[i];
for(i=0; i<M; i++)
if( (3) )pos[k++]=i;
*n=k;
return max;
}
main()
{int a[M], pos[M], i=0, j, n;
clrscr();
printf("Enter 10 number :");
for(i=0; i<M; i++)scanf("%d", (4));
j=fun( (5) );
printf("The max: %d\n", j);
printf("Total: %d",n);
printf("The position:");
for(i=0; i<n; i++ ) printf("%4d", pos[i]);
printf("\n");
}
试题分析:
正确代码:
#include<stdio.h>
#include<conio.h>
#define M 10
int fun(int *a, int *n, int pos[])
{int i, k, max=-32767;
k=0;//因为后面有k++,所以要在这里先给k赋初值。
for(i=0; i<M; i++)
if(a[i]>max) max=a[i];//用于求出数列中的最大数。
for(i=0; i<M; i++)
if(a[i]== max) pos[k++]=i;//用于记录最大数的下标
*n=k;
return max;
}
main()
{int a[M], pos[M], i=0, j, n;
clrscr();
printf("Enter 10 number :");
for(i=0; i<M; i++)scanf("%d", a+i);
j=fun(a, &n, pos);
printf("The max: %d\n", j);
printf("Total: %d\n",n);
printf("The position:");
for(i=0; i<n; i++ ) printf("%4d", pos[i]);
printf("\n");
}
此程序算法非常简单,先循环找出最大数,再循环找出最大数的下标。但要注意的是一些细节方面的问题,如在形参中int *a 和int pos[]两种写法都可以用来传递数组名。由于形参有:int *n ,所以对应实参应为指针,所以只能写&n不能用n。
参考答案:
(1) k=0
(2) a[i]>max
(3) a[i] == max
(4) a+i 或 &a[i]
(5) a, &n, pos
第14题:
以下fun函数的功能是:找出具有N个元素的一维数组中的最小值,并作为函数值返回,请填空。(设N己定义)
int fun(int x[N])
{int i,k=0
for(i=0;i<N;i++)
if(x[i]<x[k])k=_____;
return x[k];
}
第15题:
以下程序段是函数返回a所指数组中最小的值所在的下标值,请在下划线处填空。
fun(int *a,int n)
{
int i,j=0,p;
p=j;
for(i=j;i<n;i++)
if(a[i]<a[p]) 【 】;
return(p);
}
第16题:
以下程序调用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
第17题:
阅读以下说明,将应填入(n)处的字句写在答卷纸的对应栏内。
【说明】
下面的程序为堆排序程序,其中函数adjust(i,n)是把以R[i](1≤i≤┕i/2┙)为根的二叉树调整成堆的函数,假定R[i]的左、右子树已经是堆,程序中的,是在主函数中说明的结构数组,它含有要排序的n个记录。
【程序】
Void adjust(i,n)
Int i,n;
{
iht k,j;
element extr;
extr=r[i];
k=i;
j=2*i;
while (j<=n )
{if ((j<n) && (r[j].key<r[j+1].key))
(1);
if (extr. key<r[j].key)
{
r[k]=r[j];
k=j;
(2);
}
else
(3);
}
r[k]=extr;
}
/*让i从┗i/2┛逐步减到1, 反复调用函数adjust, 便完成建立初始堆的过程。*/
void heapsort (r,n)
list r;
int n;
{
int i,1;
element extr;
for (i=n/2;i>=1;- -i)
(4); /* 建立初始堆*/
for (k--n;k>=2;k- -)
{
extr=r[1];
r[1]=r[k];
r[k]=extr;
(5);
}
}
第18题:
以下函数模板main()的功能是:返回数组a中最大元素的值。请将横线处缺失部分补充完整。
template<typename T>Tmax(Ta[],intn)
{
Tm=a[0];
for(int i:1;i(n;i++)
if(a[i]>m______;
return m;
}
第19题:
请补充函数fun(),该函数的功能是:寻找两个整数之间的的所有素数(包括这两个整数),把结果保存在数组bb中,函数返回素数的个数。
例如,输入6和21,则输出为:7 11 13 17 19 21。
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
include<conio. h>
include<stdio. h>
define N 1000
int fun (int n, int m, int bb [N])
{
int i, j, k=0, flag;
for (j=n; j<=m; j++)
{
【 】;
for (i=2; i<j; i++)
if(【 】)
{
flag=0;
break;
}
if(【 】)
bb [k++] =j
}
return k;
}
main ()
{
int n=0,m=0, i, k;
int bb[N];
clrscr ();
printf ("Input n\n");
scanf ("%d", &n);
printf ("Input m\n");
scanf ("%d", &m);
for (i=0; i<m-n; i++)
bb[i]=0;
k=fun (n, m, bb);
for (i=0; i<k; i++)
printf ("%4d",bb [i]);
}
第20题:
以下函数返回a所指数组中最小的值所在的下标值: fun(int*a,int n) { int i,j=0,P; p=j; for(i=j;i<n;i++) if(a[i]<a[j])____return(p); } 在下划线处应填入的是( )。
A.i=P
B.a[p]=a[i]
C.p=j
D.p=i
第21题:
以下程序调用fun函数求数组中最大值所在元素的下标。
在横线处应填入的内容是
A.*k=i
B.k=i
C.*k=i-s
D.k=i-s
第22题:
以下函数返回a所指数组中最小的值所在的下标值 fun(int *a,int n) { int i,j=0,p; p=j; for(i=j;i<n;i++) if(a[i]<a[p])______; return(p);} 在下划线处应填入的是
A.i=p
B.a[p]=a[i]
C.p=j
D.p=i
第23题:
试题14
以下程序调用fun函数把x中的值插入到a数组下标为k的数组元素中。主函数中,n存放a数组中数据的个数。请填空。
#include <stdio.h>
void fun(int s[], int *n, int k, int x)
{ int i;
for(i=*n-1; i>=k; i- - ) s[ ___ ]=s[i];
s[k]=x;
*n=*n+______;
}
main()
{ int a[20]={1,2,3,4,5,6,7,8,9,10,11}, i, x=0, k=6, n=11;
fun(a, &n, k, x);
for(i=0; i<n; i++) printf(“%4d”,a[i]); printf(“\n”);
}
第24题:
k=i
k=j
i=j
i=n