【问题标题】:This is a program to search a number and also display its index position if found in an array [closed]这是一个搜索数字并在数组中找到数字并显示其索引位置的程序[关闭]
【发布时间】:2021-09-09 14:55:13
【问题描述】:

这是一个 C++ 程序,用于搜索数字并在数组中找到时显示其索引位置。
程序运行良好。我只是想问为什么我们在 if 语句中使用 k=1 因为如果我们不使用它,那么程序将无法运行。请解释一下 if 语句中第二个 for 循环中 k=1 的意义。

#include<iostream>
using namespace std;
int main(){
int n;
cout<<"Size of Array: ";
cin>>n;
int arr[n];
cout<<"Type Elements of Array: ";
for(int i=0; i<n; i++)
{
cin>>arr[i];
}
int k;
cout<<"Enter No to be found: ";
cin>>k;
for(int i=0; i<n; i++)
{
if(arr[i]==k)
{
    k=1;
    cout<<"No is found at index position: "<<i<<endl;;    
    break;
}
else
{
    cout<<"No is not found"; 
    break;   
}
}
return 0;
}

【问题讨论】:

  • 该程序将无法运行无论该行是否在其中。
  • “程序运行良好。” - 不,它根本无法运行。它只会检查第一个数字并跳出循环。更不用说int arr[n]; 是非标准 C++ 并且不能在所有编译器上工作。

标签: c++ arrays for-loop if-statement


【解决方案1】:

看起来您正在尝试进行线性搜索,我想澄清一些要点..

  1. 永远不要通过用户使用cin 来使用int arr[n],它可能适用于您的,但并非所有编译器都支持它。始终像 arr[10]arr[20] 那样静态地为数组分配内存

  2. 您正在更改 k 这是要找到的号码,我不明白您为什么要更改 k 。这是要搜索的数字,您错误地将k 解释为flag 变量,但它是NOT。切勿尝试更改用户的输入变量。

  3. 只有当您搜索的数字位于0th 索引处时,您的程序才能工作,因为在那之后,您实际上是在ifelse 条件下打破循环。

  4. 这里是一个更好的c++线性搜索代码的链接,我希望它能清除你的概念C++ Linear Search

【讨论】:

    【解决方案2】:

    问题不在于k=1 语句。它在于你的 else 块的逻辑。

    考虑一下:

    n = 5
    arr = [12, 2, 3, 14, 5]
    k = 3
    

    所以最初 for 循环中的 i0 开始

    它检查是否相等:

    Is arr[i] == k ? 
       arr[0] == 3 ?
       12 == 3?
    

    这是false,因此您的程序会转到 else 块,在该块中打印未找到该数字并从 for 循环中中断。所以本质上你并没有检查所有的数字,只是第一个。

    PS:尝试自己找到一个工作逻辑,如果您开始编程,这将是一个很好的练习并提高您的理解(提示:有多种方法,通过标志变量或使用循环变量等)。当您的程序无法按您希望的那样运行时,请像我在上面那样进行试运行。

    【讨论】:

      【解决方案3】:

      你应该去动态分配数组。其次,你的 if-else 块有问题。它只检查数组中的第一个数字,然后继续到 else 部分。您的程序可以正常工作,但您应该确保它在整个数组中搜索要搜索的数字。您只需删除 else 部分即可:

      for(int i=0;i<n;i++)
      {
      if(arr[i]==k)
      {
          cout<<"No is found at index position: "<<i<<endl;;    
          return 0;
      }
      }
      cout<<"No is not found.";
      return 0;
       
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-15
        • 2020-08-31
        • 1970-01-01
        • 1970-01-01
        • 2015-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多