尝试编写一个计算数组中偶数数量的程序并返回该值

时间:2016-05-25 06:59:28

标签: c

我正在尝试创建一个程序来计算提供的数组中偶数的数量。当我现在运行程序时,它将返回数组中的数字量,但不会返回偶数的数量。由于某种原因,我的count_even函数不起作用。有人可以帮忙吗?

 #include <stdio.h>

int main()
{
    int data_array_1[] = { 1, 3, 5, 7, 9, 11 };
    int data_array_2[] = { 2, -4, 6, -8, 10, -12, 14, -16 };
    int data_array_3[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
    int data_array_4[] = { 6, 2, 4, 5, 1, -9 };
    int data_array_5[] = { 1, 3, 9, 23, 5, -2, 4 };

    int result_1 = count_even(data_array_1, 6);

    printf("data_array_1 has %d even numbers.\n", result_1);

    int result_2 = count_even(data_array_2, 8);

    printf("data_array_2 has %d even numbers.\n", result_2);

    int result_3 = count_even(data_array_3, 11);

    printf("data_array_3 has %d even numbers.\n", result_3);

    int result_4 = count_even(data_array_4, 6);

    printf("data_array_4 has %d even numbers.\n", result_4);

    int result_5 = count_even(data_array_5, 7);

    printf("data_array_5 has %d even numbers.\n", result_5);


    return 0;
}

int count_even(int* data_array, int size)
{
    int even_num = 0;

    for (int i = 0; i == size; i++)
    {
        if (data_array[size] % 2 == 0)
        {
            even_num++;
        }
    }

    return even_num;
}

3 个答案:

答案 0 :(得分:2)

for循环中的条件错误。 正确的条件应该是&#34;只要索引小于&#34;,但你的是&#34;只要索引等于&#34;。

条件应为i < size

至于结果,它似乎应该返回0(对于非工作代码),而不是size

此外,当您使用size时,您使用i作为索引。

答案 1 :(得分:0)

在你的count_even函数中,你使用size属性作为数组索引,当它应该是i

int count_even(int* data_array, int size)
{
    int even_num = 0
    for(int i = 0; i <= size, ++i)
    {
        if(data_array[i] % 2 == 0) 
        {
            even_num++;
        }
    }
    return even_num;
}

答案 2 :(得分:0)

这两行是代码中问题的根源:

for (int i = 0; i == size; i++)
{
    if (data_array[size] % 2 == 0)

for()语句应该是:

 for (int i = 0; i < size; i++)

所以循环在到达数组末尾时退出

if()语句总是查看数组末尾之外的相同条目,这是未定义的行为

if()语句应为:

if (data_array[i] % 2 == 0)

但是,模数运算符&不是负数

的好选择

更好的选择是:

if ( !(data_array[i] & 1 ) )