程序应该输出一个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;
}
答案 0 :(得分:1)
我注意到你在ROWS
循环中使用COLS
和for
作为数组索引...你
可能意味着使用循环变量r
和c
。
此外,对于常规变量使用大写名称被认为是不好的形式... C中的约定是仅对宏使用大写标识符。
答案 1 :(得分:0)
如果你写M [1] [1] = 2,我敢打赌;在行cout&lt;&lt; M [ROWS] [COLS]之前,您将看到所需的输出。这样做是很愚蠢的,因为那时你会将那个单一位置(M [1] [1])重复分配给相同的值 - 确切地说,288次 - 但你不能为M打印错误的值[1] [1]如果您在每次打印时将其设置为正确的值。当然,还有更好的方法。
将干净地分离程序执行的操作会更好。它必须做两件事:
这些动作中的每一个都应该由不同的功能执行。也就是说,一次调用一个函数来初始化整个数组,然后再调用另一个函数一次来打印整个数组。这样,在打印任何单元格之前,数组中的每个单元格都将设置为正确的值。
如果你这样做,你应该很容易在你的代码中找到一个好地方来设置M [1] [1] = 2,以便你看到正确的打印输出。
我假设这是一个练习,稍后将扩展为使用数组做更多的事情,因此首先使用数组是有意义的。如果是这样,你很有可能在某个时候再次打印数组,然后你会很高兴你编写了一个打印数组的函数而没有其他任何东西