首页 > 解决方案 > 检查矩阵的第一行和最后一行是否只有负值

问题描述

我在制作这个程序时遇到了一些问题我创建了两个数组,我去插入第一行和最后一行,然后我检查每个元素是否> 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");
        }
    }

}

标签: c

解决方案


我假设在 if 条件中matrix[i=0][j],并matrix[i=n-1][j]检查当前输入的行是分别是第一行还是最后一行。如果是这种情况,那么您只需要简单地检查 i 是 0 ( i == 0) 还是 n - 1 ( i == n-1) 而不是使用matrix[i=0][j]and matrix[i=n-1][j]

此外,在索引所在的 for 循环中,该行first_row[i] = matrix[i=0][j];last_row[i] = matrix[i=n-1][j];将更新i您应该避免的内容。i如果您打算将值分配给first_rowand last_row,您应该将它们更改为first_row[j] = matrix[0][j];andlast_row[j] = matrix[n-1][j];以获得期望的结果(注意j应该用于索引first_rowlast_row不是i因为j表示矩阵列)。

如果要检查矩阵中的每个元素是否有负值,for (j=j+1;j<n;j++)则应将 for 循环更改为for (j=0;j<m;j++)并且matrix[i][j]应使用last_row[i].

编辑:也正如@chux 建议的那样,您应该考虑在输入后初始化matrix,first_rowlast_row数组,nm避免分别大于 10 和 20的任何n和值的分段错误。m

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

}

推荐阅读