Similar presentations:
Массивы. Начальные сведения. С / С++. Тема 05
1. НРТК
С / С++Тема 05. Массивы. Начальные сведения
НРТК, 2022 г. 1
Массивы. Начальные сведения
Созонов А.А.
2. Массив и его объявление
• Массив — набор пронумерованныходнотипных элементов
• Объявление массива:
<тип> <идентификатор>[<константа>]
где: <константа> — количество элементов массива
• Примеры:
int array[20];
double delta, beta[30], alpha;
• В этом примере delta, alpha — простые
переменные, beta[30] – массив из 30 double
НРТК, 2022 г. 2
Массивы. Начальные сведения
Созонов А.А.
3. Использование массивов
• Обращение к элементу массива:<идентификатор>[<индекс элемента>];
где: <индекс элемента> — порядковый номер
элемента массива – выражение типа «целое»
• Примеры:
array[3] = 8;
a = array[i] * array[j];
d = beta[i + j];
• Элементы массива нумеруются с 0:
beta[0], beta[1], beta[2],... , beta[m - 1]
НРТК, 2022 г. 3
Массивы. Начальные сведения
Созонов А.А.
4. Пример: ввод элементов массива
const int max_size = 100;int array[max_size];
int sum, n, i;
do
{
cout << "Введите количество элементов массива:";
cin >> n;
} while ( n <= 0 || n > max_size );
for ( i = 0; i < n; i++ )
{
cout << "[" << i << "] = ";
cin >> array[i];
}
НРТК, 2022 г. 4
Массивы. Начальные сведения
Созонов А.А.
5. Пример: вычисление суммы и вывод
sum = 0;// Обнуляем сумму
for ( int i = 0; i < n; i++ )
sum = sum + ms[i];
for ( i = 0; i < n; i++ )
{
cout << "[" << i << "] = ";
cin >> array[i];
}
cout << "Sum = " << sum << endl;
НРТК, 2022 г. 5
Массивы. Начальные сведения
Созонов А.А.
6. Пример: копирование массива
j = 0;while ( b[j] != barrier )
{
a[j] = b[j];
j++;
}
j = 0;
while ( b[j] != barrier )
a[j++] = b[j];
j = 0;
while ( ( a[j++] = b[j] ) != barrier )
• Есть ли различия:
– между случаем 1 и случаем 2
– между случаем 2 и случаем 3
НРТК, 2022 г. 6
Массивы. Начальные сведения
Созонов А.А.
7. Пример: поиск максимума (версия 1)
const int array_size = 100;int array[array_size];
int max, nmax;
int i;
max = array[0];
nmax = 0;
for ( i = 1; i < array_size; i++ )
if ( array[i] > max )
{
max = array[i];
nmax = i;
}
НРТК, 2022 г. 7
Массивы. Начальные сведения
Созонов А.А.
8. Пример: поиск максимума (версия 2)
const int array_size = 100;int array[array_size];
int nmax;
int i;
nmax = 0;
for ( i = 1; i < array_size; i++ )
if ( array[i] > array[nmax] )
nmax = i;
НРТК, 2022 г. 8
Массивы. Начальные сведения
Созонов А.А.
9. Пример: поиск максимума среди положительных
const int array_size = 100;int array[array_size];
int max, nmax;
int i;
max = array[0];
nmax = 0;
for ( i = 1; i < array_size; i++ )
if ( array[i] > 0 && array[i] > max )
{
max = array[i];
nmax = i;
}
А если нулевой элемент был отрицательным?
НРТК, 2022 г. 9
Массивы. Начальные сведения
Созонов А.А.
10. Пример: поиск максимума среди положительных
const int array_size = 100;int array[array_size];
int max, nmax;
int i;
max = -INT_MAX; // -numeric_limits<int>::max();
nmax = -1;
for ( i = 0; i < array_size; i++ )
if ( array[i] > 0 && array[i] > max )
{
max = array[i];
nmax = i;
}
НРТК, 2022 г. 10
Массивы. Начальные сведения
Созонов А.А.
11. Инициализация
• Примерint days[] = { 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31 };
• Значения элементов
int y[6] = { 1, 2, 3 };
// Инициализаторов
меньше, чем размер массива
// y[0] = 1, y[1] = 2, y[2] = 3,
// y[3] = 0, y[4] = 0, y[5] = 0
int z[3] = { 1, 2, 3, 4, 5 };
// Ошибка,
слишком много инициализаторов
• Число элементов в массиве
sizeof(days) / sizeof(int)
НРТК, 2022 г. 11
Массивы. Начальные сведения
Созонов А.А.
12. Пример: проверка упорядоченности
int x[] = { 77, 1, 3, 4, 7, 13, 17, 19, 23 };int n = sizeof(x) / sizeof(int); // Размер массива
int i, flag = 1; // Пусть массив упорядочен
...
for(i = 0; i < n - 1; i++)
if(x[i] > x[i + 1])
{
flag = 0;
// Массив не упорядочен
break;
// Выход из цикла
}
if(flag) cout << "The array is ordered" << endl;
else
cout << "The array is not ordered" << endl;
...
Демонстрация
НРТК, 2022 г. 12
Массивы. Начальные сведения
Созонов А.А.
13. Массив как параметр функции
int SumArray( int[], int );int main()
{
int a[20], b[10], na, nb;
...
int sa = SumArray(a, na);
int sb = SumArray(b, nb);
// Прототип функции
// Ввод a, b
return 0;
}
int SumArray(int ms[], int n)
{
int sum = 0, i;
for ( i = 0; i < n; i++ ) sum += ms[i];
return sum;
}
НРТК, 2022 г. 13
Массивы. Начальные сведения
Созонов А.А.
14. Задачи
• Для данного массива вывести вначале егоэлементы с четными индексами, а затем — с
нечетными
• Вычисление количества локальных
максимумов в данном массиве
• Циклический сдвиг элементов массива на
данное число позиций
• Задачи для самостоятельной работы по
одномерным массивам
НРТК, 2022 г. 14
Массивы. Начальные сведения
Созонов А.А.
15.
Двумерные массивыНРТК, 2022 г. 15
Массивы. Начальные сведения
Созонов А.А.
16. Двумерные массивы
• Пример:double r[3][4];
• Расположение в памяти — по строкам
··· r[0][0] r[0][1] r[0][2] r[0][3] r[1][0] r[1][1] r[1][2] r[1][3] r[2][0] r[2][1] r[2][2] ···
1 строка
2 строка
3 строка
Инициализация
double r[3][4] = {{500, 700, 450, 1000},
{600, 710, 480, 1100},
{800, 750, 550, 1200}
};
НРТК, 2022 г. 16
Массивы. Начальные сведения
Созонов А.А.
17. Задачи
• Подсчет выручки• Задачи для самостоятельной работы по
двумерным массивам
НРТК, 2022 г. 17
Массивы. Начальные сведения
Созонов А.А.
18.
Алгоритмы сортировки и поискаНРТК, 2022 г. 18
Массивы. Начальные сведения
Созонов А.А.
19. Алгоритмы сортировки и поиска
• Сортировка методом «пузырька»Демонстрация
НРТК, 2022 г. 19
Массивы. Начальные сведения
Созонов А.А.
20. Алгоритмы сортировки и поиска
• Сортировка алгоритмом выбораДемонстрация
НРТК, 2022 г. 20
Массивы. Начальные сведения
Созонов А.А.
21. Пример: поиск элемента в массиве
int Find(int array[], int n, int key){
int nom = -1;
int i = 0;
while ( i < n && nom == -1 )
if ( array[i++] == key ) nom = i;
return nom;
}
Здесь есть ошибка. Где?
НРТК, 2022 г. 21
Массивы. Начальные сведения
Созонов А.А.
22. Пример: поиск элемента в массиве
int Find(int array[], int n, int key){
int nom = -1;
int i = 0;
while ( i < n && nom == -1 )
if ( array[i++] == key ) nom = i - 1;
return nom;
}
Демонстрация
НРТК, 2022 г. 22
Массивы. Начальные сведения
Созонов А.А.
23. Задачи
• Определение того, совпадают ли два данныхмассива
• Задачи для самостоятельной работы
• Сайт алгоритмов: http://algolist.manual.ru/
НРТК, 2022 г. 23
Массивы. Начальные сведения
Созонов А.А.
24.
НРТК, 2022 г. 24Массивы. Начальные сведения
Созонов А.А.