使用 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。以防万一你们中的一些人会建议使用它们哈哈。
要编写查找需要传递的频率的函数:
- 数组
- 数组的大小
- 人数。
您只需在函数内声明数组,以为它会神奇地拥有您在另一个函数中输入的内容。不,它包含未确定的值并调用 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++;
}
我正在编写一个程序,我们需要在其中找到数组中所选数字的频率。数字由用户输入,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。以防万一你们中的一些人会建议使用它们哈哈。
要编写查找需要传递的频率的函数:
- 数组
- 数组的大小
- 人数。
您只需在函数内声明数组,以为它会神奇地拥有您在另一个函数中输入的内容。不,它包含未确定的值并调用 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++;
}