Массивы в языке Си

Содержание

Слайд 2

Массив – сложный (составной) тип данных, представляющий собой последовательность (конечную) элементов одного

Массив – сложный (составной) тип данных, представляющий собой последовательность (конечную) элементов одного
типа. Число элементов массива называют его размером.
Каждый элемент массива определяется именем массива и порядковым номером – индексом. Индекс – целое число, по которому производится доступ к элементу массива.
Индексов может быть несколько. В этом случае массив называют многомерным, а количество индексов одного элемента массива является его размерностью.

Слайд 3

Одномерные массивы
Объявление одномерного статического массива:
Тип Имя_Массива [ Размер ] = { Список

Одномерные массивы Объявление одномерного статического массива: Тип Имя_Массива [ Размер ] =
значений };
Тип – базовый тип, или известный тип Пользователя; Размер – максимальное количество элементов (меньше можно использовать, больше – НЕТ).
Список значений может использоваться для инициа-лизации, а может и отсутствовать.
При объявлении массива можно использовать атрибуты «класс памяти» и const.
Размер массива задается только константой или константным выражением, т.к. размер массива вместе с его типом определяет объем выделяемой на этапе компиляции памяти (статический массив).
Для работы с массивами переменного размера – создание динамических массивов.

Слайд 4

Примеры объявлений:
1) double a[20];
2) const int N = 20;
double a[N];
3) #define

Примеры объявлений: 1) double a[20]; 2) const int N = 20; double
N 20 // Макроподстановка определить
. . .
double a[N];
4) объявления массива с инициализацией:
int a[5] = { 1, 2, 3 };
Если в группе {…} список значений короче, то оставшимся элементам присваивается 0.

Слайд 5

Индексы массивов в языке Си начинаются с 0, т.е. в массиве
int

Индексы массивов в языке Си начинаются с 0, т.е. в массиве int
а[5];
первый элемент: а[0], второй – а[1], …, пятый (последний) – а[4].
Обращение к элементу массива осуществляется с помощью операции индексации [ ] (квадратные скобки) :
Имя_Массива [ Индекс ]
Индекс – любе выражение целого типа, значение которого не выходят за указанный в объявлении Размер, например
a[3] = a[1] + 2; a[i + 1]++;

Слайд 6

Внимание. В языке Си нет контроля выхода индексов за границы размера массивов.

Внимание. В языке Си нет контроля выхода индексов за границы размера массивов.
При необходимости такой механизм должен быть запрограммирован явно.
Массив – последовательность данных и поэтому большинство операций выполняются в цикле. Рассмотрим некоторые из них для массива а.
Имеем следующее объявление
int а[50], i, n;
50 – размер (максимальное количество, можно использовать меньше, но не больше), i – текущий индекс, n – размер.
Рассмотрим наиболее часто используемые участки работы наших программ.

Слайд 7

1) Организация ввода исходных данных с клавиатуры с проверкой ошибочного ввода размера

1) Организация ввода исходных данных с клавиатуры с проверкой ошибочного ввода размера
n :
cout << " Input n (<=50) ";
cin >> n;
if ( n < 0 || n > 50 ) {
cout << " Error ! " << endl;
getch();
return; Если void main() Или return 0; если int main(…)
}
for (i = 0; i < n; i++) {
cout << " a[ " << i+1 << " ] = " ;
cin >> a[i];
}

Слайд 8

2) Заполнение массива a случайными числами в диапазоне [-10, 10] и вывод

2) Заполнение массива a случайными числами в диапазоне [-10, 10] и вывод
их на экран
а) в столбик:
for (i = 0; i < n; i++) {
a[i] = random(21) – 10;
cout << a[ i ] << endl ;
}
б) в строчку:
for (i = 0; i < n; i++) {
a[i] = random(21) – 10;
cout << setw(5) << a[ i ] ;
}
Функция random(m) генерирует случайные числа в диапазоне [ 0, m – 1 ];
функция rand() генерирует случайные числа в диапазоне [ 0, Max_Int – 1 ] (описаны в файле stdlib.h).

Слайд 9

3) Поиск максимального элемента массива a :
а) по номеру (индекс максимального i_max):
int

3) Поиск максимального элемента массива a : а) по номеру (индекс максимального
i_max = 0;
for (i = 1; i < n; i++)
if ( a[i] > a[i_max] ) i_max = i;
cout << " Max = " << a[i_max]
<< " Index = " << i_max << endl ;
б) по значению:
int max;
max = a[0];
for (i = 1; i < n; i++)
if ( a[i] > max ) max = a[i];
cout << " Max = " << max << endl ;

Слайд 10

4) Сортировка ??? элементов массива a :
а) пузырек с перестановками (r –

4) Сортировка ??? элементов массива a : а) пузырек с перестановками (r
дополнительная переменная для перестановки элементов):
for (i = 0; i < n-1; i++)
for (j = i+1; j < n; j++)
if ( a[i] > a[j] ) {
r = a[i]; - Переставляем
a[i] = a[j]; элементы a[i]
a[j] = r; и a[j]
}
??? – Какая здесь сортировка: по возрастанию, или по убыванию?

Слайд 11

б) пузырек с выбором и перестановкой (int i_v – допо-лнительная переменная для

б) пузырек с выбором и перестановкой (int i_v – допо-лнительная переменная для
выбора индекса нужного элемента):
for (i = 0; i < n-1; i++) {
i_v = i;
for (j = i+1; j < n; j++)
if ( a[i_v] > a[j] )
i_v = j;
r = a[i]; - Переставляем
a[i] = a[i_v]; элементы a[i]
a[j_v] = r; и a[i_v]
}
Перед перестановкой еще можно поставить проверку
if(i_v != i) { Выполняем перестановку }

