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
相关产品推荐
相关产品推荐

