使用 C 中的用户定义函数查找数组中元素的频率

Finding the frequency of an element in an array using a user-defined function in C

我正在编写一个程序,我们需要在其中找到数组中所选数字的频率。数字由用户输入,he/she 将选择一个数字来计算其实例。我用这个程序做到了。

#include<stdio.h>
int main()
{
    
    int n, frq=0, chn;
    int num[10];
    int i, j;
    
    printf("Enter quantity of numbers to be inputted: ");
    scanf("%d", &n);
    
    for(i=0; i<n; i++)
    {
        printf("Enter number[%d]: ", i+1);
        scanf("%d", &num[i]);
    }
    printf("(");
    for(j=0; j<n; j++)
    {
        printf("%d, ", num[j]);
    }
    printf(")\n\n");
    
    printf("Enter number to be counted: ");
    scanf("%d", &chn);
    
    for(i=0; i<n; i++)
    {
    if(num[i]==chn)
    {
       frq++;   
    }}
    printf("Instance count: %d", frq);
    return 0;
}

它工作得很好。然后我们的老师让我们做同样的事情。但是这一次,我们将在程序计算所选数字的实例的部分使用用户定义的函数。这就是我所做的。

#include<stdio.h>

int freq(int n);

int main()
{
    
    int n, frq=0, chn;
    int num[10];
    int i, j;
    
    printf("Enter quantity of numbers to be inputted: ");
    scanf("%d", &n);
    
    for(i=0; i<n; i++)
    {
        printf("Enter number[%d]: ", i+1);
        scanf("%d", &num[i]);
    }
    printf("(");
    for(j=0; j<n; j++)
    {
        printf("%d, ", num[j]);
    }
    printf(")\n\n");
    
    printf("Enter number to be counted: ");
    scanf("%d", &chn);
    
    frq = freq(n); 

    printf("Instance count: %d", frq);
    return 0;
}

int freq(int n)
{
int chn, num[10], i, frq=0;
    
    
    for(i=0; i<n; i++)
    {
    if(num[i]==chn)
    {
       frq++;   
    }}
    return(frq);
}

但是当我 运行 它时,它并没有产生预期的输出。例如;

input quantity: >>>6
Enter number[1]: >>>1
Enter number[2]: >>>2
Enter number[3]: >>>3
Enter number[4]: >>>3
Enter number[5]: >>>3
Enter number[6]: >>>2
(1, 2, 3, 3, 3, 2, )

Enter number to be counted: >>>3
Instance count: 1

Process Finished.
>>>

它应该打印 3,但它打印了 1。我不知道我哪里做错了,我需要你们的帮助。我真的很感谢你在这里提出的每一个答案和评论,我 运行 通过了他们中的每一个,它帮助了我。再次感谢!

ps。我们还不允许在这个程序中使用指针或结构或 idk。以防万一你们中的一些人会建议使用它们哈哈。

要编写查找需要传递的频率的函数:

  1. 数组
  2. 数组的大小
  3. 人数。

您只需在函数内声明数组,以为它会神奇地拥有您在另一个函数中输入的内容。不,它包含未确定的值并调用 UB

size_t freq(int *array, size_t size, int val)
{
    size_t freq = 0;
    while(size--) freq += *array++ == val;
    return freq;
}

int main(void)
{
    
    int num[] = {1, 2, 3, 3, 3, 2, };

    printf("The %d is present in the array %zu times\n", 3, freq(num, sizeof(num)/sizeof(num[0]), 3));
}

或者(如@4386427 发现的)“oneliner”

    while(size--) 
    {
        if(*array == val) freq += 1;
        array++;
    }