1、二级 C 语言-567 及答案解析(总分:69.00,做题时间:90 分钟)一、填空题(总题数: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) int
2、 i=0; while( _ 1_ ) stri= _ 2_ ; n/=10; i+; _ 3_ ; main() long int n=13572468; clrscr(); printf(“* the origial data */n“); printf(“n=%ld“,n); fun(n); printf(“/n%s“,str); (分数:-1.00)二、改错题(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:统计 substr 所指的字符串在 str 所指的字符串中出现的次数。 例如,若字符串为 aaas 1kaaas,子字符串为 as,则应输出 2。 请改正程
3、序中的错误,使它能得出正确的结果。 注意:不要改动 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(st
4、r); printf(“Input a substring:“); gets(substr); printf(“%d/n“fun(str,substr); (分数:30.00)三、编程题(总题数:1,分数:40.00)3.请编写函数 fun(),它的功能是:实现两个字符串的连接(不使用库函数 strcat(),即把 p2 所指的字符串连接到 p1 所指的字符串后。 例如,分别输入下面两个字符串: FirstString - SecondString 则程序输出: FirstString - SecondString 注意 部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,
5、仅在函数 fun 的花括号中填入所编写的若干语句。 试题源程序 #includestdio.h #includeconio.h void 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“); p
6、rintf(“%s/n“, s1); (分数:40.00)_二级 C 语言-567 答案解析(总分:69.00,做题时间:90 分钟)一、填空题(总题数:1,分数:-1.00)1.请补充函数 fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组 str 中。例如:当 n=13572468 时,str=-“86427531”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。试题程序: #include stdio.h #include conio.h #define N 80 char s
7、trN; void fun(long int n) int i=0; while( _ 1_ ) stri= _ 2_ ; n/=10; i+; _ 3_ ; main() long int n=13572468; clrscr(); printf(“* the origial data */n“); printf(“n=%ld“,n); fun(n); printf(“/n%s“,str); (分数:-1.00)解析:【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“。二、改错题(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:统计 substr 所指的字符串在 str 所指的字符串中出现的次数。 例如,若字符串为 aaas 1kaaas,子字符串为 as,则应输出 2。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序
9、的结构! 试题程序: #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 substring:“); gets(substr); p
10、rintf(“%d/n“fun(str,substr); (分数:30.00)解析:(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 应小写。三、编程题(总题数:1,分数:40.00)3.请编写函数 fun(),它的功能是:实现两个字符串的连接(不使用库函数 strcat(),即把 p2 所指的字符串连接到 p1 所指的字
11、符串后。 例如,分别输入下面两个字符串: FirstString - SecondString 则程序输出: FirstString - SecondString 注意 部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题源程序 #includestdio.h #includeconio.h void fun(char p1, char p2) main() char s180, s240; clrscr(); printf(“Enter s1 and s2:/n“); scanf(“%s%s“, s1, s2); p
12、rintf(“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); (分数:40.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“; 解析 用指针遍历第一个字符串,把指针定位到串尾标志符处;遍历第二个字符串,依次把字符复制到第一个字符串的末尾;最后赋结尾标志符。