检查矩阵的第一行和最后一行是否只有负值

标签 c

我在制作这个程序时遇到一些问题 我创建了两个数组,在其中插入第一行和最后一行,然后检查每个元素是否 > 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_rowlast_row ,您应该将它们更改为 first_row[j] = matrix[0][j];last_row[j] = matrix[n-1][j];以获得所需的结果(请注意,j 应该用于索引 first_rowlast_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_rowlast_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/

相关文章:

无法读取UART数据

c - 文件如何包含空字节?

c - 为什么我在 Windows 机器上用 C 开发时会出现 include <windows.h> 错误?

c++ - 在 Debian 上为您自己的应用程序添加 SNMP 支持的最佳方式

c - sprintf_s 未在此范围内声明

c - 当进程仍在运行时查找进程及其子进程的 cpu 时间

c - 未声明的标识符已经声明?

c - 简单 C 代码中的指针数组问题

c - 简单链表段错误

c - 防止字符串操作崩溃导致整个应用程序崩溃