- Выражения
Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Знаки операций определяют действия, которые должны быть выполнены над операндами. Каждый операнд в выражении может быть выражением. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета выполнения операций. Тип выражения вычисления можно изменить, используя конструкцию “приведение”, имеющую следующий вид:
(тип) выражение
- Операции.
По количеству операндов, участвующих в операции, операции подразделяются на унарные, бинарные и тернарные.
В языке Си имеются следующие унарные операции:
- арифметическое отрицание (отрицание и дополнение);
~ побитовое логическое отрицание (дополнение);
! логическое отрицание;
* разадресация (косвенная адресация);
& вычисление адреса;
+ унарный плюс;
++ увеличение (инкремент);
-- уменьшение (декремент);
Унарные операции выполняются справа налево.
В отличие от унарных, бинарные операции, список которых приведен в табл.2, выполняются слева направо.
Таблица 2
Знак операции | Операция | Группа операций |
* | Умножение | Мультипликативные |
/ | Деление | |
% | Остаток от деления | |
+ | Сложение | Аддитивные |
- | Вычитание | |
<< | Сдвиг влево | Операции сдвига |
>> | Сдвиг вправо | |
< | Меньше | Операции отношения |
<= | Меньше или равно | |
> | Больше | |
>= | Больше или равно | |
== | Равно | |
!= | Не равно | |
& | Поразрядное И | Поразрядные операции |
| | Поразрядное ИЛИ | |
^ | Поразрядное исключающее ИЛИ | |
&& | Логическое И | Логические операции |
|| | Логическое ИЛИ | |
= | Присваивание | Операции присвоения |
*= | Умножение с присваиванием | |
/= | Деление с присваиванием | |
%= | Остаток от деления с присваиванием | |
-= | Вычитание с присваиванием | |
+= | Сложение с присваиванием | |
<<= | Сдвиг влево с присваиванием | |
>>= | Сдвиг вправо с присваиванием | |
&= | Поразрядное И с присваиванием | |
|= | Поразрядное ИЛИ с присваиванием | |
^= | Поразрядное исключающее ИЛИ с присваиванием |
Операции () и [ ] имеют высший приоритет. Операция условие?: имеет вид:
(выр 1)?(выр 2):(выр 3)
Вычисляется выражение (выр 1). Если это выражение имеет ненулевое значение, то вычисляется выражение (выр 2), а если выражение (выр 1) имеет нулевое значение, то вычисляется выражение (выр 3).
1.4.2.3. Операторы
- Оператор if
Формат оператора:
if (выражение) оператор-1; [else оператор-2;]
Выполнение оператора if начинается с вычисления выражения.
Далее выполнение осуществляется по следующей схеме:
- если выражение истинно (т.е. отлично от 0), то выполняется оператор-1.
- если выражение ложно (т.е. равно 0),то выполняется оператор-2.
- если выражение ложно и отсутствует оператор-2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.
Допускается использование вложенных операторов if.
- Оператор switch
Оператор switch предназначен для организации выбора из множества различных вариантов. Формат оператора следующий:
switch (выражение)
{ [объявление]
:
[ case константное-выражение1]: [ список-операторов1]
[ case константное-выражение2]: [ список-операторов2]
:
[ default: [ список операторов ]]
}
Схема выполнения оператора switch следующая:
- вычисляется выражение в круглых скобках;
- вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;
- если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;
- если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.
- Оператор break
Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.
- Оператор for
Оператор for - это наиболее общий способ организации цикла. Он имеет следующий формат:
for (выражение 1; выражение 2; выражение 3) тело;
Схема выполнения оператора for:
1. Вычисляется выражение 1.
2. Вычисляется выражение 2.
3. Если значения выражения 2 отлично от нуля (истина), выполняется тело цикла, вычисляется выражение 3 и осуществляется переход к пункту 2, если выражение 2 равно нулю (ложь), то управление передается на оператор, следующий за оператором for.
- Оператор while
Оператор цикла while называется циклом с предусловием и имеет следующий формат:
while (выражение) тело;
Схема выполнения оператора while следующая:
1. Вычисляется выражение.
2. Если выражение ложно, то выполнение оператора while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполняется тело оператора while.
3. Процесс повторяется с пункта 1.
- Оператор do while
Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:
do тело while (выражение);
Схема выполнения оператора do while:
1. Выполняется тело цикла (которое может быть составным оператором).
2. Вычисляется выражение.
3. Если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.
- Оператор continue
Оператор continue, как и оператор break, используется только внутри операторов цикла, но в отличие от него выполнение программы продолжается не с оператора, следующего за прерванным оператором, а с начала прерванного оператора. Формат оператора следующий:
continue;
- Оператор return
Оператор return завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом. Функция main передает управление операционной системе. Формат оператора:
return [выражение];
Значение выражения, если оно задано, возвращается в вызывающую функцию в качестве значения вызываемой функции. Если выражение опущено, то возвращаемое значение не определено. Выражение может быть заключено в круглые скобки, хотя их наличие не обязательно.
Встроенные элементы
- Функции printf() и scanf()
Функции printf() и scanf() осуществляют форматированный ввод и вывод на консоль. Форматированный ввод и вывод означает, что функции могут читать и выводить данные в разном формате, которым можно управлять.
Функция printf() имеет прототип в файле STDIO.H
int printf(char *управляющая_строка, …);
Управляющая строка содержит два типа информации: символы, которые непосредственно выводятся на экран, и команды формата (спецификаторы формата), определяющие, как выводить аргументы. Команда формата начинается с символа % за которым следует код формата.
scanf() – основная функция ввода с консоли. Она предназначена для ввода данных любого встроенного типа и автоматически преобразует введенное число в заданный формат. Прототип из файла STDIO.H имеет вид
int scanf(char *управляющая_строка, …);
Управляющая строка содержит три вида символов: спецификаторы формата, пробелы и другие символы. Команды или спецификаторы формата начинаются с символа %.
- Функция getch()
Функция getch() производит буферизованный ввод символа, но не выводит символ на экран. Ее прототип находится в файле CONIO.H.
- Функции работы со строками
Для работы со строками существует библиотека, описание которой находится в файле STRING.H. Наиболее часто используемые функции: strcpy(), strcat(), strlen()