2009年C语言二级上机考试题库及解答

需积分: 3 7 下载量 196 浏览量 更新于2024-08-02 收藏 201KB DOC 举报
本资源主要包含了2009年四月C语言二级考试的上机部分题目及答案,对于学习者备考具有很高的参考价值。首先,我们来看第一个题目: 改错题1:累加和计算与条件筛选 函数`fun`的目标是计算一个特定序列的累加和,其中序列的项满足每增加5项,累加值除以4的余数为2。原始代码中存在两个错误需要修改。第一个错误在`sum=j==0;`这一行,这不应该作为累加的初始值,而应该是对累加和进行初始化,可以改为`sum=0;`。第二个错误在`if(sum%4=2)`,这里应该使用等于号而非赋值操作符,所以应改为`if(sum%4 == 2)`。 代码修复后的部分: ```c int fun(int n, int *a) { int i, j, k, sum; sum = 0; // 将错误的初始化语句修改为累加和的初始值 for (k = 3, i = 0; i < n; i++, k += 5) { sum = sum + k; if (sum % 4 == 2) // 修改比较操作符 a[j++] = sum; } return j; } ``` 第二个题目涉及的是字符串转换功能,函数`fun`的目标是从一个八进制字符串中提取数值并将其转换为十进制整数。虽然没有提供具体的错误代码,但可能需要检查字符串解析和进制转换的部分。考虑到题目限制,确保正确处理输入的八进制字符,并避免溢出。 改错题2:八进制字符串转十进制 在这个函数中,可能需要遍历字符串,逐个字符读取八进制值,然后累加到`n`变量中。需要注意的是,每个八进制字符对应的十进制值是其ASCII码值减去'0'(对于0-7)或者'0' + 8 - 1(对于8-9)。由于题目要求输入最多5位,因此要确保处理不超过5个字符。 修复后的部分未给出,但可能包括如下代码逻辑: ```c int fun(char* p) { int n = 0, base = 1; for (int i = 0; i < 5 && p[i] >= '0' && p[i] <= '7'; i++) { n += (p[i] - '0') * base; base *= 8; // 每次处理下一个字符,基数扩大8倍 } return n; } ``` 这两个题目都是针对C语言基础的编程技巧和理解,涉及到循环控制、条件判断、数组操作以及进制转换等核心知识点。通过解决这些问题,考生能够巩固对C语言语法、数据结构和算法的理解,提高实际编程能力。