You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中二维数组函数传参及n×n矩阵填充问题求助

解决你的n×n矩阵填充问题

咱们先拆解你遇到的两个问题,然后给出修正后的代码:

问题1:二维数组的传递与函数调用错误

你在main()里调用fillMatrix时写了fillMatrix(a[][n], n);,这是不符合C++语法的。在传递二维数组时,直接传递数组名a即可——数组名会隐式转换为指向其首元素的指针,而函数参数里的unsigned a[][MAX]写法是正确的(因为二维数组传递必须指定第二维的大小,你已经用MAX宏定义了这个值)。

问题2:矩阵填充逻辑错误

你的填充循环里,判断i==j时把元素设为0,但紧接着又执行了a[i][j]=1;,这会直接覆盖刚才设置的0,导致主对角线也变成1,最终整个矩阵全是1。解决方法很简单:要么把a[i][j]=1;放到else分支里,要么先把整个矩阵填充为1,再单独把主对角线设为0(后者逻辑更清晰)。

修正后的完整代码

#include <iostream>
#define MAX 100
using namespace std;

// 全局数组,或者你也可以改成局部数组(需要注意大小)
int a[MAX][MAX];

void fillMatrix(unsigned a[][MAX], unsigned n) {
    // 方法1:先全部填1,再把主对角线设为0(逻辑更直观)
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) {
            a[i][j] = 1;
        }
        // 主对角线元素单独设为0
        a[i][i] = 0;
    }

    // 或者用原逻辑改else分支的写法:
    // for(int i=0; i<n; i++) {
    //     for(int j=0; j<n; j++) {
    //         if(i == j) {
    //             a[i][j] = 0;
    //         } else {
    //             a[i][j] = 1;
    //         }
    //     }
    // }
}

int n;
int main() {
    cin >> n;
    // 修正调用方式:直接传数组名a
    fillMatrix(a, n);
    
    // 打印矩阵
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) {
            cout << a[i][j] << ' ';
        }
        cout << endl;
    }
    return 0;
}

额外小提示(现代C++风格优化)

如果不想用全局数组,也可以用vector来实现动态二维数组,避免宏定义的固定大小限制,更符合现代C++的写法:

#include <iostream>
#include <vector>
#include <algorithm> // 用于fill函数
using namespace std;

void fillMatrix(vector<vector<int>>& mat) {
    int n = mat.size();
    for(int i=0; i<n; i++) {
        fill(mat[i].begin(), mat[i].end(), 1);
        mat[i][i] = 0;
    }
}

int main() {
    int n;
    cin >> n;
    // 创建n×n的vector,默认值可忽略
    vector<vector<int>> mat(n, vector<int>(n));
    fillMatrix(mat);
    
    // 范围for循环打印,更简洁
    for(auto& row : mat) {
        for(int num : row) {
            cout << num << ' ';
        }
        cout << endl;
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者A.Petrov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:37:00