SlideShare a Scribd company logo
1 of 13
Download to read offline
Программирование на языке C++
Лекция 1
Введение в синтаксис C++
Александр Смаль
1/13
Типы данных
∙ Целочисленные:
1. char (символьный тип данных)
2. short int
3. int
4. long int
Могут быть беззнаковыми (unsigned).
∙ −2n−1
. . . (2n−1
− 1) (n — число бит)
∙ 0 . . . (2n
− 1) для unsigned
∙ Числа с плавающей точкой:
1. float, 4 байта, 7 значащих цифр.
2. double, 8 байт, 15 значащих цифр.
∙ Логический тип данных bool.
∙ Пустой тип void.
2/13
Литералы
∙ Целочисленные:
1. ’a’ — код буквы ’a’, тип char,
2. 42 — все целые числа по умолчанию типа int,
3. 1234567890L — суффикс ’L’ соответствует типу long,
4. 1703U — суффикс ’U’ соответствует типу unsigned int,
5. 2128506UL — соответствует типу unsigned long.
∙ Числа с плавающей точкой:
1. 3.14 — все числа с точкой по умолчанию типа double,
2. 2.71F — суффикс ’F’ соответствует типу float,
3. 3.0E8 — соответствует 3.0 · 108
.
∙ true и false — значения типа bool.
∙ Строки задаются в двойных кавычках: "Text string".
3/13
Переменные
∙ При определении переменной указывается её тип. При
определении можно сразу задать начальное значение
(инициализация).
int i = 10;
short j = 20;
bool b = false;
unsigned long l = 123123;
double x = 13.5, y = 3.1415;
float z;
∙ Нужно всегда инициализировать переменные.
∙ Нельзя определить переменную пустого типа void.
4/13
Операции
∙ Оператор присваивания: =.
∙ Арифметические:
1. бинарные: + - * / %,
2. унарные: ++ --.
∙ Логические:
1. бинарные: && ||,
2. унарные: !.
∙ Сравнения: == != > < >= <=.
∙ Приведения типов: (type).
∙ Сокращённые версии бинарных
операторов: += -= *= /= %=.
int i = 10;
i = (20 * 3) % 7;
int k = i++;
int l = --i;
bool b = !(k == l);
b = (a == 0) ||
(1 / a < 1);
double d = 3.1415;
float f = (int)d;
// d = d * (i + k)
d *= i + k;
5/13
Инструкции
∙ Выполнение состоит из последовательности инструкций.
∙ Инструкции выполняются одна за другой.
∙ Порядок вычислений внутри инструкций не определён.
/* unspecified behavior */
int i = 10;
i = (i += 5) + (i * 4);
∙ Блоки имеют вложенную область видимости:
int k = 10;
{
int k = 5 * i; // не видна за пределами блока
i = (k += 5) + 5;
}
k = k + 1;
6/13
Условные операторы
∙ Оператор if:
int d = b * b - 4 * a * c;
if ( d > 0 ) {
roots = 2;
} else if ( d == 0 ){
roots = 1;
} else {
roots = 0;
}
∙ Тернарный условный оператор:
int roots = 0;
if (d >= 0)
roots = (d > 0 ) ? 2 : 1;
7/13
Циклы
∙ Цикл while:
int squares = 0;
int k = 0;
while ( k < 10 ) {
squares += k * k;
k = k + 1;
}
∙ Цикл for:
for ( int k = 0; k < 10; k = k + 1 ) {
squares += k * k;
}
∙ Для выхода из цикла используется оператор break.
8/13
Функции
∙ В сигнатуре функции указывается тип возвращаемого
значений и типы параметров.
∙ Ключевое слово return возвращает значение.
double square(double x) {
return x * x;
}
∙ Переменные, определённые внутри функций, — локальные.
∙ Функция может возвращать void.
∙ Параметры передаются по значению (копируются).
void strange(double x, double y) {
x = y;
}
9/13
Макросы
∙ Макросами в C++ называют инструкции препроцессора.
∙ Препроцессор C++ является самостоятельным языком,
работающим с произвольными строками.
∙ Макросы можно использовать для определения функций:
int max1(int x, int y) {
return x > y ? x : y;
}
#define max2(x, y) x > y ? x : y
a = b + max2(c, d); // b + c > d ? c : d;
∙ Препроцессор “не знает” про синтаксис C++.
10/13
Макросы
∙ Параметры макросов нужно оборачивать в скобки:
#define max3(x, y) ((x) > (y) ? (x) : (y))
∙ Это не избавляет от всех проблем:
int a = 1;
int b = 1;
int c = max3 (++a, b);
// c = ((++a) > (b) ? (++a) : (b))
∙ Определять функции через макросы — плохая идея.
∙ Макросы можно использовать для условной компиляции:
#ifdef DEBUG
// дополнительные проверки
#endif
11/13
Ввод-вывод
∙ Будем использовать библиотеку <iostream>.
#include <iostream >
using namespace std;
∙ Ввод:
int a = 0;
int b = 0;
cin >> a >> b;
∙ Вывод:
cout << "a + b = " << (a + b) << endl;
12/13
Простая программа
#include <iostream >
using namespace std;
int main ()
{
int a = 0;
int b = 0;
cout << "Enter a and b: ";
cin >> a >> b;
cout << "a + b = " << (a + b) << endl;
return 0;
}
13/13

