В данном разделе, в основном, рассмотрены операторы второй группы. К ним относятся:
if-else
(имеет сокращённую форму if
);switch
;for
, while
и do
;goto
(избегайте использовать на практике), break
, continue
, return
;Как и всегда, достаточно подробные материалы по теме можно нати в книге K&R C.
$ vim if.c
Скомпилируйте и запустите программу несколько раз:
$ gcc if.c -o if
$ ./if
Попробуте ввести корректные и некорректные данные. Объясните результаты работы программы.
(выражение 1) ? (выражение 2) : (выражение 3)
Здесь выражение 1
- это логическое выражение (им, конечно, может быть и арифметическое выражение, но это встречается только в специфических случаях), которое анализируется на истинность. В том случае, если выражение 1
равно ИСТИНЕ, то результатом вычисления условной операции является выражение 2
, иначе - выражение 3
.
Внимательно изучите и наберите в редакторе текст следующей программы:
$ vim abs-1.c
Скомпилируйте и запустите программу:
$ gcc abs-1.c -o abs-1
$ ./abs-1
Является ли выражение (x<y)?y:x
оператором? Что необходимо сделать, для того чтобы оно им стало? Что вообще такое оператор?
+
сложение;-
вычитание;*
умножение;/
деление;%
взятие остатка от деления.Пример: 11 / 4 = 2
, 11 % 4 = 3
.
К бинарным также относятся операции присвоения и сравнения. Их не следует путать!
В языке Си встречается как простая (=
), так и составные операции присвоения: +=
, *=
, /=
и т.п. Левым операндом этих операций могут быть только переменные! Результатом выполнения этой операции считается вычисленное значение её левого операнда.
Операция ==
представляет собой логическую операцию проверки на равенство. Обоими её операндами могут являться как переменные, так и непосредственные значения. Результатом этой операции является ИСТИНА или ЛОЖЬ, в зависимости от того, равны ли друг другу операнды или нет.
В языке Си нет специального булева типа данных для представления логических данных, но принято считать, что любое ненулевое значение соответствует ИСТИНЕ, в то время как нуль - это ЛОЖЬ.
Напишите программу, реализующую проверку значения, введённого пользователем, на чётность:
$ vim even.c
Скомпилируйте и выполните программу несколько раз:
$ gcc even.c -o even
$ ./even
for
- это самый универсальный вид цикла в языке Си. Его синтаксис имеет следующий вид:
for([выражение 1] ; [выражение 2] ; [выражение 3])
тело цикла
Квадратные скобки []
, как и всегда в подобных случаях, означают, что соответствующие аргументы не являются обязательными и могут отсутствовать. выражение 1
- это операция, задающая начальные условия для выполнения данного цикла. выражение 2
задаёт условие завершения цикла - до тех пор пока значение этого выражения истинно, тело цикла выполняется, как только оно становится ложным, цикл завершается. выражение 3
определяет набор операций, выполняемых после каждой итерации цикла. Телом цикла может являться как одиночный, так и составной оператор или блок {}
.
Сначала напишите текст предлагаемой программы, исключая комментарии:
$ vim for.c
После этого скомпилируйте, запустите программу и разберитесь в подробностях с принципом её работы:
$ gcc for.c -o for
$ ./for
После этого отредактируйте исходный код программы, так как предложено в комментариях, отранслируйте программу повторно, запустите и объясните, что происходит.
1
до N
:
\[
x = \sum\limits_{i=1}^Ni = 1 + 2 + \cdots + N.
\]
$ vim summ.c
Как и всегда, транслируем и запускаем программу:
$ gcc summ.c -o summ
$ ./summ
for
в языке Си используется упрощённый цикл с предусловием while
. Его синтаксис имеет вид:
while(выражение условия)
тело цикла
Идея работы этого цикла состоит в том, что тело цикла
выполняется до тех пор пока выражение условия
принимает истинное значение.
В качестве примера напишите исходный код следующей программы:
$ vim while.c
Скомпилируйте, запустите программу и объясните, что происходит:
$ gcc while.c -o while
$ ./while
Измените заголовок цикла на тот, который приведён в комментарии. Перекомпилируйте приложение, запустите его ещё раз и объясните изменения.
После этого уберите ключевое слово short
из объявления переменной i
. Перекомпилируйте пргорамму ещё раз, запустите её и сделайте выводы. Что означает ключевое слово short
? А long
?
Для сброса программы наммите сочетание клавиш Ctrl+C
(^C
).
$ vim day.c
Как и всегда, скомпилируйте, запустите программу несколько раз (в том числе и с некорретными данными, например вводя с клавиатуры значения: 1, 17, q, и т.д.).
$ gcc day.c -o day
$ ./day
Измените строку с комментарием, повторите предыдущие действия и сделайте выводы.
while
в языке Си есть ещё один упрощённый цикл - цикл с постусловием do-while
. Его синтаксис и логика работы очевиды из следующего примера:
$ vim do.c
После набора текста, как и всегда, компилируем, запускаем, разбираемся:
$ gcc do.c -o do
$ ./do
Напишите программу, выводящую на экран такой треугольник:
*
***
*****
*******
$ vim temperature.c
$ gcc temperature.c -o temperature
$ ./temperature