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

C语言:如何在N×N矩阵中打印指定行、列及反对角线

嘿,你已经成功实现了主对角线的打印,这步走得很稳!接下来我就基于你现有的代码,一步步教你实现打印指定行、指定列以及反对角线的功能,都是很直观的逻辑,咱们直接上干货~

1. 打印指定行

要打印某一行很简单:你只需要让用户输入想要打印的行号(注意咱们代码里数组下标是从0开始的,所以如果用户说“第1行”,对应数组里的索引是0,这点可以给个提示),然后遍历这一行的所有列,依次输出元素就行。

比如在你的代码里,主对角线打印完之后,可以添加这段代码:

// 打印指定行
int targetRow;
printf("\n请输入要打印的行号(从0开始):");
scanf("%d", &targetRow);
if(targetRow >=0 && targetRow < r1){
    printf("第%d行的元素是:", targetRow);
    for(j = 0; j < c1; j++){
        printf("%d ", m1[targetRow][j]);
    }
    printf("\n");
} else {
    printf("输入的行号超出范围啦!\n");
}

2. 打印指定列

和打印行的逻辑反过来:让用户输入目标列号,然后遍历所有行,输出每一行对应列的元素。

同样在代码里添加:

// 打印指定列
int targetCol;
printf("\n请输入要打印的列号(从0开始):");
scanf("%d", &targetCol);
if(targetCol >=0 && targetCol < c1){
    printf("第%d列的元素是:", targetCol);
    for(i = 0; i < r1; i++){
        printf("%d ", m1[i][targetCol]);
    }
    printf("\n");
} else {
    printf("输入的列号超出范围啦!\n");
}

3. 打印反对角线

反对角线的特点是:对于N×N的方阵,每个元素的行下标+列下标 = N-1(比如3×3矩阵,反对角线元素的i+j=2)。所以首先要判断输入的矩阵是不是方阵(行数列数相等),如果是,就遍历所有元素,满足i + j == r1 - 1的就是反对角线元素。

添加这段代码:

// 打印反对角线
if(r1 == c1){ // 只有方阵才有反对角线
    printf("\n反对角线的元素是:");
    for(i = 0; i < r1; i++){
        for(j = 0; j < c1; j++){
            if(i + j == r1 - 1){
                printf("%d ", m1[i][j]);
            }
        }
    }
    printf("\n");
} else {
    printf("\n当前矩阵不是方阵,没有反对角线哦!\n");
}

整合后的完整代码

#include <stdio.h>
int main() {
    int r1, c1;
    printf("\n Enter number of rows for M1: ");
    scanf("%d", &r1);
    printf("\n Enter number of columns for M1: ");
    scanf("%d", &c1);
    int m1[r1][c1];
    int i, j;

    printf("\n Enter first Matrix: \n");
    for(i = 0; i < r1; i++){
        for(j = 0; j < c1; j++){
            scanf("%d", &m1[i][j]);
        }
    }

    // 打印主对角线
    printf("\n主对角线的元素是:");
    for(i = 0; i < r1; i++){
        for(j = 0; j < c1; j++){
            if(i == j){
                printf("%d ", m1[i][j]);
            }
        }
    }
    printf("\n");

    // 打印指定行
    int targetRow;
    printf("\n请输入要打印的行号(从0开始):");
    scanf("%d", &targetRow);
    if(targetRow >=0 && targetRow < r1){
        printf("第%d行的元素是:", targetRow);
        for(j = 0; j < c1; j++){
            printf("%d ", m1[targetRow][j]);
        }
        printf("\n");
    } else {
        printf("输入的行号超出范围啦!\n");
    }

    // 打印指定列
    int targetCol;
    printf("\n请输入要打印的列号(从0开始):");
    scanf("%d", &targetCol);
    if(targetCol >=0 && targetCol < c1){
        printf("第%d列的元素是:", targetCol);
        for(i = 0; i < r1; i++){
            printf("%d ", m1[i][targetCol]);
        }
        printf("\n");
    } else {
        printf("输入的列号超出范围啦!\n");
    }

    // 打印反对角线
    if(r1 == c1){ // 只有方阵才有反对角线
        printf("\n反对角线的元素是:");
        for(i = 0; i < r1; i++){
            for(j = 0; j < c1; j++){
                if(i + j == r1 - 1){
                    printf("%d ", m1[i][j]);
                }
            }
        }
        printf("\n");
    } else {
        printf("\n当前矩阵不是方阵,没有反对角线哦!\n");
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者Leaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:09:27