我已经使用冒泡排序对用户输入数组进行了排序。接下来,我有一个函数可以找到一个值,该值可以平等地分隔数组中的每个元素。 我的排序代码是这样的
注意LENGTH定义为25
void bubblesort(int dataset[])
{
int numpasses;
int lcv;
int temp;
for(numpasses = 1; numpasses < LENGTH; numpasses++)
{
for(lcv = 0; lcv < LENGTH - numpasses; lcv++)
{
if(dataset[lcv] > dataset[lcv + 1])
{
temp = dataset[lcv];
dataset[lcv] = dataset[lcv + 1];
dataset[lcv + 1] = temp;
}
}
}
}
接下来我找到常数值的函数如下
int findconstant(int dataset[])
{
int lcv;
int constantvalue;
for(lcv = 0; lcv < LENGTH; lcv++)
{
if ((dataset[lcv + 1] - dataset[lcv]) == (dataset[lcv + 2] - dataset[lcv + 1]))
{
constantvalue = dataset[lcv + 1] - dataset[lcv];
}
else
{
constantvalue = 0;
}
}
return(constantvalue);
}
最后,我的输出代码在
之下void printdata(int dataset[], int constantvalue)
{
int lcv;
if(constantvalue != 0)
{
for(lcv = 0; lcv < LENGTH; lcv++)
{
printf("Constant value %d separates the elements: %d\n", constantvalue, dataset[lcv]);
}
}else
{
printf("No constant value that separates the elements.");
}
}
我的问题是我总是得到“没有恒定的价值来区分元素。”作为我的输出,即使我输入1到25,值1是常量值我得到错误的打印语句。谁能告诉我哪里出错了?我确定泡泡排序的代码是我从书中获取的,所以也许我找到常量值的函数是错误的。
答案 0 :(得分:0)
我想循环
for (lcv = 0; lcv < LENGTH; lcv++)
应该有不同的条件,例如
for (lcv = 0; lcv < LENGTH-2; lcv++)
因为陈述
(dataset[lcv + 2] - dataset[lcv + 1])
当LENGTH
和lcv == LENGTH-2
(循环的最后两次迭代)时,将输出大小为lcv == LENGTH-1
的数组,并使用不正确的值(不是数组值)进行操作。
我认为你应该重新考虑你在findconstant
中使用的方法。
<强>更新强>
只是为了说明你的问题的根源,运行简单的程序:
#define LENGTH 10
#include <stdio.h>
int main(void)
{
int dataset[LENGTH];
int lcv;
for (lcv = 0; lcv < LENGTH; lcv++)
{
dataset[lcv] = 1;
}
for (lcv = 0; lcv < LENGTH; lcv++)
{
printf("%d %d %d\n", dataset[lcv], dataset[lcv + 1], dataset[lcv + 2]);
}
}
你会看到类似的东西(不完全,但相似)
在我的输出中,我看到值-858993460
和5241012
在数组附近作为dataset[LENGTH]
和dataset[LENGTH+1]
- 也许你会采取其他值,但无论如何这样的值会导致程序结果不正确。您应该阅读有关undefined behavior的更多信息,以了解其他可能出现的问题。