该程序应该读取元素和列表的数量,并将数组拆分为偶数和奇数,并显示原始数组中的零数。
我之前发布了一个问题,因为我对这个程序遇到了第一个问题,答案非常有用,因为这是一项任务。但是现在我还有另外一个问题,那就是每次我运行它给我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
答案 0 :(得分: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
答案 1 :(得分:3)
如果条件允许,您使用的是&
,它是按位运算符而不是&&
Logical AND
。
请参阅:
if (list[i]% 2 ==0 & list[i]!=0)
{
even++;
}
使用&&
来查看它是否有效,否则请给我留言。
答案 2 :(得分:2)
[改进]如何写这样的计数函数,
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;
}