- •Лекция №1. Заглянем в компьютер Введение
- •Структура компьютера
- •Данные и программы
- •Языки высокого уровня и системы программирования
- •Состав языка
- •Алфавит языка
- •Идентификаторы
- •Ключевые слова
- •Знаки операций
- •Константы
- •Комментарии
- •Концепция типа данных
- •Основные типы данных
- •Целый тип (int)
- •Символьный тип (char)
- •Расширенный символьный тип (wchar_t)
- •Логический тип (bool)
- •Типы с плавающей точкой (float, double и long double)
- •Диапазоны значений простых типов данных для ibm pc
- •Переменные
- •Лекция № 3. Структура программы. Операции. Выражения
- •Структура программы
- •Спецификации формата для функций семейства printf
- •Модификаторы формата
- •Операции
- •Выражения
- •Арифметические преобразования типов
- •Лекция № 4. Структура программы. Операции. Выражения
- •Базовые конструкции структурного программирования
- •Оператор «выражение»
- •Операторы ветвления
- •Условный оператор if
- •If ( выражение) оператор_1; [else оператор_2]
- •Оператор switch
- •Операторы цикла
- •Цикл с предусловием (while)
- •Цикл с постусловием (do while)
- •Цикл с параметром (for)
- •Операторы передачи управления
- •Оператор goto
- •Оператор break
- •Оператор continue
- •Оператор return
- •Лекция 5. Указатели и массивы
- •Указатели
- •Инициализация указателей
- •1. Присваивание указателю адреса существующего объекта:
- •2. Присваивание указателю адреса области памяти в явном виде:
- •3. Присваивание пустого значения:
- •4. Выделение участка динамической памяти и присваивание ее адреса указателю:
- •Операции с указателями
- •Массивы
- •5.1. Стандартные алгоритмы работы с одномерными массивами
- •7. Сортировка целочисленного массива методом пузырьковой сортировкой.
- •5.2. Динамические массивы
- •5.3. Многомерные массивы
- •5.4. Стандартные алгоритмы работы с двумерными массивами
- •Лекция 6. Введение в обработку символов и строк
- •Основы теории символов и строк
- •Функции работы со строками из библиотеки обработки строк
- •Функции работы со строками из библиотеки обработки
- •Работа с символами
- •Модульное программирование Лекция № 7 Функции
- •Функции
- •Объявление и определение функций
- •Глобальные переменные
- •Возвращаемое значение
- •Параметры функции
- •Передача массивов в качестве параметров
- •Передача имен функций в качестве параметров
- •Параметры со значениями по умолчанию
- •Функции с переменным числом параметров
Массивы
При использовании простых переменных каждой области памяти для хранения данных соответствует свое имя. Если с группой величин одинакового типа требуется выполнять однообразные действия, им дают одно имя, а различают по порядковому номеру. Это позволяет компактно записывать множество операций с помощью циклов. Конечная именованная последовательность однотипных величин называется массивом. Описание линейного (одномерного) массива в программе отличается от описания простой переменной наличием после имени квадратных скобок, в которых задается количество элементов массива (размерность):
float а [10]; // описание массива из 10 вещественных чисел
При описании массивов квадратные скобки являются элементом синтаксиса, а не указанием на необязательность конструкции.
Элементы массива нумеруются с нуля. При описании массива используются те же модификаторы (класс памяти, const и инициализатор), что и для простых переменных. Инициализирующие значения для массивов записываются в фигурных скобках. Значения элементам присваиваются по порядку. Если элементов в массиве больше, чем инициализаторов, элементы, для которых значения не указаны, обнуляются:
int b[5] = {3, 2, 1}; // b[0]=3, b[l]=2, b[2]=l, b[3]=0, b[4]=0
Размерность массива вместе с типом его элементов определяет объем памяти, необходимый для размещения массива, которое выполняется на этапе компиляции, поэтому размерность может быть задана только целой положительной константой или константным выражением. Если при описании массива не указана размерность, должен присутствовать инициализатор, в этом случае компилятор выделит память по количеству инициализирующих значений.
Для доступа к элементу массива после его имени указывается номер элемента (индекс) в квадратных скобках. В следующем примере подсчитывается сумма элементов массива.
#include <iostream.h>
int main(){
const int n = 10;
int i, sum;
int marks[n] = {3, 4, 5, 4, 4};
for (i = 0; sum = 0; i<n; i++) sum += marks[i];
cout << "Сумма элементов: " << sum;
return 0;
}
Размерность массивов предпочтительнее задавать с помощью именованных констант, как это сделано в примере, поскольку при таком подходе для ее изменения достаточно скорректировать значение константы всего лишь в одном месте программы. Обратите внимание, что последний элемент массива имеет номер, на единицу меньший заданной при его описании размерности.
При обращении к элементам массива автоматический контроль выхода индекса за границу массива не производится, что может привести к ошибкам.
5.1. Стандартные алгоритмы работы с одномерными массивами
1.Ввод элементов массива с клавиатуры:
const int n=20;
int b[n];
int i;
for (i=0; i<n; i++) cin >> b[i];
2.Ввод элементов массива с помощью генератора случайных чисел:
const int n=20;
int b[n];
int i;
randomize();
for (i=0; i<n; i++) b[i]=random(100) - 50; // генерирование случайных
// чисел в диапазоне [-50; 50].
При использовании функций randomize() и random() подключается библиотека stdlib.h.
3.Вывод элементов массива на экран:
const int n=20;
int b[n];
int i;
for (i=0; i<n; i++) cout << b[i];
4. Поиск максимального элемента в массиве и запоминание позиции максимального элемента в массиве:
const int n=20;
int b[n];
int i, n_max;
max=b[0];
for (i=1; i<n; i++)
if (max >b[i])
{
max = b[i]; n_max=i;
}
cout <<”Максимальный элемент массива b[”<<n_ max<<”]=”<<max;
5. Поиск минимального элемента в массиве и запоминание позиции минимального элемента в массиве:
const int n=20;
int b[n];
int i, n_min;
min=b[0];
for (i=1; i<n; i++)
if (min >b[i])
{
min = b[i]; n_min=i;
}
cout <<”Минимальный элемент массива b[”<<n_ min<<”]=”<<min;
6. Сортировка целочисленного массива методом выбора
Сортировка данных (т.е. размещение данных в определенном порядке, таком как возрастание или уменьшение) является одним из наиболее важных применений компьютеров. Банк сортирует все чеки по номеру счета, чтобы в конце каждого месяца можно было подготовить индивидуальные банковские отчеты. Телефонные компании сортируют свои списки счетов по фамилиям, а внутри них — по имени и отчеству, что позволяет легко найти номера телефонов. В сущности, каждая организация должна сортировать некоторые данные, а во многих случаях очень значительные объемы данных. Сортировка данных представляется интригующей проблемой, которая является объектом наиболее интенсивных исследований в области компьютерных наук.
Алгоритм состоит в том, что выбирается наименьший элемент массива и меняется местами с первым элементом, затем рассматриваются элементы, начиная со второго, и наименьший из них меняется местами со вторым элементом, и так далее n-1 раз (при последнем проходе цикла при необходимости меняются местами предпоследний и последний элементы массива).
#include <iostream.h>
int main(){
const int n = 20; // количество элементов массива
int b[n]; // описание массива
int і;
for (і = 0; i<n; і++) сіn >> b[i]; // ввод массива
for (і = 0; і<n-1; і++)
{
// n-1 раз ищем наименьший элемент
// принимаем за наименьший первый из рассматриваемых элементов
int imin = i;
// поиск номера минимального элемента из неупорядоченных
for (int j = i + 1; j<n; j++)
// если нашли меньший элемент, запоминаем его номер:
if (b[j] < b[imin]) imin = j;
int a = b[i]; // обмен элементов
b[i] = b[imin]; // с номерами
b[imin] = a; // i и imin
}
// вывод упорядоченного массива:
for (i =0; i<n; i++) cout << b[i] << “ ”;
return 0;
}
Процесс обмена элементов массива с номерами і и іmin через буферную переменную а на і-м проходе цикла проиллюстрирован на рис. 5.1. Цифры около стрелок обозначают порядок действий.
Индекс: |
|
i |
|
|
|
imin |
|
Массив: |
|
|
|
|
|
2
|
|
1 |
|
|
|
3 |
|
|
|
|
|
a |
|
|
|
Рис. 5.1. Обмен значений двух переменных