int min = array[0];
int max = array[0];
Вы еще этого не знаете.array[0]
в этой точке программы равно 0
... но 0
может не быть элементом массива после ввода пользователя.
int indexOfMin = 0;
int indexOfMax = 0;
Индексирует иразмеры объектов в памяти должны быть типа std::size_t
(<cstddef>
), поскольку гарантируется, что std::size_t
достаточно велик.Нет такой гарантии для int
.
int arrSize = sizeof(array) / sizeof(array[0]);
Используйте std::size()
(<iterator>
) для более ясного кода:
auto const arrSize{ std::size(array) };
int k;
for (k = 0; k <= arrSize; k++) {
cin >> array[k];
}
Допустимые индексы массива варьируются от 0
до <<code>N для массива array[N]
.Вы получаете доступ к массиву за пределами.Используйте k < arrSize
в качестве условия.k
должен иметь тип std::size_t
.
for (int i = 0; i < arrSize; i++) {
if (array[i] >= max) {
max = array[i];
indexOfMax = i;
}
}
for (int i = 0; i < arrSize; i++) {
if (array[i] == min) {
continue;
}
if (array[i] < min) {
min = array[i];
indexOfMin = i;
}
}
Если вы определили int min = array[0];
и int max = array[0];
после ввода пользователя, вы можете запустить эти циклы с i = 1
.if (array[i] == min) { continue; }
ничего не покупает.Наоборот, это лишняя трата времени на дополнительное сравнение.Также оба цикла можно объединить в один:
int min{ array[0] };
int max{ array[0] };
std::size_t indexOfMin{ 0 };
std::size_t indexOfMax{ 0 };
for (size_t i{ 1 }; i < arrSize; ++i) {
if(array[i] < min) {
min = array[i];
indexOfMin = i;
}
else if(array[i] > max) {
max = array[i];
indexOfMax = i;
}
}
temp = min;
min = max;
max = temp;
Поменяет местами значения переменных min
и max
.Кроме того, если поменять местами минимальные и максимальные значения в массиве можно так, зачем запоминать их положение?Попробуйте
temp = array[indexOfMin];
array[indexOfMax] = array[indexOfMin];
array[indexOfMin = temp];
Итак, в конце я просто пишу
for (k = 0; k <= 7; k++) {
cout << array[k] << " " << endl;
}
?
Нет, вы пишете
for (std::size_t k = 0; k < arrSize; k++) {
std::cout << array[k] << " ";
}
std::cout.put('\n');
, потому что вы (должны) объявили предыдущий k
из цикла ввода внутри цикла for, и вы делаете привычкой объявлять и определять переменные как можно ближе к месту их использования.Кроме того, поскольку вам нужен список в одну строку, не используйте std::endl
внутри цикла, а выведите '\n'
впоследствии.