Слайд 1Основные понятия программирования.
Слайд 2Классификация языков программирования
Машинные коды
Ассемблер
Языки высокого уровня
Универсальные
Прикладные
С++ - универсальный язык высокого уровня
Слайд 3Этапы создания программы
Написание исходного текста
Препроцессорная подготовка
Трансляция (компиляция)
Компоновка
Загрузка
Исполнение
Отладка
Слайд 4Факторы, учитываемые при написании программ
Тип процессора и его разрядность
Операционная система
Где хранятся
данные
Оперативная память
Внешняя память
Слайд 5Модель оперативной памяти для программиста
Оперативная память состоит из пронумерованных ячеек.
Каждая ячейка
хранит 1 байт информации и рассматривается как двоичный 8-ми битовый вектор.
Данные могут занимать несколько последовательно расположенных ячеек
Программа и данные хранятся в одной памяти
Память разбивается на порции, называемые сегментами
Номер ячейки, с которой начинается порция данных называется физическим адресом
Слайд 6
Алфавит языка
Алфавит C++ включает:
прописные и строчные латинские буквы и знак подчеркивания;
арабские
цифры от 0 до 9;
специальные знаки:
“ { } , | [ ] ( ) + - / % * . \ ‘ : ? < = > ! & # _ ; ^
пробельные символы: пробел, символы табуляции, символы перехода на новую строку.
Из символов алфавита формируются лексемы (лексема или элементарная конструкция - минимальная единица языка, имеющая самостоятельный смысл)
Слайд 7Лексемы языка С++
ключевые (зарезервированные) слова;
идентификаторы;
знаки операций;
константы;
разделители (скобки, точка, запятая, пробельные символы);
комментарии.
Слайд 8Ключевые слова
Ключевые слова предопределены в языке программирования и имеют вполне определенный
смысл для компилятора. Использовать эти слова по какому-либо другому назначению нельзя.
Перечень ключевых слов приводится в справочниках
Слайд 9Идентификаторы
Идентификаторы – это имена различных программных объектов (имена переменных, констант, функций
и т.д.).
Синтаксически правильный идентификатор – это последовательность латинских букв, цифр и символов «_» - нижнее подчеркивание, начинающаяся с буквы или символа «_».
Важно помнить, что в C++ различается строчное и прописное написание букв. То есть, например, идентификаторы ABC, Abc и abc представляют в программе не один и тот же объект, а три разных объекта.
Слайд 10Идентификаторы
Использование в собственных идентификаторах в качестве первого символа «_» нежелательно, так
как так обычно именуются различные системные объекты, и в ряде случаев может помешать переносимости программ с одного компилятора на другой. Обычно этот символ используется для выделения отдельных частей идентификаторов с целью обеспечения более удобного их восприятия.
Слайд 11Идентификаторы
Пользовательские идентификаторы не должны совпадать с ключевыми словами языка. При таком
совпадении компилятор выдает сообщение о синтаксической ошибке.
Нежелательно совпадение пользовательских идентификаторов с именами стандартных функций или переменных, так как при этом становится невозможным использование соответствующих стандартных функций и переменных. В этом случае ошибки при компиляции программы не возникает.
Слайд 12Идентификаторы
Имена программных объектов (идентификаторов) должны отражать назначение именуемых объектов. Простые (обезличенные)
идентификаторы следует использовать для различных вспомогательных объектов, когда их область действия ограничена.
Слайд 13Знаки операций
Служат для указания действий над операндами. В зависимости от количества
операндов в C++ имеются унарные, бинарные и одна тернарная операции.
Знаки операций могут изображаться одним или несколькими символами. Если операция содержит в своем изображении несколько символов, то между символами не должно быть пробелов.
Некоторые операции в C++ в зависимости от контекста могут выполнять разные действия.
Большинство стандартных операций можно переопределять (перегружать).
Слайд 14Выражения и операторы
Из знаков операций, операндов и круглых скобок строятся выражения.
В качестве операндов могут использоваться константы, переменные, функции и другие выражения (константы и переменные считаются частными случаями выражений).
Выражение, после которого стоит символ точки с запятой считается оператром, т.е. законченным действием.
Несколько операторов могут объединяться в составной оператор с помощью фигурных скобок, например,
{a=b+3; c=a+k};
Слайд 15Константы
Константы – это данные, значения которых не могут меняться в процессе
работы программы.
Константы могут задаваться конкретными значениями или именами (идентификаторами).
При формировании строковых (текстовых) констант: в них можно использовать не только символы алфавита языка C++, но и все другие символы, имеющиеся в используемой таблице символов (символы национальных алфавитов, символы псевдографики и т.д.).
Слайд 16Комментарии
Комментарии – это фрагменты текста, игнорирующиеся компилятором при обработке текста программы.
Комментарии в текстах программ используются для различных пояснений к тексту программы, а также для исключения временно не нужных фрагментов текста программы (например, отладочных кодов или вариантов реализации).
В комментариях допускается использование символов любого национального языка
В C++ имеются комментарии двух видов: однострочные и многострочные.
Слайд 17Комментарии
Однострочный комментарий начинается двумя символами // (прямой косой черты) и заканчивается
в конце строки текста программы.
Многострочный комментарий – начинается символами /* и заканчивается */ и может содержать множество строк. Многострочные комментарии не могут вкладываться друг в друга. Однострочные комментарии могут находиться внутри многострочных комментариев.
Слайд 18Понятия, которые следует различать
Тип данных – что это за данные
Переменная –
где хранятся эти данные
Значения – конкретное значение этих данных
Слайд 19Тип данных
Тип данных для каждого программного объекта, представляющего данные, определяет:
характер данных
(число, со знаком или без знака, целое или с дробной частью, одиночный символ или текст, представляющий последовательность символов и т.д.);
объем памяти, который занимают в памяти эти данные;
диапазон или множество возможных значений;
правила обработки этих данных (например, допустимые операции).
Слайд 20Тип данных
Типы данных можно разделить на две группы: простые и структурированные
типы.
Простые типы данных представляют неразделимые данные, не имеющие внутренней структуры (это, например, числа, символы и т.д.).
Структурированные типы данных, как это вытекает из их названия, имеют внутреннюю структуру. Структурированные типы строятся на основе простых типов данных.
Другой уровень классификации разделяет все типы данных на предопределенные (изначально встроенные в язык программирования) и пользовательские (типы данных, определяемые программистом) типы данных.
Слайд 21
Простые предопределенные типы данных языка С++
Основные (предопределенные) типы данных часто называют
арифметическими, поскольку их можно использовать в арифметических операциях.
Для описания основных типов определены следующие ключевые слова:
int (целый);
float (вещественный);
double (вещественный тип с двойной точностью);
bool (логический);
char (символьный).
Слайд 22
Простые предопределенные типы данных языка С++
Типы int, bool и char относят
к группе целочисленных (целых) типов, а float и double - к группе вещественных типов - типов с плавающей точкой.
Код, который формирует компилятор для обработки целых величин, отличается от кода для величин с плавающей точкой.
Слайд 23Спецификаторы типа
Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений
стандартных типов:
short (короткий);
long (длинный);
signed (знаковый);
unsigned (без знаковый).
Спецификаторы добавляются слева к названию типа, например, так:
short int – короткое целое;
unsigned short int - короткое целое без знака.
Спецификаторы могут в произвольном порядке. Например: unsigned short int эквивалентно short unsigned int.
Слайд 24Переменные
Переменная — это именованная область памяти, в которой хранятся данные определенного
типа.
Каждая переменная имеет имя и значение.
Именем переменной является идентификатор, придуманный программистом, и служит для обращения к области памяти, в которой хранится значение этой переменной. Идентификатор переменной преобразуется в адрес памяти, где хранится переменная, в процессе компиляции программы. Перед использованием любая переменная должна быть описана.
Слайд 25Описание переменных
Общее правил определения переменной можно сформулировать так:
[класс памяти]
<идентификатор - имя> [инициализатор];
Понятие класс памяти определяет такие важные характеристики как время жизни и область видимости переменных. Эти понятия будет рассмотрено позднее.
Слайд 26Примеры описания переменных
int а; // переменная a типа int (целого типа)
double
х; // переменная х типа double (вещественного типа с двойной точностью)
unsigned short int d; // переменная d – короткое целое без знака
Однотипные переменные можно определять в одной строке:
int i, j, k;
(Что здесь не так?)
Слайд 27Инициализация переменной
Описание переменной можно совместить с ее инициализацией:
int а = 1213;
// переменная a инициализирована значением 1213
double х = 0.003; // переменная х инициализирована значением 0.003
unsigned short int d = 13; /* переменная d инициализирована значением 13 */
Существует альтернативный способ инициализации переменных. Следующие примеры эквивалентны предыдущим:
int а (1213); // переменная a инициализирована значением 1213
double х (0.003); // переменная х инициализирована значением 0.003
unsigned short int d (13); /* переменная d инициализирована значением 13 */
Определения неинициализированных и инициализированных однотипных переменных можно совмещать в одной строке:
int i = 0, j, k (10);
Слайд 28Инициализация переменной
В качестве инициализирующего значения можно использовать любые допустимые выражения. Например:
double
y = a * x; /* переменная y инициализирована значением равным произведению значений переменных a и x */
Слайд 29Константы в языке С++
Константы бывают двух видов: константы – литералы и
именованные константы.
Константы – литералы представляют собой сами значения. Например:
123 -245 0.003 -12.45 ’R’ ”Это текст”
Тип данных, которому принадлежит констант – литера, определяется компилятором автоматически по виду самого значения. Способы записи констант – литералов разных типов будет рассмотрены позже при изучении соответствующих типов данных.
Именованные константы задаются с помощью ключевого слова const:
const double Pi = 3.14;
const int c1 = 1000, c2 = 2000;
const char point = ’.’;
Слайд 30Целочисленные данные
Размер типа int не определяется стандартом, а зависит от компьютера
и компилятора. Для 16-разрядного процессора под величины этого типа отводится 2 байта – в этом случае диапазон возможных значений составляет -32 768 ... 32 767 (2 в степени 16 различных значений). Для 32-разрядного - 4 байта – диапазон значений -2 147 483 648 ... 2 147 483 647 (2 в степени 32 различных значений)
Слайд 31Целочисленные данные
Спецификатор short перед именем типа указывает компилятору, что под число
требуется отвести 2 байта независимо от разрядности процессора.
Спецификатор long означает, что целая величина будет занимать 4 байта. Таким образом, на 16-разрядном компьютере эквиваленты int и short int, а на 32-разрядном — int и long int.
При определении переменных вместо short int или long int можно использовать более короткие обозначения: short или long соответственно:
short a; long b;
Слайд 32Целочисленные данные
Использование типов int, short int (short), long int (long) подразумевает
представление целых чисел со знаком, поэтому спецификатор signed можно не указывать.
Внутреннее представление величины целого типа — целое число в двоичном коде. Например, число +22 типа short int (short) представляются в памяти так:
Номера разрядов: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Значения разрядов: 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 Отрицательное число -22 выглядит следующим образом:
Номера разрядов: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Значения разрядов: 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0
Слайд 33Целочисленные константы
Целые константы литералы можно задавать в трех форматах: в десятичном,
восьмеричном и в шестнадцатеричном.
В десятичном формате целые значения записываются в обычном виде:
1345 +34 -245
В восьмеричном формате сначала записывается 0 (нуль), а за ним восьмеричные разряды самого числа:
011 07345 -0456
В шестнадцатеричном формате значащим разрядам числа должны предшествовать символы 0x или 0X:
0x12B5 -0xAF2B 0X1FF02
Слайд 34Целочисленные константы
Константам, встречающимся в программе, приписывается тот или иной тип в
соответствии с их видом. Если этот тип по каким-либо причинам не устраивает программиста, он может явно указать требуемый тип с помощью суффиксов L, l (long) и u, U (unsigned). Например, константа 32L будет иметь тип long и занимать 4 байта. Можно использовать суффиксы L и U одновременно, например, Ox22UL или 05LU.
Слайд 35Операция присваивания
Формат операции:
=
Например: a = b; b = 3 * a; c = 1.234;
Сначала вычисляется значение выражения с правой стороны, а затем полученное значение присваивается переменной в левой части операции (значение выражения записывается в область памяти переменной). Старое значение переменной при этом безвозвратно теряется.
В языке C++ возможно множественное присваивание:
<Переменная1> = <Переменная2> = … = <ПеременнаяN> = <Выражение>
Слайд 36Операция присваивания
При выполнении операции присваивания тип значения выражения автоматически преобразуется к
типу левого операнда (к типу данных переменной в левой части). При этом возможны потери данных или точности
int i = 100000, k;
short j = 10000, m;
k = j; // Короткое целое преобразуется к целому без потерь
m = i; // Преобразование целого к короткому целому приводит к искажению данных. На экран будет выведено: -31072
Слайд 37
Арифметические операции
Унарный плюс (+) и унарный минус (-) Единственный операнд любого
арифметического типа. Формат записи:
+ < Выражение >
- < Выражение >
Унарный плюс возвращает значение операнда без изменений.
Унарный минус (его иногда называют арифметическим отрицанием) меняет знак операнда на обратный.
Слайд 38Арифметические операции
Сложение (+) и вычитание (-) – бинарные операции. Операнды могут
быть любых арифметических типов данных. Примеры записи:
a + b a – b
При выполнении операций возможны ошибки переполнения и некорректного преобразования типов данных операндов. Например:
unsigned short n = 0, m;
m = n - 1; //На экран будет выведено 65535
n = m + 1; // На экран будет выведено 0
Слайд 39Арифметические операции
Инкремент (++) и декремент (--) – унарные операции увеличения и
уменьшения операнда на 1 соответственно. Операнд может быть любого арифметического типа данных.
Операции имеют две формы – префиксную (++a, --a) и постфиксную (a++, a--).
Независимо от формы операция инкремента эквивалентна следующему оператору:
a = a + 1;
а операция декремента следующему:
a = a - 1;
Слайд 40Арифметические операции
Разница между префиксной и постфиксной формами этих операций заключается в
том, что при префиксной форме, переменная сначала меняет свое значение, а потом это измененное значение обрабатывается.
В постфиксной форме значение переменной сначала обрабатывается и только потом ее значение изменяется на 1.
Слайд 41Арифметические операции
Умножение - * - бинарная операция. Примеры записи:
a *
b 2 * 3
Операнды могут быть любого арифметического типа данных. Тип данных результата операции определяется правилами неявного преобразования типов.
При выполнении возможен выход реального значения результата за допустимый диапазон значений типа данных – при этом значение результата операции трудно предсказать. Например:
1000000 * 1000000; // Результат: -727379968
Слайд 42Арифметические операции
Деление - / - бинарная операция. Примеры записи:
a / b
2 / 3
Если оба операнда являются целыми, то результат деления будет целым. В этом случае целый результат получается отбрасыванием дробной части от полученного реального значения (не округление). Например:
5 / 3 - результат равен 1.
Слайд 43Арифметические операции
Остаток от деления - % - бинарная операция. Операнды только
целого типа. Результат операции целого типа. Например:
5 % 1 - результат 0
5 % 2 - результат 1
5 % 3 - результат 2
5 % 4 - результат 1
5 % 5 - результат 0
5 % 6 - результат 5…..
Если второй операнд равен 0, возникает ошибка режима исполнения (деление на 0).
Слайд 44Операции сдвига
Операции сдвига - > - бинарные операции.
Операнды целого типа. Результат также целого типа. Формат записи:
< Операнд 1 > << < Операнд 2 > - сдвиг влево
< Операнд 1 > >> < Операнд 2 > - сдвиг вправо
Операция сдвига влево осуществляет перемещение битов
левого операнда 1 в сторону больших разрядов на количество разрядов, равное значению правого операнда 2.
Операция сдвига вправо осуществляет перемещение битов левого операнда 1 в сторону меньших разрядов на количество разрядов, равное значению правого операнда 2.
Слайд 46
Поразрядные логические операции
К этой группе операций относятся:
~ - побитовое
отрицание (побитовое НЕ) - унарная операция;
& - побитовая конъюнкция (побитовое И) - бинарная операция;
| - побитовая дизъюнкция (побитовое ИЛИ) - бинарная операция;
^ - побитовое исключающее ИЛИ - бинарная операция.
Операндами этих операций целочисленных типов данных. Результат также целочисленный.
Слайд 47Логический тип данных
Величины логического типа могут принимать только значения true и
false, являющиеся зарезервированными словами. Внутренняя форма представления значения false - О (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1 (единица).
В памяти переменные этого типа занимают 1 байт.
Слайд 48Логический тип данных
Определения переменных этого типа выглядят, например, так:
bool b1, b2
= true, b3 (false), b4 = 1, b5 = 0;
Константы – литералы задаются ключевыми словами true и false.
Слайд 49
Операции отношения
Операции этой группы служат для сравнения значений. Сюда входят следующие
операции:
== - равно;
!= - не равно;
> - больше;
>= - больше или равно;
< - меньше;
<= - меньше или равно.
Слайд 50Операции отношения
Все эти операции бинарные. В качестве операндов могут быть использованы
выражения любых арифметических типов данных.
Результат этих операций всегда логического типа (bool).
Примеры:
a == b, a != b, a > 10, (a - 3) >= (b + 10).
Слайд 51
Логические операции
Эти операции используются при построении сложных логических выражений.
В эту
группу входят 3 операции:
! - логическое отрицание (логическое НЕ);
&& - конъюнкция (логическое И);
|| - дизъюнкция (логическое ИЛИ).
Слайд 52Символьный тип данных
Для обозначения этого типа используется ключевое слово char.
Тип char
может быть со знаком или без знака. В величинах со знаком можно хранить значения в диапазоне от -128 до 127. По умолчанию тип char являемся знаковым, то есть спецификатор signed использовать не обязательно. При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255.
Слайд 53Символьный тип данных
Константы - литералы символьного типа представляют собой символы, заключенные
в апострофы. Например:
’A’ ’!’ ’#’ ’f’ ’ш’ ’я’
В языке C++ существует понятие управляющих или ESCAPE – последовательностей.
Слайд 54Управляющие последовательности
Управляющие последовательности начинаются символом обратной косой черты и служат:
Для представления
символов, не имеющих графического изображения. Например: ‘\n’ – перевод экранного курсора в начало следующей строки; ‘\t’ символ табуляции и т.д.
Для представления некоторых специальных символов, а именно: знака косой черты, апострофа, знака вопроса и кавычки – ‘\\’, ‘\’’, ‘\?’, ‘\”’.
Для представления любого из 256 символов таблицы ASCII с помощью его восьмеричного или шестнадцатеричного номера. Например: ‘\054’, ‘\x4A’.