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