
- •Часть 2
- •Раздел 3. Основы программирования
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.2.Структура программы
- •3.3.Имена и зарезервированные слова
- •3.4.Специальные символы
- •3.5.Константы и переменные
- •3.6.Оператор присваивания
- •Листинг 3.4. Пример множественного присваивания
- •3.7.Комментарии
- •4.Задание
- •Лабораторная работа №2 Арифметические операции и функции
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Типы целых чисел
- •3.2.Типы вещественных чисел
- •3.3.Арифметические выражения
- •3.4.Функции
- •3.5.Преобразование типов
- •4.Задание
- •Лабораторная работа №3 Ввод и вывод данных
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Ввод и вывод
- •3.2.Дополнительные возможности ввода/вывода
- •3.3.Форматированный ввод/вывод
- •4.Задание
- •Лабораторная работа №4 Логические операции
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Условный оператор
- •3.2.Условная операция
- •3.3.Оператор выбора
- •3.4.Составной оператор
- •3.5.Сложные условия
- •3.6.Тип bool(логический)
- •3.7.Особенности работы условного оператора
- •4.Задание
- •Лабораторная работа №5 Циклические операции
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Оператор цикла while (цикл с предусловием)
- •3.2.Оператор цикла do (цикл с постусловием)
- •3.3.Оператор цикла for (счетный цикл)
- •3.4.Вложенные циклы
- •3.5.Операторы прерывания цикла
- •4.Задание
- •Лабораторная работа №6 Указатели и массивы
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Указатели
- •3.2.Константные указатели и указатели-константы
- •3.3.Операции над указателями
- •3.4.Массивы
- •3.5.Одномерные массивы
- •3.6.Указатели на массивы
- •3.7.Инициализация массивов
- •3.8.Операция sizeof
- •3.9.Определение новых типов
- •3.10.Многомерные массивы
- •4.Задание
- •Лабораторная работа №7 Функции и процедуры
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Описание функций
- •3.2.Процедуры
- •3.3.Параметр-ссылка
- •3.4.Область видимости переменных
- •4.Задание
- •Лабораторная работа №8 Перегрузка функций
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Полиморфизм
- •3.2.Перегрузка функций
- •3.3.Особенности перегрузки функций
- •3.4.Использование параметров по умолчанию
- •4.Задание
- •Лабораторная работа №9 Перечисления
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •4.Задание
- •Лабораторная работа №10 Строки символов
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Данные типа char
- •3.2.Строковый тип string
- •4.Задание
3.3.Операции над указателями
Для указателей-переменных разрешены некоторые операций: присваивание, инкремент/декремент, сложение/вычитание и сравнение. Язык C++ разрешает операцию сравнения указателей одинакового типа. При выполнении присваивания значение указателя в правой части выражения пересылается в ячейку памяти, отведенную для указателя в левой части.
Важной особенностью арифметических операций с указателем является то, что физическое увеличение или уменьшение значения указателя зависит от его типа, т.е. от размера того объекта, на который указатель ссылается. Если к указателю, описанному как:
type *ptr;
прибавляется или отнимается константа N, значение ptr изменяется на величину произведения N нa размер типа type. Разность двух указателей:
type *ptr1,
*ptr2;
это разность их значений, поделенная на размер типа type.
В частности, арифметические операции над указателями типа char * (размер типа равен 1) выполняются как над обычными целыми числами с той лишь разницей, что значения, участвующие в операции - это адреса в оперативной памяти. Однако для других типов указателей это не так, например (Листинг 3.37):
Листинг 3.37. Пример операций над указателями
Рассмотрим приведенный выше пример (Листинг 3.29). Так как указатель имеет тип int * (длина типа 4 байта), то "единица изменения" указателя и "единица измерения разности" равны 4 байтам. Для других типов указателей такие же вычисления дают следующий результат:
Такие правила арифметических операций с указателями вытекают из того, что указатель в C++ неявно рассматривается как указатель на начало массива однотипных элементов. Продвижение указателя вперед или назад совпадает с увеличением или уменьшением индекса элемента (это будет подробно рассмотрено в следующей теме).
присваивание, инкремент/декремент, сложение/вычитание и сравнение.
3.4.Массивы
Массивы данных C++ аналогичны массивам данных Pascal - это расположенные вплотную друг за другом элементы одного и того же типа. Каждый массив имеет имя. Доступ к элементам массива осуществляется по имени массива и индексу (порядковому номеру) элемента. Основные свойства массива:
• все элементы массива имеют одни и тот же тип;
• все элементы массива расположены в памяти друг за другом;
индекс первого элемента равен 0;
имя массива является указателем, имеющим значение адреса начала массива
(первого байта первого элемента массива).
3.5.Одномерные массивы
Признаком массива при описании является наличие квадратных скобок [ ]. Константа или константное выражение в квадратных скобках задает число элементов массива, например (Листинг 3.38):
Листинг 3.38. Примеры декларации массивов C+ +
В приведенном выше примере (Листинг 3.30), X массив из float размером 100. Первый элемент Х[0], последний Х[99]. В отличии от языка Pascal, индексы массивов C++ всегда начинаются с 0 и заканчиваются N-1, где N - число элементов массива.
(Листинг 3.39):
Листинг 3.39. Пример программы ввода значений массива