22337

Понятие типа данных. Переменные и константы. Основные типы данных в языке Си: общая характеристика, машинное представление, описание данных в программе. Числовые, символьные и строковые константы

Лекция

Информатика, кибернетика и программирование

Арифметические операции и арифметические выражения. Операции отношения логические операции и логические выражения. Понятие типа включает в себя следующую информацию об элементе данных: допустимый набор значений которые объект этого типа может принимать в процессе работы программы совокупность всех указанных значений мы будем называть областью определения типа; состав операций которые разрешено выполнять над объектами данного типа; способ представления элемента данных рассматриваемого типа в памяти машины; ...

Русский

2013-08-04

44 KB

8 чел.

ЛЕКЦИЯ 2

Понятие типа данных. Переменные и константы. Основные типы данных в языке Си: общая характеристика,  машинное представление, описание данных в программе. Числовые, символьные и строковые константы. Арифметические операции и арифметические  выражения. Операции отношения, логические операции и логические выражения.  Условная  операция.  Автоматическое  преобразование  типов и операция               приведения. Простейшие операторы языка Си.  Составной оператор.

$ 1. ПОНЯТИЕ ТИПА ДАННЫХ. ПЕРЕМЕННЫЕ И КОНСТАНТЫ.

ОПЕРАЦИЯ ПРИСВАИВАНИЯ

Всякая программа, предназначенная для реализации на ЭВМ, представляет собой формализованное описание  алгоритма  решения  той  или  иной  задачи. Действия, выполняемые программой в соответствии с этим  алгоритмом, направлены на преобразование некоторых объектов, определяющих текущее состояние процесса решения задачи.  Такие  внутренние     объекты  программы  принято  называть  данными. Для хранения всякого  элемента данных исполняющая система выделяет необходимое пространство в оперативной памяти ЭВМ, размер которого мы будем называть  

длиной этого элемента. Важнейшей  характеристикой  любого элемента данных является его  тип. Понятие типа включает в себя следующую информацию  об  элементе  данных:

-  допустимый  набор  значений, которые объект этого типа может  принимать в процессе работы программы (совокупность  всех  указанных  значений мы будем называть областью определения типа);

-  состав  операций,  которые разрешено выполнять над объектами  данного типа;

- способ представления элемента данных рассматриваемого типа  в  памяти машины;

         -  правила  выполнения всякой операции из допустимого для этого  типа набора операций.

Язык Си обеспечивает возможность представления и обработки данных следующих основных типов:

- целые числа различной длины со знаком и без;

- вещественные числа различной длины;

- символы, представимые в формате стандарта ASCII.

Те элементы данных, которые сохраняют неизменные значения  на протяжении  всего времени работы программы, принято называть константами. Другие же объекты, являющиеся предметом изменения в  ходе  выполнения  алгоритма,  называют переменными. С точки зрения языка Си,   всякая переменная величина отождествляется с ее именем, или  идентификатором. С позиции же ЭВМ, она рассматривается как изменяющееся во  времени содержимое некоторой области оперативной памяти.          Инструкция  языка программирования, позволяющая назначать и изменять значения переменных, носит  название  операции  присваивания.  Для его обозначения в Си используется символ "=". Например:

a = 2;   b = 3*(a+4);

После выполнения указанных действий переменная a принимает значение,   равное 2, а переменная b - значение 18.

$ 2. ТИПЫ ДАННЫХ В ЯЗЫКЕ СИ. ОПИСАНИЕ ДАННЫХ В ПРОГРАММЕ

Как уже говорилось в Лекции 1, описания в языке Си - это строки  программы,  определяющие  имена  и  характеристики элементов данных,   участвующих в работе алгоритма. В простейшем случае инструкция  описания данных в Си-программе имеет следующий формат:

<sc-specifier> type-specifier identifier <, identifier ...>;

где  sc-specifier  есть описатель класса памяти (см. Лекцию 7, $ 2);

