- •Оглавление
- •1.2. Свойства языков программирования
- •1.3. Основные парадигмы программирования Процедурное программирование
- •Модульное программирование
- •Абстракция данных
- •Объектно-ориентированное программирование
- •Непечатные символы
- •Тема 2 Типы данных
- •2.1. Понятие переменной и объявление переменных
- •Объявление переменных
- •Встроенные типы данных
- •Размер памяти, выделяемой под встроенные типы данных
- •2.2. Константы и перечисления Константные переменные
- •Перечисления
- •2.3. Операции и выражения
- •Мультипликативные операции
- •Операции сравнения
- •Побитовые логические операции
- •Побитовые операции
- •Комментарии
- •Оператор while(пока)
- •Оператор do/while(выполнять/пока)
- •Оператор for(цикл)
- •Оператор множественного выбора switch
- •Операторы breakиcontinue
- •Тема 4 Массивы
- •4.1.Определение, объявление и инициализация массивов
- •Объявления и инициализация массивов в программе
- •4.2. Сортировка массивов Пузырьковая сортировка
- •Сортировка вставками
- •4.3. Поиск в массивах Линейный поиск
- •Двоичный поиск
- •4.4. Многомерные массивы
- •Тема 5 Указатели Объявления и инициализация переменных указателей
- •5.1. Операции над указателями
- •5.2. Выражения и арифметические действия с указателями
- •5.3. Взаимосвязи между указателями и массивами
- •5.4. Массивы указателей
- •5.5. Динамическое выделение памяти под массивы
- •Тема 6 Функции
- •6.2. Определения функций
- •Генерация случайных чисел
- •6.3. Классы памяти и область действия Классы памяти
- •Область действия
- •6.4. Рекурсия
- •6.5. Ссылки и ссылочные параметры
- •Вызов функций по ссылке с аргументами указателями
- •6.6. Использование спецификатораconstс указателями
- •6.7. Перегрузка функций
- •Аргументы по умолчанию
- •6.8. Передача массивов в функции
- •6.9. Указатель на функцию
- •6.10. Командная строка аргументов
- •6.11 Неопределенное количество аргументов
- •Тема 7 Введение в обработку строк
- •7.1. Работа со строками в с
- •Понятие символов и строк в с
- •Функции для работы со строками
- •Определение длины строки
- •Сложение двух строк (конкатенация)
- •Добавление к исходной строке указанного количества символов.
- •Копирование строки в другую строку
- •Сравнение строк
- •Получение строки от пользователя
- •Тема 8 Работа с файлами
- •Открытие файла
- •Чтение из файла символа или строки символов
- •Запись символа или строки символов в файл
- •Смещение внутри файла
- •Значения параметра fromwhereфункцииfseek
- •Закрытие файла
- •Тема 9 Компоновка программ и препроцессор
- •9.1. Компоновка программ
- •Проблема использования общих функций и имен
- •Использование включаемых файлов
- •9.2. Препроцессор
- •Определение макросов
- •Условная компиляция
- •Дополнительные директивы препроцессора
- •Тема 10 Структуры
- •10.1. Определение структур и доступ к элементам
- •Доступ к элементам структур
- •Использование структур
- •10.2. Битовые поля
- •10.3. Объединения
- •10.4. Построение связных списков на основе структур с самоадресацией
- •Создание простого связного списка
- •Очереди
- •Деревья
- •Список рекомендуемой литературы
Тема 4 Массивы
4.1.Определение, объявление и инициализация массивов
Массив– это последовательная группа ячеек памяти, имеющих одинаковое имя и одинаковый тип.
На любой элемент массива можно сослаться, указывая имя массива и номер позиции элемента, заключенный в квадратные скобки. Первый элемент каждого массива – нулевой. Номер позиции, указанный в квадратных скобках, называют индексом. Индекс должен быть целым числом или целым выражением. Если программа использует выражение в качестве индекса, то выражение вычисляется с целью определения индекса.
Важно понимать различие между «седьмым элементом массива» и «элементом массива семь». Седьмой элемент массива имеет индекс 6, тогда как элемент массива семь имеет индекс7.
Чтобы разделить значение седьмого элемента массива arrна2и записать результат в переменнуюх, надо записать:
x = arr[6] / 2;
Объявления и инициализация массивов в программе
Массивы занимают область в памяти. Программист указывает тип каждого элемента, количество элементов, требуемое каждым массивом, и компилятор может зарезервировать соответствующий объем памяти.
int c[12];
int b[100], x[27];
Элементам массива должны быть заданы какие-то начальные значения:
int n[10];
for (int i = 0; i<10; i++)
n[i] = 0;
Элементам массива можно присваивать начальные значения (инициализировать их) в объявлении массива с помощью следующего за объявлением списка, заключенного в фигурные скобки:
int n[5] = {5,4,3,2};
Если начальных значений меньше, чем элементов в массиве, оставшиеся элементы автоматически получают нулевые значения.
Если размер массива не указан в объявлении со списком инициализации, то количество элементов массива будет равно количеству элементов в списке начальных значений:
int n[ ] = {5,4,3,2,1};
const int arraySize = 10;
int s[arraySize];
В объявлении массивов при указании размера массива можно использовать только константы.
Символьному массиву можно также задать в качестве начального значения список отдельных символьных констант, указанных в списке инициализации. Например,
char string1 [ ] = “first”;
char string2 [ ] ={‘f’, ‘i’, ‘r’, ‘s’, ‘t’, ‘\0’}
Эти объявления эквивалентны. Оба массива содержат шестьсимволов, потому что последним символом в строке всегда является нулевой символ – признак завершения строки.
4.2. Сортировка массивов Пузырьковая сортировка
Задача.В программе задан массив из 10 элементов. Необходимо отсортировать его по возрастанию и вывести отсортированный массив на экран. Использовать пузырьковую сортировку (см. рис. 4.1.).
Данная сортировка получила название пузырьковая сортировка[5] или сортировка погружением, потому что наименьшее значение постепенно «всплывает», продвигаясь к вершине (началу) массива, подобно пузырьку воздуха в воде, тогда как наибольшее значение погружается на дно (конец массива).
int main(){
const int arraySize = 10;
int a[arraySize] = {2,6,4,8,10,12,89,68,45,37};
int hold;
cout << "In natural order" << endl;
for (int i = 0; i< arraySize; i ++)
cout << a[i] << "\t";
cout << endl;
//Bubbble-sort***************************************
for( int pass = arraySize-1; pass >0; pass --)
for (i = 0; i < pass; i++)
if (a[i] > a[i+1]){
hold = a[i];
a[i] = a[i+1];
a[i+1] = hold; }
//**************************************************
cout << "In right order" << endl;
for (i = 0; i< arraySize; i ++)
cout << a[i] << "\t";
cout << endl;}
Рис. 4.1. Программа, иллюстрирующая работу пузырьковой сортировки
Сортировка осуществляется с помощью вложенного цикла for. Перестановка выполняется тремя присваиваниями, с помощью переменнойhold. Двумя присваиваниями сортировку выполнить нельзя, потому что после первого присваивания одно из значений будет утеряно, и обе переменные будут иметь одинаковое значение.