Потоковый ввод-вывод
Потоковый ввод-вывод
Презентация "Язык программирования Си. Приведение типов, операции. Потоковый ввод-вывод"
Подписи к слайдам:
- Язык программирования Си
- Приведение типов, операции
- Потоковый ввод-вывод
- Югов Иван Олегович
- МОУ Гимназия №10, г. Тверь
- Переменной (параметру функции, результату функции и т. п.) присваивается значение, имеющее не её тип:
- char K = 100; short P = K;
- long long T = 100L;
- float R = 3;
- double Z = R;
- float Bound() {return 10;}
- Это возможно, т. к. программа произведёт приведение типов — преобразует (приведёт) передаваемое значение к требуемому типу.
- Приведение типов выполняется автоматически.
- Возможны проблемы:
- short P = 500; char K = P;
- Значение может выходить за рамки назначаемого типа — переполнение.
- При этом:
- либо геренируется ошибка при выполнении программы (Runtime Error);
- либо в результате получается неверное значение.
- Контролируйте приведение типов.
- Приведения, не вызывающие проблем:
- «коротких» целочисленных типов — к более «длинным» с такой же знаковостью (расширение типа):
- short ← char,
- unsigned long long ← unsigned short;
- «коротких» вещественных типов — к более «длинным» (расширение типа):
- double ← float, long double ← double;
- целых типов — к вещественным достаточной точности:
- float ← char, float ← short, double ← long.
- Возможны переполнения при приведении:
- «длинных» числовых типов — к более «коротким» (сужение типа):
- char ← long (500), float ← double (7.5E+50);
- беззнаковых целочисленных типов — к знаковым целочисленным:
- signed short ← unsigned short (40000);
- знаковых целочисленных типов — к беззнаковым целочисленным:
- unsigned char ← signed char (-1).
- Возможны потери точности при приведении:
- вещественных типов — к целочисленным (отбрасывается дробная часть):
- short ← float (6.9);
- целочисленных типов — к вещественным недостаточной точности (потеря младших разрядов):
- float ← long (1000000000),
- double ← long long (200000000000000000).
- Можно явно указать тип, к которому нужно преобразовать значение (операция приведения типа):
- char K = 120; P = (short)K;
- Z = (unsigned long long)40000;
- return (_Bool)F;
- При приведении числового типа к типу _Bool значение 0 остаётся 0, любое другое — преобразуется к значению 1.
- Явное указание типа не предотвращает возможных проблем.
- Группы операций (операторов):
- арифметические (сложение, умножение…);
- сравнения («равно», «меньше»…);
- логические («не», исключающее «или»…);
- битовые (сдвиги, битовые логические…);
- присваивания;
- прочие (индекс, разыменование, приведение типа, инкремент…).
- Операнд — величина, над которой выполняется операция.
- По числу операндов операции бывают:
- унарные (1 операнд):
- –F, (short)Z, i++;
- бинарные (2 операнда):
- a = b, 7 – t, K >> 4, L & 0xFC;
- тернарные (3 операнда):
- F ? a : b.
- По способу записи унарные операции бывают:
- префиксные — записываются перед операндом:
- !K, (float)Y, ~6, –F;
- постфиксные — записываются после операнда:
- i++, j––.
- Приоритет — свойство операции, влияющее на порядок вычисления её результата по отношению к другим операциям.
- Приоритет выражается числом.
- Больше число — выше приоритет.
- Операция вычисляется только после того, как над её операндами вычислены все операции с бо́льшим приоритетом:
- z = C + A * (long)x + B * (long)y;
- 16
- 16
- 16
- 16
- 16
- 16
- 16
- 14
- 14
- 2
- 12
- 12
- 13
- 13
- Порядок вычисления, как правило, такой:
- Унарные.
- Арифметика, сдвиги.
- Логика: сравнения, битовая, обычная.
- Условие.
- Присваивания.
- Приоритет обычно соответствует «естественному» порядку их понимания.
- Приоритет можно менять с помошью скобок (): R = (2 + 2) * 2;
- Ассоциативность — свойство операции, означающее порядок вычисления в цепочке операций с таким же приоритетом. Бывает:
- слева направо: a + 7 – 2 + 6 – f — 2;
- справа налево: a = b = c = d = 0.
- На порядок вычисления операций влияют их приоритет и ассоциативность.
- z = C + A * (long)x + B * (long)y;
- 16
- 16
- 16
- 16
- 16
- 16
- 16
- 14
- <
- 14
- <
- 2
- <
- 12
- >
- 12
- >
- 13
- >
- 13
- >
- Ассоциативность операций обычно соответствует «естественному» порядку их понимания:
- Унарные префиксные — справа налево.
- Унарные постфиксные — слева направо.
- Присваивания — справа налево.
- Остальные бинарные — слева направо.
- Определены 5 арифметических операций:
- сложение (+): 5 + 6, a + b + c, 1.5 + K;
- вычитание (–): 9.0 – 7.4, -6E-3 – A;
- умножение (*): 10 * a, k * x;
- деление (/): 100 / 3, Prime / 5, 4.2 / 0.6;
- получение остатка от деления (деление по модулю) (%): 100 % 3, U % p.
- Операнды целые или вещественные (для % — только целые).
- Тип результата — «больший» из типов операндов.
- Если появляется «минус», то знаковый.
- Определены 2 операции смены знака:
- плюс (+): +b, +(e - 2);
- минус (смена знака) (–): –Y, -(B + 2).
- Операнды целые или вещественные.
- Тип результата — как у операнда.
- Если появляется «минус», то знаковый. Возможно расширение типа.
- Определены 2 операции битового сдвига:
- сдвиг вправо (>>): A >> 7, 0xFF >> p;
- сдвиг влево (<<): 1 << p.
- Операнды целые.
- Тип результата — int или long long.
- Второй операнд может быть отрицательным (сдвиг в обратную сторону).
- Сдвиг вправо — арифметический, сохраняет старший бит (знак) операнда.
- Сдвиги используются в операциях над битами, а также для быстрого умножения и деления целых чисел на степени двойки:
- K << 4 ~ K * 16
- P >> 10 ~ P / 1024
- (для положительных P)
- P >> 10 ~ (P - 1) / 1024
- (для отрицательных P)
- Операнды логического типа (целые — 0 или 1), результат логического типа.
- У операций «равно» и «не равно» приоритет ниже, чем у остальных операций сравнения.
- Не путайте сравнение на равенство (==) с присваиванием (=).
- Определены 6 операций сравнения:
- равно (==);
- больше (>);
- меньше (<);
- не равно (!=);
- меньше или равно (<=);
- больше или равно (>=).
- Определены 7 логических операций:
- Операции «НЕ» — префиксные: ~P, !(K > 5).
- Типы операндов и результата битовых операций — int или long long, логических — логический.
- Логические:
- «НЕ» (!);
- «И» (&&);
- «ИЛИ» (||).
- Битовые:
- «НЕ» (~).
- «И» (&);
- «ИЛИ» (|);
- исключающее «ИЛИ» (^).
- Определены 4 операции приращения:
- префиксный инкремент (++): ++P;
- префиксный декремент (––): ––P;
- постфиксный инкремент (++): P++;
- постфиксный декремент (––): P––.
- Увеличивают (уменьшают) значение операнда на единицу. Операнд — только переменная.
- Результат того же типа, что и операнд.
- Префиксный инкремент (декремент) изменяет значение аргумента и возвращает его новое значение:
- k = 7; p = ++k;
- k = 7; p = ––k;
- Постфиксный инкремент (декремент) возвращает текущее значение аргумента и только потом его изменяет:
- k = 7; p = k++;
- k = 7; p = k––;
- k = 8, p = 8
- k = 6, p = 6
- k = 8, p = 7
- k = 6, p = 7
- Определены 10 операций присваивания:
- =, +=, –=, *=, /=, %=, <<=, >>=, &=, ^=, |=.
- Левый операнд — только переменная.
- Сами возвращают присвоенное значение с типом левого операнда: a = b + (c = 6) * 2.
- Присваивания с операциями работают так:
- k += 7; аналогично k = k + 7;
- T *= 7 + e; аналогично T = T * (7 + e);
- Приоритет — низкий.
- Ассоциативность — справа налево.
- Единственная тернарная операция — условие:
- операнд1 ? операнд2 : операнд3
- Если значение первого операнда «истинно» (не ноль), то возвращает второй операнд, иначе возвращает третий операнд:
- если операнд1 , то операнд2 , иначе операнд3
- max = x > y ? x : y;
- sign = a == 0 ? 0 : a > 0 ? 1 : -1;
- Ассоциативность — справа налево.
- Потоковый ввод-вывод доступен в C++.
- Используется заголовочный файл iostream.
- Для его использования пишем в начале кода:
- #include <iostream>
- Также включаем пространство имён:
- using namespace std;
- Каждая программа в операционной системе по умолчанию уже может работать с несколькими стандартными потоками.
- Поток — способ единообразной работы с файлами, устройствами ввода-вывода и т. п.
- Обычно определены 4 стандартных потока:
- Если не указать пространство имён в заголовке, то придётся это делать перед именами потоков: std::cin, std::cout.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Вывод значений констант, переменных и т. п. на экран — с помощью операции <<:
- cout << a;
- Ввод значений переменных с клавиатуры — с помощью >>:
- cin >> K;
- Можно вводить (выводить) несколько значений:
- cin >> A >> B >> C;
- Манипуляторы задают некоторые параметры ввода-вывода.
- Примеры:
- cin >> oct >> N; cout << dec << p << endl;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Ряд параметров определяется с помощью функций:
- Примеры:
- cout.width(4);
- C = cout.fill();
|
|
|
|
|
|
|
|
Информатика - еще материалы к урокам:
- Презентация "Язык программирования Си. Строковые литералы, ввод-вывод. Ветвления"
- Презентация "Алгоритмы на графах. Топологическая сортировка поиском в глубину"
- Презентация "Язык программирования Си. Элементы языка, типы данных, переменные, программа"
- Презентация "Создание визитной карточки" 8 класс
- Презентация "Алгоритмы на графах. Определение наличия циклов в графе"
- Презентация "Алгоритмы на графах. Топологическая сортировка отсечением вершин"