【发布时间】:2021-12-07 23:43:41
【问题描述】:
我正在编写一个程序,我们需要在其中找到数组中所选数字的频率。数字由用户输入,他/她将选择一个数字来计算其实例。我用这个程序做到了。
#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。我不知道我在哪里做错了,我需要你们的帮助。我真的很感谢你放在这里的每一个答案和 cmets,我浏览了每一个答案,这对我有帮助。再次感谢!
ps。我们还不允许在这个程序中使用指针、结构或 idk。以防万一你们中的一些人会建议使用它们哈哈。
【问题讨论】:
-
if(num[i]==chn)您应该阅读有关函数参数和局部变量的学习资料。您在freq中使用了一个局部变量num,它与main中的变量num无关,并且包含未确定的(随机)内容。 -
我不禁想知道...您正确地将
n作为参数传递给函数。很好 - 你知道n需要从main传递给函数。那么是什么让您认为chn也不需要传递。并且认为什么样的魔法会在不传递的情况下将数组num带入函数中。 -
换句话说:
int chn, num[10], i, frq=0;-->int i, frq=0;并将其他变量作为参数传递给函数 -
通过解决编译器已经为您找到的问题停止浪费您的时间。 What compiler options are recommended for beginners learning C?
标签: arrays c function user-defined-functions frequency