основы C++
программированиелекция
что было
оглавление
оглавление
Базовые типы и литералы, порядок вычисления выражений, преобразования, целочисленное деление и потоковый ввод-вывод в C++17.
Тип определяет смысл операций. Поэтому выражения 5 / 2 и 5.0 / 2 дают разные результаты, хотя выглядят почти одинаково.
типы и литералы
Стандарт задаёт минимальные возможности типов, но не обещает одинаковые размеры на всех платформах. Точный размер проверяют через sizeof, диапазон — через std::numeric_limits.
тип | назначение | гарантия стандарта | часто |
|---|---|---|---|
bool | логическое значение | true/false; размер зависит от реализации | 1 байт |
char | кодовая единица | 1 байт, не меньше 8 бит | 1 байт |
short | целые | не меньше 16 бит | 2 байта |
int | целые | не меньше 16 бит | 4 байта |
long long | большие целые | не меньше 64 бит | 8 байт |
float | вещественные | формат зависит от реализации | 4 байта |
double | вещественные | точность не ниже float | 8 байт |
42 — литерал int; 42u — unsigned int.
3.14 — double; 3.14f — float.
'A' — символьный литерал; "A" — строковый литерал.
операции и преобразования
Скобки делают намерение явным. Без скобок *, / и % имеют приоритет выше + и -, сравнения — выше &&, а && — выше ||. Приоритет не определяет порядок вычисления двух операндов.
выражение | результат | почему |
|---|---|---|
5 / 2 | 2 | целочисленное деление отбрасывает дробную часть к нулю |
5.0 / 2 | 2.5 | один операнд имеет тип double |
static_cast<double>(5) / 2 | 2.5 | явное преобразование сделано до деления |
2 + 3 * 4 | 14 | умножение имеет более высокий приоритет |
сужение
При int x = 3.9 дробная часть теряется. Запись int x{3.9} не компилируется: list-initialization запрещает такое сужение.
cin, cout и полная программа
std::cin извлекает данные из входного потока, std::cout помещает данные в выходной. После чтения нужно проверить состояние потока.
Самодостаточный C++17-пример
#include <iomanip>
#include <iostream>
int main() {
int a{};
int b{};
if (!(std::cin >> a >> b)) {
std::cerr << "input error\n";
return 1;
}
const long long sum = static_cast<long long>(a) + b;
const double average = static_cast<double>(sum) / 2;
std::cout << "sum = " << sum << "\n";
std::cout << std::fixed << std::setprecision(1);
std::cout << "average = " << average << "\n";
return 0;
}
ввод 5 и 2
условие: Найти вывод программы.
ход решения
a=5, b=2
sum=7
static_cast превращает 7 в 7.0
7.0 / 2 = 3.5
ответ: sum = 7; average = 3.5.
проверка: Без преобразования 7 / 2 дало бы 3.
что запомнить
Размер типа зависит от реализации; типичные размеры не являются гарантией.
Суффикс литерала задаёт его тип.
Integer division двух целых отбрасывает дробную часть к нулю.
Явное преобразование показывает намерение.
Результат std::cin нужно проверять.
самопроверка
Почему long не всегда 64-битный?
Чем отличаются 2, 2u, 2.0 и 2.0f?
Что дают -5 / 2 и -5.0 / 2?
Зачем проверять std::cin?
Как скобки меняют 2 + 3 * 4?
источники
материал занятия: фотографии студенческого конспекта, страницы 106–111 — /materials/notes/programming/photo_106@20-09-2026_10-25-19.jpg
материал занятия: Основы C++ — /materials/lectures/programming-algorithms-02.pdf
редакционная сверка: cppreference: Fundamental types — https://en.cppreference.com/w/cpp/language/types.html
редакционная сверка: cppreference: Operator precedence — https://en.cppreference.com/w/cpp/language/operator_precedence.html
редакционная сверка: cppreference: Implicit conversions — https://en.cppreference.com/w/cpp/language/implicit_conversion.html
проверь деление int
в C++ результат деления целых чисел усекается к нулю, а % возвращает остаток.
что сделать
Скомпилируйте пример, затем замените static_cast<double>(sum) на sum и объясните изменение результата.
благодарность
Евгения Прохорова (1-45) и Никита Козлов (1-48)
материалы
- страница конспекта 1фото↗︎
- страница конспекта 2фото↗︎
- страница конспекта 3фото↗︎
- страница конспекта 4фото↗︎
- страница конспекта 5фото↗︎
- страница конспекта 6фото↗︎
- краткий конспект↗︎
- слайд 1фото↗︎
показать фото

- слайд 2фото↗︎
показать фото

- слайд 3фото↗︎
показать фото

- слайд 4фото↗︎
показать фото

- слайд 5фото↗︎
показать фото

- слайд 6фото↗︎
показать фото

- слайд 7фото↗︎
показать фото

- слайд 8фото↗︎
показать фото

- слайд 9фото↗︎
показать фото

- слайд 10фото↗︎
показать фото

- слайд 11фото↗︎
показать фото

- слайд 12фото↗︎
показать фото

- слайд 13фото↗︎
показать фото

- слайд 14фото↗︎
показать фото

- слайд 15фото↗︎
показать фото

- слайд 16фото↗︎
показать фото

- слайд 17фото↗︎
показать фото

- слайд 18фото↗︎
показать фото

- слайд 19фото↗︎
показать фото

- слайд 20фото↗︎
показать фото

- слайд 21фото↗︎
показать фото

- слайд 22фото↗︎
показать фото

- слайд 23фото↗︎
показать фото

- слайд 24фото↗︎
показать фото

- слайд 25фото↗︎
показать фото

- слайд 26фото↗︎
показать фото

- слайд 27фото↗︎
показать фото

- слайд 28фото↗︎
показать фото

- слайд 29фото↗︎
показать фото

- слайд 30фото↗︎
показать фото

- слайд 31фото↗︎
показать фото

- слайд 32фото↗︎
показать фото

- слайд 33фото↗︎
показать фото

- слайд 34фото↗︎
показать фото

- слайд 35фото↗︎
показать фото

- слайд 36фото↗︎
показать фото

- слайд 37фото↗︎
показать фото

- cppreference: Fundamental types↗︎
- cppreference: Operator precedence↗︎
- cppreference: Implicit conversions↗︎