c - 如何找到分隔数组中元素的常量值

标签 c arrays sorting

我已经使用冒泡排序对用户输入数组进行了排序。接下来,我有一个函数,用于查找将数组中的每个元素均等分隔的值。 我的排序代码是这样的

注意 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-2lcv == 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]);
    }
}

你会看到类似的东西(不完全一样,但相似)

enter image description here

在我的输出中,我看到值-8589934605241012在数组附近作为dataset[LENGTH]dataset [LENGTH+1] - 也许您会采用其他值,但无论如何这些值都会导致程序结果不正确。您应该阅读更多关于 undefined behavior 的内容查看其他可能的问题。

关于c - 如何找到分隔数组中元素的常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45398853/

相关文章:

linux - 试图了解 linux 中的排序实用程序

c - 汇编 如何将 IMUL 操作码(只有一个操作数)翻译成 C 代码

c - 计算数字除数的最佳算法是什么?

c++ - 获取内存地址的值

javascript - 如何从同一数组的反向查找数组 1 的相邻元素

c - C 中带有 printf 和多维数组的 7 段显示

python - 如何在 python 排序(列表)中指定 2 个键?

c - 使用strtok解析数据

PHP:有没有一种简单的方法可以将数字列表(作为字符串,如 "1-3,5,7-9")解析为数组?

javascript - 更改和缩短多维数组