【真题1】 给定程序中,函数fun()的功能是:求输入的两个数中较小的数。 例 如:输入5 10,结果为min is 5。 请改正fun()程序中的错误,使它能得出正确的 结果。 试题程序: #include < stdio.h > #include< conio.h > int fun(int x,___1___) { int z; z=x< y__2__x:y; return(z); } main() {int a,b,c; scanf("%d,%d\n",__3___); c=fun(a,b); printf("min is %d",c); } (2011年2月) 解析: 填空1:根据题目的意思,这里应该是子函数的参数声明部分,C语言 中规定,在函数的形参中不允许出现int x,y 之类的语句,必须指定每一个参 数的类型,所以不能直接写y。 填空2:根据题目的意思,此处是使用三目运算符" "比较两个数的大小,使用 规则是如果运算符前面的表达式中哪个变量成立,则整个式子就取运算符后面 的哪个变量。 填空3:由算法可以看出,此处是输入变量a和b的值,因为使用了scanf函 数,所以应该使用符号"&",注意两个变量之间的","不能省略。 答案:【1】int y 【2】 【3】&a,&b 【真题2】 下列给定程序中函数fun()的功能是计算1/n!的值。 例如:给n 输入 5,则输出0.008333。 请改正程序中的错误,使它能得到正确结果。 注意:不要 改动main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include < stdio.h > #include < conio.h > /**********************found***********************/ int fun(int n) { double result =1.0; if(n==0) return 1.0; while(n >1 && n < 170) /**********************found***********************/ result *=n++ ; result=1/result; return result; } main() { int n; printf("Input N:"); scanf("%d",&n); printf("\n1/%d!=%lf\n",n,fun(n)); } (2011年2月) 解析: (1)错误:int fun(int n) 正确:double fun(int n) (2)错误:result *=n++ ; 正确:result *=n-- ; 错误1:函数的返回值为实型数据,所以函数的返回类型应为double。 错误2:根据阶乘的概念,从n 开始,每递减1的数相乘,直到1,因此此处n 递减,而不是递增。 【真题3】 请编写一个函数int fun(int x),它的功能是:判断整数x 是否是同构 数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在 它的平方数的右边。 例如:输入整数5,5的平方数是25,5 是25 中右侧的数, 所以5 是同构数。x 的值由主函数从键盘读入,要求不大于100。 注意:部分源程 序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 #include < conio.h > #include < stdio.h > int fun(int x) {……} main() { int x,y; clrscr(); printf("\nPlease enter a integer numbers:");scanf("%d",&x); if(x >100){printf("data error !\n");exit(0);} y=fun(x); if (y) printf("%d YES\n",x); else printf("%d NO!\n",x); } (2011年2月) 解析: 本题的考核点是C语言中的数字运算。 根据同构数的定义,小于10 的 同构数的平方减同构数本身与10 取模结果一定为0,同样位于10 和100之间 的同构数 的平方减同构数本身与100 取模结果也一定为0。我们只需将取模的 结果取反,就可以在是同构数时返回1,在非同构数时返回0。 int fun ( int x ) { if (x < 10) return !((x * x - x) % 10);/*假如x 的平方减去x 除10 的余数为0 时,则函数返回1*/ else return !((x * x - x) % 100); } 【真题1】 下列给定程序中,函数fun()的功能是:通过某种方式实现两个变量值的 交换,规定不允许增加语句和表达式。例如变量a初值为8,b 初值为3,程序运行 后a 中的值为3,b 中的值为8。 试题程序: #include < conio.h > #include < stdio.h > int fun(int *x,int y) { __1___ t; t=*x;*x=y; return(t)__2__ } main() {int a=3,b=8; printf("%d %d\n ",a,b); b=fun(__3__,b); printf("%d %d\n ",a,b); } (2011年2月) 解析: 填空1:根据题目的意思,这里应该是声名一个新的变量t,由后面的赋 值语句以及返回语句可以明白这个变量应该是整型的(因为函数的返回值类型 是int)。 填空2:根据题目的意思,此处是子函数的返回语句,由C 语言的知识,每个 语句的结尾都应该使用";" 。 填空3:fun()函数的调用方式说明fun()函数的参数应当为指针类型,即应该 把变量的地址作为参数传递(符号"&"是取地址操作)。 答案:【1】int 【2】; 【3】&a 【真题2】 给定程序modi.c 中函数fun的功能是:求两个形参的乘积和商数,并 通过形参返回调用程序。 例如输入:61.82 和 12.65,输出为: c = 782.023000 d = 4.886957。 请改正 fun 函数中的错误,使它能得出正确的结 果。 注意:不要改动 main 函数, #include < stdio.h > #include < conio.h > /**********found**********/ void fun ( double a, b, double x,y ) {/**********found**********/ x = a * b; y = a / b; } main ( ) { double a, b, c, d; clrscr( ); printf ( "Enter a , b : "); scanf ( "%lf%lf", &a, &b ); fun ( a , b, &c, &d ) ; printf (" c = %f d = %f\n ", c, d ); } 解析: 本题的考核点是C语言中函数的入口参数和指针的使用。 函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组成,与普 通的变量说明不同,函数参数必须同时具有变量类型和变量名,因此应该把程 序中"void fun ( double a, b, double x,y )"语句改为"void fun ( double a, double b, double *x, double *y )"或相同作用的语句。 从主函数里的" fun ( a , b, &c, &d ) ; "语句可以看出,fun 函数后两个参数 应为长浮点型数据的指针,因此应该把程序中"x = a * b; y = a / b;"语句改 为"*x = a * b; *y = a / b;"或相同作用的语句。 【真题3】 请编一个函数float fun(double h),函数的功能是对变量h中的值保留 2 位小数,并对第三位进行四舍五入(规定h 中的值为正数)。 例如:h 值为 8.32433,则函数返回8.32; h 值为8.32533,则函数返回8.33。 注意:部分 源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在 函数fun 的花括号中填入你编写的若干语句。 #include < stdio.h > #include < conio.h > float fun(float h) {……} main() { float a; clrscr(); printf("Enter a: ");scanf("%f",&a); printf("The original data is: "); printf("%f \n\n",a); printf("The result: %f\n",fun(a));} 解析: 本题的考核点是类型转换与小数四舍五入的算法。 提示思路:先将原数 值加上要保留位上的位权值的一半,再除以要保留位上的位权值,通过类型的 转换将要舍去部分去掉,最后再通过类型转换将其转换为最终结果。 float fun ( float h ) { long num; h=h+0.005; h=h*100; num=h; /*对h 求整*/ h=num; h=h/100; return h; } |