1、国家二级 C语言机试(操作题)模拟试卷 348及答案与解析 一、程序填空题 1 函数 fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数 isleap用来判别某一年是否为闰年。 例如,若输入: 2008 5 1,则程序输出: 2008年 5月 1日是该年的第 122天。 请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 int isleap(int year) 3 int leap; 4 l
2、eap=(year 4=0 18 *found* 19 t(k)=b(j); 20 bj s=0; 21 22 return t; 23 24 outresult(STU a, FILE *pf) 25 int i; 26 for(i=0; i N; i+) 27 fprintf(pf, No= s Mark= d n, ai num, ai s); 28 fprintf(pf, n n); 29 30 main() 31 STU aN=A01, 81, A02, 89, A03, 66, A04, 87,A05, 77, A06, 90, A07, 79, A08, 61, A09, 80,
3、 A10,71; 32 STU *pOrder; 33 int i, m; 34 printf(*The Original data* n); 35 outresult(a, stdout); 36 printf( nGive the number of the students who have better score: ); 37 scanf( d, m); 38 while(m 10) 39 printf( nGive the number of the students who have better score: ); 40 scanf( d, m); 41 42 porder=f
4、un(a, m); 43 printf(* THE RESULT * n); 44 printf(The top: n); 45 for(i=0; i m; i+) 46 printf( s d n, pOrderi num, pOrderi s); 47 free(pOrder); 48 三、程序设计题 3 请编写函数 fun,其功能是:计算并输出当 x 0 97时下列多项式的值,直到Sn-Sn-1 0 000001为止。 例如,在主函数中从键盘给 x输入 0 21后,输 出为: s=1 100000。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内
5、容,仅在函数 fun的花括号中填入你编写的若干语句。 1 #include stdio h 2 #icludemath h 3 double fun(double x)4 5 6 NONO()7 *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * 8 FILE *rf, *wf; int i;double s, x;9 rf=fopen(in dat, r”); 10 wf=fopen(out dat, w); 11 for(i=0;i 10; i+)12 fscanf(rf, 1f, x); 13 s=fun(x); 14 fprintf(wf, 1f n,s)
6、; 15 16 fclose(rf); fclose(wf); 17 18 main()19 double x, s; 20 printf(Input:x: ); scanf( 1f, x); 21 s=fun(x); 22 printf(s= f n, s);23 NONO(); 国家二级 C语言机试(操作题)模拟试卷 348答案与解析 一、程序填空题 1 【正确答案】 (1)leap (2)day (3)1 【试题解析】 第一空: “return(1); p”这一空出现在 isleap函数中,是为了判断我们给出的年份是否为闰年的函数,这里要填的为此函数的返回值。很明显地,这里的数据为 le
7、ap,判断是否为闰年后,我们还需要返回 leap是否是闰年。所以这一空应该填 lea。第二空: “days=days+_(2)_; p”这一空出现在 fun函数中,所填的是 days的数据结果算式, days即为我们需要统计的天数。这里根据条件和函数的下一步,我们可以看出来这里的 days统计是当年份不为闰年时的天数统计,而当年份不为闰年时,只要将给出的月份前面几个月份天数相加,再加上这个月的日期即为这个给出年月日在这一年中的天数,再根据上一步我们知道算式右边的 days代表的即为本月前面月份的天数总和,所以这里只需要加上本月的日期就可以得到我们需要的一年中的第几天。所以这一空应该填的是给出的
8、日期day。 第三空: “days=days+_(3)_; p”这一空出现在 fun函 数中,这里所填也是 days的数据,但是我们可以看到这里的 days是在判断完为闰年且月份大于 2时进行的计算,所以这里的 days算法不同于上一步 days的算法。根据常识我们都可以知道,闰年大于 2的月份是要比普通的年份多一个 2月 29号的,所以要比普通的日期天数多一天,所以这里应该加上 1,所以这一空应该填的是 1。 二、程序修改题 2 【正确答案】 (1)t=(STU *)calloc(sizeof (STU), m); (2)tk=bj; 【试题解析】 (1)题干中要求结构体 STU类型的 m个
9、学生 放在动态分配的连续存储区中, “t=(STU *)calloc(sizeof( STU), m)”语句没有使用分号 “; ”结束,因此需要在语句结尾处加分号。 calloc函数是 C语言的动态分配函数,分配存储空间。 (2)第二个标识下是将 b数组拷贝到 t数组,在 C语言中,数组元素的访问使用中括号 “”而不是元括弧 “()”,因此第二标识下应改成 “tk=bj; ”。 三、程序设计题 3 【正确答案】 1 int n=1; *循环计数 * 2 double sn=1; *累计数 * 3 double xn=1, 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-i)*x*(0 5-n+i) n* 7 n+=1; 8 sn+=xn; * sn累加上 xn* 9 return(sn); 【试题解析】 (1)根据题干中给出的数列,推出每一项分子是在前一项分子的基础上乘以 (0 5-n+1)*x,分母则为阶乘,也就是在前一项分母的基础上乘以 n。 (2)在循环中求得每一项,然后对其进行累加求和。