计算机二级C语言上机真题(98)【附详解】
【真题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; }
的前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; }