Лекции. Основные понятия и определения
Скачать 1.94 Mb.
|
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 также используют эти потоки: ReadLine – stdin, Write и WriteLine – stdout. Отнесение данного материала к языку C связано с введением дополнительных функций для ввода-вывода строк, тогда как в языке Basic консольный обмен данных ограничивается указанными 3 методами. 0> |