[英]Finding the frequency of an element in an array using a user-defined function in C
我正在编写一个程序,我们需要在其中找到数组中所选数字的频率。 数字由用户输入,他/她将选择一个数字来计算其实例。 我用这个程序做到了。
#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。我不知道我哪里做错了,我需要你们的帮助。 我真的很感谢你在这里提出的每一个答案和评论,我浏览了其中的每一个,这对我有帮助。 再次感谢你!
附: 我们还不允许在这个程序中使用指针、结构或 idk。 以防万一你们中的一些人会建议使用它们,哈哈。
要编写查找您需要传递的频率的函数:
您只需在函数内部声明数组,认为它会神奇地拥有您在另一个函数中输入的内容。 不,它包含未确定的值并调用 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++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.