首页 > 解决方案 > 在 C 程序中,计算 NxM 数组中数字 0 到 9 的出现次数。我的计数数字而不是单个数字计数?

问题描述

第一部分定义了所需的数组和变量:i指行、j指列、k指数组中存储数字计数的元素、l指被测试的数字,c以及d数组大小的用户条目。

#include <stdio.h>
int main(void) {
    int i, j, k, l;
    int c, d;
    printf("This program counts occurrences of digits 0 through 9 in an NxM array.\n");
    printf("Enter the size of the array (Row Column): ");

这里数组是按照用户指定的方式创建的。

    scanf("%d %d", &c, &d);
    int charlesbarkley[c - 1][d - 1];
    int javariparker[9];
    for (j = 1; j <= d; j++) {
        printf("Enter row #%d #'s", j);

        for (i = 0; i < c; i++) {
            scanf("%d", &charlesbarkley[i][j - 1]);
        }
    }

这里有四个嵌套的 for 循环,用于访问数组的每个元素charlesbarkely[i][j](数组元素等于从 0 开始的递增值。l++javariparker[k]kl

    for (k = 0; k <= 9; k++) {
        for (j = 0; j < d; j++) {
            for (i = 0; i < c; i++) {
                for (l = 0; l <= 9; l++) {
                    if (charlesbarkley[i][j] != l)
                        javariparker[k] = javariparker[k];
                    else
                        javariparker[k] = (javariparker[k] + 1);
                }
            }
        }
    }

在这里,我尝试使用数字计数 (0 - 9) 打印数组,但是如果我的数组例如 5x5,它只会向我吐出 25 10 次,因此它会检查每个数字的每个元素,而不是检查每个每次只有一个数字的元素,我如何让它像我想要的那样工作,还是我会走到死胡同?

    for (k = 0; k <= 9; k++) {
        printf("%d", javariparker[k]);
    }
}

标签: carraysfor-loopif-statement

解决方案


您正在越界访问您的数组。如果您声明一个数组,如int a[n];有效索引是0 ... n-1.

使用未初始化的计数器变量也会调用未定义的行为,您应该使用以下命令对其进行初始化int javariparker[10]={0};

您也不需要第四个循环来计算出现次数。

这应该有效:

#include <stdio.h>
int main(void)
{
    int i, j, k, l; 
    int c, d;

    printf("This program counts occurrences of digits 0 through 9 in an NxM array.\n");
    printf("Enter the size of the array (Row Column): ");

    scanf("%d %d", &c, &d);
    int charlesbarkley[c][d];
    int javariparker[10]={0};

    for(j=0;j<d;j++)
    {
        printf("Enter row #%d #'s", j+1);

        for(i=0;i<c;i++)
        {
            scanf("%d",&charlesbarkley[i][j]);
        }
    }

    for(k=0;k<=9;k++)
    {
        for(j=0;j<d;j++)
        {
            for(i=0;i<c;i++)
            {
                if(charlesbarkley[i][j]==k)
                    javariparker[k]++;
            }
        }
    }

    for(k=0;k<=9;k++)
    {
        printf("%d ",javariparker[k]);
    }

    return 0;
}

推荐阅读