MST

星途 面试题库

面试题:C语言多维数组在函数间传递及操作

编写一个函数,该函数接受一个二维数组(大小未知)及其行数和列数作为参数。函数的功能是将该二维数组的主对角线元素(即arr[i][i])替换为其所在行的元素平均值,并返回修改后的二维数组。请说明在函数定义中二维数组参数的正确声明方式,并完成函数代码编写。
37.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

在C语言中,二维数组参数可以通过以下方式声明:void func(int arr[][MAX_COL], int rows, int cols),其中MAX_COL是一个常量,表示二维数组的最大列数。

以下是完整的函数代码:

#include <stdio.h>

// 函数声明
void modifyArray(int arr[][100], int rows, int cols);

int main() {
    int arr[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    modifyArray(arr, 3, 3);
    // 打印修改后的数组
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

// 函数定义
void modifyArray(int arr[][100], int rows, int cols) {
    for (int i = 0; i < rows && i < cols; i++) {
        int sum = 0;
        for (int j = 0; j < cols; j++) {
            sum += arr[i][j];
        }
        arr[i][i] = sum / cols;
    }
}

在上述代码中:

  1. modifyArray函数接受一个二维数组arr,其列数必须预先指定(这里假设最大列数为100),行数rows和列数cols作为参数。
  2. modifyArray函数中,通过遍历主对角线元素,计算每行的平均值,并将主对角线元素替换为该行的平均值。

如果是Python语言,代码如下:

def modify_array(arr, rows, cols):
    for i in range(min(rows, cols)):
        row_sum = sum(arr[i])
        arr[i][i] = row_sum / cols
    return arr

# 测试
arr = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
result = modify_array(arr, 3, 3)
for row in result:
    print(row)

在Python中,二维数组可以直接用列表的列表表示,不需要像C语言那样指定维度大小。函数modify_array实现了相同的功能,即遍历主对角线元素并将其替换为所在行的平均值。