1、全国计算机等级考试二级 C 语言操作题 31+2016 年及答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun 的功能是:对形参 s 所指字符串中下标为奇数的字符按 ASCII 码大小递增排序,并将排序后下标为奇数的字符取出,存入形参 p 所指字符数组中,形成一个新串。 例如,形参 s 所指的字符串为:baawrskjghzlicda,执行后 p 所指字符数组中的字符串应为:aachjlsw。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C 中。不得增行或删行,也不得更改程序的结构! 给定源程
2、序: #include void fun(char *s, char *p) int i, j, n, x, t; n=0; for(i=0; si!=/0; i+) n+; for(i=1; i /*found*/ _1_; /*found*/ for(j=_2_+2 ; j if(stsj) t=j; if(t!=i) x=si; si=st; st=x; for(i=1,j=0; i /*found*/ pj=_3_; main() char s80=“baawrskjghzlicda“, p50; printf(“/nThe original string is : %s/n“,s);
3、 fun(s,p); printf(“/nThe result is : %s/n“,p); (分数:10.00)_2.给定程序 MODI1.C 中函数 fun 的功能是:用下面的公式求 的近似值,直到最后一项的绝对值小于指定的数(参数 num )为止: 1 1 1 1 - + - + . 4 3 5 7 例如, 程序运行后, 输入 0.0001, 则程序输出 3.1414。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include float fun ( float num ) int
4、 s ; float n, t, pi ; t = 1 ; pi = 0 ; n = 1 ; s = 1 ; /*found*/ while(t = num) pi = pi + t ; n = n + 2 ; s = -s ; /*found*/ t = s % n ; pi = pi * 4 ; return pi ; main( ) float n1, n2 ; printf(“Enter a float number: “) ; scanf(“%f“, n2 = fun(n1) ; printf(“%6.4f/n“, n2) ; (分数:10.00)_3.请编写一个函数 void fu
5、n (char a,char b,int n),其功能是:删除一个字符串中指定下标的字符。其中, a 指向原字符串, 删除指定字符后的字符串存放在 b 所指的数组中,n 中存放指定的下标。 例如,输入一个字符串: World,然后输入 3,则调用该函数后的结果为: Word。 注意: 部分源程序在文件PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include #include #define LEN 20 void fun (char a, char b, int n) main( ) char s
6、tr1LEN, str2LEN ; int n ; printf(“Enter the string:/n“) ; gets(str1) ; printf(“Enter the position of the string deleted:“) ; scanf(“%d“, fun(str1, str2, n) ; printf(“The new string is: %s/n“, str2) ; NONO() ; (分数:10.00)_全国计算机等级考试二级 C 语言操作题 31+2016 年答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun 的功能是:对形参 s
7、所指字符串中下标为奇数的字符按 ASCII 码大小递增排序,并将排序后下标为奇数的字符取出,存入形参 p 所指字符数组中,形成一个新串。 例如,形参 s 所指的字符串为:baawrskjghzlicda,执行后 p 所指字符数组中的字符串应为:aachjlsw。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C 中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun(char *s, char *p) int i, j, n, x, t; n=0; for(i=0; si!=/0; i
8、+) n+; for(i=1; i /*found*/ _1_; /*found*/ for(j=_2_+2 ; j if(stsj) t=j; if(t!=i) x=si; si=st; st=x; for(i=1,j=0; i /*found*/ pj=_3_; main() char s80=“baawrskjghzlicda“, p50; printf(“/nThe original string is : %s/n“,s); fun(s,p); printf(“/nThe result is : %s/n“,p); (分数:10.00)_正确答案:()解析:解题思路: 第一处:取外循
9、环的控制变量,所以应填:t=i。 第二处:内循环的起始变量,应该是 i+2,所以应填:i。 第三处:新字符串处理完后应添加字符串结束符,所以应填:/0。2.给定程序 MODI1.C 中函数 fun 的功能是:用下面的公式求 的近似值,直到最后一项的绝对值小于指定的数(参数 num )为止: 1 1 1 1 - + - + . 4 3 5 7 例如, 程序运行后, 输入 0.0001, 则程序输出 3.1414。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include float fun
10、 ( float num ) int s ; float n, t, pi ; t = 1 ; pi = 0 ; n = 1 ; s = 1 ; /*found*/ while(t = num) pi = pi + t ; n = n + 2 ; s = -s ; /*found*/ t = s % n ; pi = pi * 4 ; return pi ; main( ) float n1, n2 ; printf(“Enter a float number: “) ; scanf(“%f“, n2 = fun(n1) ; printf(“%6.4f/n“, n2) ; (分数:10.00)
11、_正确答案:()解析:解题思路: 第一处:要判断 t 的最后一项绝对小于指定的数,由于 t 是实数,那么应改为while(fabs(t)=num)。 第二处:t 是 s 除以 n 的值,而不是取余数,所以应改 t=s/n;。3.请编写一个函数 void fun (char a,char b,int n),其功能是:删除一个字符串中指定下标的字符。其中, a 指向原字符串, 删除指定字符后的字符串存放在 b 所指的数组中,n 中存放指定的下标。 例如,输入一个字符串: World,然后输入 3,则调用该函数后的结果为: Word。 注意: 部分源程序在文件PROG1.C 中。 请勿改动主函数 m
12、ain 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include #include #define LEN 20 void fun (char a, char b, int n) main( ) char str1LEN, str2LEN ; int n ; printf(“Enter the string:/n“) ; gets(str1) ; printf(“Enter the position of the string deleted:“) ; scanf(“%d“, fun(str1, str2, n) ; printf(“The new string is: %s/n“, str2) ; NONO() ; (分数:10.00)_正确答案:(void fun (char a, char b, int n) strncpy(b, a, n) ; bn = 0 ; strcat(b, a + n + 1) ; )解析: