1、二级 C 语言-56 及答案解析(总分:28.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:-1.00)1.请补充函数 fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组 str 中。例如:当 n=13572468 时,str=-“86427531”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio.h #include conio.h #define N 80 char strN; void fun(long int n)
2、int i=0; while(U U /U/U) stri=U U /U/U; n/=10; i+; U U /U/U; main() long int n=13572468; clrscr(); printf(“* the origial data */n“); printf(“n=%ld“,n); fun(n); printf(“/n%s“,str); (分数:-1.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:统计 substr 所指的字符串在 str 所指的字符串中出现的次数。 例如,若字符串为 aaas 1kaaas,子
3、字符串为 as,则应输出 2。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh int fun(char*str,char*substr) int i,j,k,num=0; /*found*/ for(i=0,stri,i+) for(j=i,k=0; substrk=strj; k+,j+) /*found*/ If(substrk+1=/0) num +; break; return num; main() char str80,substr80; printf(“Input a
4、string:“); gets(str); printf(“Input a substring:“); gets(substr); printf(“%d/n“fun(str,substr); (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:-1.00)3.请编写函数 fun(),它的功能是:实现两个字符串的连接(不使用库函数 strcat(),即把 p2 所指的字符串连接到 p1 所指的字符串后。例如,分别输入下面两个字符串:FirstString-SecondString则程序输出:FirstString-SecondString注意 部分源程序给出如下。请勿改动主函数
5、 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题源程序#includestdio.h#includeconio.hvoid fun(char p1, char p2)main()char s180, s240;clrscr();printf(“Enter s1 and s2:/n“);scanf(“%s%s“, s1, s2);printf(“s1=%s/n“, s1);printf(“s2=%s/n“, s2);printf(“Invoke fun(s1, s2):/n“);fun(s1, s2);printf(“After invoking:/n“
6、);printf(“%s/n“, s1);(分数:-1.00)_二级 C 语言-56 答案解析(总分:28.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:-1.00)1.请补充函数 fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组 str 中。例如:当 n=13572468 时,str=-“86427531”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio.h #include conio.h #define N 80 c
7、har strN; void fun(long int n) int i=0; while(U U /U/U) stri=U U /U/U; n/=10; i+; U U /U/U; main() long int n=13572468; clrscr(); printf(“* the origial data */n“); printf(“n=%ld“,n); fun(n); printf(“/n%s“,str); (分数:-1.00)填空项 1:_ (正确答案:【1】n0 【2】n%10+0 【3】stri=0)解析:解析 填空 1:while 循环的执行条件是 n0,当 n 等于 0 时
8、,说明已经将整数的各位数字都转换为数字字符并存入字符串中了。填空 2:n 对 10 求余,得到整数 n 的个位数字,在加上字符乃,的 ASCII码,得到对应的数字字符,并存入字符串 str 中。填空 3:将整数转换为字符串并倒序存放入字符数组str 中后,还要在 str 最后加上字符串结束标记符/0。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:统计 substr 所指的字符串在 str 所指的字符串中出现的次数。 例如,若字符串为 aaas 1kaaas,子字符串为 as,则应输出 2。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动
9、main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh int fun(char*str,char*substr) int i,j,k,num=0; /*found*/ for(i=0,stri,i+) for(j=i,k=0; substrk=strj; k+,j+) /*found*/ If(substrk+1=/0) num +; break; return num; main() char str80,substr80; printf(“Input a string:“); gets(str); printf(“Input a substrin
10、g:“); gets(substr); printf(“%d/n“fun(str,substr); (分数:30.00)填空项 1:_ (正确答案:(1)错误:for(i=0,stri,i+) 正确:for(i=0;stri;i+) (2)错误:If(substrk+1=/0) 正确:if(substrk+1=/0))解析:解析 for 循环语句形式应为:for(表达式 1;表达式 2;表达式 3),表达式之间是分号;C 语言标识符区分大小写,所以条件句关键词 if 应小写。三、B编程题/B(总题数:1,分数:-1.00)3.请编写函数 fun(),它的功能是:实现两个字符串的连接(不使用库函
11、数 strcat(),即把 p2 所指的字符串连接到 p1 所指的字符串后。例如,分别输入下面两个字符串:FirstString-SecondString则程序输出:FirstString-SecondString注意 部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题源程序#includestdio.h#includeconio.hvoid fun(char p1, char p2)main()char s180, s240;clrscr();printf(“Enter s1 and s2:/n“);scanf(“%s
12、%s“, s1, s2);printf(“s1=%s/n“, s1);printf(“s2=%s/n“, s2);printf(“Invoke fun(s1, s2):/n“);fun(s1, s2);printf(“After invoking:/n“);printf(“%s/n“, s1);(分数:-1.00)_正确答案:(void fun(char p1, char p2) int i=0, n=0; char *p=p1, *q=p2; while(*p) p+; n+; i=n; while(*q) p1i=*q; q+; i+; p1i=/0; )解析:解析 用指针遍历第一个字符串,把指针定位到串尾标志符处;遍历第二个字符串,依次把字符复制到第一个字符串的末尾;最后赋结尾标志符。