Использование функций включает три отдельных шага.
1. Объявление функции посредством ее прототипа.
2. Выполнение функции внутри программы путем ее вызова.
3. Определение функции.
Прототип позволяет компилятору проверять, корректно ли применяется функция, а определение функции указывает, как она должна работать. Прототип и определение функции являются примерами современного стиля программирования, предусматривающего разделение элемента программы на интерфейс и реализацию. Интерфейс описывает, как используется средство, что и делает прототип, а реализация далее расписывает конкретные действия, чем занимается определение функции.
Резюме
Главной темой этой главы было управление выполнением программы. Язык С предлагает много средств для структурирования программ. Операторы while и for позволяют строить циклы с предусловием. Оператор for особенно хорошо подходит для циклов, в которых производится инициализация и обновление. Инициализировать и обновлять более одной переменной в цикле for можно с помощью операции запятой. Для менее распространенных случаев, когда требуется цикл с постусловием, в языке С предусмотрен оператор do while.
Типичная конструкция цикла while имеет следующий вид:
получить первое значение
while (значение удовлетворяет условию проверки)
{
обработать значение получить следующее значение
}
Цикл for, выполняющий те же действия, выглядит так:
for (получить первое значение; значение удовлетворяет условию проверки;
получить следующее значение) обработать значение
Во всех этих циклах условие проверки служит для выяснения, должна ли выполняться еще одна итерация цикла. В общем случае цикл продолжает работу, если проверочное выражение имеет ненулевое значение, иначе цикл завершается. Часто условием проверки является выражение отношения, которое представляет собой выражение, содержащее операцию отношения. Такое выражение получает значение 1, если отношение истинно, и 0 — во всех остальных случаях. Переменные типа Bool, введенного стандартом С99, могут принимать только значения 1 и 0, обозначающие “истину” и “ложь”.
В дополнение к операциям отношений в главе рассматривались арифметические операции присваивания языка С, такие как += и *=. Эти операции модифицируют значения операнда слева от знака операции, выполняя над ним указанные арифметические операции.
240 глава 6
Следующей темой были массивы. Массив объявляется с применением квадрата скобок для указания количества элементов в нем. Первый элемент произвольного ъ сива имеет номер 0, второй — номер 1 и т.д. Например, объявление
double hippos[20];
создает массив из 20 элементов; отдельные элементы массива получают имена в диа зоне от hippos [0] до hippos [19]. Манипулировать индексами, используемыми , нумерации элементов массива, удобно с помощью циклов. Наконец, в главе было пс зано, как создавать и выполнять функцию с возвращаемым значением.
Вопросы для самоконтроля
Ответы на вопросы для самоконтроля приведены в приложении А.
1. Каким будет значение quack после выполнения каждой строки кода? Каждый последних пяти операторов использует значение quack, сгенерированное пр шествующим оператором.
int quack = 2; quack += 5; quack *= 10; quack -= 6; quack /= 8; quack % = 3;
2. При условии, что переменная value имеет тип int, определите, какой вьп будет получен в результате выполнения следующего цикла:
for ( value = 36; value > 0; value /= 2) printf("%3d", value);
Какие проблемы могли бы возникнуть, если бы переменная value имела i double вместо int?
3. Запищите выражение для каждого из следующих условий проверки.
а. х больше 5.
б. Функция scanf() предпринимает неудачную попытку прочитать одно зна ние типа double (по имени х).
в. х имеет значение 5.
4. Запищите выражение для каждого из следующих условий проверки.
а. Функция scanf() успешно читает одно целое число.
б. х не равно 5.
в. х равно 20 или больше.
5. Приведенная ниже программа не идеальна. Какие ошибки вы можете найти?
#include int main(void)
{
int i, j, list(10); for (1 = 1, i <= 10, i++)
{
list [i] = 2*i + 3; for (j = 1, j > = i, j++) printf(" %d", list[j]); printf("\n");
}
Управляющие операторы С: циклы 241
6. Воспользуйтесь вложенными циклами для написания программы, которая выводит следующую последовательность символов:
$$$$$$$$
$$$$$$$$
$$$$$$$$
$$$$$$$$
7. Что выведет каждая из следующих программ?
#include int main(void)
{
int i = 0;
while (++i < 4)
printf("Hi ! ");
do
printf("Bye! "); while (i++< 8); return 0;
Читать дальше