C代码函数调用不起作用

时间:2018-02-15 12:16:03

标签: c arrays function for-loop recursion

好的我需要编写两个函数迭代和递归来计算数组中的负元素然后我需要构建main。我只能编写递归函数但我无法从main调用它,这在某处是一个错误。有人可以帮助我解决它并帮助我使用迭代方法吗?

#include <stdio.h>

main()
{
    int vektor[100];
    int i, madhesia;

    /* Input size of array */
    printf("Madhesia e vektorit: ");
    scanf("%d", &madhesia);

    /* Input array elements */
    printf("Elementet: ");
    for (i = 0; i < madhesia; i++)
    {
        scanf("%d", &vektor[i]);
    }

    int ret = numero(vektor, madhesia);
    printf("\nTotal negative elements in array = %d", ret);

    return 0;
}

int numero(array, size)
{
    int count = 0;
    for (int j = 0; j < size; j++)
    {
        if (array[j] < 0)
        {
            count++;
        }
    }

    return count;
}

6 个答案:

答案 0 :(得分:1)

一段代码就是这个。你真的需要看一下指针及其工作方式。 在这里你可以看到我有一个指针 - &gt;指向 - &lt;在数组的开头,所以通过传递数组的起始地址和数组的长度,你的函数知道需要做什么。

#include <stdio.h>


int numero(int* array, int size);
int* recursive_count(int* array, int size , int* counter );


int main()
{
    int vektor[100];
    int* vekt_ptr = &vektor[0];
    int i, madhesia;
    int counter;
    counter=0;

    /* Input size of array */
    printf("Madhesia e vektorit: ");
    scanf("%d", &madhesia);

    /* Input array elements */
    printf("Elementet: ");
    for (i = 0; i < madhesia; i++)
    {
        scanf("%d", &vektor[i]);
    }

    //int ret = numero(vekt_ptr, madhesia);
    recursive_count(vekt_ptr, madhesia , &counter );
    int ret = counter;
    printf("\nTotal negative elements in array = %d", ret);

    return 0;
}

int numero(int* array, int size)
{
    int count = 0;
    int j;
    for (j = 0; j < size; j++)
    {
        if (array[j] < 0)
        {
            count++;
        }
    }

    return count;
}

int* recursive_count(int* array, int size , int* counter )
{
    size--;
    if(array[size] < 0 )
    {
        (*counter)++;
    }
    if(size==0)
    {
        return NULL;
    }
    return recursive_count(array++, size , counter );
}

假设您想要动态创建X长度的数组。 编译器将为您的阵列提供一些内存,具体取决于长度。 你初始化你的数组,让我们说[2] [45] [1] [ - 5] [99] 当你调用函数时,你必须传递它存储在内存中的位置。 int * vekt_ptr =&amp; vektor [0]; -s会像0x56c2e0那样给出。 这个数字是数组的地址,它是数组起始点的地址。这与第一个字节的地址相同。 因此,当您的函数启动时,它会知道您的数组的起始位置以及它的持续时间。

答案 1 :(得分:1)

对于根据C标准的初学者,不带参数的函数main应声明为

int main( void )

程序中使用的任何函数都应在使用前声明。

函数定义的函数声明

int numero(array, size)
{
    // ...
}

无效,因为参数类型arraysize未定义。

对于数组的大小和元素的数量,最好使用无符号整数类型,例如size_t或至少unsigned int

程序可以按以下方式查看

#include <stdio.h>

#define N   100

size_t iterative_numero( const int array[], size_t size );
size_t recursive_numero( const int array[], size_t size );

int main( void )
{
    int vektor[N];
    size_t madhesia = 0;

    /* Input size of array */
    printf("Madhesia e vektorit: ");
    scanf("%zu", &madhesia);

    if ( N < madhesia ) madhesia = N;

    /* Input array elements */
    printf("Elementet: ");
    for ( size_t i = 0; i < madhesia; i++ )
    {
        scanf( "%d", &vektor[i] );
    }

    size_t ret = iterative_numero(vektor, madhesia );
    printf("\nTotal negative elements in array = %zu\n", ret);
    ret = recursive_numero(vektor, madhesia );
    printf("Total negative elements in array = %zu\n", ret);

    return 0;
}

size_t iterative_numero( const int array[], size_t size )
{
    size_t count = 0;

    for ( size_t i = 0; i < size; i++)
    {
        if ( array[i] < 0 )
        {
            count++;
        }
    }

    return count;
}

size_t recursive_numero( const int array[], size_t size )
{
    return size == 0 ? 0 : ( array[0] < 0 ) + recursive_numero( array + 1, size - 1 );
}

程序输出可能看起来像

Madhesia e vektorit: 10
Elementet: 0 -1 2 -3 4 -5 6 -7 8 -9

Total negative elements in array = 5
Total negative elements in array = 5

答案 2 :(得分:1)

首先,你所做的是迭代方法,而不是递归方法。在这里,我从主函数调用了一个递归函数。

class Filters:
    queryset = None

    def apply(self, queryset):
        self.queryset = queryset

        for key, value in self.request.items():
            if key in self.filters and hasattr(self, key):
                return getattr(self, key)(value)

        return self.queryset


class ThreadFilter(Filters):
    filters = ('by', 'popular', 'unanswered')
    request = None

    def __init__(self, request):
        self.request = request

    def by(self, username):
        return self.queryset.filter(username=username)

    def popular(self, value=None):
        return self.queryset.order_by('-replies_count')

    def unanswered(self, value=None):
        return self.queryset.filter(replies_count=0)

答案 3 :(得分:0)

Put function prototype of numero() before main() to be able to call it. Declare function parameters with type:

int numero(int array[], int size);

int main() {
...

答案 4 :(得分:0)

一些可能的实施:

int iterativeCountNegativeIntegers (int *array, int size)
{
    int result = 0;
    for (; size > 0; ++array, --size)
         result += *array < 0;
    return result;
}


int recursiveCountNegativeIntegers (int *array, int size)
{
    return (size > 0) ? (*array < 0) + recursiveCountNegativeIntegers(array+1, size-1) : 0;
}

答案 5 :(得分:0)

#include<stdio.h>

int numero(int *, int);    //Function Prototype (1)

int main()      //Return Type (2)
{
    int vektor[100];
    int i, madhesia;
    printf("Madhesia e vektorit: ");
    scanf("%d", &madhesia);
    printf("Elementet: ");
    for (i = 0; i < madhesia; i++)
    {
        scanf("%d", &vektor[i]);
    }
    int ret = numero(vektor, madhesia);
    printf("\nTotal negative elements in array = %d", ret);
    return 0;
}

int numero(int* array,int size)        //Parameters Data Type (3)
{
    int count = 0;
    for (int j = 0; j < size; j++)
    {
        if (array[j] < 0)
        {
            count++;
        }
    }
    return count;
}

错误:

  1. 你已经在“main()”之后声明了这个函数,所以程序不知道有一个函数,所以你必须在“main()”之前给出函数原型,以便程序知道前面有函数
  2. 你错过了写“main()”的返回类型,它是整数。
  3. 在函数声明中,您忘记编写参数的数据类型。
  4. 注意:数组总是通过引用传递,因此它必须采用整数指针而不是普通整数。