国家二级C语言机试(操作题)模拟试卷708
程序填空题
1.函数fun的功能是:计算
直到
(1)x
(2)n
(3)fabs(t)
解析:函数fun的功能是计算级数和。 第一空:“f=1.0+x;”f的初始化为级数的前两项之和,do while循环从第三项x2/2开始计算,第一空处是给t赋初值,t表示级数项,“n++;t*=(-1.0)*x/__2__;”即第一次进入do循环之后n的值为2,故t的初值应该为x,第一空处应为“x”。
第二空:由审题分析可知,后一项乘(-1)*x除以n,故第二空处应为“n”。
第三空:循环的终止条件是(xn/n!)的绝对值小于1e-6,即只要(xn/n!)大于等于1e-6,do循环就执行,故第三处应为“fabs(t)”,labs函数的功能是求绝对值。
程序修改题
2.给定程序MODI1.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 long fun(int x,int y,long *p)
3 { int i;
4 long t=l;
5 /**********found**********/
6 for(i=l;i<y;i++)
7 t=t *x;
8 *p=t;
9 /**********found**********/
10 t=t/1000;
11 return t;
12 }
13 main()
14 { long t,r;int x,y;
15 printf(’’\nlnput x and y:’’);scanf(’’%1d%1d’’,&x,&y);
16 t=fun(x,y,&r);
17 printf(’’\n\nx=%d,y=%d,r=%1d,last=%1d\n\n’’,x,y,r,t);
18 }
(1)for(i=1;i<=y;i++)
(2)t=t%1000;
解析:函数的功能是求整数x的Y次方的低3位值。(1)第一个标识下的“for(i=l;i<y;i++)”说明进行了y-1次方,而不是y次方,所以将“for(i=1;i<y;i++)”改为“for(i=1;i<=y;i++)”。(2)题目中要求截取前面求得结果的低三位,因此,第二个标识下“t=t/1000;”应该改为“t=t%1000;”。
程序设计题
3.请编写函数fun,其功能是:计算并输出当x<0.97
时下列多项式的值,直到|Sn-Sn-1|<0.000001为止。
1 int n=1; /*循环计数*/
2 double sn=1; /*累计数*/
3 double xn=l,xn1=0; /*x的n值,以及x的n-1值;*/
4 while(fabs(xn-xn1)>=0.000001)/*绝对值是否满足条件*/
5 {
6 xn=xn*x*(0.5-n+1)/n;/*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/
7 n+=1;
8 sn+=xn;} /*sn累加上xn*/
9 return (sn);
解析:(1)根据题干中给出的数列,推出每一项分子是在前一项分子的基础上乘以(0.5-n+1)*x,分母则为阶乘,也就是在前一项分母的基础上乘以n。
(2)在循环中求得每一项,然后对其进行累加求和。
本文档预览:3600字符,共2242字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载