-2

これを試してみたところlinear search、パーツが表示されることがわかりましたelse。そして、私は自分が間違ったことを理解していません。ロジック...

#include<stdio.h>
#include<conio.h>
main()
{
      int a[10], i, x, size;
      printf("Enter the size of the array: \n");
      scanf("%d",&size);
      printf("Enter the elements into the array: \n");
      for(i=0; i<size; i++)
      {
               scanf("%d",&a[i]);
      }
      printf("Enter the element to be searched for: \n");
      scanf("%d",&x);
      for(i=0; i<size; i++)
      {
               if(x==a[i])
               {
                   printf("The element is at: %d",i);
                   break;
               }
               else
               {
                   printf("The element is not in the array.");
                   break;
               }
      }
getch();
}
4

6 に答える 6

3

最初の要素をチェックして、それが探しているものではないことを確認すると、ループから抜け出すためです。

于 2013-03-02T13:03:20.227 に答える
2

the ステートメントと theステートメントbreakの両方に the があります。つまり、配列をトラバースするのではなく、常に最初の要素の後にループを抜けます。ifelsefor

于 2013-03-02T13:02:07.263 に答える
1
  1. 配列を通過するだけで、各要素について、それが要素であるかどうかを判断し、それぞれの場合にグローバルに見つかったかどうかを判断します。それは正しくありません。最初に false を設定するブール変数を宣言しましょう。要素が見つかったら、変数を true に設定します。この変数が false の場合、最後に、各要素の後ではなく、検索に失敗したというメッセージを書き込みます。ブレークは、成功した後にのみ残してください。

  2. サイズが配列 a のサイズより小さいことを確認する必要があります。

于 2013-03-02T13:05:19.287 に答える
1

一部 breakからステートメントを削除し ます-コードは、最初の配列要素が検索対象の要素であるかどうかのみをチェックしていますelse

次のようにループをより適切に変更します。

    int flag = 0;
    for(i=0; i<size; i++)
    {
        if(x==a[i])
        {
            printf("The element is at: %d",i);
            break;
        }
        else
        {           
            flag = 1;  
        }
    }

    //will print if number is not present in the array
    if(flag !=0 ){
        printf("The element is not in the array.");
    }
于 2013-03-02T13:05:41.480 に答える
1

検索ループを次のように変更します。

  int found = 0;

  i=0;
  while(found == 0 && i < size){
    if(x == a[i]){
        found = 1;
        printf("The element is at: %d",i);
        break;  
    }
    i++;
  }
  if(found == 0)
    printf("The element is not in the array.");
于 2013-03-02T13:12:05.290 に答える
0

これは、フラグを持たずに実行できる 1 つの方法です。

ループが完了した後、まだ配列にある間ではなく、配列にないことのチェックを実行する必要があります。

      for(i=0; i<size; i++)
      {
               if(x==a[i])
               {
                   printf("The element is at: %d",i);
                   i = size + 2;
               }
      }

      if (i <= size)
      {
          printf("The element is not in the array.");
      }
于 2013-03-02T13:35:46.127 に答える