3

我必须编写一段代码来搜索数组中的给定值。我制作了这段代码,它有效:

#include <stdio.h>

int index_van(int searchedValue, int array[], int lengthArray)
{
    int i ;
    for (i = 0; i < lengthArray; i++)
    {
        if (array[i] == searchedValue)
        {
            return i;
        }
    }
    return -1;    
}

int main()
{
    int array2 [] = {0, 1, 3, 4, 5, 2};
    printf("%i", index_van(2, array2, 6));
}

随着这个练习的更正(老师在网上提出),我老师的笔记是:你必须在你找到价值的那一刻退出,所以如果你已经找到了你的价值,你就无法搜索整个表格。因此,不允许使用 for 循环。即使 for 循环有一个额外的内置条件,这也不时尚!

// 一张小纸条,她说的很笼统。她没有看过我的练习版本。

所以我对你们的问题是,我的代码真的“没有完成”专业和“风格”吗?

4

3 回答 3

12

我认为她是在暗示您应该使用while循环,因为您不知道需要多少次迭代才能获得所需的内容。这可能是她希望您了解何时使用forwhile循环的区别的问题。

“......即使 for 循环有一个额外的内置条件......”

我认为这在这里解释了她的意图。一旦找到它正在寻找的for内容,循环将需要一个内置条件才能退出。while已经需要一个循环来满足条件。

于 2013-10-13T15:02:18.280 回答
7

您的代码没有任何问题。我不知道使用 for 循环是否不如使用另一个时尚,但时尚是一个非常主观的属性。

话虽如此,不要去找你的老师告诉她这些。照她说的做,这种事不值得跟老师顶撞。这很可能只是一种教你 while 循环如何工作的方法。

于 2013-10-13T15:07:39.780 回答
2

接受答案后:

我发布这篇文章是为了指出有时对“风格”的讨论太多,以至于当经典算法改进即将到来时,它被忽略了。


通常,搜索应该使用const数组并按照 OP 的建议继续使用在 2 个条件下停止的循环:如果找到了值或搜索了整个数组。

int index_van(int searchedValue, const int array[], int lengthArray)

但是,如果OP 可以const像发布的那样使用非数组,那么循环将非常简单且更快。

#include <stdlib.h>
int index_van(int searchedValue, int array[], int lengthArray) {
  if (lengthArray <= 0) {
    return -1;
  }
  int OldEnd = array[lengthArray - 1];
  // Set last value to match
  array[lengthArray - 1] = searchedValue;
  int i = 0;

  while (array[i] != searchedValue) i++;

  // Restore last value
  array[lengthArray - 1] = OldEnd;
  // If last value matched, was it due to the original array value?
  if (i == (lengthArray - 1)) {
    if (OldEnd != searchedValue) {
      return -1;
    }
  }
  return i;
}

顺便说一句:考虑使用size_tfor lengthArray

于 2013-10-13T15:30:27.170 回答