08_Functions.ppt
- Количество слайдов: 44
Функции Алтайский государственный университет Математический факультет Кафедра информатики Барнаул 2013
2 План Лекция 8 n План Пара заданий для самопроверки ¨ Функции ¨ n n n ¨ Подпрограмма как алгоритмическая структура Функции в языке Си Передача параметров Возврат значений Примеры функций Функции: что еще? n Игнорирование возвращаемого значения Тип функции по умолчанию Неопределенное значение функции Тип и аргументы функции main() n Функции с переменным числом параметров n n n ¨ Функции и структура программы n n n Программа из одного файла Программа из многих файлов Области видимости переменных
Пара заданий для самопроверки n n Задание «Поразрядные операции» Задание «Оператор выбора»
4 Пара заданий для самопроверки Задание «Поразрядные операции» n Что выведет программа? p=1111 q=11110000 void main() { unsigned char p=0 x. FF, q=0360, r; r = p & ~q; ~q=00001111 printf("%d", r); p=1111 } p&~q=00001111 Вывод: 15
5 Пара заданий для самопроверки Экзаменационная работа. Задание 1. n Для выражения укажите порядок вычисления, промежуточные результаты вычисления подвыражений и их тип. Укажите также значения и тип окончательного результата вычисления выражения, стоящего справа от оператора присваивания, и значение с его типом, сохраняемое в переменной, стоящей слева от оператора присваивания. 2, unsigned int 2, unsigned long int 3, int 3 unsigned long int 3 int
Функции n n n Подпрограмма как алгоритмическая структура Функции в языке Си Передача параметров Возврат значений Примеры функций
7 Функции Алгоритмические структуры n Базовые алгоритмические структуры ¨ Следование ! ¨ Повторение ¨ Ветвление Подпрограмма – еще одна алгоритмическая структура
Функции Алгоритмические структуры n Алгоритмические структуры вкладываются друг в друга 8
Функции Подпрограммы n Часто при построении алгоритмов приходится использовать алгоритмы, составленные ранее n Алгоритмы, целиком используемые в составе других алгоритмов, называются вспомогательными (или подчиненными) n В алгоритмических языках вспомогательные алгоритмы оформляются в виде подпрограмм (процедур, функций) 9
10 Функции Подпрограммы Вернуться домой 1. Позвонить в звонок 2. Если никто не открывает Приветствовать открывшего 1. Повторять 3 раза 3. Открыть замок 2. Нажать на кнопку звонка 4. Отворить дверь 1. Если открыла жена 5. Иначе 2. Повторять 3 раза 6. Приветствовать открывшего Поцеловать в щечку 3. 7. Переступить порог 4. Иначе 8. Вытереть обувь о коврик 5. Если открыла теща 9. Сказать «Вот я и дома!» 6. Подумать «Опять 25!!!» 7. 8. 9. Сказать «Добрый вечер!» Иначе Сказать «А ты что тут делаешь? »
11 Функции Подпрограммы Вернуться домой Позвонить в звонок Вернуться домой 1. Позвонить в звонок 2. Если никто не открывает 3. Открыть замок 4. Отворить дверь 5. Иначе 6. Приветствовать открывшего 7. Переступить порог 8. Вытереть обувь о коврик 9. Сказать «Вот я и дома!» Да Нет Никто не открывает? Открыть замок Отворить дверь Приветствовать открывшего Переступить порог Вытереть обувь о коврик Сказать «Вот я и дома!»
12 Функции Подпрограммы Позвонить в звонок 1. Повторять 3 раза 2. Нажать на кнопку звонка Заголовок подпрограммы Тело подпрограммы Вернуться домой 1. Позвонить в звонок 2. Если никто не открывает 3. Открыть замок 4. Отворить дверь 5. Иначе 6. Приветствовать открывшего 7. Переступить порог 8. Вытереть обувь о коврик 9. Сказать «Вот я и дома!» Вызов подпрограммы
13 Функции Подпрограммы n Вызов подпрограммы приводит к выполнению ее тела Программа 1. Функция 1 2. Функция 2 Функция 1 1. Шаг 1 2. Шаг 2 Функция 2 3. Шаг 3 4. Шаг 4 5. Шаг 5
14 Функции Подпрограммы n Использование подпрограмм ¨ сокращает описание алгоритма (выполнение одинаковых действий в разных местах программы) ¨ структурирует описание алгоритма (разбивка программы (или другой подпрограммы) на подзадачи для лучшего восприятия) ¨ позволяет реализовать на практике принципы структурного программирования при построении больших программ Задача Подзадача 1 1. 2 1. 3 Подзадача 2 2. 1 2. 2 Подзадача 3 2. 3 3. 1 3. 2 3. 3
15 Функции Подпрограммы в Си n n В Си подпрограммы реализуются в виде функций Выполнение программы начинается с вызова функции main(), которая вызывает другие функции #include
16 Функции в Си n Как описать собственную (нестандартную) функцию? n Описание функции должно располагаться ранее вызова этой функции Вызов функции Вариант 1 n Вариант 2 #include
17 Функции в Си n Как описать собственную (нестандартную) функцию? Функция, выводящая на экран строку из звездочек #include
18 Функции в Си n Как описать собственную (нестандартную) функцию? #include
Функции в Си n После выполнения программы: ************************************ Привет! ************************************ 19
20 Функции в Си n Как описать функцию с параметрами? #include
Функции в Си n После выполнения программы: ************************************ Привет! ************************************ 21
22 Функции в Си n Как описать функцию с параметрами? #include
23 Функции в Си n Как описать функцию с параметрами? #include
24 Функции в Си n Как описать функцию с несколькими параметрами? #include
Функции в Си n После выполнения программы: *************** 25
26 Функции в Си Параметры функций • в заголовке функции перечисляются формальные параметры, они обозначаются именами, поскольку могут меняться void tr( int x, int y, int c ) • при вызове функции в скобках указывают фактические параметры (константы или выражения) в том же порядке tr ( 200, 100, COLOR(255, 0, 0)); x y c
Функции в Си Параметры функций • для каждого формального параметра в заголовке функции указывают его тип void A ( int x, float y, char z ) {. . . } • внутри функции параметры используются так же, как и прочие переменные • в функции можно объявлять дополнительные локальные переменные, остальные функции не имеют к ним доступа void A ( int x, float y, char z ) { локальные int a 2, bbc = 345; переменные. . . } 27
28 Функции в Си n Функция как «черный ящик» #include
29 Функции в Си n Возвращаемое значение функции void указывает на отсутствие возвращаемого значения #include
30 Функции в Си n Возвращаемое значение функции При наличии возвращаемого значения нужно указать его тип Выходная величина возвращается оператором return #include
31 Функции в Си n Возвращаемое значение функции #include
Функции в Си n После выполнения программы: 100 32
Функции: резюме n Шаблон описания функции <тип-результата> <имя-функции> (<список параметров, если есть>) { <объявления> <инструкции> } n Шаблон определения функции <тип-результата> <имя-функции> (<список параметров, если есть>); n В определении можно опускать имена параметров (только типы) До вызова функции – ее описание или определение Если нет возвращаемого значения, <тип-результата> = void n Возврат результата и прекращение функции: n n return <результат>; или ¨ return; ¨ n Параметры передаются по значению фактические параметры могут быть константами и выражениями ¨ формальные параметры – локальные переменные ¨ 33
34 Функции Как поменять местами? 2 Задача: поменять местами содержимое двух чашек. 3 1 Задача: поменять местами содержимое двух ячеек памяти. y x Можно ли обойтись без c? 4 6 2 1 ? 6 4 3 x = y; y = x; c = x; x = y; y = c; ? 4 c
Функции Параметры, передаваемые по указателю Задача: составить процедуру, которая меняет местами значения двух переменных. Особенности: надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе. void Swap ( int a, int b ) эта процедура { работает с int c; копиями c = a; a = b; b = c; параметров } main() { x = 1, y = 2 int x = 1, y = 2; Swap ( x, y ); printf ( "x = %d, y = %d", x, y ); } 35
36 Функции Параметры, передаваемые по указателю void Swap ( int * a, int * b ) { передаются не int c; значения, c = *a; *a = *b; *b = c; а адреса } переменных Применение: таким образом функция может возвращать несколько значений Вызов: Swap ( 2, 3 ); // числа Swap ( x+z, y+2 ); // выражения Swap ( &x, &y ); // адреса переменных
37 Функции: пример 1 Задача: составить функцию, которая вычисляет наибольшее из двух значений, и привести пример ее использования Функция: тип результата формальные параметры int Max ( int a, int b ) { if ( a > b ) return a ; else return b ; } return - вернуть результат функции
38 Функции: пример 2 Задача: составить функцию, которая определяет, верно ли, что заданное число – простое. Особенности: • ответ – логическое значение: «да» (1) или «нет» (0) • результат функции можно использовать как логическую величину в условиях (if, while) Алгоритм: считаем число делителей в интервале от 2 до N-1, если оно не равно нулю – число составное. count = 0; for (i = 2; i < N; i ++) if ( N % i == 0) count ++; if ( count == 0 ) // число N простое} else // число N составное ? Как улучшить?
39 39 Функции Функция: пример 2 int Prime ( int N ) перебор только до { int count = 0, i; for (i = 2; i*i <= N; i++) if (N % i == 0) count ++; return (count == 0); } if (count == 0) return 1; else return 0;
40 Функции: пример 2 #include
Функции Упражнения 1. Описать функцию, которая определяет сумму всех чисел от 1 до N и привести пример ее использования. Пример: Введите число: 100 сумма чисел от 1 до 100 = 5050 2. Составить функцию, которая определяет, сколько зерен попросил положить на N-ую клетку изобретатель шахмат (на 1 -ую – 1 зерно, на 2 -ую – 2 зерна, на 3 -ю – 4 зерна, …) Пример: Введите номер клетки: 28 На 28 -ой клетке 134217728 зерен. 41
Функции Упражнения 3. Составить функцию, которая определяет наибольший общий делитель двух натуральных и привести пример ее использования. Пример: Введите два числа: 14 21 НОД(14, 21)=7 4. Составить функцию, которая вычисляет функцию синус как сумму ряда (с точностью 0. 001) Пример: Введите угол в градусах: 45 sin(45) = 0. 707 42
Функции Упражнения 5. Составить функцию, которая определяет, верно ли, что сумма его цифр – четное число. Пример: Введите число: 136 245 Сумма цифр четная. Сумма цифр нечетная. 6. Составить функцию, которая определяет, верно ли, что в заданном числе все цифры образуют возрастающую последовательность. Пример: Введите число: 258 528 Верно. Неверно. 43
Вопросы и ответы Вопросы? n Функции ¨ ¨ ¨ Подпрограмма как алгоритмическая структура Функции в языке Си Передача параметров Возврат значений Примеры функций 44