Язык программирования Си Приведение типов, операции Потоковый ввод-вывод Югов Иван Олегович МОУ Гимназия 10, г. Тверь.

Презентация:



Advertisements
Похожие презентации
©ρŧą Базовые конструкции языка.
Advertisements

Введение в C++ Урок 1-2.
©Павловская Т.А. Язык С++ Курс «С++. Программирование на языке высокого уровня» Павловская Т.А.
1 ©Павловская Т.А. Язык С# Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
C++ Лекция 1. Литература Шилдт Г. С++: базовый курс.-М.:Вильямс, с. Шилдт Г. Самоучитель С++. - СПб.: БХВ-Петербург, – 687 с. Б. Пахомов.
Лекция 1 по дисциплине «Программные средства математических расчетов» тема: «Основы языка С++» гр. 8Е31 Мамонова Татьяна Егоровна
Начала программирования Занятие 7. Вещественный тип данных. Вычисления по формулам. Арифметические операции. Деление целочисленное и с остатком. Общий.
РНР Изучение языка. Программирование интерактивных WEB-сайтов на языке PHP.
Элементы языка СИ Средства для написания простейших программ.
Разработка программного обеспечения для сигнальных процессоров TMS320C64xx в IDE Code Composer Studio Часть II. Язык программирования С. Основные понятия.
Системы счисления, используемые в компьютере. Борисов В.А. КАСК – филиал ФГБОУ ВПО РАНХ и ГС Красноармейск 2011 г.
Лекция 3 Основные операции Базовые управляющие конструкции.
Лекция 2 С => C++ => C# Большие и маленькие буквы различаются (main, Main, MAIN, mAin – разные имена) После каждого оператора ставится точка с запятой.
Числовые выражения В языке Q-basic. Переменные. Переменная - это область данных в памяти, имеющая имя. Переменная - это величина, которая может меняться.
УКАЗАТЕЛИ. Переменная - это именованная область памяти с заданным типом. [=значение]; int a; //Переменная типа integer с именем a int b=2;// Переменная.
Переменная - это величина, которая имеет имя, тип и значение. Значение переменной может меняться во время выполнения программы. В компьютерах каждая переменная.
Чтобы писать программы в среде программирования необходимо изучить его знаковую систему.
Объектно-ориентированный язык программирования. Переменная - эта поименованная ячейка памяти, хранящая какое-либо одно значение (одно число, один фрагмент.
Оператор присваивания. Оператор вывода информации на экран.
Выражения языка Си(ч.2). Операции Лекция 3. Основные классы операций арифметические логические поразрядные операции сравнения.
Транксрипт:

Язык программирования Си Приведение типов, операции Потоковый ввод-вывод Югов Иван Олегович МОУ Гимназия 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 ( ); знаковых целочисленных типов к без знаковым целочисленным: unsigned char signed char ( -1 ).

Приведение типов Возможны потери точности при приведении: вещественных типов к целочисленным (отбрасывается дробная часть): short float ( 6.9 ); целочисленных типов к вещественным недостаточной точности (потеря младших разрядов): float long ( ), double long long ( ).

Приведение типов Можно явно указать тип, к которому нужно преобразовать значение (операция приведения типа): 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 ;

Приоритет Порядок вычисления, как правило, такой: 1. 1.Унарные Арифметика, сдвиги Логика: сравнения, битовая, обычная Условие Присваивания. Приоритет обычно соответствует «естественному» порядку их понимания. Приоритет можно менять с помощью скобок () : R = (2 + 2) * 2;

Ассоциативность Ассоциативность свойство операции, означающее порядок вычисления в цепочке операций с таким же приоритетом. Бывает: слева направо: a + 7 – – f 2 ; справа налево: a = b = c = d = 0. На порядок вычисления операций влияют их приоритет и ассоциативность. z = C + A * (long)x + B * (long)y ; < 14 < 2<2< 12 > 12 > 13 > 13 >

Ассоциативность Ассоциативность операций обычно соответствует «естественному» порядку их понимания: Унарные префиксные справа налево. Унарные постфиксные слева направо. Присваивания справа налево. Остальные бинарные слева направо.

Арифметические операции Определены 5 арифметических операций: сложение ( + ): 5 + 6, a + b + c, 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 Также включаем пространство имён: using namespace std; Каждая программа в операционной системе по умолчанию уже может работать с несколькими стандартными потоками.

Потоковый ввод-вывод Поток способ единообразной работы с файлами, устройствами ввода-вывода и т. п. Обычно определены 4 стандартных потока: Если не указать пространство имён в заголовке, то придётся это делать перед именами потоков: std::cin, std::cout. Название ИмяПримечание Стандартный ввод cin Клавиатура Стандартный вывод cout Экран Стандартный вывод ошибок без буферизации cerr Станд. вывод ошибок с буферизацией clog

Потоковый ввод-вывод Вывод значений констант, переменных и т. п. на экран с помощью операции << : cout << a; Ввод значений переменных с клавиатуры с помощью >> : cin >> K; Можно вводить (выводить) несколько значений: cin >> A >> B >> C;

Потоковый ввод-вывод Манипуляторы задают некоторые параметры ввода-вывода. Примеры: cin >> oct >> N; cout << dec << p << endl; Манипулятор Назначение endl перевод строки dec меняет формат вывода чисел на десятичный oct меняет формат вывода чисел на восьмеричный hex меняет формат вывода чисел на шестнадцатеричный showpos показывает «+» перед неотрицательными числами showpoint показывает десятичную точку noshowpoint скрывает десятичную точку

Потоковый ввод-вывод Ряд параметров определяется с помощью функций: Примеры: cout.width(4); C = cout.fill(); Функция Назначение width(int x) минимальное число знаков до следующего вывода fill (char x) устанавливает символ-заполнитель и возвращает предыдущий символ-заполнитель; по умолчанию в качестве символа-заполнителя используется пробел precision(int x) устанавливает число значащих цифр для чисел с плавающей точкой