Основы алгоритмизации и программирования. История C++. Интегрированные среды разработки

Содержание

Слайд 2

Содержание лекции История C++. Интегрированные среды разработки. Структура программы на C++ Переменные Типы данных Ввод/вывод данных

Содержание лекции

История C++. Интегрированные среды разработки.
Структура программы на C++
Переменные
Типы данных
Ввод/вывод данных

Слайд 3

История C++ Разработан Бьярном Страуструпом в 1979 году из Bell Laboratories

История C++

Разработан Бьярном Страуструпом в 1979 году из Bell Laboratories в

рамках докторской диссертации.
Мотивацией послужило отсутствие удобных инструментов для исследований во время докторантуры.
До декабря 1983 года язык назывался C with Classes, затем был переименован в C++.
Имя языка происходит от оператора унарного постфиксного инкремента C ++
Слайд 4

Особенности C++ Компилируемый язык Хорошо развитые низкоуровневые механизмы: высокая эффективность (почти

Особенности C++

Компилируемый язык
Хорошо развитые низкоуровневые механизмы: высокая эффективность (почти ассемблер) и

низкий уровень контроля (небезопасный язык)
Часто используется в системном программировании (написание ОС, драйверов, компиляторов и пр.), встраиваемых системах (микроконтроллеры)
Процедурное, структурное и модульное программирование
Примеры приложений – ОС Unix, СУБД PostgreSQL
Слайд 5

Особенности C++ Поддерживает также объектно-ориентированный стиль Почти полностью совместим с C

Особенности C++

Поддерживает также объектно-ориентированный стиль
Почти полностью совместим с C
Более удобен при

написании программ среднего и большого размера
При использовании ООП повышается уровень накладных расходов (однако, повышается и безопасность)
Язык программирования общего назначения
Пример приложения – Mozilla Firefox
Слайд 6

Компиляция

Компиляция

Слайд 7

Integrated Development Environment Visual Studio Visual Studio Code Vim Qt Creator Eclipse Code::Blocks XCode

Integrated Development Environment

Visual Studio
Visual Studio Code
Vim
Qt Creator
Eclipse
Code::Blocks
XCode

Слайд 8

Пример IDE: Code::Blocks

Пример IDE: Code::Blocks

Слайд 9

Структура программы Программа состоит из одного или нескольких файлов, образующих проект:

Структура программы

Программа состоит из одного или нескольких файлов, образующих проект:
Файлы содержат

описания данных и функций
Функция – участок программы, решающий часть задачи
Главная функция – решает всю задачу (обычно с использованием других функций)
Функции состоят из операторов, которые по умолчанию выполняются последовательно
Слайд 10

Самая простая программа // Главная функция всегда называется main // int

Самая простая программа

// Главная функция всегда называется main
// int - тип

результата
// main - имя функции
int main()
{ // Тело функции ограничено фигурными скобками
// main() возвращает 0, если программа
// завершилась без ошибок
return 0; // ; - конец оператора
}
Слайд 11

Пример: та самая программа // директива включения файла // iostream –

Пример: та самая программа

// директива включения файла
// iostream – функции ввода/вывода
#include


int main() {
// << помещает в выходной поток
std::cout << "Hello, World!" << std::endl;
return 0;
}
Слайд 12

Пример: немного сложнее #include using namespace std; int main(int argc, char*

Пример: немного сложнее

#include
using namespace std;
int main(int argc, char* argv[]) {

cout << "Hello, " << argv[1] << endl;
return 0;
}
Слайд 13

Пример Скомпилировать и запустить: g++ hello.cpp -o hello ./hello Альтернативный вариант

Пример

Скомпилировать и запустить:
g++ hello.cpp -o hello
./hello
Альтернативный вариант (нужен MinGW)
x86_64-w64-mingw32-g++ hello.cpp -o

hello.exe -static-libstdc++ -static-libgcc
./hello.exe
Слайд 14

Комментарии /* это - комментарий ANSI C */ /* комментарий Си

Комментарии

/* это - комментарий ANSI C */
/* комментарий Си может располагаться

на
нескольких строчках и заканчивается в
любом месте строки */
// Это – однострочный комментарий
/* При наличии однострочных комментариев возможно
// вот такое вложение комментария.
Это иногда удобно при отладке */
Слайд 15

Константы и литералы Константы относятся к фиксированным значениям, которые программа может

Константы и литералы

Константы относятся к фиксированным значениям, которые программа может не

изменять, и они называются литералами.
Слайд 16

Константы и литералы Для объявления констант можно использовать препроцессор #DEFINE: #include

Константы и литералы

Для объявления констант можно использовать препроцессор #DEFINE:
#include
#define LENGTH

10
#define WIDTH 5
int main() {
int area = LENGTH * WIDTH;
std::cout << area; std::cout << std::endl;
return 0;
}
Слайд 17

Константы и литералы Для объявления констант определенного типа можно использовать префикс

Константы и литералы

Для объявления констант определенного типа можно использовать префикс const:
#include


int main() {
const int LENGTH = 10;
const int WIDTH = 5;
int area = LENGTH * WIDTH;
std::cout << area << std::endl;
return 0;
}
Слайд 18

Переменные Переменная - это идентификатор, который относится к данным, хранящимся в

Переменные

Переменная - это идентификатор, который относится к данным, хранящимся в определенной

области памяти.
К этим данным можно получить доступ в программе, просто используя имя переменной.
short int i;
i = 32676;
Слайд 19

Переменные Переменная имеет тип, имя и значение. Тип определяет, какую информацию

Переменные

Переменная имеет тип, имя и значение. Тип определяет, какую информацию может

хранить переменная.
Перед использованием любую переменную надо определить. Синтаксис определения переменной выглядит следующим образом:
;
Простейшее определение переменной:
int age;
Слайд 20

Переменные В языке C++ есть две похожие концепции: присваивание и инициализация.

Переменные

В языке C++ есть две похожие концепции: присваивание и инициализация.
int a;

// это объявление переменной
a = 8; // а это присваивание переменной a значения 8
Можно объявить переменную и присвоить ей значение одновременно. Это называется инициализацией («определением»).
int a = 8; // инициализируем переменную a значением 8
Переменная может быть инициализирована только после операции объявления.
Слайд 21

Задачи, решаемые описанием переменных Определить необходимое количество памяти для хранения этих

Задачи, решаемые описанием переменных

Определить необходимое количество памяти для хранения этих данных
Определить

способ представления значения в памяти компьютера (код и правило декодирования цепочки битов, хранящихся в этой памяти)
Задать символическое имя, соответствующее адресу в памяти. Таким образом, имя переменной выступает в роли символического адреса
Слайд 22

Имена переменных Имя в языках C и C++ всегда начинается с

Имена переменных

Имя в языках C и C++ всегда начинается с латинской

буквы
За ней может следовать неограниченное количество латинских букв, цифр и знаков подчеркивания
Имя не может совпадать с ключевым словом (в частности, названия стандартных типов – такие как int – являются ключевыми словами)
Языки C и C++ различают строчные и прописные буквы (alpha, ALPHA)
Слайд 23

Примеры имен Корректные имена alpha24 red_eye canGo b Некорректные имена НОД

Примеры имен

Корректные имена
alpha24
red_eye
canGo
b
Некорректные имена
НОД (содержит русские буквы)
3head (начинается с цифры)

Слайд 24

Зарезервированные слова

Зарезервированные слова

Слайд 25

Типы данных Тип определяет класс значений, которые могут принимать переменная или

Типы данных

Тип определяет класс значений, которые могут принимать переменная или выражение.
Каждый

литерал принадлежит одному и только одному типу.
Тип значения константы, переменной или выражения можно вывести либо из контекста, либо из самого операнда, не обращаясь к значениям, вычисляемым во время работы программы.
Каждой операции соответствует некоторый фиксированный тип ее операндов и некоторый фиксированный (обычно такой же) тип результата. Разрешение систематической неопределенности в случае, когда один и тот же символ применяется к операндам разного типа, производится на стадии компиляции.
Слайд 26

Фундаментальные типы Логический тип: bool (true или false) Символьные типы: char

Фундаментальные типы

Логический тип: bool (true или false)
Символьные типы:
char – один символ

в кодировке ASCII, занимает в памяти 1 байт (может быть signed или unsigned)
signed char (-128 до 127)
unsigned char (0 до 255)
char16_t, char32_t – представляет один символ в кодировке Unicode (2 или 4 байта)
wchar_t – представляет расширенный символ (Windows – 2 байта, Linux – 4 байта)
Слайд 27

Пример #include using namespace std; int main() { char a ='d’;

Пример

#include
using namespace std;
int main() {
char a ='d’;
char b

= 65; // символ с кодом 65 в ASCII (A)
wchar_t c ='c’;
char32_t d = 'o’;
cout << a << " " << b << " " << (char)d << endl;
std::wcout << c << '\n’;
return 0;
}
Слайд 28

Фундаментальные типы Целочисленные типы: short – представляет целое число в диапазоне

Фундаментальные типы

Целочисленные типы:
short – представляет целое число в диапазоне от –32768

до 32767 (2 байта).
Синонимы short int, signed short int, signed short.
unsigned short: представляет целое число в диапазоне от 0 до 65535 (2 байта).
Синоним unsigned short int.
Слайд 29

Фундаментальные типы int – представляет целое число в диапазоне от –32768

Фундаментальные типы

int – представляет целое число в диапазоне от –32768 до

32767 (−2 147 483 648 до 2 147 483 647) (2 байта или 4 байта). short <= int <= long.
Синонимы signed int и signed.
unsigned int – представляет положительное целое число в диапазоне от 0 до 65535 (0 до 4 294 967 295) (2 байта или 4 байта).
Синоним: unsigned
Слайд 30

Фундаментальные типы long – представляет целое число в диапазоне от −2

Фундаментальные типы

long – представляет целое число в диапазоне от −2 147

483 648 до 2 147 483 647 (4 байта).
Cинонимы long int, signed long int и signed long.
unsigned long: представляет целое число в диапазоне от 0 до 4 294 967 295. Занимает в памяти 4 байта (32 бита).
Cиноним: unsigned long int.
Слайд 31

Фундаментальные типы long long: представляет целое число в диапазоне от −9

Фундаментальные типы

long long: представляет целое число в диапазоне от −9 223

372 036 854 775 808 до +9 223 372 036 854 775 807 (как правило, 8 байт).
Синонимы long long int, signed long long int и signed long long.
unsigned long long: представляет целое число в диапазоне от 0 до 18 446 744 073 709 551 615 (как правило, 8 байт).
Синоним unsigned long long int.
Слайд 32

Пример int main() { short a = -10; unsigned short b=

Пример

int main() {
short a = -10;
unsigned short b= 10;

int c = -30;
unsigned int d = 60;
long e = -170;
unsigned long f = 45;
long long g = 89;
}
Слайд 33

Фундаментальные типы float – представляет вещественное число ординарной точности с плавающей

Фундаментальные типы

float – представляет вещественное число ординарной точности с плавающей точкой

в диапазоне +/- 3.4E-38 до 3.4E+38 (4 байта)
double – представляет вещественное число двойной точности с плавающей точкой в диапазоне +/- 1.7E-308 до 1.7E+308 (8 байт)
long double – представляет вещественное число двойной точности с плавающей точкой не менее 8 байт.
void – тип без значения
Слайд 34

Пример #include using namespace std; int main() { float a =

Пример

#include
using namespace std;
int main() {
float a = -10.45;
double

b = 0.00105;
long double c = 30.890045;
cout << "sizeof(a) = " << sizeof(a) << endl;
cout << "sizeof(b) = " << sizeof(b) << endl;
cout << "sizeof(c) = " << sizeof(c) << endl;
}
Слайд 35

Пример #include using namespace std; int main() { cout cout World\n\n"; return 0; }

Пример

#include
using namespace std;
int main() {
cout << "Hello\tWorld\n\n";
cout <<

"Second Hello \
World\n\n";
return 0;
}
Слайд 36

Еще один пример // Подключение файла с описанием // функций ввода-вывода

Еще один пример

// Подключение файла с описанием
// функций ввода-вывода C++
#include
//

Подключение пространства имен
// с описанием переменной cout
using namespace std;
int main(void) {
// Вывод сообщения на экран (<< означает вывести)
cout << "Hello, world!" << endl;
return 0;
}
Слайд 37

Поддержка русского языка #include #include // Для вызова setlocale() using namespace

Поддержка русского языка

#include
#include // Для вызова setlocale()
using namespace std;
int

main() {
setlocale(LC_ALL, "Russian"); // Изменение локали
cout << "Привет, мир!" << endl;
return 0;
}
Слайд 38

Классификация операций По числу операндов Одноместные (унарные) Двуместные (бинарные) Трехместная (тернарная)

Классификация операций

По числу операндов
Одноместные (унарные)
Двуместные (бинарные)
Трехместная (тернарная)
count++ !found
a+b rdy && go

size=limit
x>y ? max=x : max=y
Слайд 39

Классификация операций По категории операндов Ссылочные (array[ix], student.name) Арифметические (a+b, a-b,

Классификация операций

По категории операндов
Ссылочные (array[ix], student.name)
Арифметические (a+b, a-b, -c, --a)
Логические (булевские)

(rdy && go, finish || error, !eof)
Операции отношения (a
Слайд 40

Классификация операций По действию над двоичным представлением Операции, действующие над значением

Классификация операций

По действию над двоичным представлением
Операции, действующие над значением в целом

(a+b)
Операции, действующие над отдельными битами (a|b)
По наличию побочных эффектов
Операции, имеющие побочные эффекты (a=b, c=a+b, count++)
Операции, не имеющие побочных эффектов (a+b, a && b)
Слайд 41

Приоритет операций

Приоритет операций

Слайд 42

Важно! Оператор присваивания = не имеет никакого отношения к процессу определения

Важно!

Оператор присваивания = не имеет никакого отношения к процессу определения равенства

и никогда не используется для программного сравнения значений.
Для того, чтобы записать оператор равенства необходимо использовать следующий символ: ==.
Присваивание используется когда в переменной необходимо сохранить определенное значение.
Слайд 43

Приоритеты // Первыми выполняются операции в () // Затем выполняются *,

Приоритеты

// Первыми выполняются операции в ()
// Затем выполняются *, /, %

- слева направо
// Затем + и –, также слева направо
// Затем = (присваивание), справа налево
// Например
double x=3.6, y=2.8
x=y=(2.3+x)*(9.5-y)*(1.0/2);
// y=(2.3+3.6)*(9.5-2.8)*(1.0/2);
// y=5.9*6.7*0.5, (1.0/2) не 0,
// т.к. 1.0 – вещественное
// Итог: y=19.765, после чего x=y=19.765
Слайд 44

Приоритет операций

Приоритет операций

Слайд 45

Приоритет операций

Приоритет операций

Слайд 46

Базовый ввод/вывод Для ввода/вывода используется стандартная библиотека iostream. Она определяет несколько

Базовый ввод/вывод

Для ввода/вывода используется стандартная библиотека iostream. Она определяет несколько потоков

для ввода и вывода:
cout – чаще всего консольный вывод
cin – ввод данных пользователем
cerr, clog
endl – манипулятор, который используется только с выходными потоками и вставляет конец строки (\n) в поток и сбрасывает его.
Слайд 47

Базовый ввод/вывод Два оператора побитового сдвига: >> – получить из входного потока (извлечение);

Базовый ввод/вывод

Два оператора побитового сдвига:
>> – получить из входного потока (извлечение);
<<

– поместить в выходной поток (вставка).