Я написал небольшую программу, которая берет 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;
}
Я обновил свой код. Теперь я инициализирую значения temp перед циклом for. Но он все еще не работает.
Есть ли причина, почему вы сделали вещи более сложными, чем они должны быть, то есть перетасовки содержимое массива вокруг? Кроме того, использование нуля в качестве инициализатора не кажется очень хорошей идеей. См. Limits.h. –
Я смущен вашим алгоритмом. Просто сравните каждое число с предыдущим, сохранив меньшее значение. Используйте 'INT_MAX' как начальное наименьшее значение. И не перетасовывайте массив! – chrisaycock
Или используйте 'intarray [0]' в качестве вашего начального значения (но сначала убедитесь, что '(n> 0)'). –