Программирование. Принципы и практика использования C++ Исправленное издание, стр. 52
int main(){ for (int i = 0; i<100; ++i) { // для i из диапазона [0:100) cout << i << '\t' << square(i) << '\n'; ++i; // Что это? Похоже на ошибку! }}Любой читатель, увидевший этот цикл, разумно предположит, что его тело будет выполнено 100 раз. Однако это не так. Инструкция
++iforwhile2// вычисляем и выводим на печать таблицу квадратов// четных чисел из диапазона [0:100]int main(){ for (int i = 0; i<100; i+=2) cout << i << '\t' << square(i) << '\n';}Пожалуйста, учтите, что ясная и простая программа короче запутанной. Это общее правило.
ПОПРОБУЙТЕ
Перепишите программу, выводящую на печать символы и соответствующие им целые числа с помощью инструкции
for4.5. Функции
В приведенной выше программе осталось невыясненной роль выражения
square(i)iВ стандартной библиотеке предусмотрено множество полезных функций, таких как функция для вычисления корня квадратного из числа
sqrt()squareint square(int x) // возвращает квадрат числа x{ return x*x;}Первая строка этого определения утверждает, что это функция (об этом говорят скобки), которая называется
squareintintint main(){ cout << square(2) << '\n'; // выводим 4 cout << square(10) << '\n'; // выводим 100}Мы не обязаны использовать значение, возвращаемое функцией, но обязаны передать функции именно столько аргументов, сколько предусмотрено. Рассмотрим пример.
square(2); // возвращаемое значение не используетсяint v1 = square(); // ошибка: пропущен аргументint v2 = square; // ошибка: пропущены скобкиint v3 = square(1,2); // ошибка: слишком много аргументовint v4 = square("two"); // ошибка: неверный тип аргумента — // ожидается int
two2Тело функции является блоком (см. раздел 4.4.2.2), который выполняет реальную работу.
{ return x*x; // возвращаем квадрат числа x}Для функции
squareСинтаксис определения функции можно описать так:
тип идентификатора (список параметров) тело функцииЗа типом (возвращаемого значения) следует идентификатор (имя функции), за ним — список параметров в скобках, затем — тело функции (исполняемые инструкции). Список аргументов, ожидаемых функцией, называют списком параметров, а элементы этого списка — параметрами (или формальными аргументами).
Список параметров может быть пустым. Если не хотите возвращать результат, то перед именем функции в качестве типа возвращаемого значения следует поставить ключевое слово
voidvoid write_sorry() // не принимает никаких аргументов; // ничего не возвращает{ cout << "Извините \n";}Специфические аспекты, связанные с языком программирования, будут описаны в главе 8.