C++动态二维数组输出矩阵格式问题:如何按行列展示矩阵?
修复动态二维矩阵单行输出的问题
我正在编写一个用动态二维数组实现两个方阵相乘的程序,目前处于测试阶段以确保数据存储正常。但运行代码时,两个矩阵均在单行输出,而非按行列排列的矩阵形式,请问该如何修复?
#include <iomanip> #include <iostream> #include <array> using namespace std; int main() { int **C, n, m; //pointer, rows, columns for matrix 1; int **D, p, q; //pointer, rows, columns for matrix 2; cout << "Enter the dimensions of your matrices: "; cin >> n >> m; p = n; q = m; cout << endl; C = new int *[n]; D = new int *[p]; for (int x=0 ; x < n; x++) { C[x] = new int [m]; } for (int x=0 ; x < p; x++) { D[x] = new int [q]; } cout << "Enter the values of your first matrix: "; for (int I=0 ; I < n; I++ ) { for (int K=0 ; K < m; K++) cin >> C[I][K]; } cout << "Enter the values of your second matrix: "; for (int L=0 ; L < p; L++ ) { for (int Z=0 ; Z < q; Z++) cin >> D[L][Z]; } for (int I=0 ; I < n; I++ ) { for (int K=0 ; K < m; K++) cout << setw(4)<< C[I][K]; } cout << endl; for (int L=0 ; L < p; L++ ) { for (int Z=0 ; Z < q; Z++) cout << setw(4)<< D[L][Z]; } cout << endl; }
修复方案
问题核心是输出矩阵时没有在每一行结束后换行。你当前的代码只完成了所有元素的连续输出,缺少行与行之间的换行操作。
只需要在输出每个矩阵的外层循环中,每跑完一轮内层循环(即输出完一行所有元素),添加cout << endl;即可:
修改后的输出部分代码:
// 输出第一个矩阵 for (int I=0 ; I < n; I++ ) { for (int K=0 ; K < m; K++) cout << setw(4)<< C[I][K]; // 每一行输出完毕后换行 cout << endl; } cout << endl; // 输出第二个矩阵 for (int L=0 ; L < p; L++ ) { for (int Z=0 ; Z < q; Z++) cout << setw(4)<< D[L][Z]; // 每一行输出完毕后换行 cout << endl; }
额外建议
- 变量命名尽量语义化,比如用
row/col代替I/K这类单字母变量,提升代码可读性 - 动态分配的内存记得最后释放,避免内存泄漏:
// 释放矩阵C的内存 for (int x = 0; x < n; x++) { delete[] C[x]; } delete[] C; // 释放矩阵D的内存 for (int x = 0; x < p; x++) { delete[] D[x]; } delete[] D;
内容的提问来源于stack exchange,提问作者jmizza
相关产品推荐
相关产品推荐

