0

程序应该输出一个 12x24 的矩阵,它以 0 为边界,中间有 1,在 (1,1) 的位置有一个 2 我不知道在哪个部分初始化 M[row][col] =2; 因为我把它放在任何地方,它都不会将 2 输出到第一个位置,有什么建议吗?

int main()
{
    int M[N/2][N];
    int ROWS, COLS, row, col;
    int r, c;
    ROWS = sizeof(M) / sizeof(M[0]);
    COLS = sizeof(M[0]) / sizeof(M[0][0]);
    fill(M, ROWS, COLS, 1, 1);
    row=1;
    col=1;
    for(r=0; r< ROWS; r++)
    {
        for(c=0; c < COLS; c++)
        { 
            if (r==0||r ==ROWS-1)
            {
                M[ROWS][COLS]=0;
            }
            else if(c==0||c==COLS-1)
            {
                M[ROWS][COLS]=0;
            }
            else {
                M[ROWS][COLS]=1;    
            }

            cout<< M[ROWS][COLS];
        }

        cout << endl;

    }

    print(M, ROWS, COLS);
    return 0;
}
4

2 回答 2

1

我注意到您在循环中使用ROWSandCOLS作为数组索引for...您可能打算使用循环变量rc.

此外,对常规变量使用大写名称被认为是一种不好的形式……C 中的约定是仅对宏使用大写标识符。

于 2013-03-18T18:22:30.230 回答
0

我敢打赌,如果你写 M[1][1]=2; 就在 cout<<M[ROWS][COLS] 行之前,您将看到所需的输出。这样做很愚蠢,因为这样您将重复地将单个位置 (M[1][1]) 分配给相同的值——确切地说,是 288 次——但是你不能为 M 打印错误的值[1][1] 如果您在每次打印任何内容时都将其设置为正确的值。当然,还有更好的方法来做到这一点。

将程序执行的操作完全分开会更好。它必须做两件事:

  1. 初始化数组。
  2. 打印数组的内容。

这些操作中的每一个都应由不同的功能执行。即调用一个函数一次初始化整个数组,然后调用另一个函数一次打印整个数组。这样,在打印任何单元格之前,数组中的每个单元格都被设置为正确的值。

如果你这样做,你应该很容易在你的代码中找到一个合适的地方来设置 M[1][1]=2 以便你看到正确的打印输出。

我假设这是一个练习,稍后将扩展为对数组做更多的事情,因此首先使用数组是有意义的。如果是这样,很有可能您必须在某个时候再次打印该数组,然后您会很高兴您编写了一个打印该数组并且什么都不做的函数。

于 2014-03-31T02:55:16.903 回答