Слайд 12

Рассмотрим некоторые примеры в помощь к выполнению индивидуальных заданий лабораторной работы №

Рассмотрим некоторые примеры в помощь к выполнению индивидуальных заданий лабораторной работы №
5 (в одномерном int массиве из не более 10 элементов). Для решения задачи обязательно должен быть ввод массива с клавиатуры.
1. Найти сумму элементов, расположенных до первой ПЯТЕРКИ.
Рассмотрим возможные варианты значений массива:
а) 1 2 3 2 : Пятерки НЕТ!!!
б) 5 2 3 2 : Пятерка ПЕРВАЯ
в) 1 2 -3 5 : Сумма есть и = 0
В вариантах а) и б) НЕТ суммы.

Слайд 13

Для проверки варианта а) можно использовать значение искомого индекса (обозначим его int

Для проверки варианта а) можно использовать значение искомого индекса (обозначим его int
i5), равного любому отрицательному значению, т.к. такого индекса в массиве не может быть!!!
Вариант решения:
int a[10], i, n, i5 = -2, и другие …;
. . .
for (i = 0; i < n; i++) - Поиск первой пятерки
if ( a[i] == 5 ) {
i5 = i; - Индекс найденной «5»
break; - Заканчиваем поиск (цикл)
}

Слайд 14

if ( i_5 < 0 ) { - Вариант а)
cout << “ Not

if ( i_5 cout return; - Заканчиваем программу } if ( i_5
5” << endl; - НЕТ «5»
return; - Заканчиваем программу
}
if ( i_5 == 0 ) { - Вариант б)
cout << “ First 5” << endl; - Первая «5»
return; - Заканчиваем программу
}
for(sum = i=0; i sum += a[i];
cout << “Sum = “ << sum << endl;
. . .

Слайд 15

2. Найти сумму элементов, расположенных после последней ПЯТЕРКИ.
Рассмотрим возможные варианты значений

2. Найти сумму элементов, расположенных после последней ПЯТЕРКИ. Рассмотрим возможные варианты значений
массива:
а) 1 2 3 2 : Пятерки НЕТ!!!
б) 1 2 3 5 : «5» ПОСЛЕДНЯЯ
в) 5 1 2 -3 : Сумма есть и = 0
В вариантах а) и б) НЕТ суммы.
Для проверки варианта а) используем значение искомого индекса (int i5), равного любому отрицательному значению, как в предыдущем случае.

Слайд 16

Вариант решения (объявления те же):
. . .
for (i = n-1; i >=

Вариант решения (объявления те же): . . . for (i = n-1;
0; i--) - Поиск последней пятерки выполняем в цикле начиная с конца массива
if ( a[i] == 5 ) {
i5 = i; - Индекс найденной «5»
break; - Заканчиваем поиск (цикл)
}

Слайд 17

if ( i_5 < 0 ) { - Вариант а)
cout << “ Not

if ( i_5 cout return; - Заканчиваем программу } if ( i_5
5” << endl; - НЕТ «5»
return; - Заканчиваем программу
}
if ( i_5 == n-1 ) { - Вариант б)
cout << “ End 5” << endl; - Последняя «5»
return; - Заканчиваем программу
}
for(sum = 0, i=i5+1; i sum += a[i];
cout << “Sum = “ << sum << endl;
. . .

Слайд 18

3. Найти сумму элементов, расположенных между первой и последней ПЯТЕРКАМИ.
Рассмотрим возможные

3. Найти сумму элементов, расположенных между первой и последней ПЯТЕРКАМИ. Рассмотрим возможные
варианты значений массива:
а) 1 2 3 2 : Пятерки НЕТ!!!
б) 1 2 3 5 : «5» ОДНА
в) 5 5 2 -3 : Пятерки РЯДОМ
г) 5 -7 7 5 : Сумма есть и = 0
В вариантах а), б) и в) НЕТ суммы.
Для проверки вариантов а) и б) используем значения искомых индексов (int i51 – индекс первой пятерки, i52 – индекс последней пятерки), равных любому отрицатель-ному значению (как в предыдущих примерах).

Слайд 19

Вариант решения:
int a[10], i, n, i51 = -2, i52 = -2, и

Вариант решения: int a[10], i, n, i51 = -2, i52 = -2,
другие …;
. . .
Поиск первой пятерки выполняем как в примере 1:
for (i = 0; i < n; i++)
if ( a[i] == 5 ) {
i51 = i; - Индекс первой «5»
break; - Заканчиваем поиск (цикл)
}
if ( i51 < 0 ) { - Вариант а)
cout << “ Not 5” << endl; - НЕТ «5»
return; - Заканчиваем программу
}

Слайд 20

Продолжаем, если нашли первую ПЯТЕРКУ, ищем последнюю пятерку, как в примере 2)

Продолжаем, если нашли первую ПЯТЕРКУ, ищем последнюю пятерку, как в примере 2)
до найденной i51:
for (i = n-1; i > i51; i--)
if ( a[i] == 5 ) {
i52 = i; - Индекс последней «5»
break; - Заканчиваем поиск (цикл)
}
if ( i_52 < 0 ) { - Вариант б)
cout << “ Оne 5” << endl; - ОДНА «5»
return; - Заканчиваем программу
}
Имя файла: Массивы-в-языке-Си.pptx
Количество просмотров: 31
Количество скачиваний: 0