1: unsigned long summation(unsigned int n)
2: {
3: unsigned long sum = 0;
4: while(n > 0)
5: {
6: sum = sum + n;
7: -- n;
8: }
9: return sum;
10: }
В Программе 9.1 приведен код
Например, если
В нашей реализации
Давайте разберем эту функцию по строкам. Каждая строка помечена номером. Эти номера вставлены исключительно для удобства и не являются частью кода программы.
Строка 1: В этой строке объявляется имя функции (подпрограммы) summation и указывается, что она возвращает целое число типа unsigned long (в компиляторе, используемом нами в данной главе, этому типу соответствует 16-битное целое число без знака), а в качестве параметра
Строка 2: Открывающая фигурная скобка означает начало блока. Как можно догадаться, у каждого начала должен быть свой конец, который в данном случае обозначается закрывающей фигурной скобкой. Хорошим тоном считается располагать тело блока с некоторым отступом (один символ табуляции) относительно фигурных скобок. Такое форматирование облегчает поиск парных скобок, т. е. начала и конца блока, однако компилятору нет никакого дела до того, какой стиль использует программист. В нашем случае соответствующая закрывающая скобка находится в строке 10. Между строками 2 и 10 заключено тело функции summation ().
Строка 3: В нашей функции используется только одна локальная переменная. В этой строке определяется ее имя (sum) и тип (unsigned long). В языке Си все объекты должны быть определены перед их использованием. Таким образом, компилятору передается информация о свойствах именованной переменной. В данном случае мы сообщаем компилятору о том, что под эту переменную необходимо выделить 16 бит и что она используется для хранения беззнаковых чисел. В этом же объявлении задается
Строка 4: При вычислении sum нам необходимо выполнять одну и ту же операцию до тех пор, пока
while(ИСТИНА)
{
делаем это;
делаем то;
делаем что-нибудь еще;
}
Тело цикла, т. е. совокупность операторов, расположенных между фигурными скобками (строки 5 и 8), выполняется до тех пор, пока результат выражения в круглых скобках будет не равен нулю (в языке Си любое значение, не равное нулю, считается истинным). Эта проверка осуществляется перед каждым проходом цикла. В нашем случае вычисляется выражение
Строка 5: Открывающая фигурная скобка обозначает начало тела цикла while. В соответствии с принятым стилем операторы, составляющие тело цикла, записываются с отступом.
Строка 6: Вычисляется выражение в правой части оператора присваивания «=» (sum + n), и полученное значение заносится в переменную, расположенную слева от оператора присваивания, т. е. в sum. При прибавлении 8-битной переменной к 16-битной компилятор автоматически расширяет первую до 16 бит (см. Листинг 9.1, команды с адресами h’000E’…h’0011’).
Строка 7: Значение
Строка 8: Закрывающая скобка тела цикла while. Обратите внимание, что и открывающая (строка 5), и закрывающая скобки имеют одинаковый отступ от начала строки. Компилятор не обращает внимания на все эти изыски, это сделано исключительно для удобочитаемости программы и уменьшения вероятности возникновения ошибок.