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

  • Basic

  • Лекции. Основные понятия и определения


    Скачать 1.94 Mb.
    НазваниеОсновные понятия и определения
    Дата27.03.2018
    Размер1.94 Mb.
    Формат файлаdocx
    Имя файлаЛекции.docx
    ТипКонтрольные вопросы
    #39570
    страница35 из 58
    1   ...   31   32   33   34   35   36   37   38   ...   58

    11.12. Уровень 15 (оператор ',' - запятая)


    Порядок:→

    Формат: e1[,e2]... , где e1, e2 - выражения.

    Результат имеет тип и значение самого правого выражения списка. Как правило, используется с выражениями, содержащими оператор присваивания. Весьма удобен при достаточно сложных инструкциях цикла.

    Пример.

    for(i=0, j=N-1; i

    //переменных i и j в разных направлениях

    11.13. Некоторые замечания


    1. При трансляции программы возможно переупорядочивание коммутативных или ассоциативных операторов. Если порядок вычисления важен, используйте промежуточные переменные.

    2. В языке C не задан порядок вычисления операндов. При побочных эффектах результат машинно зависим. Побочным эффектом называют изменение значений аргументов функций. В выражении x=f(x, y)+g(&x, &y); при перестановке слагаемых изменится результат.

    3. Также не фиксирован порядок вычисления аргументов функций.

    Пример.

    printf("%d%d\n", ++n, pow(2,n)); // Результат неоднозначен

    4. Не применяйте неоднозначных выражений. Чему равно, например, выражение a[i++] = i++;? Так не писать не следует!!!

    11.14. Постоянные выражения


    Постоянные выражения – это выражения, состоящие из литералов и символических констант. Они используются в таких конструкциях языка, как:

    - многоальтернативный выбор – инструкция switch, опция case;

    - границы массивов;

    - директивы препроцессора.

    Пример.

    int a[SIZE1+SIZE2];

    #define PI 3.141593

    #define PI2 2*PI

    Вопросы для самопроверки и контроля

    Вопросы для самопроверки

    1. Чему равно значение выражения sizeof(<имя_типа>)?

    2. Какой тип должен иметь левый операнд оператора ->?

    3. Дано: i=4; y=i++; x=++i. Чему равны значения i, y, x ?

    4. Какой тип имеет результат выполнения унарного оператора &?

    5. Что означают операторы = и == в языке C? Чей приоритет выше?

    6. В чем отличие операторов унарного и бинарного оператора &?

    7. Какой оператор имеет 3 операнда?
    Контрольные вопросы

    1. Требуется сформировать массив из отрицательных элементов другого массива. Правильно ли предложенное решение?

    float x[10], y[10], s; short i, k;

    for(s=k=i=0; i<10; i++){

    x[++k]=y[ i ]<0 ? y[ i ] : 0;

    }

    2. В чем отличие постфиксной и префиксной форм оператора ++?

    3. Что означают операторы & и &&?

    4. В чем смысл оператора "запятая"?

    5. Дано: a=3; b=4; c=5; Чему равно выражение: a ?

    6. Где употребляются постоянные выражения?

    12. ПЕРЕДАЧА ДАННЫХ ПОТОКОМ


    Этот раздел посвящен дополнительным консольным средствам ввода-вывода в языке C, используемых для ввода-вывода символьной информации.

    Функции scanf и printf и некоторые другие, о которых речь пойдет ниже, называют функциями передачи данных потоком. Это означает, что все данные, вводимые последовательными инструкциями scanf, образуют единый поток ввода, в котором начало и конец элемента данных определяются параметром соответствующей спецификации w или d либо специальными символами – ограничителями, внесенными в поток. Аналогично последовательность инструкций printf образует единый поток вывода. Проще всего данные каждого потока представить в виде непрерывной символьной строки.

    В языке определены 3 стандартных потока обмена данных: поток ввода stdin, поток вывода stdout и поток сообщений об ошибках stderr. По умолчанию поток stdin связан с клавиатурой, потоки stdout и stderr – с экраном монитора. На самом деле поток stdin также связан с экраном, поскольку большинство функций ввода отображают каждый вводимый с клавиатуры символ на экран. Точнее эти функции вставляют отображение вводимых символов в поток stdout. Это приводит к очереди за пользование ресурсом (экраном) и иногда к конфликтным ситуациям, описанным ранее.

    Замечание. Понятие потока не связано с конкретным языком программирования. Это свойство операционной системы. Количество потоков в приложении не ограничивается приведенными стандартными потоками, однако многопоточное программирование в данном курсе не рассматривается. Отметим, что рассмотренные в разделе 6 методы консольного ввода-вывода языка Basic также используют эти потоки: ReadLinestdin, Write и WriteLinestdout. Отнесение данного материала к языку C связано с введением дополнительных функций для ввода-вывода строк, тогда как в языке Basic консольный обмен данных ограничивается указанными 3 методами.
    1   ...   31   32   33   34   35   36   37   38   ...   58


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