为什么for循环被我的老师认为不是“时尚”?

时间:2013-10-13 14:55:44

标签: c

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

#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循环具有额外的内置条件,这也不是时髦的!

//一个小小的音符,她一般都在说话。她没有看过我的练习版本。

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

3 个答案:

答案 0 :(得分:12)

我认为她暗示你应该使用while循环,因为你不知道需要多少次迭代才能找到你想要的东西。这可能是一个问题,她希望您了解何时使用forwhile循环的区别。

“......即使for-loop有额外的内置条件......”

我认为这就解释了她的意图。 for循环需要一个内置条件才能在找到它正在查找的内容后退出。具有条件的while循环已经是必需的。

答案 1 :(得分:7)

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

话虽如此,不要去找你的老师告诉她。做她说的话,这样的事情不值得你老师反驳。很可能这只是一种教你如何循环工作的方法。

答案 2 :(得分: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;
}

BTW:考虑将size_t用于lengthArray