计算机二级C语言上机真题(86)【附详解】
【真题1】 下列程序定义了N×N 的二维数组,并在主函数中赋值。函数fun()的功
能是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如:若a 数
组中的值为
a=0 1 2 7 9
1 11 21 5 5
2 21 6 11 1
9 7 9 10 2
5 4 1 4 1
则返回主程序后s 的值应为310。
试题程序:
#include < stdio.h >#include< conio.h >#include< stdlib.h >#define N
5
int fun (int w[][N])
{ int i,j;
int __1__=0;
for(i=0;i< N;i++)
for(j=0;j< N;j++)
if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0 或N-1,则它一定
是周边元素*/
{s=s+w[i][j]*w[i][j]; /*将周边元素求平方和*/
}
return __2___; /*返回周边元素的平方和*/
}
main()
{ int a[N][N]={0,1,2,7,9,1,11,21,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1};
int i, j;
int s;
clrscr();
printf("*****The array*****\n ");
for (i=0; i< N; i++)
{ for (j=0;j< N;j++)
{printf("%4d ",a[i][j]);}
printf("\n ");
}
s=fun(a);
printf("*****THE RESULT*****\n ");
printf("The sum is : %d\n ",s);
}
(2011年2月)
解析: 该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且
只要下标中有一个为0或N-1,则它一定是周边元素。
答案:1: s 2: s
【真题2】 给定程序modi.c 中,fun 函数的功能是:判断两个指针所指存储单元中
的值的符号是否相同;若相同函数返回1,否则返回0。这两个存储单元中的值都不
为0。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < stdio.h >#include < conio.h
>/************found************/
fun(double *a,*b)
{/************found************/
if(a*b >0.0)
return 1;
else return 0;
}
main()
{ double n,m;
clrscr();
printf("Enter n,m:");scanf("%lf%lf",&n,&m);
printf("\nThe value of function is:%d\n",fun(&n,&m));
}
(2011年2月)
解析: 本题的考核点是C语言中函数的入口参数的用法。
函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组成,与普
通的变量说明不同,函数参数必须同时具有变量类型和变量名,程序中"fun
( double *a, *b )"语句第二个函数参数没有变量类型,是错误的,应该改为
"fun ( double *a, double *b )"或相同作用的语句。
因为a和b均为双精度型指针变量,所以判断a乘b是否大于0,是没有意义
的。应该把程序中的"if ( a * b > 0.0 )"
语句改为"if((*a) * (*b) > 0.0 )"或相同作用的语句。
【真题3】 编写函数fun,它的功能是:求n 以内(不包括n)同时能被3 与7 整
除的所有自然数之和的平方根s,并作为函数值返回。
例如若n 为1000 时,函数值应为:s=153.909064。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < math.h >#include < stdio.h >double
fun(int n)
{……}
main() /*主函数*/
{ clrscr();
printf("s=%f\n",fun(1000));
}
(2011年2月)
解析: 本题的考核点是n 以内能被3与7 整除的所有数之和的算法。
提示思路:从1 到n,依次整除3 与7,将能被整除的数求和,最后求和的平
方根。
double fun(int n)
{ int i,s=0;
for (i=1;i< n;i++)
/*判断i是否能被3 与7同时整除*/
if (i%3==0 && i%7==0) s=s+i;
return (sqrt(s));
}
能是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如:若a 数
组中的值为
a=0 1 2 7 9
1 11 21 5 5
2 21 6 11 1
9 7 9 10 2
5 4 1 4 1
则返回主程序后s 的值应为310。
试题程序:
#include < stdio.h >#include< conio.h >#include< stdlib.h >#define N
5
int fun (int w[][N])
{ int i,j;
int __1__=0;
for(i=0;i< N;i++)
for(j=0;j< N;j++)
if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0 或N-1,则它一定
是周边元素*/
{s=s+w[i][j]*w[i][j]; /*将周边元素求平方和*/
}
return __2___; /*返回周边元素的平方和*/
}
main()
{ int a[N][N]={0,1,2,7,9,1,11,21,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1};
int i, j;
int s;
clrscr();
printf("*****The array*****\n ");
for (i=0; i< N; i++)
{ for (j=0;j< N;j++)
{printf("%4d ",a[i][j]);}
printf("\n ");
}
s=fun(a);
printf("*****THE RESULT*****\n ");
printf("The sum is : %d\n ",s);
}
(2011年2月)
解析: 该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且
只要下标中有一个为0或N-1,则它一定是周边元素。
答案:1: s 2: s
【真题2】 给定程序modi.c 中,fun 函数的功能是:判断两个指针所指存储单元中
的值的符号是否相同;若相同函数返回1,否则返回0。这两个存储单元中的值都不
为0。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < stdio.h >#include < conio.h
>/************found************/
fun(double *a,*b)
{/************found************/
if(a*b >0.0)
return 1;
else return 0;
}
main()
{ double n,m;
clrscr();
printf("Enter n,m:");scanf("%lf%lf",&n,&m);
printf("\nThe value of function is:%d\n",fun(&n,&m));
}
(2011年2月)
解析: 本题的考核点是C语言中函数的入口参数的用法。
函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组成,与普
通的变量说明不同,函数参数必须同时具有变量类型和变量名,程序中"fun
( double *a, *b )"语句第二个函数参数没有变量类型,是错误的,应该改为
"fun ( double *a, double *b )"或相同作用的语句。
因为a和b均为双精度型指针变量,所以判断a乘b是否大于0,是没有意义
的。应该把程序中的"if ( a * b > 0.0 )"
语句改为"if((*a) * (*b) > 0.0 )"或相同作用的语句。
【真题3】 编写函数fun,它的功能是:求n 以内(不包括n)同时能被3 与7 整
除的所有自然数之和的平方根s,并作为函数值返回。
例如若n 为1000 时,函数值应为:s=153.909064。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < math.h >#include < stdio.h >double
fun(int n)
{……}
main() /*主函数*/
{ clrscr();
printf("s=%f\n",fun(1000));
}
(2011年2月)
解析: 本题的考核点是n 以内能被3与7 整除的所有数之和的算法。
提示思路:从1 到n,依次整除3 与7,将能被整除的数求和,最后求和的平
方根。
double fun(int n)
{ int i,s=0;
for (i=1;i< n;i++)
/*判断i是否能被3 与7同时整除*/
if (i%3==0 && i%7==0) s=s+i;
return (sqrt(s));
}