【问题标题】:obtaining the minimum value in an array获取数组中的最小值
【发布时间】:2015-12-22 07:48:13
【问题描述】:
 #include <stdio.h>

int min=0;
int find_min_index(int numbers[], int length)
{
for(int a=0; a<length; a++)
{
    if(numbers[a]<min)
    min=numbers[a];
}

int main( int argc, char* argv[])
{
int data_array_1 = ( 1, 3, 5, 7, 9, 11};
int data_array_2 = ( 2, -4, 6, -8, 10, -12, 14, -16};
int data_array_3 = ( 6, 4, 1, 4, 5, 3, 2};

printf("Min's index array1 is: %d\n", find_min_index(array1, 6));
printf("Min's index array2 is: %d\n", find_min_index(array2, 9));
printf("Min's index array3 is: %d\n", find_min_index(array3, 7));

return 0;
}

我得到的输出是:

Min的索引数组1是:6

Min的索引数组2是:9

Min 的索引数组 3 是:7

而我期望的输出是:

Min的索引数组1是:1

Min 的索引数组 2 是:-16

Min的索引数组3是:1

请你们帮助我获得适当的结果。

【问题讨论】:

  • @CoolGuy 所以你的意思是我应该将它添加到主函数或“find_min_index”中???
  • 请缩进您的代码。

标签: c arrays sorting min


【解决方案1】:

1) 你需要在你的find_min_index中返回min,目前没有返回值。

2) 如果只有 > 0 个值,将 min 设置为 0 不会给您正确的结果。
3)您的 find_min_index 函数没有右括号,因此不应编译

【讨论】:

    【解决方案2】:

    这里是解决方案-

       #include <stdio.h>
    
      int find_min_index(int numbers[], int length)
      {
         int a;                           // bring a and min inside function 
         int min=numbers[0];              // initialize min with array's 1st element  
        for(a=1; a<length; a++)
        {
             if(numbers[a]<min)
             min=numbers[a];
         }
         return min;                       //return min from function 
      }
    
       int main( int argc, char* argv[])
        {
          int data_array_1[]={ 1, 3, 5, 7, 9, 11};      //declare and initialize array 
          int data_array_2[]={ 2, -4, 6, -8, 10, -12, 14, -16};
          int data_array_3[]={ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ,0};
    
          printf("Min's index array1 is: %d\n", find_min_index(data_array_1, 6));   // calling function in printf
          printf("Min's index array2 is: %d\n", find_min_index(data_array_2, 8));
          printf("Min's index array3 is: %d\n", find_min_index(data_array_3, 11));   
       // printf("Min's index array3 is: %d\n", find_min_index(data_array_3, 10));  // in case you need this output as 1
    
          return 0;
       }
    

    注意-不要将带有0min 初始化为带有+ve 元素但没有0 的数组不会给出正确的输出。

    【讨论】:

    • 您的最终 printf 的“长度”参数不应为 11,而应为 10 - 因为 OP 的预期输出为 1(11 的输出为 0)
    • @JosephDuty 我会提到它。谢谢!!
    • @WeatherVane 谢谢先生!! .解决了这个问题。
    【解决方案3】:

    我不知道你粘贴的代码是如何编译的(你没有传递正确的数组,你没有以正确的方式声明数组 - 你应该指定 size 的数组),但我让它工作了。主要问题是您已将 min 初始化为 0。您应该将其初始化为传递给函数的数组的第一个元素,因为数组中的元素可能为负数(考虑:{-1,1,2,3})。

    您还传递了 9 而不是 8 作为数组的长度: printf("Min's index array2 is: %d\n", find_min_index(data_array_2, 9));(同样适用于data_array_3的函数调用)。

    最好在C中声明以数组为指针类型的函数,即:int find_min_index(int* numbers, int length)

    此外,给定输入数据的正确输出将是:

    Min's index array1 is: 1
    Min's index array2 is: -16
    Min's index array3 is: 0
    

    这里是你函数的固定版本:

    #include <stdio.h>
    
    int find_min_index(int* numbers, int length) {
        int min = numbers[0];
        for (int a = 1; a < length; a++) {
            if (numbers[a] < min) min = numbers[a];
        }
        return min;
    }
    
    int main(int argc, char* argv[]) {
        int data_array_1[6] = {1, 3, 5, 7, 9, 11};
        int data_array_2[8] = {2, -4, 6, -8, 10, -12, 14, -16};
        int data_array_3[11] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
    
        printf("Min's index array1 is: %d\n", find_min_index(data_array_1, 6));
        printf("Min's index array2 is: %d\n", find_min_index(data_array_2, 9));
        printf("Min's index array3 is: %d\n", find_min_index(data_array_3, 7));
    
        return 0;
    }
    

    【讨论】:

    • 我认为输出不正确。您会看到第三个数组中的最小值是 01 OP 想要的,但您会得到 4 。你应该在函数调用中增加长度
    • @ameyCU 是的,这是一个错字。
    • 从第一个元素初始化min,你可以从1开始循环。
    • @WeatherVane 是的,你可以。
    【解决方案4】:

    在您的 for 循环开始之前,只需初始化 min=0; 它可以解决您的问题。

    【讨论】:

    • 现在也初始化为0
    • 不,min 应该被初始化为第一个元素,或者INT_MAX。如果所有元素值都是&gt; 0,则0 是错误答案。
    猜你喜欢
    • 2010-11-23
    • 2011-08-16
    • 2012-03-14
    • 2017-12-13
    • 2023-03-18
    • 1970-01-01
    • 2012-02-14
    • 2015-12-06
    • 1970-01-01
    相关资源
    最近更新 更多