Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用递归查找数组中数字的频率_C_Function_Parameter Passing - Fatal编程技术网

C 使用递归查找数组中数字的频率

C 使用递归查找数组中数字的频率,c,function,parameter-passing,C,Function,Parameter Passing,我的代码块出现错误。但我无法在中的任何位置找到它 节目。它在说 第3行:应为“;”,“,”或“=”标记之前的“') #包括 int count_key1(int a[],int size,int key,int flag=0) { 如果(大小!=0) { if(a[size-1]==键) 计数键1(a,大小--,键,标志++); } 其他的 返回标志; } int main() { intb[30]={1,4,2,3,2,6,6,9},key1=9,result; 结果=计数键1(b,8,键1,

我的代码块出现错误。但我无法在中的任何位置找到它

节目。它在说

第3行:应为“;”,“,”或“=”标记之前的“')

#包括
int count_key1(int a[],int size,int key,int flag=0)
{
如果(大小!=0)
{
if(a[size-1]==键)
计数键1(a,大小--,键,标志++);
}
其他的
返回标志;
}
int main()
{
intb[30]={1,4,2,3,2,6,6,9},key1=9,result;
结果=计数键1(b,8,键1,0);
printf(“%d是存在的%d次”,键1,结果);
返回0;
}
在C语言中,不能在函数参数中指定默认值

删除中的
=0

  int count_key1(int a[],int size,int key,int flag=0)
IIRC,你被C++函数重载弄糊涂了,在这里,如果调用函数时没有传递参数,我们可以为参数设置一些默认值


然而,在C语言中,函数调用必须与定义中的签名完全匹配。因此,基本上,函数定义中不需要出现默认值。

先生,您的代码确实值得欣赏,但请尝试使用以下简单的代码,它提供相同的输出,并且易于理解

#include<stdio.h>
#include<stdlib.h>

int count_key1(int* a,int size,int key,int flag)
{
        int count=0,i;
        for(i=0; i<size; i++) { if (a[i] == key)  count++; }
        return count;
}
int main()
{
        int b[30]={1,4,2,3,2,6,6,9},key1=9,result;
        result=count_key1(b,8,key1,0);
        printf("%d is %d times present",key1,result);
        return 0;
}
#包括
#包括
int count_key1(int*a,int size,int key,int标志)
{
int计数=0,i;
对于(i=0;i
int count(int num,int*arr,int length){
如果(!长度)
返回0;
int c=计数(num,arr+1,length-1);
返回arr[0]==num?c+1:c;
}
内部主(空){
int-arr[10]={3,4,1,2,4,5,6,5,4,5};

std::您是否意识到这也可以写成
int count=0;for(i=0;这在c语言中是不允许的
int flag=0
您应该编写int main(void)。你也应该为你的函数编写原型。这个问题与它的标题有什么关系?你不能用c给你的参数一个默认值。另外,我不知道这是必要的,但它会帮助每个人(特别是你)如果从递归返回后显式返回。谢谢,但是我得到了一个条件,我应该使用递归。
#include<stdio.h>
#include<stdlib.h>

int count_key1(int* a,int size,int key,int flag)
{
        int count=0,i;
        for(i=0; i<size; i++) { if (a[i] == key)  count++; }
        return count;
}
int main()
{
        int b[30]={1,4,2,3,2,6,6,9},key1=9,result;
        result=count_key1(b,8,key1,0);
        printf("%d is %d times present",key1,result);
        return 0;
}
int count(int num, int* arr, int length) {
    if (!length)
        return 0;
    int c = count(num, arr+1, length-1);
    return arr[0] == num? c + 1: c;
}

int main(void) {
int arr[10] = {3,4,1,2,4,5,6,5,4,5};

std::cout << count(2, arr, 10);

return 0;
}