2015-09-24 3 views
0
#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; 
} 

выход я получаю это:получения минимального значения в массиве

Индекс массив1 Мин является: 6

Индекс массив2 Мин является: 9

Индекс array3 Мин является: 7

в то время как выход я ожидаю:

индекс array1 Мин является: 1

индекс array2 Мин является: -16

индекс array3 Мин является: 1

Cay вы, ребята, помогите мне с получением соответствующих результатов.

+0

@CoolGuy так, что вы говорите, что я должен добавьте его в основную функцию или «find_min_index» ??? –

+0

Пожалуйста, открепите свой код. –

ответ

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 не даст правильного выхода.

+0

спасибо alot mate: D –

+0

ваш окончательный printf не должен иметь параметр «длина» 11, он должен быть 10 - поскольку ожидаемый выход OPs был равен 1 (11 дал бы результат 0) –

+0

@JosephDuty Я упомянул об этом. Благодаря !! – ameyCU

2

1) Вам нужно вернуть min в вашем find_min_index, в настоящее время нет возвращаемого значения.

2) Установка min в 0 не даст вам правильных результатов, если есть только> 0 значений.
3) Вы не закрывающую скобку для вашей функции find_min_index, так что не должно составить

-1

Перед тем, как начать цикл для инициализации min=0; Он может решить вашу проблему.

+0

Прямо сейчас и инициализируется как '0'. – ameyCU

+0

Нет, 'min' должен быть инициализирован либо первому элементу, либо' INT_MAX'. '0' неверный ответ, если все значения элемента'> 0'. –

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; 
} 
+0

Я думаю, что выход не является правильным. Вы видите, что значения min в третьем массиве - '0' или' 1', как хочет OP, но вы получаете '4'. Вы должны простоять в вызове функции – ameyCU

+0

@ameyCU Правильно, это была опечатка. – syntagma

+0

После инициализации 'min' fom первого элемента, вы можете запустить цикл из' 1'. –

Смежные вопросы