Скачать презентацию Функции Алтайский государственный университет Математический факультет Кафедра информатики Скачать презентацию Функции Алтайский государственный университет Математический факультет Кафедра информатики

08_Functions.ppt

  • Количество слайдов: 44

Функции Алтайский государственный университет Математический факультет Кафедра информатики Барнаул 2013 Функции Алтайский государственный университет Математический факультет Кафедра информатики Барнаул 2013

2 План Лекция 8 n План Пара заданий для самопроверки ¨ Функции ¨ n 2 План Лекция 8 n План Пара заданий для самопроверки ¨ Функции ¨ n n n ¨ Подпрограмма как алгоритмическая структура Функции в языке Си Передача параметров Возврат значений Примеры функций Функции: что еще? n Игнорирование возвращаемого значения Тип функции по умолчанию Неопределенное значение функции Тип и аргументы функции main() n Функции с переменным числом параметров n n n ¨ Функции и структура программы n n n Программа из одного файла Программа из многих файлов Области видимости переменных

Пара заданий для самопроверки n n Задание «Поразрядные операции» Задание «Оператор выбора» Пара заданий для самопроверки n n Задание «Поразрядные операции» Задание «Оператор выбора»

4 Пара заданий для самопроверки Задание «Поразрядные операции» n Что выведет программа? p=1111 q=11110000 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 Для выражения укажите порядок 5 Пара заданий для самопроверки Экзаменационная работа. Задание 1. n Для выражения укажите порядок вычисления, промежуточные результаты вычисления подвыражений и их тип. Укажите также значения и тип окончательного результата вычисления выражения, стоящего справа от оператора присваивания, и значение с его типом, сохраняемое в переменной, стоящей слева от оператора присваивания. 2, unsigned int 2, unsigned long int 3, int 3 unsigned long int 3 int

Функции n n n Подпрограмма как алгоритмическая структура Функции в языке Си Передача параметров Функции n n n Подпрограмма как алгоритмическая структура Функции в языке Си Передача параметров Возврат значений Примеры функций

7 Функции Алгоритмические структуры n Базовые алгоритмические структуры ¨ Следование ! ¨ Повторение ¨ 7 Функции Алгоритмические структуры n Базовые алгоритмические структуры ¨ Следование ! ¨ Повторение ¨ Ветвление Подпрограмма – еще одна алгоритмическая структура

Функции Алгоритмические структуры n Алгоритмические структуры вкладываются друг в друга 8 Функции Алгоритмические структуры n Алгоритмические структуры вкладываются друг в друга 8

Функции Подпрограммы n Часто при построении алгоритмов приходится использовать алгоритмы, составленные ранее n Алгоритмы, Функции Подпрограммы n Часто при построении алгоритмов приходится использовать алгоритмы, составленные ранее n Алгоритмы, целиком используемые в составе других алгоритмов, называются вспомогательными (или подчиненными) n В алгоритмических языках вспомогательные алгоритмы оформляются в виде подпрограмм (процедур, функций) 9

10 Функции Подпрограммы Вернуться домой 1. Позвонить в звонок 2. Если никто не открывает 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. Позвонить в звонок 11 Функции Подпрограммы Вернуться домой Позвонить в звонок Вернуться домой 1. Позвонить в звонок 2. Если никто не открывает 3. Открыть замок 4. Отворить дверь 5. Иначе 6. Приветствовать открывшего 7. Переступить порог 8. Вытереть обувь о коврик 9. Сказать «Вот я и дома!» Да Нет Никто не открывает? Открыть замок Отворить дверь Приветствовать открывшего Переступить порог Вытереть обувь о коврик Сказать «Вот я и дома!»

12 Функции Подпрограммы Позвонить в звонок 1. Повторять 3 раза 2. Нажать на кнопку 12 Функции Подпрограммы Позвонить в звонок 1. Повторять 3 раза 2. Нажать на кнопку звонка Заголовок подпрограммы Тело подпрограммы Вернуться домой 1. Позвонить в звонок 2. Если никто не открывает 3. Открыть замок 4. Отворить дверь 5. Иначе 6. Приветствовать открывшего 7. Переступить порог 8. Вытереть обувь о коврик 9. Сказать «Вот я и дома!» Вызов подпрограммы

13 Функции Подпрограммы n Вызов подпрограммы приводит к выполнению ее тела Программа 1. Функция 13 Функции Подпрограммы n Вызов подпрограммы приводит к выполнению ее тела Программа 1. Функция 1 2. Функция 2 Функция 1 1. Шаг 1 2. Шаг 2 Функция 2 3. Шаг 3 4. Шаг 4 5. Шаг 5

