1、国家二级( C语言)机试模拟试卷 265及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:判断形参 s所指字符串是否是 “回文“(Palindrome),若是,函数返回值为 1;不是,函数返回值为 0。 “回文 “是正读和反读都一样的字符串 (不区分大小写字母 )。 例如, LEVEL和 Level是 “回文 “,而 LEVLEV不是 “回文 “。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKI C中。 不 得增行或删行,也不得更改程序的结构 ! #include #include #incl
2、ude int fun(char *s) char*ip, *rp; /*found*/ lp=【 1】; rp=s+strlen(s)一 1; while(toupper(*lp)=toupper (*rp) /*found*/ t=b; b=a; a=t; main () int a, b; printf (“Enter a , b : “); scanf (“%d,%d“, fun ( printf (“ a = %d b = %dn “, a, b); 三、程序设计题( 40分) 3 编写函数 fun,它的功能是:求小于形参 n同时能被 3 与 7整除的所有自然数之和的平方根,并作为函
3、数值返回。 例如若 n为 1000时,程序输出应为: s=153 909064。 注意:部分源程序在文件 PROGl C文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include double fun(int n) main() *主函数 * void NONO(); printf(“s= f n“, fun(1000); NONO(); void NONO() *本函数用于打开文件,输入数据,调用 函数,输出数据,关闭文件。 * FILE *fp, *wf; int i, n; double s; fp=fo
4、pen(“in clat“, “r“); wf=fopen(“out dat“, “w“); for(i=0 ; i #include double fun(double x, int n) main() void NONO(); printf(“ f n“, fun(0 3, 10); NONO(); void NONO() *本函数用 于打开文件,输入数据,调用函 数,输出数据,关闭文件。 * FILE*fp, *wf; int i, n ; double s, x; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i
5、10; i+) fscanf(fp, “ lf, d“, *b=*a; *a=t; 【试题解析】 ( 1)该题明显是指针类型的错误。主函数传的形参分别是 a、 b的地址,而函数 fun中却定义 a、 b为整型,所以第一个标识下的 “void fun(int a, b)”改为 “void fun(int *a,int *b)”。 ( 2)根据上面的修改,第二个标识下, “t=b; b=a; a=t;”明显应该是 “t=*b; *b=*a; *a=t;”。 三、程序设计题( 40分) 3 【正确答案】 double sum=0 0; int i; for(i=21; i=n; i+) if(i 3
6、=0)&(i 7=0)sum+=i; return sqrt(sum); 【试题解析】 (1)首先,利用循环逐个选出能同时被 3与 7整除的所有自然数。 (2)然后,对这些自然数求和。最后求得平方根,并返回这个值。 4 【正确答案】 double s=1 0, y=x; int i ; long k=1; for(i=1; i=n; i+) k=k*i; s+=y k; y*=x; return s ; 【试题解析】 (1)根据题干中给出的数列,推出每一项分子是在前一项的基础上乘以 x,分母是每一项的阶乘,它可以在前一项的基础上乘以当前项的项数,即第n项是 n。 (2)在循环中求得每一项,然后对其进行累加求和。