C++ Matrix values of

C++ Matrix values of

本文关键字:of values Matrix C++      更新时间:2023-10-16

我想创建一个包含 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迭代ij 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;

这样,您将获得从19的每个数字。

现在,您还可以进行另一次清理:为什么要计算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;
}