Главная страница
Навигация по странице:

  • Пример

  • Лекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)


    Скачать 319.62 Kb.
    НазваниеЛекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)
    Дата11.01.2022
    Размер319.62 Kb.
    Формат файлаdocx
    Имя файлаLecture_Programming_2021_09_01.docx
    ТипЛекции
    #328427
    страница8 из 36
    1   ...   4   5   6   7   8   9   10   11   ...   36

    Выражение


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

    X=5

    a + b

    (a + b)/3*5
    Следует иметь в виду, что выражение не является завершённой синтаксической конструкцией и не предназначено для выполнения. Выражение в программе всегда должно входить в состав какого-либо оператора. Приведённые выше примеры выражений не встроены в операторы, поэтому при попытке компиляции будет получено сообщение об ошибке.
      1. Простейшие арифметические операции


    Определены для данных арифметических типов, т.е. вещественных (float, double) и целых (int, short, long, char и соответствующих им беззнаковых данных unsigned int, unsigned short, unsigned long, unsigned char).

    Действие этих операций - соответствующее арифметическое действие. Результат операции - результат арифметического действия.

    Одноместные арифметические операции имеют один операнд. К ним относятся операции "+" (результатом является число, равное операнду) и "-" (результатом является число, противоположное операнду).

    Двуместные арифметические операции имеют два операнда. К ним относятся операции + , - , * , / и % . Каждая из этих операций выполняет соответствующее действие, результат которого и является результатом операции. Операция + вычисляет сумму операндов, операция - вычисляет разность, операция * вычисляет произведение, операция / вычисляет частное от деления вещественных операндов или целую часть частного от деления целых операндов, операция % вычисляет остаток от деления первого операнда на второй.

    Арифметические операции в выражениях выполняются слева направо в соответствии с общепринятыми приоритетами. Приоритет можно изменить с помощью скобок.
    Примеры выражений с арифметическими операциями:

    a + b%c

    (a + b)/3*5
      1. Операция присваивания


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

    Результат операции присваивания - значение присвоенной величины.

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

    Например:
    ab = ( c = d+5 ) * 6
    Присваивание имеет самый низкий приоритет из всех операций.
      1. Использование в выражениях операндов разных типов


    При участии в арифметических операциях операндов разных типов, перед выполнением операции осуществляется преобразование типов так, чтобы не было потери точности. Затем осуществляется сама операция.

    Типы данных в порядке возрастания точности:

    char, short, int, long, float, double.
    Пример:

    int a, c;

    float d, e;

    e = d*(c+e); /* c будет преобразовано в float */

    a = 'A' + 20; /* 'A' будет преобразовано в int */

      1. Операции преобразования типов


    В некоторых случаях правила преобразования типов не позволяют получить верный результат, например:
    int a, b;

    float c;

    a = 7; b = 14;

    c = a/b; /* результат 0 */
    Для получения правильного результата можно поступить так
    c = a; c = c/b;
    А можно применить операцию преобразования типа:
    БНФ:

    преобразование_типа = "("имя_типа ")" выражение
    имя_типа - название любого типа, в том числе и заданного программистом.

    Для нашего примера применение операции преобразования типа будет выглядеть так:
    c = (float)a / (float)b;
    Операция преобразования типа имеет приоритет более высокий, чем арифметическая операция.
      1. Дополнительные арифметические операции


    Язык Си имеет ряд уникальных операций, как правило, отсутствующих в других языках программирования. К этим операциям относятся операция увеличения на единицу ++ и операция уменьшения на единицу.

    Например:
    a = a + 1; // эквивалентно a++; или ++a;
    Выполнение операций "++" или "--" вызывает увеличение или уменьшение на единицу значения соответствующей переменной.

    Результат операций может быть различным в зависимости от того, где находятся знаки операций: если используется постфиксная операция, т.е операция ++ или -- записана после переменной, то результатом операции будет значение переменной до увеличения или уменьшения. Иными словами переменная сначала используется в выражении, а затем увеличивается или уменьшается. Например:
    a = 4;

    b = ( a++ ) * 5; /* здесь b = 20 */
    Если используется префиксная операция, т. е. операция ++ или -- записана перед переменной, то результат операции - значение переменной после увеличения или уменьшения. Иными словами переменная вначале увеличивается или уменьшается, затем используется в выражении. Например:
    a = 4;

    b = ( ++ a ) * 5; /* здесь b = 25 */
    Приоритет операций выше, чем у * или /, но все равно рекомендуется ставить скобки, чтобы не запутаться.
      1. 1   ...   4   5   6   7   8   9   10   11   ...   36


    написать администратору сайта