Нахождение наименьшего числа в массиве целых чисел - PullRequest
1 голос
/ 17 января 2011

Я написал небольшую программу, которая берет 5 цифр от пользователя и сохраняет их в массиве целых чисел. Массив передается в функцию. Функция используется, чтобы найти наименьшее число в массиве и распечатать его. С уважением, вывод не правильный, и я не знаю почему. Функция всегда печатает первый элемент массива, который должен быть наименьшим числом, но это не так.

#include <stdio.h>

void smallestint (int intarray [], int n)

{
    int i;
    int temp1 = 0;
    int temp2 = 0;

    for(i = 0; i < n; i ++)
    {

        if (intarray [i] < temp1)
        {
            intarray [i-1] = intarray [i];
            temp2 = intarray[i];
            intarray[i] = temp1;
            temp1 = temp2;
        }
        else 
            temp1 = intarray[i];
    }

    printf("%d\n", intarray[0]);
}

int main ()

{
    const int n = 5;
    int temp = 0;
    int i;
    int intarray [n];

    printf("Please type in your numbers!\n");

    for(i = 0; i < n; i ++)
    {
        printf("");
            scanf("%d", &temp);         
        intarray[i] = temp;

    }

    smallestint (intarray, n);


    getchar();
    getchar();
    return 0;
}


Я обновил свой код. Теперь я инициализирую временные значения перед циклом for. Но это все еще не работает.

Ответы [ 5 ]

8 голосов
/ 17 января 2011

Если вы просто хотите распечатать наименьший элемент массива, это самый простой способ сделать это:

#include <limits.h>
#include <stdio.h>

int smallest(int* values, int count)
{
        int smallest_value = INT_MAX;
        int ii = 0;
        for (; ii < count; ++ii)
        {
                if (values[ii] < smallest_value)
                {
                        smallest_value = values[ii];
                }
        }
        return smallest_value;
}

int main()
{
        int values[] = {13, -8, 237, 0, -3, -1, 15, 23, 42};
        printf("Smallest value: %d\n", smallest(values, sizeof(values)/sizeof(int)));
        return 0;
}
1 голос
/ 12 июля 2013

Наименьшее количество кода должно быть с использованием LINQ:

var example_arr = new [] {3,49, 12, 11, 78, 1};
var smallest = example_arr.Select(t=>t).Concat(new[]{INT_MAX}).Min();
0 голосов
/ 17 января 2011

если вы хотите вернуть только наименьшее число - не беспокойтесь о сортировке массива.

в любом случае,

  • в первой итерации вы помещаете первый элементмассива в индексе -1 (что «допустимо» в C - но это не то, что вы хотите сделать ...): intarray [i-1] = intarray [i].Вы должны начать свой цикл с 1.

  • , когда вы пробегаете значение temp1 на каждой итерации (поскольку вы инициализируете его равным 0 внутри цикла).Я предлагаю вам инициализировать его вне цикла.

Кстати, если вы инициализируете переменную temp1 до того, как цикл будет введен [0] (вместо 0), вы сможетедля поддержки отрицательных чисел.

0 голосов
/ 17 января 2011

temp1 переменная должна быть инициализирована с ОЧЕНЬ большим значением (например, INT_MAX) вне цикла.

0 голосов
/ 17 января 2011

Вы переинициализируете свою временную переменную на каждой итерации цикла.

Вы должны хранить текущее наименьшее число вне цикла (инициализированного первым элементом массива) и проверять его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...