04_Использование_языков_высокого_уровня_Информ_материал_СПО_ч4 (1268620), страница 2
Текст из файла (страница 2)
в Си в качестве подпрограммы применяются функции;signed, unsigned (long, shot, … ) — знаковый и беззнаковый тип соответственно.Средство typedefЯзык Си, используя ключевое слово typedef, предоставляет возможность давать типамданных новые имена:typedefтипновое_имя_типаСледует подчеркнуть, что данное объявление не создает новый тип данных, а всего лишьопределяет новое имя существующего типа. Тип определяет множество значений и набордопустимых операций.Расширенные целые типыНовый стандарт С99 определяет несколько расширенных целых типов. Расширенныетипы включают в себя типы с точной разрядностью, минимальной разрядностью,максимальной разрядностью и самый быстрый целый тип. Например:Расширенный типint16_tuintl6_tint_least16_tint_fast32_tintmax_tuintmax_tОписаниеТип 16-разрядных целыхТип 16-разрядных целых без знакаТип целых, содержащий не менее16разрядовСамый быстрый тип целых, содержащий неменее 32 разрядовТип самых больших целыхТип самых больших целых без знакаРасширенные типы облегчают написание переносимого кода.
Объявления новых именэтих типов содержатся в файле <stdint.h> и выполнены с помощью средства typedef:*.c — главный файл; *.h — файл заголовков.#INCLUDE “*.h”— искать в той папке, где лежит проект; если там его нет, то ищет впапке среда_разработки\INCLUDE\ ...#ifndef — директива условного компилирования «если не определено»4.2.6. Выражения и операцииОператорыОператоры(операции)Операторыуправлениямогутиспользоватьсяв выраженияхорганизуютисполнениепрограммыВыражение — правило для получения значения.
Составляющими элементами выраженияязыка Си являются данные и операции. Данные могут быть представлены переменными,константами или значениями, возвращаемыми функциями. Операции обозначаютсяопределенными символами, называемыми знаками операций.Существует четыре основных класса операций: арифметические, логические, поразрядныеи операции сравнения. Кроме них, есть также некоторые специальные операции,например, операция присваивания.Операции присваиванияОператор присваивания может присутствовать в любом выражении языка Си. Общаяформа оператора присваивания:имя_переменной = выражение;Выражение может быть просто константой или сколь угодно сложным выражением. Дляприсваивания используется знак «=».Множественное присваиваниеВ одном операторе присваивания можно присвоить одно и тоже значение многимпеременным, например: х = у = z = 1;Выражение i = i + 2, в котором стоящая слева переменная повторяется и справа,можно написать в сжатом виде: i += 2; комбинация знаков += называется операциейприсваивания.
Большинству бинарных операторов соответствуют операторыприсваивания вида «ор=», где ор — один из операторов +, -, *, /, %, <<, >>, &, ^, |.х *= у+1 эквивалентно х = х*(у+1)i *= 2 эквивалентно i = i*2(Выражение 1) = (Выражение 1) op (Выражение 2)(Выражение 1) op= (Выражение 2)Типом и значением любого выражения присваивания является тип и значение его левогооперанда после завершения присваивания.Арифметические операторыБинарными (т.е. с двумя операндами) арифметическими операторами являются +, -, *, / иоператор деления по модулю %.
Последний не применяется к операндам с плавающейточкой. Арифметические операции одного приоритета выполняются слева направо.x % 5 — остаток от деления x на 5Операции отношения и логические операцииОперации отношения: >, >=, <, <= — имеют одинаковый приоритет; сразу за ними идетприоритет операций сравнения на равенство: ==, или неравенство: !=.Выражения между логическими операциями && (лог. «И») и || (лог. «ИЛИ») слеванаправо.
Вычисления прекращаются, как только становится известна истинность илиложность результата. Результат логических операций True = 1 и False = 0.Операции инкремента и декрементаОперация ++ добавляет 1 к своему операнду, а операция декремента -- вычитает 1. Этиоперации можно использовать и как префиксные, так и постфиксные: ++i; i++. Новыражение ++i увеличивает i до того, как его значение будет использовано, i++ – ужепосле. Выражения х = i++ и х = ++i дают одинаковый результат, а х = x++ + у и х = ++i + у– разный. Здесь в первом случае i увеличивается после использования в y, а во втором – iувеличивает до использования в y.Побитовые операцииОбозначаются следующим образом: & («И»), | («ИЛИ»), ^ («ИСКЛЮЧАЮЩЕЕ ИЛИ»),<< (сдвиг влево), >> (сдвиг вправо).
Операции << и >> сдвигают влево или вправо свойлевый операнд на число битов, задаваемое правым операндом, который должен бытьнеотрицательным. Сдвиг влево всегда логический, независимо от знака левого операнда.Сдвиг вправо отрицательного операнда – арифметический.Условная операцияИнструкция:if (а > b) z = а;else z = b;Условное выражение, написанное с помощью тернарной операции (т.е. имеющей триоперанда) «?», представляет собой другой способ записи этой и подобных ейконструкций.В выражении(Выр.1) ? Выр.2 : Выр.3Выр.1 вычисляется первым; если оно истинно, то вычисляется Выр.2 и его значениеприсваивается всему выражению; если Выр.1 ложно, то вычисляется Выр.3 и всемувыражению присваивается его значение.
Например: z = (а > b) ? а: b;Операция определения размера sizeofУнарная операция sizeof, выполняемая во время компиляции программы, позволяетопределить длину операнда в байтах. Результат этой операции рассматривается какконстанта.Для вычисления размера типа переменной имя типа должно быть заключено в круглыескобки.
Имя переменной заключать в скобки не обязательно, но ошибки в этом не будет.sizeof(int) — имя типа; sizeof x — имя переменной xПреобразование типовЕсли операнды операции принадлежат к разным типам, то они приводятся к некоторомуобщему типу. Приведение выполняется в соответствии с небольшим числом правил.Обычно автоматически производятся лишь те преобразования, которые без потериинформации превращают операнд с меньшим диапазоном значений в операнд с большимдиапазоном значений. Например: ffloat + iint.Выражения, в которых могла бы теряться информация (длинные целые присваиваютсяболее коротким или значение float целым переменным), могут повлечь за собойпредупреждение, но они допустимы.Преобразование имеет место и при присваиваниях: значение правой части приводится ктипу левой части, который и является типом результата.И наконец, для любого выражения можно явно («насильно») указать преобразование еготипа, используя унарную операцию, называемую приведением типа.
Конструкция(имя_типа) выражениеприводит выражение к указанному в скобках типу по перечисленным выше правилам.Приоритет и очередность операцийТаблица 4.4. Приоритет и очередность операцийОперация «запятая»x = (y = 3, y + 1) — результатом всего выражения будет последнеевыражение.4.2.7. Операторы языка СиЛюбое выражение может быть преобразовано в оператор добавлением к нему точки сзапятой. Запись видавыражение;является оператором.
Значение выражения игнорируется. Действие такого операторасостоит в создании побочного эффекта вычислением значения выражения. Обычно этооператор присваивания или оператор вызова функции, не возвращающей значения.Исключения составляют выражения, входящие в заголовок цикла for.Пустой операторПустой оператор обозначается точкой с запятой:;Его использование необходимо в тех случаях, когда логически не требуется выполнениякаких-либо действий, но в соответствии с правилами синтаксиса присутствие оператораобязательно.Составной оператор (блок){ определения и описания;оператор_1;…onepaтop_N;}// необязательныСоставной оператор — заключенная в фигурные скобки последовательность операторов.Если среди операторов внутри фигурных скобок имеются определения и описания, тосоставной оператор превращается в блок.
Блок может содержать последовательностьописаний, за которыми следует последовательность операторов. После правойзакрывающей фигурной скобки в конце блока (составного оператора) точка с запятой неставится. Внутри блока (и составного оператора) несоставной оператор долженоканчиваться точкой с запятой.Операторы выбораУсловный оператор if-elseСинтаксис условного оператора имеет две формы:if (выражение) if (выражение)оператор;оператор;elseоператор;Если значение выражения не равно нулю (истина), то выполняется первый оператор, впротивном случае выполняется второй оператор (если присутствует).Отсутствие else-части в одном из вложенных друг в друга условных операторов можетпривести к неоднозначному толкованию записи.
В языке Си else-часть связывают сближайшим if, у которого нет своего else.if (n > 2)if (a > b) z = a; // else относится к внутреннему ifelse z = b;Если требуется иная интерпретация, то следует расставить фигурные скобки:if (п > 2){ if (а > b) z = а ; }else z = b;Переключатель switchСинтаксис переключателя таков:switch (выражение) {case конст. выр.1: последовательность операторовbreak;case конст. выр.2: последовательность операторовbreak;……..default: последовательность операторов;}Оператор switch передает управление к тому из помеченных с помощью case операторов,для которых значение константного выражения совпадает со значением выражения.Последнее должно быть целочисленным.