14 Функции Подпрограммы n Использование подпрограмм ¨ сокращает описание алгоритма (выполнение одинаковых действий в 14 Функции Подпрограммы n Использование подпрограмм ¨ сокращает описание алгоритма (выполнение одинаковых действий в разных местах программы) ¨ структурирует описание алгоритма (разбивка программы (или другой подпрограммы) на подзадачи для лучшего восприятия) ¨ позволяет реализовать на практике принципы структурного программирования при построении больших программ Задача Подзадача 1 1. 2 1. 3 Подзадача 2 2. 1 2. 2 Подзадача 3 2. 3 3. 1 3. 2 3. 3

15 Функции Подпрограммы в Си n n В Си подпрограммы реализуются в виде функций 15 Функции Подпрограммы в Си n n В Си подпрограммы реализуются в виде функций Выполнение программы начинается с вызова функции main(), которая вызывает другие функции #include Заголовок функции main() Вызов функции scanf() void main() { int i, j, n, m; printf(“n=”); scanf(“%d”, &n); printf(“m=”); scanf(“%d”, &m); for(i=1; i<=n; i++) Тело функции main() { for(j=1; j<=m; j++) printf(“*”); printf(“n”); } } Вызов функции printf()

16 Функции в Си n Как описать собственную (нестандартную) функцию? n Описание функции должно 16 Функции в Си n Как описать собственную (нестандартную) функцию? n Описание функции должно располагаться ранее вызова этой функции Вызов функции Вариант 1 n Вариант 2 #include void starbar() { … } void starbar(); void main() { … starbar(); … } void starbar() { … } Объявление функции – до использования Вызов функции Описание функции -где угодно (может быть и в другом файле)

17 Функции в Си n Как описать собственную (нестандартную) функцию? Функция, выводящая на экран 17 Функции в Си n Как описать собственную (нестандартную) функцию? Функция, выводящая на экран строку из звездочек #include void starbar() { int count; for (count=1; count <=60; count++) printf(“*”); printf(“n”); } void main() { … starbar(); … }

18 Функции в Си n Как описать собственную (нестандартную) функцию? #include <stdio. h> void 18 Функции в Си n Как описать собственную (нестандартную) функцию? #include void starbar() { int count; for (count=1; count <=60; count++) printf(“*”); printf(“n”); } Вызов функции void main() { starbar(); printf(“Привет!”); starbar(); }

Функции в Си n После выполнения программы: ************************************ Привет! ************************************ 19 Функции в Си n После выполнения программы: ************************************ Привет! ************************************ 19

20 Функции в Си n Как описать функцию с параметрами? #include <stdio. h> Функция 20 Функции в Си n Как описать функцию с параметрами? #include Функция с параметром Вызов функции с параметром void starbar() { … } void spaces(int n) { int count; for (count=1; count <=n; count++) printf(“ ”); printf(“n”); } void main() { starbar(); spaces(27); printf(“Привет!”); starbar(); } Формальный параметр Фактический параметр – константа

Функции в Си n После выполнения программы: ************************************ Привет! ************************************ 21 Функции в Си n После выполнения программы: ************************************ Привет! ************************************ 21

22 Функции в Си n Как описать функцию с параметрами? #include <stdio. h> void 22 Функции в Си n Как описать функцию с параметрами? #include void starbar() { } … void spaces(int n) { int count; for (count=1; count <=n; count++) printf(“ ”); printf(“n”); } Вызов функции с параметром void main() { int space_num=27; starbar(); spaces(space_num); printf(“Привет!”); starbar(); } Формальный параметр Фактический параметр – переменная

23 Функции в Си n Как описать функцию с параметрами? #include <stdio. h> void 23 Функции в Си n Как описать функцию с параметрами? #include void starbar() { } Формальный параметр … void spaces(int n) { int count; for (count=1; count <=n; count++) printf(“ ”); printf(“n”); } Вызов функции с параметром void main() { starbar(); spaces((60 -7)/2); starbar(); } printf(“Привет!”); Фактический параметр – выражение

24 Функции в Си n Как описать функцию с несколькими параметрами? #include <stdio. h> 24 Функции в Си n Как описать функцию с несколькими параметрами? #include Вызов функции с параметрами void starbar(int n, int m) { int i, j; for (i=1; i <=n; i++) { for (j=1; j <=m; j++) printf(“*”); printf(“n”); } } void main() { starbar(4, 15); } Формальные параметры: перечисляются с указанием типа через запятую Фактические параметры

Функции в Си n После выполнения программы: *************** 25 Функции в Си n После выполнения программы: *************** 25

26 Функции в Си Параметры функций • в заголовке функции перечисляются формальные параметры, они 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 <stdio. h> y = 28 Функции в Си n Функция как «черный ящик» #include y = f(x 1, x 2) x 1 x 2 Вход f Функция: внутренний механизм скрыт y void starbar() { int count; … } void spaces(int n) { int count; … } Выход void main() { starbar(); spaces(27); starbar(); } Механизм скрыт от головной и прочих функций Выход – последовательность пробелов printf(“Привет!”); Вход

29 Функции в Си n Возвращаемое значение функции void указывает на отсутствие возвращаемого значения 29 Функции в Си n Возвращаемое значение функции void указывает на отсутствие возвращаемого значения #include void starbar(int n, int m) { int i, j; for (i=1; i <=n; i++) { for (j=1; j <=m; j++) printf(“*”); printf(“n”); } } void main() { starbar(4, 15); }

30 Функции в Си n Возвращаемое значение функции При наличии возвращаемого значения нужно указать 30 Функции в Си n Возвращаемое значение функции При наличии возвращаемого значения нужно указать его тип Выходная величина возвращается оператором return #include double max(double a, double b) { if (a > b) return a; else return b; } void main() { double x=10. 5, y=20; printf(“max(%lf, %lf) = %lfn”, x, y, max(x, y)); } После выполнения return функция прекращает свою работу

31 Функции в Си n Возвращаемое значение функции #include <stdio. h> Функция без возвращаемого 31 Функции в Си n Возвращаемое значение функции #include Функция без возвращаемого значения Оператор return используется без аргумента void Write. Positive(int a) { if (a < 0) return; printf(“%d”, a); } void main() { int n= 10, p=100; Write. Positive(n); Write. Positive(p); } Выполнение return прекращает работу функции

Функции в Си n После выполнения программы: 100 32 Функции в Си n После выполнения программы: 100 32

Функции: резюме n Шаблон описания функции <тип-результата> <имя-функции> (<список параметров, если есть>) { <объявления> Функции: резюме n Шаблон описания функции <тип-результата> <имя-функции> (<список параметров, если есть>) { <объявления> <инструкции> } n Шаблон определения функции <тип-результата> <имя-функции> (<список параметров, если есть>); n В определении можно опускать имена параметров (только типы) До вызова функции – ее описание или определение Если нет возвращаемого значения, <тип-результата> = void n Возврат результата и прекращение функции: n n return <результат>; или ¨ return; ¨ n Параметры передаются по значению фактические параметры могут быть константами и выражениями ¨ формальные параметры – локальные переменные ¨ 33

34 Функции Как поменять местами? 2 Задача: поменять местами содержимое двух чашек. 3 1 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 * 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 Задача: составить функцию, которая вычисляет наибольшее из двух значений, и 37 Функции: пример 1 Задача: составить функцию, которая вычисляет наибольшее из двух значений, и привести пример ее использования Функция: тип результата формальные параметры int Max ( int a, int b ) { if ( a > b ) return a ; else return b ; } return - вернуть результат функции

38 Функции: пример 2 Задача: составить функцию, которая определяет, верно ли, что заданное число 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 ) перебор только 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 <stdio. h> int Prime ( int N ) {. 40 Функции: пример 2 #include int Prime ( int N ) {. . . } функция main() { int N; printf ( "Введите целое числоn" ); scanf ( "%d", &N ); if ( Prime( N ) ) Prime( N ) printf ("%d - простое число", N); else printf ("%d - составное число", N); }

Функции Упражнения 1. Описать функцию, которая определяет сумму всех чисел от 1 до N Функции Упражнения 1. Описать функцию, которая определяет сумму всех чисел от 1 до N и привести пример ее использования. Пример: Введите число: 100 сумма чисел от 1 до 100 = 5050 2. Составить функцию, которая определяет, сколько зерен попросил положить на N-ую клетку изобретатель шахмат (на 1 -ую – 1 зерно, на 2 -ую – 2 зерна, на 3 -ю – 4 зерна, …) Пример: Введите номер клетки: 28 На 28 -ой клетке 134217728 зерен. 41

Функции Упражнения 3. Составить функцию, которая определяет наибольший общий делитель двух натуральных и привести Функции Упражнения 3. Составить функцию, которая определяет наибольший общий делитель двух натуральных и привести пример ее использования. Пример: Введите два числа: 14 21 НОД(14, 21)=7 4. Составить функцию, которая вычисляет функцию синус как сумму ряда (с точностью 0. 001) Пример: Введите угол в градусах: 45 sin(45) = 0. 707 42

Функции Упражнения 5. Составить функцию, которая определяет, верно ли, что сумма его цифр – Функции Упражнения 5. Составить функцию, которая определяет, верно ли, что сумма его цифр – четное число. Пример: Введите число: 136 245 Сумма цифр четная. Сумма цифр нечетная. 6. Составить функцию, которая определяет, верно ли, что в заданном числе все цифры образуют возрастающую последовательность. Пример: Введите число: 258 528 Верно. Неверно. 43

Вопросы и ответы Вопросы? n Функции ¨ ¨ ¨ Подпрограмма как алгоритмическая структура Функции Вопросы и ответы Вопросы? n Функции ¨ ¨ ¨ Подпрограмма как алгоритмическая структура Функции в языке Си Передача параметров Возврат значений Примеры функций 44