【问题标题】:In C program counting occurrences of digits 0 through 9 in an NxM array. Mine counts the number of numbers instead of individual number counts?在 C 程序中,计算 NxM 数组中数字 0 到 9 的出现次数。我的计数数字而不是单个数字计数?
【发布时间】:2018-10-15 18:39:45
【问题描述】:

这第一部分定义了所需的数组和变量:i 指的是行,j 指的是列,k 指的是数组中存储数字计数的元素,l 指的是数字正在测试中,cd 是数组大小的用户条目。

#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 - 9 递增测试该元素 (l++),然后递增单个数组元素(由javariparker[k]k 然后递增)每次用户定义的数组元素等于从 0 开始的 l 的递增值。

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

【问题讨论】:

  • int charlesbarkley[c-1][d-1]; 为什么是-1?您正在循环中越界访问数组。
  • 数字的数量与数字的数量?嗯。
  • 如果你声明一个像int a[n];这样的数组,有效的索引是0 ... n-1。我认为这是你的问题。
  • 因为数组从 0 开始?如果 use 进入 3X3 数组,它必须在技术上定义为 charlesbarkley[2][2] 因为三个数字位于 0 和 2 之间(0(1)、1(2)、2(3)),对吗?跨度>
  • 我正在尝试计算某些数字在整个数组中出现的次数

标签: c arrays for-loop if-statement


【解决方案1】:

您正在越界访问您的数组。如果您声明像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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多