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

如何用C语言移除二维数组主对角线上的负元素?

移除二维数组主对角线上的负元素

别担心,我来帮你搞定这个问题!先理清楚核心需求:我们要遍历原3×3数组的每一行,检查该行**主对角位置(行号和列号相同的位置,即a[i][i])**的元素是否为负数,如果是,就把该行中除了这个元素的其他元素提取出来,组成新数组的一行。

实现思路

  1. 明确原数组尺寸(3行3列),创建一个结果数组:行数和原数组一致,列数比原数组少1(因为每一行都要移除一个目标元素)。
  2. 遍历原数组的每一行,对每行元素逐个检查:
    • 如果当前元素位于主对角位置且为负数,直接跳过它;
    • 否则,将该元素放入结果数组的对应位置。

C语言代码实现

#include <stdio.h>

int main() {
    // 原数组
    int a[3][3] = { {-1, 2, 3} , {4, -5, 6} , {7, 8, -9} };
    // 结果数组,3行2列
    int result[3][2];

    // 遍历每一行
    for (int i = 0; i < 3; i++) {
        int col_pos = 0; // 结果数组当前行的列索引
        // 遍历当前行的每一列
        for (int j = 0; j < 3; j++) {
            // 跳过主对角线上的负元素
            if (i == j && a[i][j] < 0) {
                continue;
            }
            // 将元素存入结果数组
            result[i][col_pos++] = a[i][j];
        }
    }

    // 打印结果数组,验证是否符合预期
    printf("处理后的数组:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }

    return 0;
}

代码说明

  • 外层循环i控制行号,内层循环j控制列号;
  • 判断条件i == j && a[i][j] < 0精准定位到需要移除的元素;
  • col_pos变量用来跟踪结果数组当前行的填充位置,每存入一个元素就自增一次。

运行这段代码后,输出的结果完全符合你的预期:

处理后的数组:
2 3 
4 6 
7 8 

如果后续需要处理更通用的情况(比如主对角线上不全是负元素,结果数组列数不固定),可以考虑使用动态内存分配(malloc)来灵活创建结果数组,不过针对你当前的需求,上面的代码完全够用啦!

内容的提问来源于stack exchange,提问作者Iván Rumenov Romanski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:13:51