More Related Content

What's hot

2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-выводDEVTYPE
 
4.2 Перегрузка
4.2 Перегрузка4.2 Перегрузка
4.2 ПерегрузкаDEVTYPE
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2Zhanna Kazakova
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inlineDEVTYPE
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функцийDEVTYPE
 
C language lect_05_introduction
C language lect_05_introductionC language lect_05_introduction
C language lect_05_introductionRoman Brovko
 
4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методовDEVTYPE
 
вывод алфавитно цифровой информации
вывод алфавитно цифровой информациивывод алфавитно цифровой информации
вывод алфавитно цифровой информацииLungu
 
C language lect_08_introduction
C language lect_08_introductionC language lect_08_introduction
C language lect_08_introductionRoman Brovko
 
Программирование линейных алгоритмов
Программирование линейных алгоритмовПрограммирование линейных алгоритмов
Программирование линейных алгоритмовAndrey Dolinin
 
6.4 Ещё о шаблонах
6.4 Ещё о шаблонах6.4 Ещё о шаблонах
6.4 Ещё о шаблонахDEVTYPE
 
1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#Olga Maksimenkova
 
Сложные условия в паскале
Сложные условия в паскалеСложные условия в паскале
Сложные условия в паскалеDaria Romanova
 
Cpp/cli types
Cpp/cli typesCpp/cli types
Cpp/cli typesmcroitor
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятиеluis_blanco_rau
 
оператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и выводаоператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и выводаliza2209
 
Александра Торгашова
Александра ТоргашоваАлександра Торгашова
Александра ТоргашоваLiloSEA
 
КР Решение логических задач. логические основы построения пк
КР Решение логических задач. логические основы построения пкКР Решение логических задач. логические основы построения пк
КР Решение логических задач. логические основы построения пкaleksashka3
 
Структурные формулы и функциональные схемы
Структурные формулы и функциональные схемыСтруктурные формулы и функциональные схемы
Структурные формулы и функциональные схемыaleksashka3
 

What's hot (20)

2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод
 
4.2 Перегрузка
4.2 Перегрузка4.2 Перегрузка
4.2 Перегрузка
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функций
 
C language lect_05_introduction
C language lect_05_introductionC language lect_05_introduction
C language lect_05_introduction
 
4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов
 
вывод алфавитно цифровой информации
вывод алфавитно цифровой информациивывод алфавитно цифровой информации
вывод алфавитно цифровой информации
 
C language. Introduction
C language. IntroductionC language. Introduction
C language. Introduction
 
C language lect_08_introduction
C language lect_08_introductionC language lect_08_introduction
C language lect_08_introduction
 
Программирование линейных алгоритмов
Программирование линейных алгоритмовПрограммирование линейных алгоритмов
Программирование линейных алгоритмов
 
6.4 Ещё о шаблонах
6.4 Ещё о шаблонах6.4 Ещё о шаблонах
6.4 Ещё о шаблонах
 
1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#
 
Сложные условия в паскале
Сложные условия в паскалеСложные условия в паскале
Сложные условия в паскале
 
