C语言试题解析:字符串连接与大小写转换

需积分: 9 6 下载量 106 浏览量 更新于2024-07-31 收藏 192KB DOC 举报
"C语言试题,包括历年试题,用于C语言二级考试复习,提供模拟试题和改错题,帮助学习者巩固C语言基础知识。" 在给定的C语言试题中,我们有两个部分:模拟试题和改错题。首先,让我们详细分析模拟试题。 1. 填空题 题目要求编写一个函数`fun()`,该函数将输入的字符串`str2`连接到`str1`的末尾。给定的源代码中,`fun()`函数的主体部分缺失了关键的表达式或语句。 - 填空1:`*(p1+i)`。此处的`while`循环用于计算字符串`str1`的长度,因此在循环条件中,我们需要检查`p1`指向的字符是否为字符串结束标志`\0`,即`*(p1+i) != '\0'`。 - 填空2:`*p2`。在`for`循环中,我们需要在每次迭代时将`str2`的字符添加到`str1`的末尾,直到`p2`指向`str2`的结束标志`\0`。所以,循环条件应该是`*p2 != '\0'`。 - 填空3:`*p2++`。这表示将`p2`当前指向的字符赋值给`str1`的位置`i`,然后`p2`向前移动一位,指向下一个字符。因此,`*(p1+i)`应被设置为`*p2`的当前值,之后`p2`自增,即`*p2++`。 最终的`fun()`函数应该如下所示: ```c void fun(char* str1, char* str2) { int i = 0; char* p1 = str1; char* p2 = str2; while (*(p1 + i) != '\0') // 填空1:*(p1+i) != '\0' i++; for (; *p2 != '\0'; i++) // 填空2:*p2 != '\0' *(p1 + i) = *p2++; // 填空3:*p2++ *(p1 + i) = '\0'; } ``` 2. 改错题 题目中给出的`fun()`函数应该将输入字符串`tt`中的所有小写字母转换为大写字母。在原始代码中,没有显示错误,但我们可以假设可能的问题在于未考虑到非字母字符。为了确保只转换小写字母,我们可以使用`islower()`函数来检查字符是否为小写,并使用`toupper()`将其转换为大写。这是改进后的`fun()`函数: ```c #include <ctype.h> void fun(char* tt) { while (*tt) { if (islower(*tt)) // 检查是否为小写字母 *tt = toupper(*tt); // 转换为大写字母 tt++; } } ``` 以上两道题目涵盖了C语言中的基本字符串操作,包括字符串长度的计算、字符数组的拼接以及字符的大小写转换。这些知识点对于理解和掌握C语言的基础非常重要,对于准备C语言二级考试的学习者来说,是非常有价值的练习。