C语言二维数组排序和查找最大值代码优化解析
在修正代码之前,我注意到代码中的一些问题:
- 在
fun函数中,使用*p != '\0'作为循环终止条件是不正确的。因为这里的数组是整型数组,不会以'\0'结束。 - 在
fun函数中,对指针p进行自增操作时应该写作p++,而不是*p++。 - 在
fun函数中,在交换两个元素的位置时,使用的下标1是不正确的。应使用col表示列数。
以下是经过修正的代码:
#include <stdio.h>
void fun(int line, int col, int arr[][col]) {
int *p = &arr[0][0];
for (int i = 0; i < line * col - 1; i++) {
for (int j = 0; j < line * col - i - 1; j++) {
if (*(p + j) > *(p + j + 1)) {
int t = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = t;
}
}
}
printf("最大值为:%d\n", *(p + line * col - 1));
}
int main(int argc, const char *argv[]) {
int arr[2][4];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
scanf("%d", &arr[i][j]);
}
}
fun(2, 4, arr);
return 0;
}
在修正后的代码中:
- 第 10-17 行使用冒泡排序的思想对二维数组进行排序,将最大值移动到最后。
- 第 20 行通过
*(p + line * col - 1)来输出排序后的最大值。
现在,代码应该能够正确地接收输入的二维数组,并在函数 fun 中找到并输出最大值。请注意,在输入数组时,请确保输入数值的个数与数组大小相匹配,以避免访问越界错误。如果还有其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/RJk 著作权归作者所有。请勿转载和采集!