Cpp/cli types
Cpp/cli typesCpp/cli types
Cpp/cli types
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятие
 
оператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и выводаоператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и вывода
 
Александра Торгашова
Александра ТоргашоваАлександра Торгашова
Александра Торгашова
 
КР Решение логических задач. логические основы построения пк
КР Решение логических задач. логические основы построения пкКР Решение логических задач. логические основы построения пк
КР Решение логических задач. логические основы построения пк
 
Структурные формулы и функциональные схемы
Структурные формулы и функциональные схемыСтруктурные формулы и функциональные схемы
Структурные формулы и функциональные схемы
 

Similar to Введение в синтаксис C++, часть 2

Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
 
parboiled2 – A Macro-Based PEG Parser Generator for Scala 2.10.3+
parboiled2 – A Macro-Based PEG Parser Generator for Scala 2.10.3+parboiled2 – A Macro-Based PEG Parser Generator for Scala 2.10.3+
parboiled2 – A Macro-Based PEG Parser Generator for Scala 2.10.3+Alexander Myltsev
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаTatyanazaxarova
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
На что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
На что нужно обратить внимание при обзоре кода разрабатываемой библиотекиНа что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
На что нужно обратить внимание при обзоре кода разрабатываемой библиотекиAndrey Karpov
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кодаAndrey Karpov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++Pavel Tsukanov
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Yandex
 

Similar to Введение в синтаксис C++, часть 2 (20)

Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
 
parboiled2 – A Macro-Based PEG Parser Generator for Scala 2.10.3+
parboiled2 – A Macro-Based PEG Parser Generator for Scala 2.10.3+parboiled2 – A Macro-Based PEG Parser Generator for Scala 2.10.3+
parboiled2 – A Macro-Based PEG Parser Generator for Scala 2.10.3+
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
C# vs C++
C# vs C++C# vs C++
C# vs C++
 
9 ср1
9 ср19 ср1
9 ср1
 
На что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
На что нужно обратить внимание при обзоре кода разрабатываемой библиотекиНа что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
На что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11
 

More from DEVTYPE

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреDEVTYPE
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойстваDEVTYPE
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистикаDEVTYPE
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространствоDEVTYPE
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform ContinuityDEVTYPE
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change ProblemDEVTYPE
 
Recurrences
RecurrencesRecurrences
RecurrencesDEVTYPE
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применениеDEVTYPE
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыDEVTYPE
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ DEVTYPE
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функцийDEVTYPE
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of FunctionsDEVTYPE
 
Кучи
КучиКучи
КучиDEVTYPE
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование ХаффманаDEVTYPE
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введениеDEVTYPE
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиDEVTYPE
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"DEVTYPE
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делительDEVTYPE
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа ФибоначчиDEVTYPE
 
О-символика
О-символикаО-символика
О-символикаDEVTYPE
 

More from DEVTYPE (20)

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
 
Recurrences
RecurrencesRecurrences
Recurrences
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функций
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
 
Кучи
КучиКучи
Кучи
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятности
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
 
О-символика
О-символикаО-символика
О-символика
 

