我在制作这个程序时遇到一些问题 我创建了两个数组,在其中插入第一行和最后一行,然后检查每个元素是否 > 0,但它似乎不起作用..
这是我的代码:
int main()
{
int i, j, n, m;
int matrix[10][20];
int first_row[m];
int last_row[m];
printf("Enter number of rows : ");
scanf("%d", &n);
printf("Enter number of columns : ");
scanf("%d", &m);
/* Input data in matrix */
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("Enter data in [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
if(matrix[i=0][j]) // First row
first_row[i] = matrix[i=0][j];
if(matrix[i=n-1][j]) // second row
last_row[i] = matrix[i=n-1][j];
}
}
for(i=0;i<n;i++)
{
for (j=j+1;j<n;j++)
{
if(last_row[i] < 0)
printf("Negative element");
}
}
}
最佳答案
我假设在 if 条件下 matrix[i=0][j]
和matrix[i=n-1][j]
是检查当前输入的行是否分别是第一行或最后一行。如果是这种情况,那么您只需检查 i 是否为 0 ( i == 0
) 或 n - 1 ( i == n-1
),而不是使用 matrix[i=0][j]
和matrix[i=n-1][j]
。
还有行 first_row[i] = matrix[i=0][j];
和last_row[i] = matrix[i=n-1][j];
即将更新i
这是在 for 循环中应该避免的情况,其中 i
是索引。如果您打算将值分配给 first_row
和last_row
,您应该将它们更改为 first_row[j] = matrix[0][j];
和last_row[j] = matrix[n-1][j];
以获得所需的结果(请注意,j
应该用于索引 first_row
和 last_row
而不是 i
,因为 j
代表矩阵列)。
如果要检查矩阵中每个元素的负值,则使用 for 循环 for (j=j+1;j<n;j++)
应更改为for (j=0;j<m;j++)
和matrix[i][j]
应该使用而不是 last_row[i]
.
编辑:同样正如 @chux 建议的那样,您应该考虑初始化 matrix
, first_row
和last_row
输入 n
后的数组和m
为了避免任何 n
的段错误和m
分别大于 10 和 20 的值。
#include <stdio.h>
int main()
{
int i, j, n, m;
printf("Enter number of rows : ");
scanf("%d", &n);
printf("Enter number of columns : ");
scanf("%d", &m);
int matrix[n][m];
int first_row[m];
int last_row[m];
/* Input data in matrix */
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("Enter data in [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
if(i == 0) // First row
first_row[j] = matrix[0][j];
if(i == n-1) // second row
last_row[j] = matrix[n-1][j];
}
}
for(i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
if(matrix[i][j] < 0)
printf("Negative element %d\n", matrix[i][j]);
}
}
}
关于检查矩阵的第一行和最后一行是否只有负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58869010/