获取数组中的最小值

obtaining the minimum value in an array

 #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 的索引 array1 是:6

Min 的索引 array2 是:9

Min 的索引 array3 是:7

而我期望的输出是:

Min 的索引 array1 是:1

Min 的索引 array2 是:-16

Min 的索引 array3 是:1

希望你们帮我得到合适的结果。

1) 您的 find_min_index 需要 return 分钟,目前没有 return 值。

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

这是解决方案 -

   #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;
   }

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

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

我不知道你粘贴的代码是如何编译的(你没有传递正确的数组,你没有以正确的方式声明数组 - 你应该指定 数组的大小),但我成功了。主要问题是您已将 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;
}