获取数组中的最小值

时间:2015-09-24 15:58:47

标签: c arrays sorting min

 #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的索引数组3是:7

虽然我期望的输出是:

Min的索引array1是:1

Min的索引array2是:-16

Min的索引数组3是:1

cay,你们帮我找到合适的结果。

4 个答案:

答案 0 :(得分:2)

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

2)如果只有&gt;将min设置为0将不会给出正确的结果0值。
3)你的find_min_index函数没有一个关闭括号,所以不应该编译

答案 1 :(得分:1)

这是解决方案 -

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

注意 - 请勿使用min初始化0作为包含+ve元素的数组,而0元素不会提供正确的输出。< / p>

答案 2 :(得分: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;
}

答案 3 :(得分:-1)

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