计算机二级C语言上机真题(92)【附详解】
【真题1】 给定程序的功能是求二分之一的圆面积,函数通过形参得到圆的半径,
函数返回二分之一的圆面积(注:圆面积公式为:S=πr2,在程序中定义的变量名要与公式的变量相同)。 例如输入圆的半径值:19.527 输出为:s =
598.950017。
#include < stdio.h >
/**********found**********/
float fun ( float ___1___ )
{
/**********found**********/
return 3.14159 * ___2___ /2.0;
}
main ( )
{ float x;
printf ( "Enter x: ");
/**********found**********/
scanf ( "%f", ___3___ );
printf (" s = %f\n ", fun ( x ) );
}
(2011年2月)
解析: 本题的考核点是c 语言中的函数的入口参数和类型转换。
本题求二分之一的圆面积,由数学公式得知圆面积公式为:S=πr2,所以:
题中第一个空填"r":此处是对有参函数的定义,括号内指定形参的类型及形参
变量。
题中第二个空填"r*r":此处是将圆面积公式转化为C 程序中的公式,将主函数
中输入的圆半径通过形参变量进行传递。
题中第三个空填"&x":scanf函数为格式输入函数,其一般形式为:
scanf(格式控制,地址表列)
"格式控制"是用双引号括起来的字符串,也称"转换控制字符串"。
"地址表列"是由若干个地址组成的表列,可以是变量的地址,或字符串的首地
址。
答案:【1】r 【2】r*r 【3】&x
【真题2】 给定程序modi.c 中函数 fun 的功能是:输入两个双精度数,函数返回
它们的平方根的和。例如输入:22.993612 和84.57629812,输出为:y =
13.991709。 请改正 fun 函数中的错误,使它能得出正确的结果。 注意:不要改
动 main 函数,
#include < stdio.h >
#include < conio.h >
#include < math.h >
/**********found**********/
double fun(double *a, *b)
{ double c;
/**********found**********/
c = sqrt( a ) + sqrt( b );
return c;
}
main ( )
{ double a, b, y;
clrscr( );
printf ( "Enter a, b : ");
scanf ("%lf%lf", &a, &b );
y = fun (&a, &b);
printf ("y = %f \n", y );
}
(2011年2月)
解析: 本题的考核点是函数的入口参数和指针的使用。
C 语言中,函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组
成,因此函数参数必须同时具有变量类型和变量名。原程序"double
fun(double *a, *b)"语句第二个函数参数没有说明变量类型,是错误的,应改
为"double fun(double *a, double *b)"。
C 语言中,求平方根的函数为:"double sqrt( double x)"。题目程序里a和
b都是一个double类型的指针变量,它们实际上代表的只是一个地址,这个地
址指向一个double类型数据,而"double sqrt( double x)"函数的参数为一
个double类型数据,所以原程序"c = sqrt( a ) + sqrt( b );"语句是错误
的,应在a和b前加*,改为" c = sqrt( *a ) + sqrt( *b ); "或相同作用的
语句。
【真题3】 函数fun 的功能是:将两个两位数的正整数a、b 合并形成一个整数放在
c 中。合并的方式是:将a 数的十位和个位数依次放在c 数的十位和千位上,b 数的
十位和个位数依次放在c 数的个位和百位上。 例如,当a=45,b=12。调用该函数
后,c=5241。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和
其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include < conio.h >
#include < stdio.h >
void fun(int a,int b,long *c)
{……}
main()
{ int a,b;long c;
clrscr();
printf("Input a,b:");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("The result is: %ld\n",c);
}
(2011年2月)
解析: 本题的考核点是求取整数相应位上的数值的算法。 解题思路:可用整除
和求余的运算求取整数各位上的数值。方法是整除相应位上的位权值,再对其
求余,余数即为相应位上的数值。 本评析仅供参考。
void fun(int a, int b, long *c)
{ int a_up,a_low,b_up,b_low;
a_up=a/10; /*求正整数a 的十位数*/
a_low=a%10; /*求正整数a 的个位数*/
b_up=b/10; /*求正整数b 的十位数*/
b_low=b%10; /*求正整数b 的个位数*/
*c=a_low*1000+b_low*100+a_up*10+b_up; /*将a 数的十位和
个位数依次放在c 数的十位和千位上,b 数的十位和个位数依次放在c 数的
个位和百位上*/
}
函数返回二分之一的圆面积(注:圆面积公式为:S=πr2,在程序中定义的变量名要与公式的变量相同)。 例如输入圆的半径值:19.527 输出为:s =
598.950017。
#include < stdio.h >
/**********found**********/
float fun ( float ___1___ )
{
/**********found**********/
return 3.14159 * ___2___ /2.0;
}
main ( )
{ float x;
printf ( "Enter x: ");
/**********found**********/
scanf ( "%f", ___3___ );
printf (" s = %f\n ", fun ( x ) );
}
(2011年2月)
解析: 本题的考核点是c 语言中的函数的入口参数和类型转换。
本题求二分之一的圆面积,由数学公式得知圆面积公式为:S=πr2,所以:
题中第一个空填"r":此处是对有参函数的定义,括号内指定形参的类型及形参
变量。
题中第二个空填"r*r":此处是将圆面积公式转化为C 程序中的公式,将主函数
中输入的圆半径通过形参变量进行传递。
题中第三个空填"&x":scanf函数为格式输入函数,其一般形式为:
scanf(格式控制,地址表列)
"格式控制"是用双引号括起来的字符串,也称"转换控制字符串"。
"地址表列"是由若干个地址组成的表列,可以是变量的地址,或字符串的首地
址。
答案:【1】r 【2】r*r 【3】&x
【真题2】 给定程序modi.c 中函数 fun 的功能是:输入两个双精度数,函数返回
它们的平方根的和。例如输入:22.993612 和84.57629812,输出为:y =
13.991709。 请改正 fun 函数中的错误,使它能得出正确的结果。 注意:不要改
动 main 函数,
#include < stdio.h >
#include < conio.h >
#include < math.h >
/**********found**********/
double fun(double *a, *b)
{ double c;
/**********found**********/
c = sqrt( a ) + sqrt( b );
return c;
}
main ( )
{ double a, b, y;
clrscr( );
printf ( "Enter a, b : ");
scanf ("%lf%lf", &a, &b );
y = fun (&a, &b);
printf ("y = %f \n", y );
}
(2011年2月)
解析: 本题的考核点是函数的入口参数和指针的使用。
C 语言中,函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组
成,因此函数参数必须同时具有变量类型和变量名。原程序"double
fun(double *a, *b)"语句第二个函数参数没有说明变量类型,是错误的,应改
为"double fun(double *a, double *b)"。
C 语言中,求平方根的函数为:"double sqrt( double x)"。题目程序里a和
b都是一个double类型的指针变量,它们实际上代表的只是一个地址,这个地
址指向一个double类型数据,而"double sqrt( double x)"函数的参数为一
个double类型数据,所以原程序"c = sqrt( a ) + sqrt( b );"语句是错误
的,应在a和b前加*,改为" c = sqrt( *a ) + sqrt( *b ); "或相同作用的
语句。
【真题3】 函数fun 的功能是:将两个两位数的正整数a、b 合并形成一个整数放在
c 中。合并的方式是:将a 数的十位和个位数依次放在c 数的十位和千位上,b 数的
十位和个位数依次放在c 数的个位和百位上。 例如,当a=45,b=12。调用该函数
后,c=5241。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和
其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include < conio.h >
#include < stdio.h >
void fun(int a,int b,long *c)
{……}
main()
{ int a,b;long c;
clrscr();
printf("Input a,b:");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("The result is: %ld\n",c);
}
(2011年2月)
解析: 本题的考核点是求取整数相应位上的数值的算法。 解题思路:可用整除
和求余的运算求取整数各位上的数值。方法是整除相应位上的位权值,再对其
求余,余数即为相应位上的数值。 本评析仅供参考。
void fun(int a, int b, long *c)
{ int a_up,a_low,b_up,b_low;
a_up=a/10; /*求正整数a 的十位数*/
a_low=a%10; /*求正整数a 的个位数*/
b_up=b/10; /*求正整数b 的十位数*/
b_low=b%10; /*求正整数b 的个位数*/
*c=a_low*1000+b_low*100+a_up*10+b_up; /*将a 数的十位和
个位数依次放在c 数的十位和千位上,b 数的十位和个位数依次放在c 数的
个位和百位上*/
}