Поменять местами последний и максимальный элемент массива - C (СИ)
Формулировка задачи:
Добрый вечер, есть программа она меняет минимальный и максимальный элемент массива.
Нужно еще сделать программку которая меняет местами последний элемент массива и максимальный, то есть
{1,5,3,7,6,4,9,2} - исходной массив
{1,5,3,7,6,4,2,9} - массив после смены.
И если максимальных элементов несколько то взять первый из них.
#include "stdafx.h"
#include <stdio.h>
#include<conio.h>
#include <time.h>
#include <Windows.h>
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int a[100], buf;
int i, n, max, min, n_max, n_min;
printf("Введите число n:");
scanf_s("%d", &n);
if (n <= 5) {
printf("Массив должен состоять из 6 и больше чисел.\n");
scanf_s("%d", &n);
}
srand(time(NULL));
printf("Массив до смены:\n");
for (i = 0; i<n; i++)
{
a[i] = rand() % 10000;
printf("%d\t", a[i]);
}
printf("\n");
max = a[0];
min = a[0];
for (i = 1; i<n; i++)
{
if (a[i]>max)
{
max = a[i];
n_max = i;
}
if (a[i]<min)
{
min = a[i];
n_min = i;
}
}
buf = a[n_max];
a[n_max] = a[n_min];
a[n_min] = buf;
printf("\nМассив после смены:\n");
for (i = 0; i < n; i++)
printf("%d\t", a[i]);
_getch();
}
Дописал правильное условие задачи.
Помогите)
ап!!!
Решение задачи: «Поменять местами последний и максимальный элемент массива»
textual
Листинг программы
#include <stdio.h>
#include<conio.h>
#include <time.h>
#include <Windows.h>
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int a[100], buf;
int i, n, max, min, n_max, n_min;
printf("Введите число n:");
scanf("%d", &n);
if (n <= 5) {
printf("Массив должен состоять из 6 и больше чисел.\n");
scanf("%d", &n);
}
srand(time(NULL));
printf("Массив до смены:\n");
for (i = 0; i<n; i++)
{
a[i] = rand() % 100;
printf("%d\t", a[i]);
}
printf("\n");
for (i = n-1,max=0; i>=0; i--)
{
if (a[i]>max)
{
max = a[i];
n_max = i;
}
}
buf = a[n_max];
a[n_max] = a[n-1];
a[n-1] = buf;
printf("\nМассив после смены:\n");
for (i = 0; i < n; i++)
printf("%d\t", a[i]);
_getch();
}
Объяснение кода листинга программы
В этом коде:
- #include
, #include , #include , #include - подключают необходимые библиотеки для работы с консолью, временной зоной, случайными числами и окнами. - int main() - функция main(), с которой начинается любая программа на C.
- SetConsoleCP(1251);, SetConsoleOutputCP(1251); - устанавливают кодировку консоли как 1251, чтобы правильно отображать кириллицу.
- int a[100], buf; - объявляют массив a размером 100 и переменную buf для временного хранения максимального элемента.
- int i, n, max, min, n_max, n_min; - объявляют переменные для цикла, для хранения максимального и минимального индексов и для временного хранения максимального и минимального элементов.
- printf(
Введите число n:);, scanf(%d, &n); - запрашивают у пользователя число n и сохраняют его в переменную n. - if (n <= 5) {, printf(
Массив должен состоять из 6 и больше чисел.\n);, scanf(%d, &n); - если n меньше или равно 5, выводят сообщение об ошибке и запрашивают новое значение n. - srand(time(NULL)); - инициализируют генератор случайных чисел текущим временем.
- printf(
Массив до смены:\n);, for (i = 0; i < n; i++), a[i] = rand() % 100;, printf(%d\t, a[i]); - выводят сообщениеМассив до смены, затем заполняют массив случайными числами от 0 до 99 и выводят каждое число на новой строке. - for (i = n-1,max=0; i>=0; i--) - цикл для поиска максимального элемента, начиная с последнего элемента массива.
- if (a[i]>max) - если текущий элемент больше максимального значения, обновляют максимальное значение и запоминают индекс.
- buf = a[n_max];, a[n_max] = a[n-1];, a[n-1] = buf; - меняют местами максимальный и последний элементы массива.
- printf(
\nМассив после смены:\n);, for (i = 0; i < n; i++), printf(%d\t, a[i]); - выводят сообщениеМассив после смены, затем выводят все элементы массива. - _getch(); - используют функцию _getch() для приостановки выполнения программы и ожидания нажатия клавиши.