2001年程序员下午试题:字符串比较、矩阵操作与链表操作

需积分: 9 0 下载量 199 浏览量 更新于2024-08-13 收藏 37KB PDF 举报
2001年度程序员级下午试题涵盖了一些基础的C语言编程概念和算法设计。以下是对两个试题的详细解析: 试题一: 1. 函数strcmp()的实现涉及到字符串比较。首先,它遍历字符串s和t,每次迭代检查当前字符是否都为'\0'(字符串结束标志),只有当两者同时不为空时才会继续比较。此处缺失的是条件判断,应该填入`(*s==*t)`,表示如果当前字符相等则继续。当有一个字符串的某个字符小于另一个时,循环结束,函数会根据之前字符的比较结果返回相应的数值:`*s<*t`返回负数,`*s=*t`返回0,`*s>*t`返回正数。因此,填入的完整代码是: ```c while(*s && *t && (*s == *t)) { s++; t++; } return *s < *t ? -1 : *s > *t ? 1 : 0; ``` 2. 程序1.2的功能是找出一个n行n列矩阵中每行最大值中的最小值。这里涉及数组遍历和条件判断。`if`语句的三个部分分别对应于比较当前元素是否大于当前行的最大值、是否小于当前最小值、以及两者都不满足的情况。填入的完整代码可能是: ```c if (a[row][col] > max) { max = a[row][col]; } else if (a[row][col] < min) { min = a[row][col]; } else { // 如果当前元素等于最大值,不做更新 } ``` 最终,程序会在循环结束后输出最小的最大数。 试题二: 1. 在函数first_insert()中,需要在已知链表头部插入一个新节点。首先分配新节点空间并设置其值,然后将新节点的指针链接到原头节点前,最后更新头指针。这部分代码应该是: ```c q->next = *p; *p = q; ``` 2. 函数reverse_copy()需要复制链表并反转链接顺序。这里缺失了新节点的指针连接,以及将新链表的头指针赋值给函数返回值。完整代码可能如下: ```c *q->next = (*p)->next; // 将原链表的下一个节点指向前一个节点 *q = (*p)->next; // 更新q指向新链表的当前节点 *p = q; // 更新原链表头指针,指向新链表的头 ``` 3. 函数print_link()和free_link()用于链表操作,具体实现依赖于链表结构和操作细节,但未给出详细代码。 这两个试题考察了C语言基础语法、字符串和数组处理、链表操作、算法设计等重要知识点,考生需要具备扎实的编程基础和逻辑思维能力来解答。