计算机二级C语言上机真题(96)【附详解】
【真题1】 下列给定程序中,函数fun()的功能是:求整数x 的y 次方的低3 位
值。例如,整数5 的6 次方为15625,此值的低3 位值为625。 试题程序:
___1__< stdio.h >
long fun(int x, int y, long *p)
{ int i;
long t=1;
for(i=1;__2__;i++)
t=t*x;
*p=t;
__3___;
return t;
}
main()
{ long t, r; int x, y;
printf("\nInput x and y: "); scanf("%1d%1d",&x,&y);
t=fun(x,y,&r);
printf("\n\nx=%d, y=%d,r=%ld, last=%ld\n\n ",x, y,
r,t);
}
(2011年2月)
解析: 填空1:由C语言的学习我们知道这里是一个头文件的定义,定义头文
件要用关键字include,而且要用"#"开头。
填空2:这里考查的是循环结束判断语句。由题意知,这个循环是计算x的y
次幂的,而i从1 开始,要计算y次,当然就要让i自加y次,于是这里用"<
=",而不是"< " 。
填空3:题目的意思是求幂的最后3 位数字,而求一个十进制数的后几位的最
常用的办法莫过于使用对其取余的操作。
答案:【1】#include 【2】i< =y 【3】t=t%1000;
【真题2】 给定程序modi.c 中函数 fun 的功能是:求广义菲玻那级数的第n 项。
1,1,1,3,5,9,17,31,…… 项值通过函数值返回 main( )函数。 例如,若
n = 15,则应输出: 2209。 请改正函数fun 中的语法错误,使它能计算出正确的
结果。 注意:不要改动 main 函数,
#include < conio.h >
#include < stdio.h >
long fun ( int n )
{ long a=1, b=1, c=1, d=1, k;
/************found************/
for (k=4,k< =n,k++)
{ d = a+b+c;
/************found************/
a=b,b=c,c=d
}
return d;
}
main( )
{ int n = 15;
clrscr( );
printf( "The value is: %ld\n", fun ( n ) );
}
(2011年2月)
解析: 本题的考核点是C语言的一些基本用法。
"for(k=4,k< =n,k++) "应改为"for(k=4;k< =n;k++) "。C 语言规定:每
个语句和数据定义的最后必须有一个分号。分号是C语句的必要组成部分。因
此,"a=b,b=c,c=d "应改为"a=b;b=c;c=d;"或相同作用的语句。
【真题3】 编写函数fun,它的功能是:求Fibonacci 数列中大于s的最小的一个
数,结果由函数返回。其中Fibonacci 数列F(n)的定义为: F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2) 例如:当s = 1000 时,函数值为:1597。 注意:部分
源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在
函数fun 的花括号中填入你编写的若干语句。
#include < conio.h >
#include < math.h >
#include < stdio.h >
int fun( int s)
{……}
main() /* 主函数 */
{ int n;
clrscr(); n=1000;
printf("n = %d, f = %d\n",n, fun(n)); }
(2011年2月)
解析: 本题的考核点是循环语句的应用。 提示思路:在 Fibonacci 数列中,每
一项的值都是前两项之和。设置一个中间变量f2,用来置放推出的最小数,所
以可以用递推法求出大于s 的最小的一个数。 /*Fibonacci 数列是这么一个数
列0,1,1,2,3,5,8,13……从它的第三项开始每一项的值都是其紧接着
的前两项的和。本也是采用函数的嵌套调用来完成,但若用嵌套调用方式会较
难理解。它要求求出比s 大的最小一个数。在本题的编程中采用的是
while(f2< =s)当它的条件这假时,即得到了第一个比t大的数。*/
int fun (int s)
{int f1=0,f2=1,temp;
while(f2< =s)
{ temp=f2;
f2=f1+f2;
f1=temp; }
return f2;
}
值。例如,整数5 的6 次方为15625,此值的低3 位值为625。 试题程序:
___1__< stdio.h >
long fun(int x, int y, long *p)
{ int i;
long t=1;
for(i=1;__2__;i++)
t=t*x;
*p=t;
__3___;
return t;
}
main()
{ long t, r; int x, y;
printf("\nInput x and y: "); scanf("%1d%1d",&x,&y);
t=fun(x,y,&r);
printf("\n\nx=%d, y=%d,r=%ld, last=%ld\n\n ",x, y,
r,t);
}
(2011年2月)
解析: 填空1:由C语言的学习我们知道这里是一个头文件的定义,定义头文
件要用关键字include,而且要用"#"开头。
填空2:这里考查的是循环结束判断语句。由题意知,这个循环是计算x的y
次幂的,而i从1 开始,要计算y次,当然就要让i自加y次,于是这里用"<
=",而不是"< " 。
填空3:题目的意思是求幂的最后3 位数字,而求一个十进制数的后几位的最
常用的办法莫过于使用对其取余的操作。
答案:【1】#include 【2】i< =y 【3】t=t%1000;
【真题2】 给定程序modi.c 中函数 fun 的功能是:求广义菲玻那级数的第n 项。
1,1,1,3,5,9,17,31,…… 项值通过函数值返回 main( )函数。 例如,若
n = 15,则应输出: 2209。 请改正函数fun 中的语法错误,使它能计算出正确的
结果。 注意:不要改动 main 函数,
#include < conio.h >
#include < stdio.h >
long fun ( int n )
{ long a=1, b=1, c=1, d=1, k;
/************found************/
for (k=4,k< =n,k++)
{ d = a+b+c;
/************found************/
a=b,b=c,c=d
}
return d;
}
main( )
{ int n = 15;
clrscr( );
printf( "The value is: %ld\n", fun ( n ) );
}
(2011年2月)
解析: 本题的考核点是C语言的一些基本用法。
"for(k=4,k< =n,k++) "应改为"for(k=4;k< =n;k++) "。C 语言规定:每
个语句和数据定义的最后必须有一个分号。分号是C语句的必要组成部分。因
此,"a=b,b=c,c=d "应改为"a=b;b=c;c=d;"或相同作用的语句。
【真题3】 编写函数fun,它的功能是:求Fibonacci 数列中大于s的最小的一个
数,结果由函数返回。其中Fibonacci 数列F(n)的定义为: F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2) 例如:当s = 1000 时,函数值为:1597。 注意:部分
源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在
函数fun 的花括号中填入你编写的若干语句。
#include < conio.h >
#include < math.h >
#include < stdio.h >
int fun( int s)
{……}
main() /* 主函数 */
{ int n;
clrscr(); n=1000;
printf("n = %d, f = %d\n",n, fun(n)); }
(2011年2月)
解析: 本题的考核点是循环语句的应用。 提示思路:在 Fibonacci 数列中,每
一项的值都是前两项之和。设置一个中间变量f2,用来置放推出的最小数,所
以可以用递推法求出大于s 的最小的一个数。 /*Fibonacci 数列是这么一个数
列0,1,1,2,3,5,8,13……从它的第三项开始每一项的值都是其紧接着
的前两项的和。本也是采用函数的嵌套调用来完成,但若用嵌套调用方式会较
难理解。它要求求出比s 大的最小一个数。在本题的编程中采用的是
while(f2< =s)当它的条件这假时,即得到了第一个比t大的数。*/
int fun (int s)
{int f1=0,f2=1,temp;
while(f2< =s)
{ temp=f2;
f2=f1+f2;
f1=temp; }
return f2;
}