type-specifier - описатель типа;  identifier  -  имя (идентификатор)  переменной.

Для  большинства  компиляторов  с языка Си допустимыми являются   описатели типа, приводимые в следующей таблице. Здесь же  в  круглых   скобках  указана длина элемента данных каждого типа в байтах (1 байт = 8 бит) и область допустимых значений для персонального  компьютера   IBM PC AT.

    г================T===============================T=================¬

    ¦       Тип      ¦       Семантика и длина       ¦     Диапазон    ¦

    ¦================+===============================+=================¦

    ¦ char           ¦ Символьная со знаком      (1) ¦ от -128 до 127  ¦

    ¦----------------+-------------------------------+-----------------¦

    ¦ int            ¦ Целая                     (2) ¦ от -32768       ¦

    ¦                ¦                               ¦ до  32767       ¦

    ¦----------------+-------------------------------+-----------------¦

    ¦ short          ¦ Короткая целая            (2) ¦ от -32768       ¦

    ¦                ¦                               ¦ до  32767       ¦

    ¦----------------+-------------------------------+-----------------¦

    ¦ long           ¦ Длинная целая             (4) ¦ от -2147483648  ¦

    ¦                ¦                               ¦ до  2147483647  ¦

    ¦----------------+-------------------------------+-----------------¦

    ¦ unsigned char  ¦ Символьная без знака      (1) ¦ от 0 до 255     ¦

    ¦----------------+-------------------------------+-----------------¦

    ¦ unsigned       ¦ Целая без знака           (2) ¦ от 0 до 65535   ¦

    ¦----------------+-------------------------------+-----------------¦

    ¦ unsigned short ¦ Короткая целая без знака  (2) ¦ от 0 до 65535   ¦

    ¦----------------+-------------------------------+-----------------¦

    ¦ unsigned long  ¦ Длинная целая без знака   (4) ¦ от 0            ¦

    ¦                ¦                               ¦ до 4294967297   ¦

    ¦----------------+-------------------------------+-----------------¦

    ¦ float          ¦ Вещественная              (4) ¦ |x| >= 1.0E-38  ¦

    ¦                ¦                               ¦ |x| <= 1.0E+38  ¦

    ¦----------------+-------------------------------+-----------------¦

    ¦ double         ¦ Вещественная двойной      (8) ¦ |x| >= 1.0E-308 ¦

    ¦                ¦ точности                      ¦ |x| <= 1.0E+308 ¦

    L================¦===============================¦=================-

Замечание. Ключевые слова unsigned, signed, short и long  могут   быть использованы как модификаторы основных типов данных при построении  производных. Например, следующие описания рассматриваются компилятором как эквивалентные:

                short int .................. short

                long int ................... long

                unsigned int ............... unsigned

                unsigned short int ......... unsigned short

                unsigned long int .......... unsigned long

                signed char ................ char

                signed int ................. int

                signed short ............... short

                signed long ................ long

Рассмотрим некоторые примеры описания данных в программе.

       int    a, b, c;       /*  Переменные a, b, c об'явлены       */

                             /*  имеющими тип int                   */

       float  alpha, beta;   /*  Переменные alpha и beta об'явлены  */

                             /*  имеющими тип float                 */

Поскольку внутренние машинные представления данных одних и  тех   же типов для различных ЭВМ могут быть различными, то возникают определенные  трудности  при необходимости обеспечить надлежащую мобильность программного обеспечения. Так, например, всякая переменная типа int на машинах IBM PC AT занимает два байта памяти,  в  то  время  как  для  ее представления на ЭВМ VAX-11 требуется четыре байта.

Подобные различие могут привести к неправильной работе программ,

манипулирующих, например, битовыми цепочками или требующих динамического     выделения памяти для хранения переменных. Преодолеть возникающие при   этом трудности можно, используя, где это необходимо, операцию  определения количества памяти, требуемой для представления некоторой переменной  или какого-либо типа. В общем случае эта операция выглядит  следующим образом:

