Сдвиг массива | Кто может объяснить условие? - C (СИ)
Формулировка задачи:
Переставить последний элемент массива на место k-го элемента. При этом k-й,(k+1)-й, ..., предпоследний элементы сдвинуть вправо на 1 позицию.
Покажите пример. Например изначально дано 1234567 k=2 , и что в итоге должно получиться???Решение задачи: «Сдвиг массива | Кто может объяснить условие?»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Ru");
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
size_t n = sizeof(a) / sizeof(a[0]);
size_t k,i;
scanf("%d", &k);
i=n-1;
if(k==0 || k>n-1) {printf("Нет такой позиции!\n"); return 0;}
k-=1;
int lastElement = a[n-1];
for(; i!=k; --i)
{
a[i]=a[i-1];
}
a[k] = lastElement;
for ( i=0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
Объяснение кода листинга программы
- Включаем заголовочный файл
для работы с вводом/выводом - Включаем заголовочный файл
для установки локали - Устанавливаем локаль на русскую с помощью функции setlocale(LC_ALL,
Ru) - Создаем массив a типа int с семью элементами и инициализируем его значениями от 0 до 6
- Вычисляем размер массива n с помощью выражения sizeof(a) / sizeof(a[0])
- Запрашиваем у пользователя значение k с помощью функции scanf() и сохраняем его в переменную k
- Вычисляем индекс i равный n-1
- Проверяем, что k не превышает размер массива n-1 и выводим сообщение
Нет такой позиции!и завершаем программу, если условие выполняется - Уменьшаем значение k на 1, чтобы корректно работать со сдвигом массива
- Сохраняем последний элемент массива a[n-1] в переменную lastElement
- Используем цикл for для сдвига элементов массива a с i=n-1 до i=k-1. Значение i уменьшается на 1 на каждой итерации цикла.
- На каждой итерации цикла a[i] присваивается значение a[i-1], т.е. элементы сдвигаются вправо
- Последний элемент массива a[k] присваивается значение lastElement, т.е. элементы сдвигаются влево до заполнения нужных позиций
- Используем цикл for для вывода всех элементов массива a на экран с помощью функции printf()
- Возвращаем 0, чтобы указать, что программа успешно завершилась