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 ループに追加の組み込み条件があっても、これはスタイリッシュではありません。

// 1 つの小さなメモ、彼女は一般的に話していました。彼女は私のバージョンの演習を見たことがありません。

皆さんへの私の質問は、私のコードは本当にプロフェッショナリズムと「スタイル」に対して「完了していない」のですか?

4

3 に答える 3

12

while探しているものを取得するのに何回反復するかわからないため、ループを使用する必要があることを彼女はほのめかしていると思います。for使用するタイミングとwhileループの違いを理解してほしいという彼女の問題かもしれません。

「... for ループに追加の組み込み条件があっても...」

これが彼女の意図を説明していると思います。探しているforものが見つかったら、ループを終了するには、組み込みの条件が必要です。条件を設定するには、whileすでにループが必要です。

于 2013-10-13T15:02:18.280 に答える
7

コードに問題はありません。for ループの使用が別のループの使用よりスタイリッシュでないかどうかはわかりませんが、スタイリッシュとは非常に主観的な属性です。

そうは言っても、先生のところに行ってこのことを話さないでください。彼女の言う通りにしなさい、このような問題はあなたの先生に反論する価値はありません. ほとんどの場合、これは while ループがどのように機能するかを教える方法にすぎません。

于 2013-10-13T15:07:39.780 に答える
2

回答を受け入れた後:

これを投稿したのは、「スタイル」について非常に多くの議論があり、古典的なアルゴリズムの改善が目前に迫っているのに、それが無視されていることを指摘するためです。


通常、検索はconst配列で機能し、値が見つかった場合、または配列全体が検索された場合に停止するループを使用してOPが提案するように続行する必要があります。

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 に答える