计算机二级C语言上机真题(62)【附详解】
【真题1】 函数fun 的功能是:找出一维整型数组元素中最大的值和它所在的下
标, 最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。
主函数中x 是数组名, n 是x 中的数据个数,max 存放最大值,index 存放最大值
所在元素的下标。
#include < stdlib.h >#include < stdio.h >void fun(int a[], int n , int
*max, int *d )
{ int i,base,subscript;
base=a[0];
subscript=0;
for(i=1;i< n;i++) {
if(a[i] >__1_____) {
subscript=i;
base=a[i];
}
}
*max=base;
__2____=subscript;
}
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 );
}
(2011年2月)
答案:1: base 2: *d
【真题2】 给定程序modi.c 中函数 fun 的功能是:判断一个整数m 是否是素数,
若是返回1,否则返回0。
在main()函数中,若fun 返回1 输出YES,若fun 返回0 输出NO!。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main 函数。
#include < conio.h >#include < stdio.h >int fun ( int m )
{ int k = 2;
while ( k < = m && (m%k))
/************found************/
k++
/************found************/
if (m = k )
return 1;
else return 0;
}
main( )
{ int n;
clrscr( );
printf( "\nPlease enter n: " ); scanf( "%d", &n );
if ( fun ( n ) ) printf( "YES\n" );
else printf( "NO!\n" );
}
(2011年2月)
解析: 本题的考核点是素数的判断。
素数即只能被1 及其本身整除的数。
C 语言中,分号是语句的组成部分,各语句间以分号作为分隔。源程序中
"k++"语句是错误的,应改为"k++;"或相同作用的语句。
C 语言中,判断变量或表达式相等用"=="。源程序中"if(m=k)"语句是错误
的,应改为"if(m==k)"或相同作用的语句。
【真题3】 程序定义了N×N 的二维数组,并在主函数中自动赋值。请编写函数
fun(int a[][N]),函数的功能是:使数组左下半三角元素中的值全部置成0。
例如:a数组中的值为
|1 9 7|
a= |2 3 8|,则返回主程序后a数组中的值应为
|4 5 6|
|0 9 7|
|0 0 8|
|0 0 0|
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun
#include < stdio.h >#include < conio.h >#include < stdlib.h >#define N
5
int fun(int a[][N])
{……}
main()
{ int a[N][N],i,j;
clrscr();
printf("***** The array *****\n");
for (i=0;i< N;i++)
{ for (j=0;j< N;j++)
{ a[i][j]=rand()%10;printf("%4d",a[i][j]);}
printf("\n");
}
fun(a);
printf("THE RESULT\n");
for (i=0;i< N;i++)
{ for (j=0;j< N;j++) printf("%4d",a[i][j]);
printf("\n");
}
}
(2011年2月)
解析: 本题的考核点是C语言中循环嵌套和 if 语句的使用。
提示思路:对于本题,我们给出的参考函数采取的算法是:使用嵌套循环,外
循环是行循环,内循环是列循环,这样可以对整个数组中的元素进行符合条件
的运算。本题要求是对数组左下半三角元素中的值全部赋0,所以首先要使用 if
语句判断出数组的左下半三角,再进行运算。观察二维数组可以看出,数组左
下半三角中的元素 ,行坐标值都大于等于列坐标值。
int fun ( int a[][N] )
{ int i,j;
for (i=0;i< N;i++)
for (j=0;j< N;j++)
{
if (i >=j)/*判断当前数组元素是否为二维数组中左下半三角中的元素*/
a[i][ j] =0;
}
}
标, 最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。
主函数中x 是数组名, n 是x 中的数据个数,max 存放最大值,index 存放最大值
所在元素的下标。
#include < stdlib.h >#include < stdio.h >void fun(int a[], int n , int
*max, int *d )
{ int i,base,subscript;
base=a[0];
subscript=0;
for(i=1;i< n;i++) {
if(a[i] >__1_____) {
subscript=i;
base=a[i];
}
}
*max=base;
__2____=subscript;
}
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 );
}
(2011年2月)
答案:1: base 2: *d
【真题2】 给定程序modi.c 中函数 fun 的功能是:判断一个整数m 是否是素数,
若是返回1,否则返回0。
在main()函数中,若fun 返回1 输出YES,若fun 返回0 输出NO!。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main 函数。
#include < conio.h >#include < stdio.h >int fun ( int m )
{ int k = 2;
while ( k < = m && (m%k))
/************found************/
k++
/************found************/
if (m = k )
return 1;
else return 0;
}
main( )
{ int n;
clrscr( );
printf( "\nPlease enter n: " ); scanf( "%d", &n );
if ( fun ( n ) ) printf( "YES\n" );
else printf( "NO!\n" );
}
(2011年2月)
解析: 本题的考核点是素数的判断。
素数即只能被1 及其本身整除的数。
C 语言中,分号是语句的组成部分,各语句间以分号作为分隔。源程序中
"k++"语句是错误的,应改为"k++;"或相同作用的语句。
C 语言中,判断变量或表达式相等用"=="。源程序中"if(m=k)"语句是错误
的,应改为"if(m==k)"或相同作用的语句。
【真题3】 程序定义了N×N 的二维数组,并在主函数中自动赋值。请编写函数
fun(int a[][N]),函数的功能是:使数组左下半三角元素中的值全部置成0。
例如:a数组中的值为
|1 9 7|
a= |2 3 8|,则返回主程序后a数组中的值应为
|4 5 6|
|0 9 7|
|0 0 8|
|0 0 0|
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun
#include < stdio.h >#include < conio.h >#include < stdlib.h >#define N
5
int fun(int a[][N])
{……}
main()
{ int a[N][N],i,j;
clrscr();
printf("***** The array *****\n");
for (i=0;i< N;i++)
{ for (j=0;j< N;j++)
{ a[i][j]=rand()%10;printf("%4d",a[i][j]);}
printf("\n");
}
fun(a);
printf("THE RESULT\n");
for (i=0;i< N;i++)
{ for (j=0;j< N;j++) printf("%4d",a[i][j]);
printf("\n");
}
}
(2011年2月)
解析: 本题的考核点是C语言中循环嵌套和 if 语句的使用。
提示思路:对于本题,我们给出的参考函数采取的算法是:使用嵌套循环,外
循环是行循环,内循环是列循环,这样可以对整个数组中的元素进行符合条件
的运算。本题要求是对数组左下半三角元素中的值全部赋0,所以首先要使用 if
语句判断出数组的左下半三角,再进行运算。观察二维数组可以看出,数组左
下半三角中的元素 ,行坐标值都大于等于列坐标值。
int fun ( int a[][N] )
{ int i,j;
for (i=0;i< N;i++)
for (j=0;j< N;j++)
{
if (i >=j)/*判断当前数组元素是否为二维数组中左下半三角中的元素*/
a[i][ j] =0;
}
}