Вы должны получить предупреждение от вашего компилятора (если нет, включите флаги предупреждения, такие как -Wall
в GCC), об этом операторе печати внутри его собственного блока:
{
printf( "%d\n", m[i]) ;
}
Я думаю, что вы хотели зациклить над массивом и распечатать его содержимое, что вы и сделаете потом. Но когда вы пытаетесь найти max
, вы, кажется, забыли перебрать массив.
Ваш код вызывает Неопределенное поведение (UB) здесь:
printf("%d\n", m[i]) ;
, поскольку вы выходите за пределы диапазона, потому что i
имеет последнее значение после предыдущего цикла for (чтобы найти min
), которое было 4 (размер массива). Таким образом, вы индексируете массив за его концом, а именно m[4]
, который объясняет значение мусора для вывода.
Вот план, к которому вы приближались, но давайте перечислим его здесь:
- Найдите элемент max массива и запомните индекс этого
элемент.
- Найдите элемент min массива и запомните индекс этого
элемент.
- Поменяйте местами минимальный и максимальный элементы массива.
Примечание: если существует более одного максимального элемента, учитывайте последний увиденный. Аналогично для минимального элемента.
Собрав все воедино, вы получите:
#include <cstdio>
int main () {
int m [4] = {5,5678,62,6000};
int i;
int max=m[0], max_idx;
int min=m[0], min_idx;
int temp = 0;
for(int i = 0; i < 4; ++i)
{
printf( "%d\n", m[i]) ;
}
for (i=0; i<4; i++)
{
if ( m[i] > max )
{
max = m[i];
max_idx = i;
}
}
for (i=0; i<4; ++i)
{
if ( m[i] < min )
{
min = m[i];
min_idx = i;
}
}
temp = min;
m[min_idx] = max;
m[max_idx] = temp;
printf ("min = %d\n", min);
printf ("max = %d\n", max);
printf("The new array is:\n");
for(int i = 0; i < 4; i++)
printf("%d\n", m[i]);
}
Выход:
5
5678
62
6000
min = 5
max = 6000
The new array is:
6000
5678
62
5