C语言编程:字符串大小写转换与字符比较

需积分: 0 2 下载量 97 浏览量 更新于2024-07-31 收藏 1.29MB DOC 举报
“全国计算机等级考试二级C语言上机题及改错题解析” 这篇资源主要涉及的是计算机二级C语言考试的上机操作部分,包括填空题和改错题。下面是针对这两个题目进行的详细解释: 1. **填空题**: 题目要求编写一个函数,将输入字符串中的所有小写字母转换为大写字母,并保存在原字符串中。已给出部分源代码,需要补充完整。 - 在`main`函数中,首先调用了`system("CLS")`清屏,然后输出原始字符串。接下来,需要开始处理字符串。这里缺少了一个开始循环的语句,应该填写`for( ; j < N; j++)`,这样可以遍历整个字符串。 - 第二个空白处,需要将小写字母转换为大写字母。由于C语言中字符的ASCII码相差32(小写字母到大写字母的差值),可以写为`*(pf+j) -= 32`。 - 第三个空白处,对于非小写字母的字符,直接跳过不做处理,所以这里填写`continue;`。 完整的代码段应该是这样的: ```c for( ; j < N; j++) { if(*(pf+j)>='a'&&*(pf+j)<='z') { *(pf+j) -= 32; } else { continue; } } ``` 2. **改错题**: 这道题的目的是比较两个字符串的对应字符,把ASCII值小或相等的字符存入新的字符串。已给出的程序中有错误,需要找出并修正。 错误出现在`while`循环的条件以及其中的`if`语句。首先,`while(*p||*q)`这个条件会使得循环一直进行,即使其中一个字符串已经结束,导致程序出错。应该改为`while(*p&&*q)`,确保只有当两个指针都指向有效字符时才进行比较。 接下来,`if`语句的逻辑有问题,`if(*p<=*q)[if(*p=>*q)]`这部分应该是选择ASCII值较小或相等的字符。这里存在语法错误,应该修正为`if(*p<=*q)`,然后将正确的字符赋值给`c[k]`。 修正后的代码段应该是这样的: ```c while(*p && *q) { if(*p <= *q) { c[k] = *p; } else { c[k] = *q; } if(*p) p++; if(*q) q++; } ``` 当循环结束,`p`和`q`可能未到达字符串末尾,因此还需要处理可能剩下的字符。如果`*p`还有值,将其添加到`c`中,然后移动`p`;同样,如果`*q`有值,也执行相同操作。最后记得添加字符串结束符`\0`。 通过以上分析,考生可以更好地理解C语言中字符串操作、字符比较和条件判断的基本原理,这对于准备计算机二级C语言考试至关重要。