【真题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 ); } (2011年2月) 解析: 本题的考核点是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; } |