C ++ Matrix的值

时间:2016-10-05 17:33:27

标签: c++

我想创建一个5行和5列的矩阵,其中包含1到9的值。当我向程序输入5时,以下程序会显示1到25之间的数字。

#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;
    }
}

我是初学者,所以也许这很简单,但我不知道如何让它显示从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 

3 个答案:

答案 0 :(得分:0)

您需要使用模数运算符(%)。如果您希望矩阵中的值与计算它们一样,但只需要更改显示,则可以输出矩阵值,如下所示:

cout << (a[i][j] % 10) << " ";

如果您希望一位数值位于矩阵本身中,您可以改变&#39; x&#39;以下内容:

x = (x+1) % 10;}

答案 1 :(得分:0)

您的代码中存在一些问题。

C阵列或STL容器?

首先,a你的矩阵可能只能容纳20x20的矩阵。如果输入大于20的n,您的程序将无声地失败,因为您将访问内存超出范围;这会导致未定义的行为(请参阅其他常见的UB案例here)。

您可能希望使用动态大小数组 - 实现此目的的一个好方法是使用std::vector。不幸的是,这不如使用具有两个维度的C风格数组那么舒服 - 您可以使用std::vector<std::vector<int>>实现相同的访问语法,但这不是非常有效(如果您使用this answer感兴趣为什么)也不太舒服。

Boost C ++库提供a multidimensional array library。一旦你获得足够的经验,你就可以在其中找到用途。

<=<0 - 索引或1 - 已编入索引?

今天许多编程语言使用0 - 数组索引。这意味着数组的第一个元素位于索引0,而不是1。有些语言,比如Lua,不会这样做。

这意味着您应该将ij0重复到n。这也意味着n被排除在外,因此您应该使用<,而不是<=

使用1到9之间的数字填充矩阵

您的代码不执行任何操作,因此您可以获得从1到9的数字 - 它只会使用从1到n * n的数字填充矩阵。您可以使用if子句更改此设置,以便每次超过x时设置9

if (x > 9) { x = 0; } // x = 0 because it will be 1 on the next iteration

话虽如此,正如@ PMar的回答所说,更方便。 modulo operator %也可以完成任务。

a[i][j] = (x % 9) + 1;
x = (x % 9) + 1;

这样,您就可以获得从19的所有数字。

现在,您还可以进行另一次清理:为什么要计算x的下一个值,然后才设置它?您可以在分配之前将新的x值分配给矩阵的单元格。这样可以使代码更清晰,复制粘贴更少,这意味着更好的可维护性。

x = (x % 9) + 1;
a[i][j] = x;

另一个代码质量考虑因素

我不能说你的原始代码源是否像你的问题一样缩进(在编辑之前),但你应该真的缩进你的代码,为将来你和其他人必须阅读你的代码。它允许更好的可读性。

代码的不同部分也是如此:添加一些空间!如果你在表达式之间做出明确的区分,它只会变得更具可读性。

答案 2 :(得分:0)

#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;
}