- •Ю.А Петров Программирование на языке высокого уровня
- •Часть 1
- •Введение
- •Задание
- •Комментарии
- •Идентификаторы
- •Ключевые слова
- •Константы
- •Управляющие последовательности
- •Строковые литералы
- •Константные выражения
- •Пунктуаторы
- •Операции
- •Задание на лабораторную работу 2 разработка программы линейной структуры Цель работы
- •Отчет по лабораторной работе должен содержать:
- •Задание
- •Замечания
- •Варианты заданий
- •Классификация ошибок
- •Ошибки, не обнаруженные компилятором
- •Ситуации, возникающие при неверных результатах
- •Отладка программы
- •Предупреждения
- •Первое сообщение об ошибке
- •Использование команд Find и Replace
- •Быстрое обнаружение ошибочных строк
- •Продолжение отладки
- •Использование встроенного отладчика
- •Разница между командами Step Into и Step Over
- •Дополнительные средства отладки
- •Работа с точками останова
- •Краткая характеристика объектов
- •Формат 1:
- •Стиль программирования
- •Задание на лабораторную работу 4 объекты и их характеристики Цель работы
- •В отчете по лабораторной работе следует представить:
- •5 Структурное программирование
- •Пример1
- •Пример 2
- •Задание на лабораторную работу 5 разработка программы со структурой «развилка» Цель работы
- •Задание:
- •Варианты задания
- •Задание на лабораторную работу 6 создание цикловых программ с фиксированным числом повторений Цель работы
- •Задание
- •Варианты задания
- •Задание на лабораторную работу 7 создание программ с итерационными циклами Цель работы
- •Задание
- •Варианты задания
- •Пояснения к выполнению лабораторной работы 7
- •6 Агрегаты данных
- •Структура
- •Объединения
- •Перечисления
- •Int array[3]; // Объявление определения;
- •Многомерные массивы
- •Вывод в файловый поток
- •Чтение из входного файлового потока
- •Чтение целой строки файлового ввода
- •Определение конца файла
- •Проверка ошибок при выполнении файловых операций
- •Закрытие файла
- •Управление открытием файла
- •Выполнение операций чтения и записи
- •Задание на ргз 1 использование структур данных при решении задач Цель работы
- •Задание
- •Варианты задания
- •7 Модульное программирование
- •Задание на ргз 2 использование модульного программирования при решении задач
- •Перемещаемые панели инструментов
- •Меню File
- •Меню Edit
- •Меню View
- •Меню Insert
- •Меню Project
- •Меню Build
- •Меню Tools
- •Меню Window
- •Список открытых окон
- •Меню Help
- •Приложение 2 Некоторые функции языка с
- •Используемая литература
- •Оглавление
- •5 Структурное программирование 53
Int array[3]; // Объявление определения;
extern int array[ ]; // Объявление ссылки;
Элементы массива могут быть явно инициализированы при объявлении определения. Например:
int array[3]= {1,2,3}; // Размерность массива указывается явно;
int array[ ]= {1,2,3}; // Размерность массива определяется числом инициализаторов;
Возможна частичная инициализация массива. При этом значения получают первые элементы массива. Например:
int array[3]= {1,2}; // Инициализируются только первые два элемента;
Значение последнего элемента массива в общем случае не определено.
В объявлениях ссылки (со спецификатором extern) размеры объявляемого массива можно не указывать, так как компилятор их не читает. Также в объявлениях ссылки нельзя инициализировать элементы массива.
Многомерные массивы
Многомерные массивы в языке C++ рассматриваются как массивы, элементами которых являются массивы. Они создаются путем объявления массивов из элементов типа массив. Например, двумерный массив из пяти строк и семи столбцов с именем alpha объявляется следующим образом:
type alpha [5] [7];
Элементы многомерного массива располагаются в памяти в порядке возрастания самого правого индекса, т.е. самый младший адрес имеют элементы:
alpha [0] [0], alpha [0] [1], alpha [0] [3] и т.д.
Многомерный массив подобно одномерному массиву может быть проинициализирован с помощью списка инициализаторов. Первыми инициализируются элементы с самыми маленькими индексами. Например:
int array[3][3][3] = {0,1,2,3,4,5,6,7,8,9,10,11};
Начальные значения получают следующие элементы трёхмерного массива:
array[0][0][0] == 0
array[0][0][1] == 1
array[0][0][2] == 2
array[0][1][0] == 3
array[0][1][1] == 4 и т.д.
Если число инициализаторов меньше, чем элементов массива, то остальные элементы получают начальные значения в соответствии со статусом массива (в глобальном массиве значения остальных элементов равны 0, в локальном массиве элементы имеют неопределённые значения).
Для выборочной инициализации используются дополнительные фигурные скобки, позволяющие инициализировать отдельные фрагменты многомерного массива. Каждая пара фигурных скобок специфицирует значения, относящиеся к одной определённой размерности. Пустые фигурные скобки не допускаются (и это означает, что в языке C++реализован жёсткий алгоритм инициализации массивов). Например:
int array[3][3][3] = {
{{0,1}},
{{10},{20,21},{30}},
{{100},{200,210},{300,310,320}}
};
В результате выполнения этого предложения будут означены следующие элементы массива array:
array[0][0][0] == 0
array[0][0][1] == 1
array[1][0][0] == 10
array[1][1][0] == 20
array[1][1][1] == 21
array[1][2][0] == 30
array[2][0][0] == 100
array[2][1][0] == 200
array[2][1][1] == 210
array[2][2][0] == 300
array[2][2][1] == 310
array[2][2][2] == 320
В определенном контексте первое <константное выражение> многомерного массива может не иметь выражения в квадратных скобках. Такой массив имеет неопределенный размер. Контекстом, где допустимо такое положение, является тот случай, когда для резервирования памяти размер массива не требуется. Например, для объявления extern объекта типа массив точный размер массива не требуется; не требуется он и при передаче функции параметра типа массива.
В отличие от языка C язык C++ допускает массив неопределенных размеров, которым должен быть последний член структуры. Такой массив не увеличивает размера структуры, за исключением того, что для обеспечения правильного выравнивания структуры на границу слова он может быть дополнен символами-заполнителями. Такие структуры обычно используются при динамическом распределении памяти, когда для правильного резервирования области памяти к размеру структуры следует явно добавить необходимое число символов-заполнителей.
Агрегаты данных типа классы будут рассмотрены во второй части пособия.