sizeof(name)

где name есть либо идентификатор переменной, либо имя типа данных. В  следующем примере

a = sizeof(int);

переменная a принимает значение, равное количеству байт памяти, требуемых для представления любой величины типа int, на конкретной ЭВМ.

$ 3. КОНСТАНТЫ В ЯЗЫКЕ СИ

Константами в языке Си могут быть числа (целые и вещественные),  символы и строки символов, которые разрешено использовать в программе в смысле их значений. Ниже рассмотрены допустимые форматы  записи  констант четырех указанных видов.

3.1. Целые константы

Целые  константы могут быть представлены в трех основных форматах: десятичном, восьмеричном и шестнадцатеричном.

Десятичный формат:

<->dec_digits<L|l>

где dec_digits есть одна или более десятичных цифр (от 0 до 9).

         Восьмеричный формат:

0oct_digits<L|l>

где oct_digits есть одна или более восьмиричных цифр (от 0 до 7).

Шестнадцатеричный формат:

0xhex_digits<L|l>    или    0Xhex_digits<L|l>

где hex_digits есть одна или более шестнадцатиричных цифр (от  0  до   F).

         

Компилятор IBM C/2 рассматривает десятичные константы как числа   со знаком и присваивает им тип int. Если значение константы превышает  наибольшее  машинное  целое со знаком, то она представляется как    длинное целое (тип long). Знак минус в записи  десятичной  константы   интерпретируется  компилятором  как  арифметический оператор, а сама  константа в этом случае является константным арифметическим  

выражением.

Восьмеричные и шестнадцатеричные константы могут иметь тип int,  unsigned,  long или unsigned long в зависимости от их абсолютной величины. Если константа допускает представление в виде  целого  числа  стандартной  длины,  то  компилятор  присваивает ей тип int. Если же   значение константы превышает  максимальное  положительное  число  со   знаком,  представимое  как  int,  но меньше числа, которое без учета  знака может быть представлено тем же числом разрядов, что и int,  то  ей  назначается  тип  unsigned.  Аналогично, если константа не может  быть представлена как unsigned, она получает тип long  или  unsigned   long.  Модификатор L или l, непосредственно следующий за записью константы,  требует от компилятора ее представления как имеющей тип long  или unsigned long независимо от абсолютной величины.  Следующая таблица иллюстрирует  различные  формы  записи  целых  констант.

          г==============T================T=====================¬

          ¦  Десятичная  ¦  Восьмеричная  ¦  Шестнадцатеричная  ¦

          ¦==============+================+=====================¦

          ¦       10     ¦       012      ¦     0xa или 0XA     ¦

          ¦--------------+----------------+---------------------¦

          ¦      132     ¦      0204      ¦         0x84        ¦

          ¦--------------+----------------+---------------------¦

          ¦    32179     ¦    076663      ¦        0x7DB3       ¦

          ¦--------------+----------------+---------------------¦

          ¦      15L     ¦      017L      ¦         0xFL        ¦

          L==============¦================¦=====================-

3.2. Константы с плавающей точкой

Константы с плавающей точкой являются вещественными десятичными  числами  со знаком. Их запись может включать в себя целую часть, десятичную точку, дробную часть, символ экспоненты e или E  и  показатель экспоненты в виде целого числа со знаком:

<->digits.<digits><E|e<+|->digits>

или

<-><digits>.digits<E|e<+|->digits>

где digits есть одна или более десятичных цифр (от 0 до 9). Знак минус перед константой рассматривается компилятором как арифметический  оператор  и поэтому вещественная отрицательная константа по существу  является константным арифметическим выражением. В записи  вещественной константы может отсутствовать либо целая, либо дробная часть (но  не  обе сразу). Отсутствие десятичной точки допустимо лишь при

