1、二级 C 语言分类模拟题 234 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.函数 fun 的功能是:计算 直到 (分数:30.00)_二、程序修改题(总题数:1,分数:30.00)2.给定程序 MODI1.C 中函数 fun 的功能是:求整数 x 的 y 次方的低 3 位值。例如,整数 5 的 6 次方为15625,此值的低 3 位值为 625。 请改正函数 fun 中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! #include stdio.h long fun(i
2、nt x,int y,long *p) int i; long t=1; /*found*/ for(i=1;iy;i+) t=t*x; *p=t; /*found*/ t=t/1000; return t; main() long t,r;int x,y; printf(“/nInput x and y:“);scanf(“%ld%ld“, t=fun(x,y, printf(“/n/nx=%d,y=%d,r=%ld,last=%ld/n/n“,x,y,r,t); (分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.请编写函数 fun,其功能是:计算并输出当 x0.97
3、时下列多项式的值,直到|S n -S n-1 |0.000001 为止。 (分数:40.00)_二级 C 语言分类模拟题 234 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.函数 fun 的功能是:计算 直到 (分数:30.00)_正确答案:()解析:(1)x (2)n (3)fabs(t) 答案考生文件夹 解析 函数 fun 的功能是计算级数和。 第一空:“f=1.0+x;”f 的初始化为级数的前两项之和,do while 循环从第三项 x 2 /2 开始计算,第一空处是给 t 赋初值,t 表示级数项,“n+;t*=(-1.0)*x/
4、_;”即第一次进入 do 循环之后 n 的值为2,故 t 的初值应该为 x,第一空处应为“x”。 第二空:由审题分析可知,后一项乘以(-1)*x 除以 n,故第二空处应为“n”。 第三空:循环的终止条件是(x n /n!)的绝对值小于 1e-6,即只要(x n /n!)大于等于 1e-6,do 循环就执行,故第三处应为“fabs(t)”,fabs 函数的功能是求绝对值。 考点 do.while 循环、数据类型和常量、变量。二、程序修改题(总题数:1,分数:30.00)2.给定程序 MODI1.C 中函数 fun 的功能是:求整数 x 的 y 次方的低 3 位值。例如,整数 5 的 6 次方为1
5、5625,此值的低 3 位值为 625。 请改正函数 fun 中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! #include stdio.h long fun(int x,int y,long *p) int i; long t=1; /*found*/ for(i=1;iy;i+) t=t*x; *p=t; /*found*/ t=t/1000; return t; main() long t,r;int x,y; printf(“/nInput x and y:“);scanf(“%ld%ld“, t=fun(x,y, p
6、rintf(“/n/nx=%d,y=%d,r=%ld,last=%ld/n/n“,x,y,r,t); (分数:30.00)_正确答案:()解析:(1)for(i=1;i=y;i+) (2)t=t%1000; 答案考生文件夹 解析 函数的功能是求整数 x 的 y 次方的低 3 位值。 (1)第一个标识下的“for(i=1;iy;i+)”说明进行了 y-1 次方,而不是 y 次方,所以将“for(i=1;iy;i+)”改为“for(i=1;i=y;i+)”。 (2)题目中要求截取前面求得结果的低三位,因此,第二个标识下“t=t/1000;”应该改为“t=t%1000;”。考点 for 循环结构、运
7、算符。三、程序设计题(总题数:1,分数:40.00)3.请编写函数 fun,其功能是:计算并输出当 x0.97 时下列多项式的值,直到|S n -S n-1 |0.000001 为止。 (分数:40.00)_正确答案:()解析:int n=1; /*循环计数*/ double sn=1; /*累计数*/ double xn=1,xn1=0; /*x 的 n 值,以及 x 的 n-1 值*/ while(fabs(xn-xn1)=0.000001) /*绝对值是否满足条件*/ xn=xn*x*(0.5-n+1)/n; /*表达式分解以后 xn=(xn-1)*x*(0.5-n+1)/n*/ n+=1; sn+=xn; /*sn 累加上 xn*/ return(sn); 答案考生文件夹 解析 (1)根据题干中给出的数列,推出每一项分子是在前一项分子的基础上乘以(0.5-n+1)*x,分母则为阶乘,也就是在前一项分母的基础上乘以 n。 (2)在循环中求得每一项,然后对其进行累加求和。 考点 while 循环控制。