2

该程序应该读取元素的数量和列表,并将数组拆分为偶数和奇数,并显示原始数组中零的数量。我之前针对该程序遇到的第一个问题发布了一个问题,并且答案非常有帮助,因为这是一项作业。但是现在我遇到了另一个问题,那就是每次我运行它给我的程序时0 'z.,它直到我关闭窗口才会停止。我认为问题出在计数功能上,但我无法自己诊断问题。我补充说:

cout<< odd_num<< "     " << even_num;

在我调用 count 函数找出问题所在之后,它给了我一个非常大的数字,所以无论错误是什么,它都来自这个函数。

所以请帮助我!我敢肯定,对于你们大多数人来说,这是非常基础的,但我刚刚开始学习这一点,如果你能帮助我,我真的很感激。

编辑:我编辑了这段代码,唯一的问题是一个额外的零作为输出;看看最后的示例输出。

这是代码:

int count(const int list[],  int size, int & odd , int & even)

{
    int zero(0); 
    for (int i(0); i<size ; i++)
    {
        if (list[i] == 0)
        {
            zero++; 
        }
        if (list[i]% 2 ==0 & list[i]!=0)
        {
            even++; 
        }
        else if (list[i]% 2 ==1 & list[i]!=0)
        {
            odd++; 
        }
    }
    return  zero;

}


void split(const int list[], int size, int list_even[], int even_num, int list_odd[], int odd_num )
{
    int j(0); 
    int k(0); 

    for (int i(0); i<size; i++)
    {
        if(list[i]%2 == 0)
        {
            list_even[j]= list[i];
            j++;
        }
        else if(list[i]%2 != 0)
        {
            list_odd[k]= list[i];
            k++;
        }
    }
    if (j != even_num || k != odd_num) 
    {
        cerr << "Error.";
    }


}

// function to print an  array
void print_list(int array[], int length)
{
    for (int a=0; a<length; a++)
    {
        cout <<array[a]<<" ";
    }
}

这是示例答案:

Enter number of elements: 3
Enter list:
2
30
0
Error.Even elements:
2 30 0 0
Odd elements:

There were 1 zeros in the list

另一个示例是:

Enter number of elements: 3
Enter list:
2
1
5
Error.Even elements:
2 2752708
Odd elements:
1 5 2762032 2752708
There were 0 zeros in the list
4

3 回答 3

3

您没有初始化变量尝试:

   int zero_num(0); // number of zeros
   int even_num(0);
   int odd_num(0);

在开始使用它们之前(在此修复之前)尝试将它们打印出来,并查看它们的设置。:)


修复您的计数功能:

// function to copy odd and even number to seperate arrays
void split(const int list[], int size, int list_even[], int even_num, int list_odd[], int odd_num )
{
    int j(0);
    int k(0);

    for (int i(0); i<size; i++)
    {
        if (list[i] == 0)
        {   // zeros are not considered even in the count function
            // so they should not be added here.
            continue;
        }
        else if(list[i]%2 == 0)
        {
            list_even[j]= list[i];
            j++;
        }
        else if(list[i]%2 != 0)
        {
            list_odd[k]= list[i];
            k++;
        }
    }

    // test that we have found the right number of even and odd numbers.
    if (j != even_num || k != odd_num)
    {
        cerr << "Error.";
    }

}


为了确保多次调用 count 函数不会弄乱您的号码,请进行以下更改:

//function to count the odd and even numbers and th enumber od zeros
int count(const int list[],  int size, int & odd , int & even)

{
    // reset the even and odd counts before we start.
    odd=0;
    even=0;

    int zero(0); // variable to count zeros
    for (int i(0); i<size ; i++)
    {
        if (list[i] == 0)
        {
            zero++;
        }
        else if (list[i]% 2 == 0 )
        {
            even++;
        }
        else if (list[i]% 2 == 1 )
        {
            odd++;
        }
    }
    return  zero;
}

样本输出:

Enter number of elements: 5
Enter list:
1
2
5
0
0
Even elements: 2

Odd elements: 1
5

There were 2 zeros in the list

另一个在开头和中间都有零的示例输出:

Enter number of elements: 5
Enter list:
0
2
0
1
7
Even elements: 2

Odd elements: 1
7

There were 2 zeros in the list
于 2013-11-13T04:06:21.760 回答
3

在 if 条件下,您使用&which is 位运算符而不是&&which is Logical AND

看:

if (list[i]% 2 ==0 & list[i]!=0)
    {
        even++;
    }

改用&&,看看它是否有效,否则给我留言。

于 2013-11-13T04:58:26.387 回答
2

【改进】你的count函数怎么写成这样,

int count(const int list[],  int size, int & odd , int & even)
{
    int zero(0);
    for (int i(0); i<size; ++i)
    {
        if (list[i]==0)
        {
            ++zero;
        }
        else
        {
            if (list[i]%2==0) ++even;
            else ++odd;
        }
    }
    return zero;
}
于 2013-11-13T04:46:09.033 回答