Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_2_изд_испр.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
2.27 Mб
Скачать

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;

}

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

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

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

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

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

12. Передача данных потоком

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

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

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

12.1. Спецификация "s" управляющей строки функций scanf и printf

Предназначена для ввода-вывода символьных строк. Напомним, что в языке C определены только строковые литералы, которые представляют собой последовательность символов, завершающуюся нулевым символом. В качестве переменных применяются массивы типа char. Все функции ввода строк добавляют конечный нулевой символ.

Ввод. Формат спецификации: % [w]s.

Поле ввода ограничивается параметром спецификации w либо символами пробел или перевод строки (клавиша Enter).

Пример.

%5s [Ивано]в // Будет введен текст, заключенный в [ ]

Замечание. Ограничитель ввода остается в потоке и будет восприниматься последующими инструкциями ввода, что может привести к некоторым неожиданным последствиям. Например следующая за функцией scanf функция gets, у которой символ перевод строки является ограничителем, введет пустую строку.

Вывод. Формат спецификации %[w][.d]s.

Ограничителем является конечный нулевой символ либо параметр d спецификации.

Пример. Выводимая строка имеет значение: "Привет, Коля!". На экране получим:

%s Привет, Коля!

%.6s Привет