【发布时间】:2020-06-05 16:41:18
【问题描述】:
用户输入一个矩阵,输出必须是一个新的矩阵,其中包含一个额外的零列。如果我们将脚本应用于 2 方矩阵,例如:{1,2,3,4},则新矩阵输出将是 2 行和 3 列:{1,2,32,3,4,0}。我不明白数字 32 的输出。
#include <iostream>
int main(){
int m,n;
std::cout << "Input the size of the square matrix : ";
std::cin >> m;
n=m;
int A[m][n]={};
int M[m][n+1]={0};
for (int i(0);i<m;i++){
for(int j(0);j<n;j++){
std::cout << "Input element A["<<i<<"]["<<j<<"] : ";
std::cin >> A[i][j];
M[i][j]=A[i][j];
}
}
for (int i(0);i<m;i++){
for(int j(0);j<=n;j++){
std::cout << M[i][j] << " ";
}
std::cout << "\n";
}
return 0;
}
【问题讨论】:
-
你知道,我不确定可变长度数组如何处理初始化。这是一种狂野西部的领土,因为可变长度数组不是 C++ 的一部分。一些编译器增加了对使 C++ 更像 C 的支持,但您必须检查编译器的文档以了解它如何处理
int M[m][n+1]={0}; -
由于 C++ 中 VLA 的目标与 C 中的 VLA 相同,因此这个 C 问题可能是相关的:Initializing a dynamically-sized Variable-Length Array (VLA) to 0
-
在 g++ 上闲逛,看起来初始化请求大多被忽略了。仅设置第一个元素。
-
旁注:A simple, fast, and safe dynamically-sized matrix class。作为额外的奖励,它还会自动初始化为全零。