【真题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 数的 个位和百位上*/ } |