计算机二级C语言上机真题(99)【附详解】
【真题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; }
交换,规定不允许增加语句和表达式。例如变量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; }