繁体   English   中英

我无法使用 for 循环在这个 c 程序中获得基本概念

[英]I am unable to get the basic concept in this c program using for loop

该程序向用户询问一些元素,结果告诉用户每个元素的出现频率。 我在代码中使用内联文本标记了问号,请帮助我,我无法在这里理解这个概念。

#include <stdio.h>

int main()
{
    int arr[100], freq[100];
    int size, i, j, count;

    printf("Enter size of array: ");
    scanf("%d", &size);

    printf("Enter elements in array: ");
    for(i=0; i<size; i++)
    {
        scanf("%d", &arr[i]);
        freq[i] = -1; //?? Why is freq said to be -1???

    }

    for(i=0; i<size; i++)
    {
        count=1;
        for(j=i+1; j<size; j++)
        {
            if(arr[i]==arr[j])
            {
                count++;

                freq[j] = 0; //?? How is it checking if some elements going to same as other?? 
            }
        }

        if(freq[i] != 0)
        {
            freq[i] = count;
        }
    }

    printf("\nFrequency of all elements of array : \n");
    for(i=0; i<size; i++)
    {
        if(freq[i] != 0)
        {
            printf("%d occurs %d times\n", arr[i], freq[i]);
        }
    }

    return 0;
}

请帮我。

 freq[i] = -1;

在这里,您可以分配除 0 以外的任何值来覆盖数组中存在的垃圾值。

为什么不能取0?

if(freq[i] != 0)
    {
        freq[i] = count;
    }

在这里,您添加了这种条件,其中freq[i]仅在不为 0 时才会更新。这是为了确保您注意每个唯一元素第一次出现时的频率,以及该特定元素freq[i]出现的 rest freq[i]为 0 以避免在 output 中多次打印。

 freq[j] = 0;

 if(freq[i] != 0)
    {
        printf("%d occurs %d times\n", arr[i], freq[i]);
    }

没有上述2个输入条件,

总元素 = 5,元素 = {1,2,2,1,5}

Output:
1 发生 2 次
2 出现 2 次
2 发生 1 次
1 出现 1 次
5 出现 1 次

那不是您想要的 output。

所以总结起来很简单。 如果元素第一次出现在第 i 个索引处,则仅将 update freq[i]标记为其出现,如果相同元素再次出现在任何第 j 个索引处,则将freq[j]设置为 0 以进行打印。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM