-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

break在 theifelse语句中都有,这意味着您不是遍历数组,而是总是for在第一个元素之后退出循环。

于 2013-03-02T13:02:07.263 回答
1
  1. 您只需通过数组,并且对于每个元素,您告诉它是否是该元素,并且在每种情况下您决定它是否被全局找到。这是不正确的。让我们声明一个布尔变量,在开始时将其设置为 false,如果找到元素,则将变量设置为 true;最后,如果此变量为假,您将在搜索中写下您未成功的消息,而不是在每个元素之后。只有在成功后才应留下休息。

  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

这是一种无需标志也可以做到的方法!

您需要在循环完成后执行不在数组中的检查,而不是在它仍在其中时执行检查。

      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 回答