Урок_03_Си++.ppt
- Количество слайдов: 21
Обработка данных. Операции. Выражения
Элементы языка С К элементам языка можно отнести Алфавит: - Строчные латинские буквы от a до z; - Прописные латинские буквы от A до Z; - Десятичные цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9; - Специальные символы "{} | [] () + - * / % : ; ' ? < > = _ ! & # ~ ^. Комбинации некоторых символов, не разделённых пробелами, интерпритируются как один значимый символ: ++ -- == && << >> >= <= += -= *= /= ? : /* */ // Идентификаторы - последовательности латинских букв, цифр, символов подчёркивания, начинающиеся с буквы или символа (прописные и строчные буквы различаются). Служебные (ключевые) слова - это идентификаторы, назначение которых однозначно определено в языке
Элементы языка С Служебные слова asm const enum inline public struct typeid auto continue extern int register switch union break default float long return template unsigned case delete for new short this virtual catch do friend operator signed throw viod char double goto private sizeof try volatile class else if protected static typedef while
Константы Запись целых констант Целые десятичные числа, начинающиеся не с нуля, например: 4, 356, -128. Целые восьмеричные числа, запись которых начинается с нуля, например: 016, 077. Целые шестнадцатеричные числа, запись которых начинается с символов Ох, например: Oxl. A, 0 x 253, Ox. FFFF. Тип константы компилятор определяет по следующим правилам: если значение константы лежит в диапазоне типа int, то она получает тип int; в противном случае проверяется, лежит ли константа в диапазоне типа unsigned int, в случае положительного ответа она получает этот тип; если не подходит и он, то пробуется тип long и, наконец, unsigned long. Если значение числа не укладывается в диапазон типа unsigned long, то возникает ошибка компиляции.
Константы Запись вещественных констант Если в записи числовой константы присутствует десятичная точка (2. 5) или экспоненциальное расширение (1 Е-8), то компилятор рассматривает ее как вещественное число и ставит ей в соответствие тип double. Примеры вещественных констант: 4 4. 3. 14159 44 Е 0 1. 5 Е-4. Использование суффиксов. Программист может явно задать тип константы, используя для этого суффиксы. Существуют три вида суффиксов: F(f) -float; U(u) unsigned; L(l) - long (для целых и вещественных констант). Кроме того, допускается совместное использование суффиксов U и L в вариантах UL или LU. Примеры: 3. 14159 F - константа типа float, под которую выделяется 4 байта памяти; 3. 14 L - константа типа long double, занимает 10 байт; 50000 U - константа типа unsigned int, занимает 2 байта памяти (вместо четырех без суффикса); 0 LU - константа типа unsigned long, занимает 4 байта; 2424 UL - константа типа unsigned long, занимает 4 байта.
Запись символьных и строковых констант Символьные константы заключаются в апострофы. Например: 'А', 'а', '5', ' + '. Строковые константы, представляющие собой символьные последовательности, заключаются в двойные кавычки. Например: "введите исходные данные". Особую разновидность символьных констант представляют управляющие символы. Их назначение - управление выводом на экран. Такие символы расположены в начальной части кодовой таблицы ASCII (коды от 0 до 31) и не имеют графического представления. В программе на Си они изображаются парой символов, первый из которых ' '. Пример некоторых из управляющих символов: 'n' - переход на новую строку; 't' - горизонтальная табуляция; 'a' - подача звукового сигнала. Управляющие символьные последовательности являются частным случаем эскейп-последователъностей (ESC-sequence), с помощью которых можно задать символьную константу указанием ее кода. Код символа можно указать в восьмеричном или в шестнадцатеричном представлении. Формат восьмеричного представления: ' ddd'. Здесь d - восьмеричная цифра (от 0 до 7). Формат шестнадцатеричного представления: ' xhh' (или ' Xhh'), где h - шестнадцатеричная цифра (от 0 до F). Например, константа, соответствующая заглавной латинской букве А, может быть представлена тремя способами: 'А', '101', 'х41'.
Константы Именованные константы (константные переменные). В программе на Си/Си++ могут использоваться именованные константы. Употребляемое для их определения служебное слово const принято называть квалификатором доступа. Квалификатор const указывает на то, что данная величина не может изменяться в течение всего времени работы программы, она не может располагаться в левой части оператора присваивания. Примеры описания константных переменных: const float pi=3. 14159; const int i. MIN=l, i. MAX=1000; Определение констант на стадии препроцессорной обработки программы. Еще одной возможностью ввести именованную константу является использование препроцессорной директивы #def ine в следующем формате: #define <имя константы> <значение константы> Тип констант явно не указывается и определяется по форме записи. В конце директивы не ставится точка с запятой.
Определение констант на стадии препроцессорной обработки программы Например: #define i. MIN 1 #define i. MAX 1000 На стадии препроцессорной обработки указанные имена заменяются на соответствующие значения. Например, если в программе присутствует оператор X=i. MAX-i. MIN; то в результате препроцессорной обработки он примет вид: Х=1000 -1; При этом идентификаторы i. MAX и i. MIN не требуют описания внутри программы.
Константы перечисляемого типа Данное средство языка позволяет определять последовательность целочисленных именованных констант. Описание перечисляемого типа начинается со служебного слова enum, а последующий список констант заключается в фигурные скобки. Например: enum {A, B, C, D}; В результате имени А будет сопоставлена константа 0, имени В - константа 1, С - 2, D - 3. По умолчанию значение первой константы равно нулю. Для любой константы можно явно указать значение. Например: enum {A=10, B, C, D}; В результате будут установлены следующие соответствия: А=10, В=11, С=12, D=13. Возможен и такой вариант определения перечисления: enum {A=10, B=20, C=35, D=100}; Если перечисляемому типу дать имя, то его можно использовать в описании переменных. Например: enum metal {Fe, Co, Na, Cu, Zn}; metal Met 1, Met 2; Здесь идентификатор metal становится именем типа. После такого описания в программе возможны следующие операторы: Met 1=Na; Met 2=Zn;
Обработка данных. Операции. Выражения Средства обработки данных – это набор элементарных действий (операций) и их сочетаний (выражений), который позволяет изменять значения переменных. К ним относятся: • традиционные операции над переменными (например, арифметические, логические, поразрядные); • присваивание; • ввод-вывод; • вызов процедур и функций. Операция – элементарное действие по обработке данных (по работе с переменными); Операнд - переменная, константа, выражение, участвующие в операции; Унарная операция - операция с одним операндом; Бинарная операция - операция с двумя операндами; Выражение – элемент синтаксиса с описанием последовательности выполнения операций и их операндов, в котором результат одной операции является операндом другой.
Операции. Выражения Во всех языках программирования под выражением подразумевается конструкция, составленная из констант, переменных, знаков операций, функций, скобок. Выражение определяет порядок вычисления некоторого значения. Если это числовое значение, то такое выражение называют арифметическим. Арифметические операции. К арифметическим операциям относятся: - вычитание или унарный минус; + сложение или унарный плюс; * умножение; / деление; % деление по модулю; ++ унарная операция увеличения на единицу (инкремент); -- унарная операция уменьшения на единицу (декремент). Все операции, кроме деления по модулю, применимы к любым числовым типам данных. Операция % применима только к целым числам. Операция % вычисляет остаток от деления первого операнда на второй. Она имеет также другой, содержательный смысл: второй операнд-константа выступает ограничителем возможных изменений первого операнда и называется модулем. Поэтому название этой операции звучит как ". . . по модулю. . . ":
Операции. Выражения Особенности выполнения операции деления. Если делимое и делитель целые числа, то и результат - целое число. Например, значение выражения 5/3 будет равно 2, а при вычислении 1/5 получится 0. Таким образом получаем результат целочисленного деления (специальной операции нет). Если хотя бы один из операндов имеет вещественный тип, то и результат будет вещественным. Например, операции 5. /3, 5. /3. , 5 / 3. дадут вещественный результат 1. 6666. Операции инкремента и декремента могут применяться только к переменным и не могут - к константам и выражениям. Операция ++ увеличивает значение переменной на единицу, операция - - уменьшает значение переменной на единицу. Оба знака операции могут записываться как перед операндом (префиксная форма), так и после операнда (постфиксная форма), например: ++х или х++, --а или а--. Три следующих оператора дают один и тот же результат: х=х+1; ++х; х++;
Операции. Выражения Различие проявляется при использовании префиксной и постфиксной форм в выражениях. Проиллюстрируем это на примерах. Первый пример: а=3; b=2; с=а++*b++; В результате выполнения переменные получат следующие значения: а =4, b = 3, с= 6. Второй пример: а=3; b=2; с=++а*++b; Результаты будут такими: а = 4, b = 3, с = 12. Объяснение следующее: при использовании постфиксной формы операции ++ и - - выполняются после того, как значение переменной было использовано в выражении, а префиксные операции - до использования. Поэтому в первом примере значение переменной с вычислялось как произведение 3 на 2, а во втором - как произведение 4 на 3.
Операции. Выражения По убыванию старшинства (приоритет выполнения) арифметические операции расположены в следующем порядке: ++, -- - (унарный минус) *, /, % +, - Одинаковые по старшинству операции выполняются в порядке слева направо. Для изменения порядка выполнения операций в выражениях могут применяться круглые скобки. Арифметические операции имеют в Си меньше всего специфики. Единственное, на что следует обращать внимание при их выполнении, - это размерность используемых целых переменных и переменных с плавающей точкой, неявные преобразования типов данных в выражениях и связанные со всем этим возможные потери значащих цифр (значимости) результата.
Операции отношения В Си используется следующий набор операций отношения: < меньше, <= меньше или равно, > больше, >= больше или равно, == равно, != не равно. Как уже говорилось раньше, в стандарте Си нет логического типа данных. Результатом операции отношения является целое число: если отношение истинно - то 1, если ложно - то 0. Фактически Си интерпретирует ненулевые значения как true, и нулевые значения как false. Примеры отношений: а<0, 101>=105, 'а'=='А', 'а'!='А' Результатом второго и третьего отношений будет 0 - ложь; результат четвертого отношения равен 1 - истина; результат первого отношения зависит от значения переменной а. В стандарт ANSI/ISO для языка С++ включен дополнительный новый тип (то есть, новый для С++), называемый bool. То есть, можно (зависит от используемого компилятора) записывать операторы, подобные следующему: bool isready = true; //объявление и инициализация логической переменной isready
Логические операции Три основные логические операции в языке Си: ! операция отрицания (НЕ), && конъюнкция, логическое умножение (И), || дизъюнкция, логическое сложение (ИЛИ). Например, логическое выражение, соответствующее системе неравенств 0 < х < 1 в программе на Си запишется в виде следующего логического выражения: х>0 && х<1 Здесь не понадобились круглые скобки для выделения операций отношения. В Си операции отношения старше конъюнкции и дизъюнкции. По убыванию приоритета логические операции и операции отношения расположены в следующем порядке: ! > < >= <= == != && ||
Логические операции В Си имеются также поразрядные логические операции. Эти операции выполняются над каждой парой соответствующих двоичных разрядов внутреннего представления операндов. Их еще называют битовыми логическими операциями. Знаки битовых логических операций: & поразрядная конъюнкция (И), | поразрядная дизъюнкция (ИЛИ), ^ поразрядное исключающее ИЛИ, ~ поразрядное отрицание (НЕ). Битовые логические операции вместе с операциями поразрядного сдвига влево (<<) и вправо (>>) позволяют добраться до каждого бита внутреннего кода. Чаще всего такие действия приходится выполнять в системных программах.
Логические операции И (&&) , ИЛИ (||) и НЕ (!) едины для всех языков программирования и соответствуют логическим функциям И, ИЛИ и НЕ для логических (булевых) переменных. Операция И имеет результатом значение «истина» тогда и только тогда, когда оба ее операнда истинны, то есть по отношению к операндам - утверждение звучит как «одновременно оба» . Операция ИЛИ имеет результатом значение «истина» , когда хотя бы один из операндов истинен, то есть характеризуется фразой «хотя бы один» : if (a < b && b < c) // если ОДНОВРЕМЕННО ОБА a < b и b < c, то. . . if (a==0 || b > 0) // если ХОТЯ БЫ ОДИН a==0 или b > 0, то. . . Логические операции И и ИЛИ имеют в Си еще одно свойство. Если в операции И первый операнд имеет значение «ложь» , а в операции ИЛИ – «истина» , то вычисление выражения прекращается, потому что значение его уже становится известным ( «ложь» -для И, «истина» -для ИЛИ). Поэтому возможны выражения, где в первом операнде операции И проверяется корректность некоторой переменной, а во втором - она же используется с учетом этой корректности: if (a >=0 && sin(sqrt(a)) >0). . . В данном примере второй операнд, включающий в себя функцию вычисления квадратного корня, не вычисляется, если первый операнд – «ложь» .
Операция явного преобразования типа (операция "тип") Применение этой операции имеет следующий формат: (имя_типа) операнд Операндом могут быть константа, переменная, выражение. В результате значение операнда преобразуется к указанному типу. Примеры использования преобразования типа: (long)8, (float)1, (int)x%2 По поводу последнего выражения заметим, что приоритет операции "тип" выше деления (и других бинарных арифметических операций), поэтому сначала значение переменной x: приведется к целому типу (отбросится дробная часть), а затем выполнится деление по модулю. Следующий фрагмент программы иллюстрирует одну из практических ситуаций, в которой потребовалось использовать преобразование типа: float с; int a=1, b=2; с=(float)a/b; В результате переменная с получит значение 0, 5. Без преобразования типа ее значение стало бы равно 0.
Операции. Выражения Операция "условие ? : ". Это единственная операция, которая имеет три операнда. Формат операции: выражение 1 ? выражение 2 : выражение. З Данная операция реализует алгоритмическую структуру ветвления. Алгоритм ее выполнения следующий: первым вычисляется значение выражения 1, которое обычно представляет собой некоторое условие. Если оно истинно, т. е. не равно 0, то вычисляется выражение 2 и полученный результат становится результатом операции. В противном случае в качестве результата берется значение выражения 3. Пример 1. Вычисление абсолютной величины переменной X можно организовать с помощью одной операции: Х<0 ? -X : X; Пример 2. Выбор большего значения из двух переменных а и b: mах=(а<=b) ? b : а; Пример 3. Заменить большее значение из двух переменных а и b на единицу: (a>b) ? a=1 : b=1; Правила языка в данном случае позволяют ставить условную операцию слева от знака присваивания.
Операции. Выражения Операция "запятая". Эта необычная операция используется для связывания нескольких выражений в одно. Несколько выражений, разделенных запятыми, вычисляются последовательно слева направо. В качестве результата такого совмещенного выражения принимается значение самого правого выражения. Например, если переменная х имеет тип int, то значение выражения (х=3, 5*х) будет равно 15, а переменная х примет значение 3. Операции ( ) и [ ]. В языке Си круглые и квадратные скобки рассматриваются как операции, причем эти операции имеют наивысший приоритет. Их смысл будет раскрыт позже. Если посмотреть полный перечень операций в Си, то первое, что бросается в глаза, это их многочисленность. Второе, что к операциям относятся такие действия, которые в других языках программирования считаются операторами (например, присваивание). И третье, что все они имеют очень «компактный» синтаксис, т. е. при пропуске или добавлении лишнего символа одна операция превращается в другую. Все это требует внимательного и осознанного отношения к операциям в Си.
Урок_03_Си++.ppt