【问题标题】:smallest value of array数组的最小值
【发布时间】:2013-02-02 04:26:45
【问题描述】:

我正在尝试编写一个返回数组最小值的函数。到目前为止,我有这个,但它返回的只是 0。

我看不到它会如何返回 0,因为我使用 for 循环循环遍历数组。也许它没有像我想的那样循环遍历数组值。谁能详细说明这段代码的逻辑和谬误?

#include <iostream>

using namespace std;

int newArray[9] = {4,5,9,3,6,2,1,7,8};


int minArray()
{
    int index = 1;
    int minimum;

    for (int i = 0; i < 9; i++)
    {
        if (newArray[i] > newArray[index])
        {
            minimum = newArray[index];
        }
        index++;

    }

    return minimum;
}


int main()    
{   
    cout << "original array:\n ";
    for (int i = 0; i < 9; i++)
    {
        cout << newArray[i] << ", ";
    }

    cout << "minimum value of array: ";
    cout << minArray();

    return 0;
}

【问题讨论】:

  • 在调试器中单步执行程序并观察每一步发生的情况会很有启发意义。我认为这样你会比有人指出所有的错误学到更多。
  • 想想你在每一步都比较了哪些值。这些是您要比较的值吗?我建议使用调试器,或者只是尝试通过一张纸来思考整个代码周期,逐个操作。
  • 另外,您应该将最小值初始化为已知值。
  • 提示:您正在更新index 错误。此外,您实际上根本不需要 index 变量。
  • @Revoo 如果代码不长于此,那么笔和纸比调试器要好。只需逐行阅读并写下所有变量的值。首先使用较小的阵列。以{1}开头。

标签: c++ arrays function codeblocks minimum


【解决方案1】:

一个好主意可能是用数组中的一个元素初始化最小值。 所以:

minimum = newArray[0]

在你的循环中(伪代码假设你不想要答案):

if: newArray[pos] < minimum

        minimum = newArray[pos];

【讨论】:

    【解决方案2】:

    我会这样做:

    #include <iostream>
    
    int minArray(int a[], int size) {
        if (size <= 0) return 0; //
        int m = a[0];
        for (int i = 1; i < size; ++i) {
           if (a[i] < m) m = a[i];
        }
        return m;
    }
    
    int main() {
        int a[] = { 4, 3, 6, 2 };
        std::cout << minArray(a, 4);
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      您应该使用某个已知值或最大整数值初始化minimum

      int minArray()
      {
          int minimum = newArray[0];
      
          for (int i = 1; i < 9; i++)
          {
              if (minimum > newArray[i])
              {
                  minimum = newArray[i];
              }
          }
      
          return minimum;
      }
      

      你处理错了index(实际上你根本不需要它)。如何使用index 代替minimum 的示例:

      int minArray()
      {
          int index = 0;
      
          for (int i = 1; i < 9; i++)
          {
              if (newArray[index] > newArray[i])
              {
                  index = i;
              }
          }
      
          return newArray[index];
      }
      

      这两个例子都可以正常工作,但我建议先使用。

      【讨论】:

        【解决方案4】:

        minimum 变量最初应该分配给数组中的一个值,然后将数组中的每个元素与minimum 进行比较。如果小于,则为 minimum 分配该值:

        int minArray()
        {
            int minimum = newArray[0];
            int index = 0;
        
            for (int i = 0; i < 9; i++)
            {
                if (newArray[i] < minimum)
                {
                    minimum = newArray[i];
                }
                index++;
        
            }
          return minimum;
        }
        

        【讨论】:

          猜你喜欢
          • 2016-09-10
          • 2017-02-13
          • 1970-01-01
          • 2012-02-11
          • 2017-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-15
          相关资源
          最近更新 更多