所以我有一个函数应该找到用户输入的一组数据的模式。我相信使用'\0'
字符终止循环有一个问题,但我不确定。即使这是问题,我也不知道如何解决它。任何建议表示赞赏。
int mode(int input[]){
int array[70]={0},i=0,j=0,i2=0,j2=0;
while (input[i]!='\0'){
j=input[i];
array[j]=array[j]+1;
i++;
}
while (array[i2]!='\0'){
if (array[i2]>j2){
j2=array[i2];
i2++;
}
else{
i2++;
}
}
return j2;
}
答案 0 :(得分:0)
一般来说,您会知道用户输入中有多少条目,因此mode()
函数的效果最好为int mode(int num, int input[])
。您的代码假定输入数组中的值将在1..69范围内而不进行检查。写'\0'
而不是0是奇怪的(虽然技术上合法)。当它遇到零计数时,第二个循环停止。它会立即执行此操作,因为array[0]
永远不会设置为零以外的其他任何内容。
我将循环写为for
循环,无论是使用'zero as sentinel'还是'explicit count'。
int mode(int input[])
{
int array[70];
for (int i = 0; input[i] != 0; i++)
{
int value = input[i];
if (value > 0 && value < 70)
array[value]++;
}
int m_value = array[1];
for (int j = 2; j < 70; j++)
{
if (array[j] > m_value)
m_value = array[j];
}
return m_value;
}
我建议的计数版本的唯一区别是将第一个循环的终止条件从input[i] != 0;
更改为i < num;
。