南开大学二级C题目解析:字符串逆置与矩阵转置

需积分: 0 4 下载量 181 浏览量 更新于2024-08-01 收藏 994KB DOC 举报
"南开100题是一个包含多种编程问题的练习集,主要针对C语言,其中包含字符串逆置和矩阵转置等基础编程题目。这些题目旨在帮助学习者提高编程技能,尤其是处理字符串操作和数组处理的能力。" 本文将详细解析两个题目及其解决方案。 **题目1 - 字符串逆置** 此题要求编写一个名为`fun`的函数,该函数接受一个字符指针`char *s`,并将指向的字符串内容进行逆置。提供的代码示例中,使用了双指针方法来实现这个功能。初始化两个指针`i`和`n`,`i`从字符串起始位置开始,`n`存储字符串的长度。在循环中,当`i`小于`n-1-i`时,将指针`i`指向的字符与`n-1-i`指向的字符交换。关键在于,在交换过程中,需要先保存`i`处的字符到临时变量`t`,然后再进行交换,因为交换操作会改变`i`处的值。 ```c fun(char *s) { int i = 0, t, n = strlen(s); for (; s + i < s + n - 1 - i; i++) { t = *(s + i); *(s + i) = *(s + n - 1 - i); *(s + n - 1 - i) = t; } } ``` **题目2 - 矩阵转置** 题目要求编写一个程序,实现3x3矩阵的转置,即行和列互换。提供的代码中定义了一个名为`fun`的函数,它接受一个3x3整型二维数组`int array[3][3]`作为参数。在函数内部,使用两层嵌套循环来实现转置,外层循环遍历矩阵的前两行,内层循环从当前行的下一个元素开始,直到最后一列,交换当前位置的元素和对应的列元素。这样,只需遍历矩阵的左上部分即可完成转置。 ```c int fun(int array[3][3]) { int i, j, t; for (i = 0; i < 2; i++) for (j = i + 1; j < 3; j++) { t = array[i][j]; array[i][j] = array[j][i]; array[j][i] = t; } } ``` 在`main`函数中,可以创建一个3x3的矩阵并调用`fun`函数进行转置,然后输出转置后的矩阵。 这两个题目都是基础的C语言编程练习,通过它们可以锻炼对字符串操作、数组遍历以及指针的理解。对于初学者来说,解决这类问题有助于提升编程能力和逻辑思维。