四川计算机C语言考试真题集:调试与二进制转换实战

需积分: 9 5 下载量 63 浏览量 更新于2024-09-15 2 收藏 54KB DOC 举报
本次提供的题目涉及两个部分,分别是C语言程序调试和函数编写。首先,我们来看第一套题目的程序调试部分。 在第一套题目的"test1-1.c"中,目标是实现一个名为fun的函数,该函数的主要任务是在给定的字符串中找到ASCII码值最大的字符并将其移动到字符串的起始位置。程序中存在错误,需要进行修正。主要关注以下几点: 1. 函数`fun`中,头文件`stdio.h`被重复包含了两次,只需要保留一次。 2. 在查找最大ASCII码值时,变量`q`的初始化应设为`p`,而不是`p+1`,因为`q`需要从第一个字符开始遍历。 3. 在将字符向后移动的过程中,`while(q>p)`循环条件应改为`while(q>i)`,确保不越界。 4. 最后,调用`fun`函数后,需要更新指针`q`的值,使其回到原字符串起始位置,以便正确输出结果。 修改后的`fun`函数可能如下: ```c #include<stdio.h> #include<string.h> char* fun(char* p) { char max = p[0], *q = p; int i = 0; while (p[i] != 0) { if (max < p[i]) { max = p[i]; q = p; } i++; } while (q > p) { *(q - 1) = *(q); q--; } p[0] = max; return q; // 返回更新后的指针 } void main() { ... fun(a); // 更新指针并输出处理后的结果 printf("Thestringofchangingis::%s\n\n", a); fclose(fp); } ``` 第二部分是编写一个名为"test1-2.c"的程序,任务是实现`fun`函数,将二进制字符串转换为十进制整数。这需要遵循以下步骤: 1. 定义函数`fun`,接收一个字符串参数`s`,通过循环逐个处理二进制位,累加相应的2的幂。 2. 使用`for`循环遍历字符串,从右向左检查每个字符,如果是'1',则将当前的2的幂(初始为1)乘以当前位数并加到总和上。 3. 当遇到非'0'字符时,跳过此位,继续处理下一位。 4. 函数返回十进制数。 示例`fun`函数实现: ```c int fun(const char* s) { int decimal = 0; for (int i = strlen(s) - 1; i >= 0; i--) { if (s[i] == '1') { decimal += pow(2, i); } } return decimal; } int main() { char binary[33]; // 假设字符串长度不超过32位 ... // 输入二进制字符串s int decimal_value = fun(binary); printf("The decimal value is: %d\n", decimal_value); ... } ``` 第二套题目的内容同样是对程序进行调试或编写,但具体内容未给出,可以按照类似的方法分析和解答。这两部分都考察了C语言的基本操作,包括字符串处理、函数设计和数值转换,对基础语法以及逻辑理解有较高要求。