И) Поиск совпадений
З) Сортировка массива
Е) Обмен местами
Задача 14. Поменять местами первый и последний элемент массива.
При обмене, чтобы не потерять одно из значений, потребуется дополнительная переменная:
p=a[0];
a[0]=a[n-1];
a[n-1]=p;
ж) Поиск минимума/максимума
Задача 15. Найти в массиве наименьший элемент и его позицию.
В подобных задачах нахождения "самого-" в каком-нибудь смысле элемента используется та же идея, что и в спорте при определении рекорда: каждый очередной результат сравнивается с текущим рекордом, и если он "лучше", то он и становится новым значением рекорда, а иначе рекорд не меняется. За начальное значение рекорда принимается первый результат.
min=a[0]; k=0;
for (i=0; i<n; i++)
if (a[i]<min)
{ min=a[i]; k=i; }
Эту же программу можно переписать и короче:
for (i=k=0, min=a[0]; i<n; i++)
if (a[i]<min)
min=a[k=i];
Задача 16. Отсортировать массив по возрастанию (т.е. расположить его элементы в порядке возрастания).
Для этой задачи придумано множество различных алгоритмов. Один из них - сортировка методом прямого выбора:
|
|
for(i=0; i<n; i++)
for(k=i+1; k<n; k++)
if (a[k]<a[i]) {
p=a[k]; // Обмен a[k] и a[i]
a[k]=a[i];
a[i]=p;
}
Здесь на каждой итерации внешнего цикла происходит помещение на i-ую позицию наименьшего из "оставшихся" (т.е. расположенных от i-ой позиции до конца массива) значений элементов.
Этот алгоритм включает в себя, таким образом, алгоритмы поиска минимума и обмена.
Задача 17. Найти в массиве элемент, повторяющийся наибольшее количество раз. (Если таких элементов несколько, вывести любой из них).
for(max=i=0; i<n; i++){
s=1; // s - число повторений i-го элемента
for(k=i+1; k<n; k++)
if (a[k]==a[i]) s++;
if (s>max) {
max=s; // max - число повторений x
x=a[i]; // x - значение наиболее
} // частого элемента
}
Заметим, что x здесь не присвоено начальное значение, т.к. оператор x=a[i]; обязательно выполнится хотя бы раз (max вначале = 0, а s не меньше 1), а использовано x будет лишь впоследствии.
Многомерные массивы отличаются от одномерных только тем, что каждый элемент характеризуется не одним, а двумя или более индексами. Они используются, например, для хранения таблиц (каждый элемент таблицы имеет 2 индекса - № строки и № столбца).
Декларация многомерного массива имеет следующий формат:
тип ID [ размер 1] [ размер 2]…[ размерN ] =
{ { список начальных значений },
{ список начальных значений },
…
};
Списки начальных значений – атрибут необязательный.
Пример:
int a[3][3]={ {1,2,3}, {4,5,6}, {7,8,9} };
Аналогично, при обращении к конкретному элементу многомерного массива указывается имя массива и затем - последовательно индексы элемента, каждый в квадратных скобках; например:
|
|
a[2][1]
a[i+1][k]
Рассмотрим особенности работы с многомерными массивами на конкретном примере двумерного массива (двумерные массивы называют также матрицами):
#include <stdio.h>
void main()
{
int i, j;
int m[3][4] = { { 1, 2, 3, 4}, {11,12,13,14}, {21,22,23,24} };
for (i=0; i<3; i++) {
printf("\n %2d)", i+1);
for (j=0; j<4; j++)
printf(" %3d",m[ i ] [ j ]);
}
}
Результаты работы программы:
1) 1 2 3 4
2) 11 12 13 14
3) 21 22 23 24