我已经使用冒泡排序对用户输入数组进行了排序。接下来,我有一个函数,用于查找将数组中的每个元素均等分隔的值。 我的排序代码是这样的
注意 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 是常量值,我也会得到错误的打印语句。有人能告诉我哪里出了问题吗?我对冒泡排序的代码很确定,因为我从书上获取了它,所以也许我查找常量值的函数是错误的。
最佳答案
我想是循环
for (lcv = 0; lcv < LENGTH; lcv++)
应该有不同的条件,例如
for (lcv = 0; lcv < LENGTH-2; lcv++)
因为声明
(dataset[lcv + 2] - dataset[lcv + 1])
当lcv == LENGTH-2
和lcv == LENGTH-1
(最后两次迭代)时,将输出大小为LENGTH
的数组of 循环)并使用不正确的值(不是数组值)进行操作。
我认为您应该重新考虑在 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 的内容查看其他可能的问题。
关于c - 如何找到分隔数组中元素的常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45398853/