【真题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 大的最小一个数。在本题的编程(www.cppentry.com)中采用的是 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; } |