основы C++

программированиелекция

в окне печати выбери «сохранить как pdf».

что было

оглавление
оглавление

Базовые типы и литералы, порядок вычисления выражений, преобразования, целочисленное деление и потоковый ввод-вывод в 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

условие: Найти вывод программы.

ход решения

  1. a=5, b=2

  2. sum=7

  3. static_cast превращает 7 в 7.0

  4. 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++ результат деления целых чисел усекается к нулю, а % возвращает остаток.

/
7 / 3 = 2; 7 % 3 = 1

что сделать

Скомпилируйте пример, затем замените static_cast<double>(sum) на sum и объясните изменение результата.

благодарность

Евгения Прохорова (1-45) и Никита Козлов (1-48)

материалы

предложить дополнение или исправлениекак оцифровать конспект