我需要遍历数组,在数组中查找数字的出现,然后将出现的次数输出到新数组中。
void create_hist(double input[], int num_of_inputs, int output[])
{
int num_to_check = input[0];
int counter = 0;
for (int i = 0; i < num_of_inputs; i++)
{
if (input[i] == num_to_check)
{
counter++; /* it was found */
}
output[i] = counter;
}
return;
}
考虑输入内容包含input[3] ={0, 0 ,0}
。输出应为output[3] = {3, 0, 0}
。
当前输出为output[3] = {1, 2, 3}
-我是否需要创建另一个数组来保存每个循环的值,然后使其输出。我只是迷上了这个。
答案 0 :(得分:0)
拳头问题: num_to _check应该为双精度,否则需要转换(如果要检查整数)数组元素。
由于浮点数不精确,恐怕==
与比较整数时不一样
#define delta xxxx /*some double value*/
void create_hist(double input[], int num_of_inputs, int output[])
{
double num_to_check = input[0];
int counter = 0;
for (int i = 0; i < num_of_inputs; i++)
{
if (input[i] > num_to_check - delta && input[i] < num_to_check + delta)
或
void create_hist(double input[], int num_of_inputs, int output[])
{
int num_to_check = input[0];
int counter = 0;
for (int i = 0; i < num_of_inputs; i++)
{
if ((int)input[i] == num_to_check)
或
void create_hist(double input[], int num_of_inputs, int output[])
{
int num_to_check = input[0];
int counter = 0;
for (int i = 0; i < num_of_inputs; i++)
{
if ((int)round(input[i]) == num_to_check)
取决于您的程序逻辑。
答案 1 :(得分:0)
这里看到的问题是您的输入数组是{0,0,0}
,所以在开始时您已经将num_to_check
初始化为0,因此当您第一次遍历for循环时,如果if条件为true ,这会使计数器增加1,在下一次迭代中,由于input[1]
和num_to_check
均为0,因此if语句再次成立,因此计数器再次增加1,在上一次迭代中也是如此这就是您将输出作为{1,2,3}
的原因。您无需创建其他数组,只需使用其他变量{{1来代替i
下标中的output[i]
即可。 }}并适当增加它。
答案 2 :(得分:0)
所以这适用于以上
void create_hist(double input[], int num_of_inputs, int output[])
{
int num_to_check = input[0];
int counter = 0;
for (int i = 0; i < num_of_inputs; i++)
{
int j = output[i];
if ((int)input[i] == num_to_check)
{
counter++; /* it was found */
}
output[j] = counter;
}
return;
另一个问题:如果我有浮点数组
input[5] = {0.0000, 1.0000, 2.0000, 3.0000, 4.000}
并且我想要然后将值截断为int,并计算输入数组中0-10范围内的每个整数出现多少次,然后将其输出到:
output[5] = {1, 1, 1, 1, 1}
我该怎么做。