Введение в синтаксис C++, часть 2

  • 1. Программирование на языке C++ Лекция 1 Введение в синтаксис C++ Александр Смаль 1/13
  • 2. Типы данных ∙ Целочисленные: 1. char (символьный тип данных) 2. short int 3. int 4. long int Могут быть беззнаковыми (unsigned). ∙ −2n−1 . . . (2n−1 − 1) (n — число бит) ∙ 0 . . . (2n − 1) для unsigned ∙ Числа с плавающей точкой: 1. float, 4 байта, 7 значащих цифр. 2. double, 8 байт, 15 значащих цифр. ∙ Логический тип данных bool. ∙ Пустой тип void. 2/13
  • 3. Литералы ∙ Целочисленные: 1. ’a’ — код буквы ’a’, тип char, 2. 42 — все целые числа по умолчанию типа int, 3. 1234567890L — суффикс ’L’ соответствует типу long, 4. 1703U — суффикс ’U’ соответствует типу unsigned int, 5. 2128506UL — соответствует типу unsigned long. ∙ Числа с плавающей точкой: 1. 3.14 — все числа с точкой по умолчанию типа double, 2. 2.71F — суффикс ’F’ соответствует типу float, 3. 3.0E8 — соответствует 3.0 · 108 . ∙ true и false — значения типа bool. ∙ Строки задаются в двойных кавычках: "Text string". 3/13
  • 4. Переменные ∙ При определении переменной указывается её тип. При определении можно сразу задать начальное значение (инициализация). int i = 10; short j = 20; bool b = false; unsigned long l = 123123; double x = 13.5, y = 3.1415; float z; ∙ Нужно всегда инициализировать переменные. ∙ Нельзя определить переменную пустого типа void. 4/13
  • 5. Операции ∙ Оператор присваивания: =. ∙ Арифметические: 1. бинарные: + - * / %, 2. унарные: ++ --. ∙ Логические: 1. бинарные: && ||, 2. унарные: !. ∙ Сравнения: == != > < >= <=. ∙ Приведения типов: (type). ∙ Сокращённые версии бинарных операторов: += -= *= /= %=. int i = 10; i = (20 * 3) % 7; int k = i++; int l = --i; bool b = !(k == l); b = (a == 0) || (1 / a < 1); double d = 3.1415; float f = (int)d; // d = d * (i + k) d *= i + k; 5/13
  • 6. Инструкции ∙ Выполнение состоит из последовательности инструкций. ∙ Инструкции выполняются одна за другой. ∙ Порядок вычислений внутри инструкций не определён. /* unspecified behavior */ int i = 10; i = (i += 5) + (i * 4); ∙ Блоки имеют вложенную область видимости: int k = 10; { int k = 5 * i; // не видна за пределами блока i = (k += 5) + 5; } k = k + 1; 6/13
  • 7. Условные операторы ∙ Оператор if: int d = b * b - 4 * a * c; if ( d > 0 ) { roots = 2; } else if ( d == 0 ){ roots = 1; } else { roots = 0; } ∙ Тернарный условный оператор: int roots = 0; if (d >= 0) roots = (d > 0 ) ? 2 : 1; 7/13
  • 8. Циклы ∙ Цикл while: int squares = 0; int k = 0; while ( k < 10 ) { squares += k * k; k = k + 1; } ∙ Цикл for: for ( int k = 0; k < 10; k = k + 1 ) { squares += k * k; } ∙ Для выхода из цикла используется оператор break. 8/13
  • 9. Функции ∙ В сигнатуре функции указывается тип возвращаемого значений и типы параметров. ∙ Ключевое слово return возвращает значение. double square(double x) { return x * x; } ∙ Переменные, определённые внутри функций, — локальные. ∙ Функция может возвращать void. ∙ Параметры передаются по значению (копируются). void strange(double x, double y) { x = y; } 9/13
  • 10. Макросы ∙ Макросами в C++ называют инструкции препроцессора. ∙ Препроцессор C++ является самостоятельным языком, работающим с произвольными строками. ∙ Макросы можно использовать для определения функций: int max1(int x, int y) { return x > y ? x : y; } #define max2(x, y) x > y ? x : y a = b + max2(c, d); // b + c > d ? c : d; ∙ Препроцессор “не знает” про синтаксис C++. 10/13
  • 11. Макросы ∙ Параметры макросов нужно оборачивать в скобки: #define max3(x, y) ((x) > (y) ? (x) : (y)) ∙ Это не избавляет от всех проблем: int a = 1; int b = 1; int c = max3 (++a, b); // c = ((++a) > (b) ? (++a) : (b)) ∙ Определять функции через макросы — плохая идея. ∙ Макросы можно использовать для условной компиляции: #ifdef DEBUG // дополнительные проверки #endif 11/13
  • 12. Ввод-вывод ∙ Будем использовать библиотеку <iostream>. #include <iostream > using namespace std; ∙ Ввод: int a = 0; int b = 0; cin >> a >> b; ∙ Вывод: cout << "a + b = " << (a + b) << endl; 12/13
  • 13. Простая программа #include <iostream > using namespace std; int main () { int a = 0; int b = 0; cout << "Enter a and b: "; cin >> a >> b; cout << "a + b = " << (a + b) << endl; return 0; } 13/13