C语言考试真题与程序修改解析

需积分: 39 10 下载量 125 浏览量 更新于2024-09-04 收藏 602KB DOCX 举报
"这是一个关于2018年计算机二级C语言考试的模拟试题及答案文档,包含填空题、程序修改题和程序设计题。目的是测试考生对C语言的理解和编程能力,特别是字符串处理和逻辑判断方面的技能。" 一、填空题 在给定的程序中,函数fun的目标是在字符串S中查找与字符C相同的部分,并在其后插入相同字符。题目要求不改变程序的结构,因此我们需要在已有的代码中找到合适的位置进行填充。填空的关键在于理解字符串处理的逻辑。 1. 填空1:for语句的循环条件通常涉及字符串结束符'\\0',因此此处应填写`*(s+n)!='\0'`,表示在字符串末尾之前进行循环。 2. 填空2:变量n用于计算字符串长度,初始值应为0,故填写`n=0`。 3. 填空3:在找到匹配字符后,需要在适当位置插入字符C,因此此处填写`*(s+n+1)=c`。 二、程序修改题 函数fun的目的是比较两个字符串p和q中的字符,将ASCII值较大或相等的字符存入c指向的数组中。程序错误可能在于没有正确初始化变量和循环条件。 1. (1)变量k用于记录新字符串的下标,应初始化为0,即`int k = 0;` 2. (2)while循环用于遍历字符串,条件应检查两个字符串的当前字符是否非空,即`while(*p&&*q)`。这里使用逻辑与运算符确保在任一字符串未结束前继续比较。 三、程序设计题 题目要求编写函数fun,该函数应删除字符串尾部的*号,但保留字符串开头和中间的*号。这需要我们遍历字符串,检查每个字符是否为*,并在遇到非*字符时停止。 ```c void fun(char *str) { int i = 0; while (*(str + i) == '*') { // 跳过开头的* i++; } char *end = str + strlen(str) - 1; // 获取字符串末尾指针 while (end > str + i && *(end) == '*') { // 从后向前查找第一个非*字符 end--; } *(end + 1) = '\0'; // 将找到的非*字符后的*号替换为字符串结束符 } ``` 这个函数首先跳过字符串开头的*号,然后从后向前查找第一个非*字符,将该字符之后的所有*号替换为字符串结束符,从而达到删除尾部*号的效果。 这些题目覆盖了C语言的基础知识,包括字符串处理、字符比较、逻辑判断以及循环结构的使用。解决这些问题需要对C语言的基本语法和数据结构有深入理解。通过这样的练习,考生可以提升自己在实际编程项目中的能力。