наличии экспоненты. Следующие примеры иллюстрируют возможные формы записи вещественных констант:

15.75  1.575E1  1575e-2  .1575E2  -.175e2  0.137  137.  137.0

Всякая константа с плавающей точкой рассматривается  компилятором как имеющая тип double, т.е. представляется с двойной точностью.

3.3. Символьные константы

Символьная константа представляет собой букву, цифру, знак пунктуации или Esc-последовательность, заключенные в одиночные кавычки:

'character'    или    'Escape sequence'

где  character  есть  любой печатаемый символ ASCII, кроме одиночной  кавычки (') или обратной косой черты (\). Esc-последовательности состоят из обратной косой черты, за которой следует буква или комбинация цифр.  Символы ' и \ также представляются в виде  Esc-последовательностей. В следующей таблице  приведены  допустимые  в  языке  Си     Esc-последовательности и их значения.

     ================================================================¬

     ¦  \a - звуковой сигнал           \t - горизонтальная табуляция  ¦

     ¦  \b - шаг назад                 \v - вертикальная табуляция    ¦

     ¦  \f - новая страница            \' - одиночная кавычка         ¦

     ¦  \n - новая строка              \" - двойная кавычка           ¦

     ¦  \r - возврат каретки           \\ - обратная косая черта      ¦

     ¦                                                                ¦

     ¦     \ddd  - символ ASCII в восьмеричном представлении          ¦

     ¦     \xddd - символ ASCII в шестнадцатеричном представлении     ¦

     ¦                                                                ¦

     ¦  Во всех остальных случаях символ \ игнорируется компилятором  ¦

     L================================================================-

Последовательности  вида  \ddd  и \xddd  позволяют  представить   любой символ ASCII, включая и непечатаемые символы, в восьмеричном и  шестнадцатеричном  формате  соответственно.  Незначащие нули слева в   обоих случаях могут быть опущены. Значением символьной константы является целое число, отвечающее  внутреннему  машинному  представлению соответствующего символа. Ниже  приведены примеры правильной записи символьных констант:

'A'  'c'  '?'  '7'  '\''  '\\'  '\n'  'r'  '\033'  '\10'  '\x1F'

3.4. Строки символов

Строками в языке Си являются последовательности символов ASCII,   заключенные в двойные кавычки:

"<characters>"

где characters есть один или более символов ASCII, исключая  двойную  кавычку  (") и обратную косую черту (\). Непечатаемые символы ASCII,     а также символы " и \ в составе строк должны представляться соответствующими Esc-последовательностями.          Компилятор IBM C/2 заносит символы строки в память ЭВМ в порядке их следования, автоматически добавляя нуль-символ (Esc-последовательность \0) в конец  строки.  Формально допустимой  является также  пустая строка (""), состоящая во внутреннем  представлении из одного  символа \0.  Приведем несколько примеров правильной записи символьных строк:

"Это строка символов"

"Enter a number between 1 and 100 \n Or press Enter"

  "\"Yes, I do\", she said."

Для  формирования длинной последовательности символов, занимающей более одной строки на экране терминала, необходимо набрать  символ \, нажать клавишу Enter и продолжить ввод символов с новой строки:

"Long string can be broken\

into two pieces."

Важно  заметить,  что  символьная  константа,  например 'x', не  идентична строке "x", содержащей один символ. Дело в том,  что  символьная  константа  занимает  один  байт памяти и равносильна своему  числовому коду во внутреннем машинном представлении.  Строка  же  из одного символа занимает два байта памяти, первый из которых содержит     код этого символа, а второй - символ \0.

$ 4. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ И АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ

В $ 1 нами уже была рассмотрена одна из важнейших операций языка Си - операция присваивания, позволяющая назначать и изменять значения переменных. Здесь мы рассмотрим группу арифметических операций  и определим понятие арифметического выражения. Традиционным  способом задания арифметических операций является     использование двуместных арифметических операторов мультипликативной     и аддитивной групп. Операндами всякой двуместной операции могут быть   как константы, так и переменные, причем имена последних должны  быть  предварительно определены в одной из инструкций описания типа.  Операторы  мультипликативной  группы  служат  для представления  операций умножения (*), деления (/) операндов  и  получения  остатка     (%)  от  деления  первого операнда на второй. В последнем случае оба   операнда должны быть целыми величинами. Операция умножения выполнима  над операндами любых (возможно различных!) типов. Операция  деления,  примененная  к двум целочисленным операндам, может привести к потере   дробной части результата. Попытка деления на  нуль  дает  ошибку  на   этапе компиляции или выполнения программы. Порядок выполнения операций мультипликативной группы - слева направо. Группа  аддитивных  операторов  включает  в себя два оператора:  сложения (+) и вычитание (-). Обе эти операции выполнимы над операндами любых (возможно различных!) типов. Порядок выполнения  операций  аддитивной  группы  -  слева  направо.  Их приоритет ниже приоритета   мультипликативных операций, но выше, чем приоритет операции

присваивания.

Замечание. Двуместную операцию вычитания  следует  отличать  от   имеющей наивысший приоритет одноместной (унарной) операции изменения   знака, символом которой служит знак минус (-) слева от операнда.  Важную  роль в программах на языке Си играют одноместные операции увеличения (++) и уменьшения (--) значения переменной на  единицу.  Каждая из них имеет две формы: префиксную и постфиксную. В префиксной форме символ операции ставится слева от своего операнда, а в     постфиксной - справа от него. Семантическое отличие двух  этих  форм  состоит в том, что в случае префиксной записи (++x) или (--x) увеличение  или  уменьшение  значения переменной x выполняется до его использования в более сложном выражении, в то  время  как  постфиксная  запись  (x++)  или  (x--)  изменяет прежнее значение переменной лишь     после его фактического использования. Приоритет операций ++ и -- выше приоритета любой двуместной арифметической  операции  и  операции  присваивания, а порядок их обработки компилятором - справа налево.  Совокупность  одного  или  большего  числа операндов и символов  операций (включая операцию присваивания) образует арифметическое  выражение. При вычислении значений выражений вначале выполняются унарные  операции (-, ++, --), затем двуместные операции мультипликативной (*, /, %) и аддитивной (+, -) групп и, наконец, операции присваивания. Обычный порядок выполнения операций может быть изменен путем  заключения некоторой части арифметического выражения в круглые скобки.  Приведем несколько простейших примеров  арифметических  выражений.

1.  a = 4.3 + 2.7

В этом примере оба операнда справа от оператора присваивания являются  числовыми  константами.  Арифметические выражения подобного вида  принято называть константными выражениями.

2. b = (c + d) % 4

Здесь традиционный порядок выполнения арифметических операций  нарушен использованием круглых скобок, выделяющих подвыражение в составе     более  сложного арифметического выражения. Согласно определению операции % операнды c и d должны быть переменными целого типа.

3. e = ++f/(g + h)

В данном примере использована префиксная форма оператора ++ и поэтому операция деления будет выполнена  после  фактического  увеличения  значения переменной f на единицу.

Замечание. В языке Си операция присваивания является полноправной  частью  любого арифметического выражения и в общем случае имеет   формат

expression1 = expression2

Однако, не вдаваясь пока в семантические подробности  такой  записи,  мы будем пользоваться ее упрощенной формой

identifier = expression

где  identifier  есть  предварительно определенное имя переменной, а  expression - произвольное арифметическое выражение. Но даже в  такую  упрощенную схему укладываются достаточно сложные в семантическом отношении выражения вида

p = 2*(q + s)/(t = u * ++v)

$ 5. ОПЕРАЦИИ ОТНОШЕНИЯ, ЛОГИЧЕСКИЕ ОПЕРАЦИИ И ЛОГИЧЕСКИЕ

ВЫРАЖЕНИЯ. УСЛОВНАЯ ОПЕРАЦИЯ

Группа двуместных операций отношения выполняет сравнение первого операнда со вторым, проверяя, является ли истинным то соотношение  между операндами, которое определено символом операции. Полный набор  операций отношения задается следующей группой операторов:

             <  - меньше                 >  - больше

             <= - меньше или равно       >= - больше или равно

             == - равно                  != - не равно

Результатом  всякой операции отношения является числовое значение типа int, равное единице, если сравнение истинно, и нулю в  противном  случае.  Таким образом, операции отношения во внутреннем машинном представлении приводят к арифметическому результату.

Замечание. Строго говоря, логическое значение  "истина"  должно  отвечать  любому числовому значению, отличному от нуля. В дальнейшем  мы увидим, что именно такое соглашение принято в языке Си. Это  дает  возможность объединить понятия арифметического, условного и логического  выражений  (см.  ниже) в едином понятии "выражение", что очень   важно с точки зрения гибкости и "симметричности" языка.          Выражения, сконструированные  при  помощи  операций  отношения,  принято называть условными выражениями. В процессе вычисления значения  всякого  условного выражения, операции отношения обрабатываются  слева направо. Установленный порядок может быть изменен путем заключения части выражения в круглые скобки. Например, запись

x < y == z

полностью эквивалентна записи

(x < y) == z

в то время как выражение вида

 x < (y == z)

отличается от предыдущих порядком выполнения операций < и ==.  При разработке реальных программ часто оказывается  необходимым  объединить  два или более условных выражений. Это можно сделать, используя набор двуместных логических операций:

&& - логическое И

|| - логическое ИЛИ

!  - логическое НЕ (отрицание)

Предположим, что expression1 и expression2 - два простых условных выражения. Тогда:

         1. значение expression1 && expression2 истинно тогда  и  только   тогда, когда оба выражения expression1 и expression2 истинны;

         2.  значение  expression1  || expression2 истинно, если хотя бы  одно из выражений-операндов имеет значение "истина";

         3. значение !expression1 истинно,  если  выражение  expression1  ложно, и наоборот.

Выражения, построенные с использованием логических операций, мы  будем  называть логическими выражениями. Заметим, что логические выражения являются прямым обобщением простых условных выражений. Стандартный порядок их обработки - слева направо.  Приоритет логических операций && и  ||  ниже  приоритета  любой   операции отношения и поэтому логические выражения

a < b && b < c    и    (a < b) && (b < c)

полностью  равносильны, хотя второе из них является более предпочтительным из-за присущей ему наглядности. Однако операция  логического  отрицания  (!)  обладает очень высоким приоритетом (он такой же, как  приоритет одноместных  арифметических  операций)  и  только  круглые   скобки имеют более высокий приоритет.  Замечание.  В общем случае операндами логических операций могут  быть не только условные выражения, но и любые арифметические выражения. Это легко понять, если нулевому значению арифметического  выражения  поставить в соответствие логическое значение "ложь" и, наоборот, всякое отличное от нуля числовое значение отождествить с  

логическим значением "истина". К подробному рассмотрению данного вопроса   мы вернемся в дальнейшем. Простейшей  инструкцией языка Си, использующей логические выражения, является условный оператор:

expression1 ? expression2 : expression3

где  expression1  есть  логическое  выражение,   а   expression2   и   expression3   суть   произвольные   арифметические  выражения.  Если    expression1 принимает значение  "истина",  то  результатом  условной   операции  будет  значение  expression2,  в противном случае он равен   значению expression3. Например, инструкция

abs_a = (a > 0) ? a : -a

присваивает переменной abs_a абсолютное значение переменной a.

$ 6. АВТОМАТИЧЕСКОЕ ПРЕОБРАЗРВАНИЕ ТИПОВ

И ОПЕРАЦИЯ ПРИВЕДЕНИЯ

Если в состав арифметического или  условного  выражения  входят  операнды  различных  типов, то компилятор автоматически выполняет их   приведение к общему типу. Несмотря на то, что в ряде случаев  характер  преобразования  зависит от вида конкретной операции и типа операндов, существует общий набор стандартных правил преобразования:

         1. если операция выполняется над данными двух различных  типов, обе величины приводятся к "высшему" типу;

          2. в операторе присваивания конечный результат вычисления выражения  в  правой  части приводится к типу переменной, которой должно быть присвоено значение.          Последовательность имен типов, упорядоченных от "высшего"  типа   к  "низшему",  выглядит следующим образом: double, float, long, int,  short и char. Применение ключевого слова unsigned повышает ранг  соответствующего типа данных со знаком.  Кроме этого компилятор IBM C/2 во всех случаях расширяет короткие операнды до операндов стандартной длины, принятой при выполнении   машинных операций. Так, операнды, имеющие тип float, преобразуются к  типу double, операнды типа char и short - к типу int, а операнды типа unsigned char и unsigned short - к unsigned. Наряду  с автоматическим преобразованием типов, выполняемым исполняющей системой, в языке Си имеется возможность точно указать тип  данных, к которому необходимо привести некоторую величину. Эта  возможность  реализуется в операции приведения типов следующим образом: перед данной величиной в круглых скобках записывается имя требуемого  типа. Пусть, например, переменная res имеет тип int. Тогда  значение   арифметического выражения

res = 2.7 + 1.5

согласно общим правилам преобразования типов, равно 4. Однако применив  явным образом операцию приведения типа к обоим операндам в правой части

res = (int)2.7 + (int)1.5

получим результат, равный 3. Этот пример говорит о  необходимости  с   особой  осторожностью относиться ко всевозможным преобразованиям типов операндов.

$ 7. ПРОСТЕЙШИЕ ОПЕРАТОРЫ ЯЗЫКА СИ. СОСТАВНОЙ ОПЕРАТОР

Рассмотренные выше арифметические, условные и логические  выражения в совокупности образуют об'екты программы, которые принято называть просто выражениями. Этой терминологией подчеркивается равноправие операций различных групп с точки зрения их роли в формировании  выражений.  Более того, всякому выражению в Си соответствует некоторое числовое значение (за исключением, конечно, тех  случаев,  когда  результат операции считается неопределенным), которое может быть использовано в дальнейшем.          Однако  сами  по себе выражения любого вида еще не являются законченными инструкциями языка Си. Для обозначения завершенных действий используется понятие оператора. Простейшим оператором языка  является  всякое  выражение,  заканчивающееся  точкой с запятой (;). В  частности, отдельно стоящая точка с запятой интерпретируется  компилятором как нуль-оператор. Например, инструкции вида

a = c*(d + e)/4;

f = alpha++;

являющиеся  операторами-выражениями, играют роль законченных предписаний для исполняющей системы.

Группа из одного или большего числа операторов,  заключенных  в  фигурные скобки, образует составной оператор. Заметим, что по правилам  языка точка с запятой после закрывающей фигурной скобки не ставится. Например, группа из трех операторов

{ x = 7; y = x + 10; z = (x + y)/13; }

рассматривается компилятором как один составной оператор. В программе на языке Си составные операторы могут быть использованы всюду наравне с простыми операторами.          Замечание. В имеющейся литературе составной оператор часто  называют  блоком. Мы же здесь будем различать эти понятия, предполагая  вернуться ко второму их них в Лекции 7.


 

А также другие работы, которые могут Вас заинтересовать

78136. Перекрытия. Требования, предъявляемые к перекрытиям 1.3 MB
  Требования предъявляемые к перекрытиям. Перекрытия являются одновременно несущими и ограждающими элементами зданий. Перекрытия вместе тем являются горизонтальными диафрагмами связывающими между собой вертикальные несущие конструкции и обеспечивающие устойчивость здания в целом. Кроме того перекрытия подвергаются также воздействиям связанным с эксплуатацией здания эксплутационная влага ударный и воздушный звук и т.
78137. Полы. Требования предъявляемые к полам 456.5 KB
  Полы устраиваются на грунте или по междуэтажным перекрытиям. Покрытия полов разделяют по способу устройства на полы из листовых материалов штучные и сплошные. Полы из листовых материалов К ним относятся полы из тапифлекса линолеля релина полихлоридных плиток древесностружечных и древесноволокнистых плит. Полы упруги эластичны водостойки и гигиеничны.
78138. Крыши. Требования, предъявляемые к крышам 1.29 MB
  В зависимости от величины уклона крыши подразделяются на: Скатные с уклоном более 10; Пологоскатные 410; Плоские 04. Крыши могут быть односкатными двухскатными четырехскатными вальмовыми полувальмовыми и многоскатными а также пирамидальными коническими купольными и сводчатыми рис. Скаты наклонные плоскости крыши.
78139. Кровли. Кровли из волнистых асбестоцементных листов 2.3 MB
  Недостатки: большой собственный вес и необходимость устройства крупного уклона в результате чего увеличивается площадь крыши и следовательно стоимость. Совмещенные крыши устраиваются вентилируемые и невентилируемые. Совмещенные невентилируемые крыши возводятся только в летнее время в районах с сухим климатом и соблюдением необходимых мер по предохранению покрытий от увлажнения. Мансардные крыши применяются при использовании чердака для жилья или хозяйственных помещений.
78140. Перегородки жилых и общественных зданий 1019 KB
  Перегородки представляют собой ненесущие стены, предназначенные для деления в пределах этажа больших, ограниченных капитальными стенами, объемов на отдельные помещения.
78141. Окна и двери 357 KB
  Как ограждающие элементы, окна должны удовлетворять теплотехническим и акустическим требованиям. Они также должны быть увязаны с архитектурно - художественным решением фасадов и интерьеров. Они состоят из створок и фрамуг. Створки и фрамуги бывают открывающиеся и глухие. Открываются, как правило, вовнутрь.
78142. Лестницы 967.5 KB
  Классификация лестниц и требования к ним: Лестницы служат для сообщения между этажами или разными уровнями. По назначению лестницы делятся на: Основные служащие для постоянного пользования и эвакуации; Вспомогательные для служебного сообщения между этажами; Аварийные наружные эвакуационные лестницы; Пожарные устраиваются открыто вне здания. Конструкция лестницы состоит из чередующихся площадок и маршей. В зависимости от числа маршей в пределах высоты одного этажа лестницы бывают одномаршевые двумаршевые трехмаршевые.
78143. Крупноблочные здания 257.5 KB
  Наружные и внутренние стены монтируются из сборных конструкций заводского изготовления массой до 5 тонн. Для зданий высотой до 5ти этажей применяют бескаркасную конструктивную систему с продольными несущими стенами а для зданий повышенной этажности с большим или смешанным шагом поперечных стен. Наружные стены в пределах высоты каждого этажа членят по горизонтали на два три или четыре ряда блоков. Крупные блоки наружных стен изготавливают из легких бетонов марок М50 М75 М100 плотностью не более 1600 кг м3 а блоки внутренних стен ...
78144. Крупнопанельные здания 1.2 MB
  Эффективные современные теплоизоляционные материалы Вес панелей снижают за счет эффективного утеплителя: λ коэффициент теплопроводности материала в ккал м час град. Форма и отделка панелей должна соответствовать архитектурным требованиям предъявляемым к зданию данного типа. Наиболее ответственные места это стыки наружных панелей между собой и с перекрытием. Применяемые для облицовки наружных панелей керамическая плитка стекломозаика различные каменные фактуры получили широкое распространение Крепление облицовочных материалов ...