C++ Matrix values of
C++ Matrix values of
我想创建一个包含 5 行和 5 列的矩阵,其中包含从 1 到 9 的值。以下程序显示从 1 到 25 的数字,当我向程序输入 5
时。
#include <iostream>
using namespace std;
int a[20][20], n, x = 0;
int main()
{
cout << "n=";
cin >> n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
a[i][j] = x+1;
x = x+1;
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
cout << a[i][j] << " ";
cout << endl;
}
}
我是 c++ 初学者,所以也许这很简单,但我不知道如何让它显示从 1 到 9 的值。这是我的矩阵,除了:
1 2 3 4 5
6 7 8 9 1
2 3 4 5 6
7 8 9 1 2
3 4 5 6 7
您的代码中存在一些问题。
C 阵列还是 STL 容器?
首先,a
矩阵可能只包含大到 20x20 的矩阵。如果您输入大于 20 n
,您的程序将静默失败,因为您将越界访问内存;这会导致未定义的行为(请参阅此处的其他常见 UB 情况(。
您可能希望使用动态大小数组 - 实现此目的的一个好方法是使用 std::vector
。不幸的是,这不像二维的 C 样式数组那样舒适 - 您可以使用 std::vector<std::vector<int>>
实现相同的访问语法,但这不是很有效(如果您有兴趣,请参阅此答案(也不是很舒服。
Boost C++ 库提供多维数组库。一旦你有足够的经验,你可能会在其中找到用处。
<=
还是<
? 0
索引还是1
索引?
如今,许多编程语言都对数组使用 0
-indexing。这意味着数组的第一个元素位于索引 0
,而不是 1
。某些语言(例如 Lua(不会这样做。
这意味着您应该从0
迭代i
和j
n
。这也意味着n
被排除在外,因此您应该使用 <
,而不是 <=
。
用 1 到 9 之间的数字填充矩阵
你的代码不做任何事情,所以你得到从 1 到 9 的数字 - 它只用 1 到 n * n
的数字填充矩阵。您可以使用 if
子句更改此设置,以便在每次超过 9
时设置x
:
if (x > 9) { x = 0; } // x = 0 because it will be 1 on the next iteration
话虽如此,正如@PMar的回答所说,还有更方便。模运算符%
也将完成该任务。
a[i][j] = (x % 9) + 1;
x = (x % 9) + 1;
这样,您将获得从1
到9
的每个数字。
现在,您还可以进行另一次清理:为什么要计算x
的下一个值,然后才设置它?您可以在将新的x
值分配给矩阵的单元格之前。这允许拥有更清晰的代码,更少的复制粘贴,这意味着更好的可维护性。
x = (x % 9) + 1;
a[i][j] = x;
另一个代码质量注意事项
我不能说你的原始代码源是否像你的问题一样缩进(在编辑之前(,但你应该真正缩进你的代码,以便将来你和其他必须阅读你的代码的人。它允许更好的可读性。
代码的不同部分也是如此:添加一些空间!只有当你明确区分甚至只是表达式时,它才能变得更可读。
您需要使用模运算符 (%(。 如果希望矩阵中的值与计算时相同,但只需要更改显示,则应按如下方式输出矩阵值:
cout << (a[i][j] % 10) << " ";
如果您希望一位数值位于矩阵本身中,则应将"x"上的增量更改为以下内容:
x = (x+1) % 10;}
#include <iostream>
int main()
{
int a[5][5];
int x = 1;
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
if(x > 9)
x = 1;
a[i][j] = x;
x++;
}
}
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
if(a[i][j] < 10)
std::cout << " ";
std::cout << a[i][j] << " ";
}
std::cout << std::endl;
}
std::cout << std::endl;
return 0;
}
- Usages of std::move
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 具有变量Number of Arguments的std::函数的矢量
- Capacity of a deque
- Deprecation of _writeBarrier()
- constexpr begin of a std::array
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- C++ "error: invalid use of void expression"
- 我看到"use of undeclared identifier"错误,有人可以告诉我如何解决它吗?
- 赛通"Cannot take address of memoryview slice"
- C++ Version Of Double.longBitsToDouble
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ Usage of AsyncCallback
- 错误:"Left of getValue must have class/struct/union"
- Centos7 g++ "to_string is not in a member of std"
- unordered_map pair of values c++
- GCC 抑制警告"too small to hold all values of"
- C++ Matrix values of
- The values of int fmt in format()