1、全国计算机二级 C语言上机试题 55+2015年及答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是:判断形参 s所指字符串是否是“回文“(Palindrome),若是,函数返回值为 1;不是,函数返回值为 0。“回文“是正读和反读都一样的字符串(不区分大小写字母)。 例如,LEVEL和 Level是“回文“,而 LEVLEV不是“回文“。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #
2、include int fun(char *s) char *lp,*rp; /*found*/ lp= _1_ ; rp=s+strlen(s)-1; while(toupper(*lp)=toupper(*rp) rp _2_ ; /*found*/ if(lp else return 1; main() char s81; printf(“Enter a string: “); scanf(“%s“,s); if(fun(s) printf(“/n/“%s/“ is a Palindrome./n/n“,s); else printf(“/n/“%s/“ isnt a Palindrom
3、e./n/n“,s); (分数:10.00)_2.给定程序 MODI1.C中 fun函数的功能是:求出以下分数序列的前 n项之和。 2 3 5 8 13 21 , , , , , , 1 2 3 5 8 13 和值通过函数值返回 main函数。 例如,若 n = 5,则应输出: 8.391667。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include /*found*/ fun (int n ) int a = 2, b = 1, c, k ; double s=0.0 ; for ( k = 1;
4、k = n; k+ ) s = s + 1.0 * a / b ; /*found*/ c = a; a += b; b += c; return(s) ; main( ) int n = 5 ; printf( “/nThe value of function is: %lf/n“, fun ( n ) ) ; (分数:10.00)_3.请编写函数 fun,函数的功能是:将大于形参 m且紧靠 m的 k个素数存入 xx所指的数组中。例如,若输入 17, 5,则应输出:19, 23, 29, 31, 37。函数 fun中给出的语句仅供参考。 注意: 部分源程序在文件 PROG1.C文件中。 请勿
5、改动主函数 main和其它函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include void fun(int m, int k, int xx) /* 以下代码仅供参考 */ int i, j=1, t=m+1; while(j=k) /* 以下完成判断素数,并存放到数组 xx中 */ main() int m, n, zz1000 ; printf( “/nPlease enter two integers:“) ; scanf(“%d%d“, fun( m, n, zz) ; for( m = 0 ; m n ; m+ ) printf(“%d “
6、, zzm) ; printf(“/n“) ; NONO( ) ; (分数:10.00)_全国计算机二级 C语言上机试题 55+2015年答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是:判断形参 s所指字符串是否是“回文“(Palindrome),若是,函数返回值为 1;不是,函数返回值为 0。“回文“是正读和反读都一样的字符串(不区分大小写字母)。 例如,LEVEL和 Level是“回文“,而 LEVLEV不是“回文“。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。不得
7、增行或删行,也不得更改程序的结构! 给定源程序: #include #include #include int fun(char *s) char *lp,*rp; /*found*/ lp= _1_ ; rp=s+strlen(s)-1; while(toupper(*lp)=toupper(*rp) rp _2_ ; /*found*/ if(lp else return 1; main() char s81; printf(“Enter a string: “); scanf(“%s“,s); if(fun(s) printf(“/n/“%s/“ is a Palindrome./n/n
8、“,s); else printf(“/n/“%s/“ isnt a Palindrome./n/n“,s); (分数:10.00)_正确答案:(第一处:根据函数体 fun中,对变量 lp的使用可知,lp 应指向形参 s,所以应填:s。 第二处:rp 是指向字符串的尾指针,当每做一次循环 rp指向就要指向前一个字符,所以应填:-。 第三处:当 lp和 rp相等时,则表示字符串是回文并返回 1,否则就返回 0,所以应填:return0。)解析:2.给定程序 MODI1.C中 fun函数的功能是:求出以下分数序列的前 n项之和。 2 3 5 8 13 21 , , , , , , 1 2 3 5
9、8 13 和值通过函数值返回 main函数。 例如,若 n = 5,则应输出: 8.391667。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include /*found*/ fun (int n ) int a = 2, b = 1, c, k ; double s=0.0 ; for ( k = 1; k = n; k+ ) s = s + 1.0 * a / b ; /*found*/ c = a; a += b; b += c; return(s) ; main( ) int n = 5 ; p
10、rintf( “/nThe value of function is: %lf/n“, fun ( n ) ) ; (分数:10.00)_正确答案:(第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要 int或void可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上 double或 float等定义。 第二处:根据公式可知,在 for循环内 b的值应是 c。)解析:3.请编写函数 fun,函数的功能是:将大于形参 m且紧靠 m的 k个素数存入 xx所指的数组中。例如,若输入 17, 5,则应输出:19, 23, 29, 31, 37。函数 fun中给出的语
11、句仅供参考。 注意: 部分源程序在文件 PROG1.C文件中。 请勿改动主函数 main和其它函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include void fun(int m, int k, int xx) /* 以下代码仅供参考 */ int i, j=1, t=m+1; while(j=k) /* 以下完成判断素数,并存放到数组 xx中 */ main() int m, n, zz1000 ; printf( “/nPlease enter two integers:“) ; scanf(“%d%d“, fun( m, n, zz) ; for( m = 0 ; m n ; m+ ) printf(“%d “, zzm) ; printf(“/n“) ; NONO( ) ; (分数:10.00)_正确答案:(void fun(int m, int k, int xx) /* 以下代码仅供参考 */ int i, j=1, t=m+1; while(j=k) /* 以下完成判断素数,并存放到数组 xx中 */ for(i = 2 ; i t; i+) if(t % i=0) break; if(i=t) xxj-1 = i; j+; t+; )解析: