【真题1】 已知一个数列从0 项开始的前3 项:0,0,1,以后的各项都是其相邻 的前3 项之和。下列给定的程序中,函数fun()的功能是:计算并输出该数列前n 项 的平方根之和sum。n 的值通过形参传入。例如,当n=10 时,程序的输出结果应 为23.197745。 试题程序: #include < conio.h > #include < stdio.h > #include < __1__ > double fun(int n) {double sum, s0, s1, s2, s; int k; sum=1.0; if (n< =2) sum=0.0; s0=0.0; s1=0.0; s2=1.0; for (k=4;k< =n;k++) { s=s0+s1+s2; sum+=sqrt(s); s0=s1;s1=s2;__2__; } return __3__; } main() {int n; printf("Input N="); scanf("%d",&n); printf("%f\n",fun(n)); } (2011年2月) 解析: 填空1:从C 语言的学习中我们知道,下面的运算使用了数学函数 sqrt,所以在前面的头文件中应该包含数学函数头文件math.h。 填空2:根据题目的意思,此处是更新数列中将要进行计算的三项,其中前两项 就是前一步计算中的后面两项,第三项应该是刚才计算产生的,即变量s。 填空3:由算法可以看出,这里应该是把子函数的计算结果返回给主函数,需要 返回的就是每次进行累加的变量sum。 答案:【1】math.h 【2】s2=s 【3】sum 【真题2】 给定程序modi.c 中,函数fun 的功能是:把主函数中输入的3 个数, 最大的放在a 中,最小的放在c中。 例如,输入的数为:55 12 34, 输出结果应 当是:a=55.0,b=34.0,c=12.0。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < stdio.h > void fun(float *p,float *q,float *s) { /************found************/ float *k; if (*p< *q) { k=*p;*p=*q;*q=k;} /************found************/ if (*s< *p) { k=*s;*s=*p;*p=k;} if (*q< *s) { k=*q;*q=*s;*s=k;} } main() { float a,b,c; printf("Input a b c: "); scanf("%f%f%f",&a,&b,&c); printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c); fun(&a,&b,&c); printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c); } (2011年2月) 解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。 本题中的第一个错误:由程序可知,变量k应为一个简单变量,它是用来交换 两个数的值,所以程序中语句"float *k;"应改为"float k;" 本题中的第二个错误:程序中应使得*p中的数最大,*s 中的数最小,当*s 中 的数大于*p的值时,应交换二者的值,所以程序中语句"if (*s< *p)"应改为 "if (*s >*p)"或相同作用的语句。 【真题3】 请编写函数fun,其功能是:计算并输出 S=1+(1+2^0.5)+(1+2^0.5+3^0.5)+……+(1+2^0.5+3^0.5+……+n^0.5) 例如,在主函数中从键盘给n 输入20 后,输出为:s=534.188884。 注意:要求 n 的值大于1 但不大于100。 部分源程序在文件prog.c中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。 #include < math.h > #include < stdio.h > double fun(int n) {……} main() { int n; double s; printf("\n\nInput n: "); scanf("%d",&n); s=fun(n); printf("\n\ns=%f\n\n",s); } (2011年2月) 解析: 本题的考核点是c 语言中的基本算法和sqrt()函数的使用。 解题思路: 本题要求计算并输出多项式的值,通式为:1+2^0.5+3^0.5+……+n^0.5, 在给出的参考程序中,由于函数的返回值为双精度型,所以定义变量fac、sum 为双精度型,再使用sqrt()函数求出每一个多项式的值,最后通过sum+=fac; 计算出所有多项式之和,最终返回。 #include < math.h > #include < stdio.h > double fun(int n) {int i; /*定义一个整形变量*/ double fac=1.0; /*定义变量fac、sum 为双精度型*/ double sum=1.0; if (n >1&&n< =100) for(i=2;i< =n;i++) {fac+=sqrt(i); /*使用sqrt()函数求出每一个多项式的值*/ sum+=fac; /*通过sum+=fac;计算出所有多项式之和*/ } return sum; } |