Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Сначала надо определить, сколько места в памяти надо выделить для массива В. В «худшем» случае все элементы в массиве А будут положительными и войдут в массив В, поэтому массив В должен иметь такой же размер, что и массив А.
Можно предположить такой способ: просматривать весь массив А, и если А[i]>0, переписать его значение в B[i].
А | -1 | -2 | –––––––® В | ? | ? |
В этом случае использовать массив В очень сложно, потому что нужные элементы стоят не подряд.
Более красивый способ состоит в следующем. Объявляем временную переменную-счетчик k, в которой будем хранить количество найденных положительных элементов. Сначала она равна нулю. Если нашли очередной положительный элемент, то ставим его в ячейку В[k] и увеличиваем счетчик. Таким образом, все нужные элементы стоят в начале массива B.
А | -1 | -2 | –––––––® В | ? | ? |
#include <stdio.h>
void main()
{
const int n=10;
int i, A[n], B[n], k=0;
// ввод массива А
for(i=0; i<n; i++)
if (A[i]>0) // можно сделать и так:
{ B[k]=A[i]; k++; } // if (A[i]>0) B[k++]=A[i];
printf("Результат:\n");
for(i=0; i<k; i++)
printf("%d ", B[i]);
}
Обратите внимание, что переменная в последнем цикле изменяется от 1 до k, так что на экран выводятся только реально используемые элементы массива В.
6. Перестановка элементов массива в обратном порядке
Пример. Не используя других массивов, переставить элементы целочисленного массива в обратном порядке.
Решение. Для всех индексов необходимо каждый i -й элемент поменять местами с -м элементом. Обратите внимание, что для обмена местами левой и правой половин массива цикл должен отработать только раз при любом n (как четном, так и нечетном).
#include <stdio.h>
void main()
{
const int n=10;
int A[n], i, t;
// ввод массива А
for(i=0; i<n/2; i++)
{ t=A[i]; A[i]=A[n-i-1]; A[n-i-1]=t; }
printf("Элементы массива после перестановки: \n");
for(i=0; i<n; i++)
printf(" %d", A[i]);
}
7. Циклический сдвиг элементов массива
При циклическом сдвиге вправо первый элемент переходит на место второго, второй – на место третьего и т.д., а последний элемент – на место первого.
–––––––® |
При циклическом сдвиге влево первый элемент переходит на место последнего, второй – на место первого, третий – на место второго и т.д.
–––––––® |
Пример. Значения массива сдвинуть циклически вправо на одну позицию.
При выполнении циклического сдвига нам будет нужна временная переменная – в ней мы сохраним значение последнего элемента, пока будем переставлять остальные. Обратите внимание, что мы начинаем с конца массива, иначе массив заполнится первым элементом. Первый элемент ставится отдельно – копированием из временной переменной.
#include <stdio.h>
void main()
{
const int n=10;
int A[n], i, t;
// ввод массива А
t=A[n-1];
for(i=n-1; i>0; i--)
A[i]=A[i-1];
A[0]=t;
printf("Элементы массива после циклического сдвига: \n");
for(i=0; i<n; i++)
printf(" %d", A[i]);
}
8. Сортировка элементов массива в порядке возрастания (убывания)
Сортировка – это расстановка элементов некоторого списка в заданном порядке.
Существуют разные виды сортировки (по алфавиту, по датам и т.д.), они отличаются лишь процедурой сравнения элементов. Рассмотрим расстановку элементов массива в порядке возрастания.
Существует множество методов сортировки массивов. Одни из них являются более эффективными, другие – проще для понимания.
Изучим два понятных, но неэффективных метода, которых хватает для простых задач.
Дата публикования: 2015-01-23; Прочитано: 573 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!