查找二维数组中每列的元素数

时间:2020-11-01 07:08:37

标签: c

我尝试制作C程序,但出现问题。 该程序将在每一列中查找元素数量。

输入:

4 4

矩阵:

1 0 1 1
0 0 0 0
0 0 0 1
1 1 1 1

输出应为1的列数

输出:

2 1 2 3

这是我的程序,但无法正常运行:

#include<stdio.h>

int main()
{
    int i , j, r , c , n , a[100][100],max[100];
    printf("Enter the number of rows: ");
    scanf("%d",&r);
    printf("Enter the number of columns: ");
    scanf("%d",&c);
    printf("Enter the elements of the array- \n");

    printf("The input matrix is:- \n");
    for(i = 0; i < r; i++)
    {
        for(j = 0; j < c; j++)
        {
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }
    for(i = 0; i < r; i++)
    {
        max[i] = a[i][j];
        for(j = 0; j < c ; j++)
        {
            if(a[i][j]>max[i])
            {
                max[i]=a[i][j];
            }
        }
    }
    for(i = 0; i < r; i++)
    {
        printf("the element of the row %d is: %d\n",i,max[i]);
    }
}

我需要帮助来修复程序。谢谢:)

1 个答案:

答案 0 :(得分:0)

您需要更改

max[i] = a[i][j];
for(j = 0; j < c ; j++)

使用

max[i] = a[i][0];
for(j = 1; j < c ; j++)

否则,您将a[i][c]的值存储为max,而这并不是您想要的。

此外,您没有填充数组,可以使用一些随机值来测试程序:

...
#include <time.h>
...

int main(void)
{
    srand((unsigned)time(NULL));

    ...

    for(i = 0; i < r; i++)
    {
        for(j = 0; j < c; j++)
        {
            a[i][j] = rand();
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }

编辑:

如果要计算max的数量,

1不是一个好名字。

printf("the element of the row %d is: %d\n",i,max[i]);

应该是

printf("Number of 1's in row %d is: %d\n",i,max[i]);

请下一次努力解释问题。

您的代码可以处理随机数,只需将其调整为scanf

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int i , j, r = 5, c = 10, n , a[100][100],max[100];

    srand((unsigned)time(NULL));
    printf("The input matrix is:- \n");
    for(i = 0; i < r; i++)
    {
        for(j = 0; j < c; j++)
        {
            a[i][j] = rand() & 1;
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }
    for(i = 0; i < r; i++)
    {
        max[i] = 0;
        for(j = 0; j < c ; j++)
        {
            if(a[i][j] == 1)
            {
                max[i]++;
            }
        }
    }
    for(i = 0; i < r; i++)
    {
        printf("Number of 1's in row %d is: %d\n",i,max[i]);
    }
}