// Done by TheTutor -- 10/1/01
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
/* Эта обучалка - о функциях. Функции являются важной составляющей программирования.
Вы будете создавать их и использовать снова и снова. Основные части функции
таковы:
int add(int num1, int num2);
Эта строчка называется объявлением или прототипом функции. Здесь определяется тип
данных, возвращаемых функцией, имя функции (в нашем случае add) и параметры (то,
что передается в функцию).
Для лучшего восприятия я разделю функцию на части (слева направо)
"int" -- Это возвращаемый тип (указывает, переменная какого типа будет возвращена
функцией) -- Если ваша функция ничего не возвращает, укажите тип "void".
"add" -- Имя функции -- С его помощью мы можем вызвать эту функцию в main(), например так:
add(5,4); -- main() знает, откуда взять код для "add" и выполнить его.
int num1, int num2 -- Это переменные, которые принимает функция -- Функция может
принять столько переменных, сколько захотите (даже нисколько).
Перечисляя входные параметры, разделяйте их запятой.
Когда вы определяете функцию, вы можете дать переменным имена, но
вы не обязаны это делать. Также, когда вы описываете функцию
(пишете код, который определяет, что будет делать функция) вы
не обязаны использовать те же имена переменных, что вы используете
в объявлении функции.
Я думаю, теперь мы готовы написать простую функцию.
Как насчет функции "возведение в степень"? По-моему, звучит неплохо. :)
Просто чтобы быть уверенным, что вы знаете, вот пример:
(Примечание: "^" означает возведение в степень)
2^3 = 2 * 2 * 2 = 8
3^3 = 27
Теперь вы знаете о чем я говорю, итак...
*/
#include <stdio.h> // Чтобы мы могли использовать функцию printf()
// Здесь мы определяем прототип нашей функции -- Она будет возвращать целое число
// (результат возведения) -- Параметрами будут два числа, первое - основание (число, возводимое
// в степень), а второе - экспонента (число, степень, в которую возводится основание)
int power(int base, int exp); // ЗАМЕЧЕНИЕ** отрицательные степени НЕ вычисляются
int main() // Функция "main" (основа нашей программы)
{
int result = 0; // Переменная для хранения результата действия функции power()
result = power(2,3); // "result" будет равен 2^3 (не забывайте, что '^' означает возведение в степень)
printf("2 raised to the 3rd power = %d\n",result);
result = power(5,3); // "result" будет равен 5^3
printf("5 raised to the 3rd power = %d\n",result);
power(4,4);
/* А зачем мы делаем это? Я просто хочу показать, что можно вызывать функции и полностью
игнорировать возвращаемые ими значения (если нужно). Такой вызов не прибавляет ничего
ценного к нашей программе, но эта запись допустима */
/* И наконец, зная, как вывести на печать целое число (мы делали это выше), мы можем не
хранить результат вызова функции в переменной, а вместо этого сделать вот так: */
printf("4 raised to the 6th power = %d\n",power(4,6));
return 0;
} // Конец main()
/* Здесь мы описываем нашу функцию - И снова, возвращаемое функцией значение это результат
возведения числа base в степень exp - В качестве параметров берется два целых числа (base и exp) */
int power(int base, int exp) // **Обратите внимание - НЕТ точки с запятой
{
// Описание функции находится между скобками { и }
int result = 1;
/* Это локальная переменная - о ней знает только функция power(). Это означает, что когда
мы выйдем из функции, переменная исчезнет */
// Пока exp НЕ РАВНА нулю, вычесть единицу из exp
while(exp--)
result *= base; // result = (result * base);
return result; // Здесь мы используем ключевое слово "return" -- Мы используем его
// чтобы возвращать переменные из функций
} // Конец функции power()
/* Правило:
Используйте функции для разбиения вашей программы на части.
Например, у вас может быть такая функция main():
int main()
{
init_game();
while(game_not_over() == false)
play_game();
return 0;
}
А эти функции, например init_game(), могут также быть разбиты на другие функции, например:
load_level()
load_monsters()
load_players()
и т.д.
Вы практически ВСЕГДА захотите создать функции для задач, которые будут повторяться
несколько раз в программе.
*/
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
|