- •Вопрос 1
- •Вопрос 2
- •2.4. Константы
- •2.4.1. Целые константы
- •2.4.2. Длинные целые константы
- •2.4.3. Символьные константы
- •2.4.4. Вещественные константы
- •2.4.5. Перечислимые константы
- •2.5. Текстовые константы
- •Вопрос 3
- •2.2. Идентификаторы (имена)
- •2.3. Ключевые слова
- •3.2. Тип
- •Вопрос 4
- •2.3. Данные целого типа
- •Вопрос 5
- •Вопрос 6
- •11.1. Представление символьной строки при помощи одномерного массива
- •11.2. Указатель на символьную строку
- •11.3. Ввод/вывод символьных строк
- •11.4. Массивы символьных строк
- •11.5. Функции работы состроками
- •Вопрос 7
- •3.1. Операции
- •3.1.1. Арифметические операции
- •5.2. Унарные операции
- •5.5. Операции сдвига
- •5.6. Операции отношения
- •5.7. Операции равенства
- •5.8. Побитная операция и
- •5.13. Условная операция
- •3.1.2. Операция присваивания
- •Вопрос 8
- •7.3. Условный оператор if
- •7.7. Оператор выбора switch
- •7.8. Оператор break
- •7.9. Оператор continue
- •7.10. Оператор возврата return
- •6.1.2. Формы оператора if
- •6.1.3. Оператор выбора switch
- •Вопрос 9
- •7.4. Оператор цилка while
- •7.5. Оператор цикла do
- •7.6. Оператор цикла for
- •6.2.1. Оператор while
- •6.2.2. Оператор for
- •6.2.3. Оператор do-while
- •6.3.4. Применение оператора goto и меток
- •Вопрос 11
- •5.2.1. Основные форматы
- •5.2.2. Модификации форматов
- •5.3. Функция форматированного ввода scanf()
- •Вопрос 12
- •12. Работа с файлами в языке c. Функции работы с файлами. Буферизованный ввод-вывод.
- •Вопрос 13
- •1.6.2. Объявления функций
- •1.6.3. Время жизни и область видимости программных объектов
- •1.6.4. Инициализация глобальных и локальных переменных
- •Вопрос 14
- •Вопрос 15
- •Вопрос 16
- •Вопрос 17
- •Вопрос 18
- •Вопрос 19
- •Вопрос 20
5.13. Условная операция
условное_выражение:
выражение ? выражение : выражение
Условные выражения группируются справа налево. Первое выражение вычисляется; если его значение отлично от 0, результат будет равен значению второго выражения, в противном случае - значению третьего выражения. Если возможно, выполняются обычные арифметические преобразования, чтобы привести второй и третий операнды к одному типу. Если они являются структурами или объединениями одного типа, результат будет структурой или объединением. Если они являются указателями одного типа, результат будет иметь тот же тип; в противном случае один из операндов должен быть указателем, а другой - константой 0; результат же имеет тип указателя. Вычисляется только одно из выражений - второе или третье.
К началу главы
3.1.2. Операция присваивания
Операция присваивания определена в двух видах: простое и составное присваивание.
При простом присваивании, обозначаемом знаком (=), значение левого операнда заменяется значением правого операнда с соответствующим преобразованием типа правого операнда.
Структура оператора x=W,где х – переменная; W – выражение, например, x=2; y=k–8.
В приведенной структуре оператора W является выражением, поэтому оно может содержать и операции присваивания. Если в выражении присутствуют несколько операций присваивания, то они выполняются справа налево, например, x=y=z=6.8;
При составном присваивании используются следующие операции:
+=, –=, *=, /=, %=.
Формат операции составного присваивания: x OP W
где x – переменная, OP – операция, W – выражение.
В составном присваивании вначале выполняется операция над x и W, а затем результат присваивается переменной x.
Если порядок выполнения операций не определен круглыми скобками, то их приоритеты приведены в табл. 3.1, при этом высший приоритет имеют операции инкремента и декремента, а наименьший – присваивания.
Таблица 3.1
++, –– |
Справа налево |
Порядок выполнения операций одного уровня |
*, /, % |
Слева направо | |
+, – |
Слева направо | |
=,*=,/=,%=,+=,–= |
Справа налево |
Вопрос 8
8. Условные операторы языка C. Оператор безусловного перехода.
7.3. Условный оператор if
Имеется два варианта условного оператора:
if ( выражение ) оператор
if ( выражение ) оператор else оператор
В обоих вариантах сначала вычисляется выражение; если результат оказывается ненулевым, выполняется первый оператор. Во втором варианте условного оператора, если значение выражения равно 0, выполняется второй оператор. Синтаксическая неоднозначность else разрешается путем присоединения else к самому внутреннему условному оператору, которому часть else еще не сопоставлена.
7.7. Оператор выбора switch
Выполнение оператора выбора switch приводит к передаче управления на один из нескольких вложенных операторов в зависимости от значения выражения. Оператор выбора имеет вид
switch ( выражение ) оператор
В выражении выполняется обычное арифметическое преобразование типов, а результат должен иметь тип int. Оператор обычно бывает составным; любой из операторов, вложенных в него, может быть помечен одним или несколькими префиксами case вида
case константное_выражение :
Типом константного_выражениядолжен быть int. Никакие дваконстантных_выраженияв одном операторе switch не могут иметь одинаковые значения. Точное определениеконстантных_выраженийсодержится в разделе КОНСТАНТНЫЕ ВЫРАЖЕНИЯ.
Кроме того, можно задать не более одного оператора с префиксом вида
default :
который принято помещать после всех операторов с префиксами case.
При выполнении оператора switch значение выражения вычисляется и сравнивается по очереди со значениями всех константных_выраженийиз префиксов case. При обнаружении совпадения управление передается на оператор, следующий за сопоставленным префиксом. В противном случае, если указан префикс default, управление передается на оператор с этим префиксом; иначе ни один из операторов в конструкции switch не выполняется.
Префиксы case и default не оказывают влияния на поток управления; оно беспрепятственно продолжается через эти префиксы. Для выхода из конструкции выбора используется оператор break (см. следующий пункт).
Поскольку обычно оператор, входящий в switch, является составным, в начале этого оператора могут быть указаны описания; однако инициализации автоматических и регистровых переменных не действуют. Приведем несложный пример полного оператора switch:
switch (c) {
case 'r':
rflag = TRUE;
break;
case 'w':
wflag = TRUE;
break;
default:
(void) fprintf (stderr, "Неизвестная опция\n");
exit (2);
}