计算机二级C语言上机真题(57)【附详解】
【真题1】 给定程序的功能是把a数组中的n 个数,和b 数组中逆序的n 个数一一
对应相乘、求平方,结果存在c 数组中。
例如:当a 数组中的值是:1、3、5、7、8,b 数组中的值是:2、3、4、5、8
调用该函数后,c 中存放的数据是:64、225、400、441、256
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。
#include < stdio.h >void fun(int a[], int b[], int c[], int n)
{ int i;
for (i=0; i< n; i++)
/**************found**************/
___1___ = (a[i] * b[n-1-i]) *(a[i] * b[n-1-i]);
}
main()
{ int i, a[100]={1,3,5,7,8}, b[100]={2,3,4,5,8}, c[100];
/**************found**************/
fun(___2___, 5);
printf("The result is: ");
/**************found**************/
for (i=0; i< 5; i++) printf("%d ", ___3___);
printf("\n");
}
(2011年2月)
解析: 本题的考核点是for 循环的使用。
提示思路:本题通过for 循环,使用公式c[i] = (a[i] * b[n-1-i]) *(a[i] *
b[n-1-i]),求得数组a与数组b逆序之积的平方,将计算结果存在c 数组中。
答案:【1】c[i] 【2】a,b,c 【3】c[i]
【真题2】 给定程序modi.c 是:计算S=f(f(-1.0)+f(5.0))的值。当程序正确
时,结果为:2488.000000。f(x)函数定义如下:
┌2x^2+3x+4 (x< =2)
设f(x)=│
└-2x^2+3x-4 (x >2)
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < conio.h >#include < stdio.h >#include < math.h >double
f(double x)
{ double y;
/************found************/
If (x< =2.0)
y=2.0*x*x+3.0*x+4.0;
else
y=-2.0*x*x+3.0*x-4.0;
/************found************/
return y
}
main()
{clrscr();
printf("%f\n",f(f(-1.0)+f(5.0)));
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
本题中的第一个错误:在C 语言中,命令语句应为小写字母,所以程序中语句
"If (x< =2.0)"应改为"if (x< =2.0)";
本题中的第二个错误:在C 语言中,应以分号作为语句的分隔符,所以程序中
语句"return y"应改为"return y;"。
【真题3】 请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值
返回。二维数组中的值在主函数中赋予。
例如:二维数组中的值为
1 3 5 7 9
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0
则函数值为61。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#define M 4
#define N 5
int fun (int a[M][N])
{……}
main()
{ int aa[M][N]={{1,3,5,7,9},
{2,9,9,9,4},
{6,9,9,9,8},
{1,3,5,7,0}};
int i,j,y;
clrscr();
printf("The original data is:\n");
for (i=0;i< M;i++)
{ for(j=0;j< N;j++) printf("%6d",aa[i][j]);
printf("\n");
}
y=fun(aa);
printf("\nThe sum: %d\n",y);
printf("\n");
}
(2011年2月)
解析: 本题的考核点是c 语言中嵌套循环语句和条件判断语句的使用。
提示思路:二维数组的周边元素的特点是:它有一个下标为0 或为数组上界。
所以我们只需判断数组的下标是否为0或数组上界即可。按行、列进行循环可
以保证符合条件的元素只被运算一次。
int fun ( int a[M][N] )
{int i, j, sum = 0;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
if ((i == 0)||(i == M - 1)||(j == 0)||(j == N - 1) )/*判断a[i][j]是否
为数组中的第一行或最后一行或第一列或最后一列*/
sum += a[i][j];/*对a数组的周边元素求和*/
return sum;
}
对应相乘、求平方,结果存在c 数组中。
例如:当a 数组中的值是:1、3、5、7、8,b 数组中的值是:2、3、4、5、8
调用该函数后,c 中存放的数据是:64、225、400、441、256
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。
#include < stdio.h >void fun(int a[], int b[], int c[], int n)
{ int i;
for (i=0; i< n; i++)
/**************found**************/
___1___ = (a[i] * b[n-1-i]) *(a[i] * b[n-1-i]);
}
main()
{ int i, a[100]={1,3,5,7,8}, b[100]={2,3,4,5,8}, c[100];
/**************found**************/
fun(___2___, 5);
printf("The result is: ");
/**************found**************/
for (i=0; i< 5; i++) printf("%d ", ___3___);
printf("\n");
}
(2011年2月)
解析: 本题的考核点是for 循环的使用。
提示思路:本题通过for 循环,使用公式c[i] = (a[i] * b[n-1-i]) *(a[i] *
b[n-1-i]),求得数组a与数组b逆序之积的平方,将计算结果存在c 数组中。
答案:【1】c[i] 【2】a,b,c 【3】c[i]
【真题2】 给定程序modi.c 是:计算S=f(f(-1.0)+f(5.0))的值。当程序正确
时,结果为:2488.000000。f(x)函数定义如下:
┌2x^2+3x+4 (x< =2)
设f(x)=│
└-2x^2+3x-4 (x >2)
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < conio.h >#include < stdio.h >#include < math.h >double
f(double x)
{ double y;
/************found************/
If (x< =2.0)
y=2.0*x*x+3.0*x+4.0;
else
y=-2.0*x*x+3.0*x-4.0;
/************found************/
return y
}
main()
{clrscr();
printf("%f\n",f(f(-1.0)+f(5.0)));
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
本题中的第一个错误:在C 语言中,命令语句应为小写字母,所以程序中语句
"If (x< =2.0)"应改为"if (x< =2.0)";
本题中的第二个错误:在C 语言中,应以分号作为语句的分隔符,所以程序中
语句"return y"应改为"return y;"。
【真题3】 请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值
返回。二维数组中的值在主函数中赋予。
例如:二维数组中的值为
1 3 5 7 9
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0
则函数值为61。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#define M 4
#define N 5
int fun (int a[M][N])
{……}
main()
{ int aa[M][N]={{1,3,5,7,9},
{2,9,9,9,4},
{6,9,9,9,8},
{1,3,5,7,0}};
int i,j,y;
clrscr();
printf("The original data is:\n");
for (i=0;i< M;i++)
{ for(j=0;j< N;j++) printf("%6d",aa[i][j]);
printf("\n");
}
y=fun(aa);
printf("\nThe sum: %d\n",y);
printf("\n");
}
(2011年2月)
解析: 本题的考核点是c 语言中嵌套循环语句和条件判断语句的使用。
提示思路:二维数组的周边元素的特点是:它有一个下标为0 或为数组上界。
所以我们只需判断数组的下标是否为0或数组上界即可。按行、列进行循环可
以保证符合条件的元素只被运算一次。
int fun ( int a[M][N] )
{int i, j, sum = 0;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
if ((i == 0)||(i == M - 1)||(j == 0)||(j == N - 1) )/*判断a[i][j]是否
为数组中的第一行或最后一行或第一列或最后一列*/
sum += a[i][j];/*对a数组的周边元素求和*/
return sum;
}