计算机二级C语言上机真题(59)【附详解】
【真题1】 下列给定程序中,函数fun()的功能是:给定n 个实数,输出平均值,
并统计平均值以上(含平均值)的实数个数。例如,n=8 时,输入193.199,
195.673,195.757,196.051,196.092,196.596,196.579,196.763,
所得平均值为195.838745,在平均值以上的实数个数应为5。
试题程序:
#include < conio.h >#include < stdio.h >int fun(float x[], int n)
int j, c=0;float __1__;
{ for (j=0; j< n; j++)
__2__;
printf("ave=%f\n",xa);
for (j=0; j< n;j++)
if(__3__)
c++;
return c;
}
main()
{float
x[100]={ 193.199,195.673,195.757,196.051,196.092,196.596,196.579,
196.763};
clrscr ();
printf("%d\n",fun (x,8));
}
(2011年2月)
解析: 填空1:这是一道语法题,这里对某个实型变量进行声明,在函数中找
一下就会发现xa就是这个变量,但是还要注意一下,xa是一个累加变量,其
初值应该设为0.0。
填空2:函数一共有两个循环体,可以很容易地看出第二个循环是计算有多少个
大于平均分的人数,这里的作用也自然就是求平均值,因为循环就这一条语
句,其后没有对累加值求均值的语句,所以在这里要对累加值一并进行除n 运
算。
填空3:这里要将大于平均值的数字个数计算出来,利用循环和条件选择语句,
对x数组进行遍历,若某个值大于等于平均成绩,则将该元素累加计入c 中。
答案:【1】xa=0.0 【2】xa+=x[j]/n 【3】x[j] >=xa
【真题2】 给定程序modi.c 中,函数fun 的功能是:找出一个大于给定整数m且
紧随m 的素数,并作为函数值返回。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < conio.h >#include < stdio.h >int fun(int m)
{ int i,k;
for (i=m+1;;i++) {
for (k=2;k< i;k++)
/************found************/
if (i%k!=0)
break;
/************found************/
if (k< i)
return(i);
}
}
main()
{int n;
clrscr();
printf("\nPlease enter n:");
scanf("%d",&n);
printf("%d\n",fun(n));
}
(2011年2月)
解析: 首先,我们必须先读懂题中程序的大致意思,这是发现并改正程序中错
误的重要前提。
程序中的重要思想如下:
1、首先,要了解素数的意思,素数是指只能被1和它自身整除的数;
2、题目中要求找出一个大于给定整数 m 且紧随 m 的素数。
本题中的第一个错误:在函数fun()的嵌套循环的循环体中,语句"if (i % k !=
0) break ;"是不正确的,结合程序上下文,程序是为了判断当前离m 最近的
整数是否可以为素数,如果它可以整除除了1 和它自身以外其他任意一个整
数,就说明它不是素数,所以应当更改为"if(i%k==0) break;";
本题中的第二个错误:函数fun()中的第二个判断语句"if (k< i)"是不正确的,
应当更改为"if (i< =k)"。
【真题3】 请编写一个函数fun,它的功能是:求出一个M×N 二维数组每行元素的
和数, 并依次放入一个一维数组中传回主函数。例如,若有以下二维数组:
6 10 2 10 16
17 15 15 8 6
4 18 11 19 12
0 12 1 3 7
则输出:44 61 64 23
注意: 部分源程序存在文件prog.c 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#define M 4
#define N 5
#include < stdio.h >fun ( int a[][N] ,int b[])
{……}
main( )
{ int x[M][N], y[M], i , j;
printf("The %dx%d Array :\n",M,N);
for ( i = 0 ; i < M; i++ )
{ for ( j = 0 ; j < N ; j++ ) { x[i][j] = rand()%20; printf("%4d",
x[i][j]); }
printf("\n"); }
fun (x , y );
printf("The sum of each line :\n");
for (i = 0 ;i < M ; i++) printf("%4d", y[i]); printf("\n");
}
(2011年2月)
解析: 本题的考核点是数组和循环语句的嵌套。
提示思路:通过外循环控制数组的行下标,再使用内循环依次对行数组中的所
有元素求和,内循环结束后,将行元素的和存入另外一个数组中。
fun ( int a[][N] ,int b[])
{ int i,j,sum=0,n=0;
for(i=0;i< M;i++){ /*通过外循环控制数组的行下标*/
for(j=0;j< N;j++) /*使用内循环依次对行数组中的所有元素求和*/
sum+=a[i][j];
b[n++]=sum; /*将行元素的和存入数组b中*/
sum=0;
}
}
并统计平均值以上(含平均值)的实数个数。例如,n=8 时,输入193.199,
195.673,195.757,196.051,196.092,196.596,196.579,196.763,
所得平均值为195.838745,在平均值以上的实数个数应为5。
试题程序:
#include < conio.h >#include < stdio.h >int fun(float x[], int n)
int j, c=0;float __1__;
{ for (j=0; j< n; j++)
__2__;
printf("ave=%f\n",xa);
for (j=0; j< n;j++)
if(__3__)
c++;
return c;
}
main()
{float
x[100]={ 193.199,195.673,195.757,196.051,196.092,196.596,196.579,
196.763};
clrscr ();
printf("%d\n",fun (x,8));
}
(2011年2月)
解析: 填空1:这是一道语法题,这里对某个实型变量进行声明,在函数中找
一下就会发现xa就是这个变量,但是还要注意一下,xa是一个累加变量,其
初值应该设为0.0。
填空2:函数一共有两个循环体,可以很容易地看出第二个循环是计算有多少个
大于平均分的人数,这里的作用也自然就是求平均值,因为循环就这一条语
句,其后没有对累加值求均值的语句,所以在这里要对累加值一并进行除n 运
算。
填空3:这里要将大于平均值的数字个数计算出来,利用循环和条件选择语句,
对x数组进行遍历,若某个值大于等于平均成绩,则将该元素累加计入c 中。
答案:【1】xa=0.0 【2】xa+=x[j]/n 【3】x[j] >=xa
【真题2】 给定程序modi.c 中,函数fun 的功能是:找出一个大于给定整数m且
紧随m 的素数,并作为函数值返回。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < conio.h >#include < stdio.h >int fun(int m)
{ int i,k;
for (i=m+1;;i++) {
for (k=2;k< i;k++)
/************found************/
if (i%k!=0)
break;
/************found************/
if (k< i)
return(i);
}
}
main()
{int n;
clrscr();
printf("\nPlease enter n:");
scanf("%d",&n);
printf("%d\n",fun(n));
}
(2011年2月)
解析: 首先,我们必须先读懂题中程序的大致意思,这是发现并改正程序中错
误的重要前提。
程序中的重要思想如下:
1、首先,要了解素数的意思,素数是指只能被1和它自身整除的数;
2、题目中要求找出一个大于给定整数 m 且紧随 m 的素数。
本题中的第一个错误:在函数fun()的嵌套循环的循环体中,语句"if (i % k !=
0) break ;"是不正确的,结合程序上下文,程序是为了判断当前离m 最近的
整数是否可以为素数,如果它可以整除除了1 和它自身以外其他任意一个整
数,就说明它不是素数,所以应当更改为"if(i%k==0) break;";
本题中的第二个错误:函数fun()中的第二个判断语句"if (k< i)"是不正确的,
应当更改为"if (i< =k)"。
【真题3】 请编写一个函数fun,它的功能是:求出一个M×N 二维数组每行元素的
和数, 并依次放入一个一维数组中传回主函数。例如,若有以下二维数组:
6 10 2 10 16
17 15 15 8 6
4 18 11 19 12
0 12 1 3 7
则输出:44 61 64 23
注意: 部分源程序存在文件prog.c 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#define M 4
#define N 5
#include < stdio.h >fun ( int a[][N] ,int b[])
{……}
main( )
{ int x[M][N], y[M], i , j;
printf("The %dx%d Array :\n",M,N);
for ( i = 0 ; i < M; i++ )
{ for ( j = 0 ; j < N ; j++ ) { x[i][j] = rand()%20; printf("%4d",
x[i][j]); }
printf("\n"); }
fun (x , y );
printf("The sum of each line :\n");
for (i = 0 ;i < M ; i++) printf("%4d", y[i]); printf("\n");
}
(2011年2月)
解析: 本题的考核点是数组和循环语句的嵌套。
提示思路:通过外循环控制数组的行下标,再使用内循环依次对行数组中的所
有元素求和,内循环结束后,将行元素的和存入另外一个数组中。
fun ( int a[][N] ,int b[])
{ int i,j,sum=0,n=0;
for(i=0;i< M;i++){ /*通过外循环控制数组的行下标*/
for(j=0;j< N;j++) /*使用内循环依次对行数组中的所有元素求和*/
sum+=a[i][j];
b[n++]=sum; /*将行元素的和存入数组b中*/
sum=0;
}
}