我必须编写一段代码来搜索数组中的给定值。 我制作了这段代码,它起作用了:
#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循环具有额外的内置条件,这也不是时髦的!
//一个小小的音符,她一般都在说话。她没有看过我的练习版本。
所以我向你们提出的问题是,我的代码真的“没有完成”专业化和“风格”吗?
答案 0 :(得分:12)
我认为她暗示你应该使用while
循环,因为你不知道需要多少次迭代才能找到你想要的东西。这可能是一个问题,她希望您了解何时使用for
和while
循环的区别。
“......即使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
。