Скачать презентацию Основы программирования язык C Функции 1 Основы Скачать презентацию Основы программирования язык C Функции 1 Основы

Лекция - СС++ Функции.pptx

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

Основы программирования: язык C++ Функции 1 Основы программирования: язык C++ Функции 1

Основы программирования/С++ Функции 2 Основы программирования/С++ Функции 2

Основы программирования/C++/Функции • Функция – именованная программная единица, вызываемая из других частей программы и Основы программирования/C++/Функции • Функция – именованная программная единица, вызываемая из других частей программы и выполняющая какое-либо законченное действие. • Программа на С состоит из функций, одна из которых – main() 3

Основы программирования/C++/Функции • Вызов функции – передача функции управления, её исполнение и последующий возврат Основы программирования/C++/Функции • Вызов функции – передача функции управления, её исполнение и последующий возврат в точку вызова. void F(){ ------------------------A(); //вызов ------------------} void A(){ ------------------------------------------} 4

Основы программирования/C++/Функции Определение функции – описание ее заголовка и тела (операторной части) Объявление функции Основы программирования/C++/Функции Определение функции – описание ее заголовка и тела (операторной части) Объявление функции (прототип, сигнатура) – только заголовок Пример. int min(int a, int b); // объявление … int min(int a, int b) // определение { return a < b ? a : b; }; 5

Основы программирования/C++/Функции Синтаксис определения функции. тип имя (формальные_параметры) { оператор; . . . } Основы программирования/C++/Функции Синтаксис определения функции. тип имя (формальные_параметры) { оператор; . . . } В заголовке указывается тип возвращаемого функцией значения 6

Основы программирования/C++/Функции Пример. int min (int a, int b) //заголовок { //тело if (a Основы программирования/C++/Функции Пример. int min (int a, int b) //заголовок { //тело if (a < b) return a; else return b; } void main() { int a, b; cin >> a >> b; int c = min(a, b); //вызов cout << "min=" << c << endl; } 7

Основы программирования/C++/Функции Локальные данные – переменные, определенные внутри функции. • Область действия – только Основы программирования/C++/Функции Локальные данные – переменные, определенные внутри функции. • Область действия – только внутри этой функции • Память выделяется при вызове функции (в программном стеке) • При выходе из функции память освобождается 8

Основы программирования/C++/Функции Пример. int x; //глобальная переменная int f() { int y; //локальная переменная Основы программирования/C++/Функции Пример. int x; //глобальная переменная int f() { int y; //локальная переменная y = 1; x = 2; } void main() { int z; //локальная переменная z = 3; // y = 4; - неверно x = 5; } 9

Основы программирования/C++/Функции Пример 2. Перекрытие имени. int x; //глобальная переменная int f() { int Основы программирования/C++/Функции Пример 2. Перекрытие имени. int x; //глобальная переменная int f() { int x; //локальная переменная x = 1; //присваивание локальной } void main() { x = 2; //присваивание глобальной } 10

Основы программирования/C++/Функции Параметры – специальные локальные переменные, через которые вызываемая функция обменивается данными с Основы программирования/C++/Функции Параметры – специальные локальные переменные, через которые вызываемая функция обменивается данными с вызывающей. Формальные параметры – параметры, указываемые при определении функции Фактические параметры – параметры, подставляемые на место формальных при вызове функции. 11

Основы программирования/C++/Функции Пример. int min (int x, int y) //формальные { if (x < Основы программирования/C++/Функции Пример. int min (int x, int y) //формальные { if (x < y) return x; else return y; } void main() { int a, b; cin >> a >> b; int c = min(a+1, b-1); //фактические cout << "min=" << c << endl; } 12

Основы программирования/C++/Функции Количество и типы фактических параметров должны соответствовать количеству и типам формальных параметров! Основы программирования/C++/Функции Количество и типы фактических параметров должны соответствовать количеству и типам формальных параметров! 13

Основы программирования/C++/Функции При вызове параметры могут передаваться: а) по значению: копия значения фактического параметра Основы программирования/C++/Функции При вызове параметры могут передаваться: а) по значению: копия значения фактического параметра передается формальному параметру; обратной связи нет, поэтому этот способ – для входных параметров б) по ссылке &: формальный параметр получает ссылку на внешнюю фактическую переменную, поэтому все действия происходят с этой переменной – для выходных параметров 14

Основы программирования/C++/Функции Пример. void inc 2(int x, int & y) { x++; y++; cout Основы программирования/C++/Функции Пример. void inc 2(int x, int & y) { x++; y++; cout << x << " " << y << endl; return; } void main() { int a = 1, b = 1; cout << a << " " << b << endl; inc 2(a, b); cout << a << " " << b << endl; } 1 1 На экране: 2 2 15

Основы программирования/C++/Функции • Побочный эффект – неявное изменение функцией не принадлежащих ей данных. • Основы программирования/C++/Функции • Побочный эффект – неявное изменение функцией не принадлежащих ей данных. • Побочный эффект нежелателен, так как неявный доступ функции может сделать логику программ запутанной и приводить к алгоритмическим ошибкам. 16

Основы программирования/C++/Функции Пример. Побочный эффект int x; //глобальная переменная void inc() { x++; //побочный Основы программирования/C++/Функции Пример. Побочный эффект int x; //глобальная переменная void inc() { x++; //побочный эффект } void main() { x = 0; inc(); cout << x; // 3 ? но почему? !!! } Лучше сделать так: (см. далее) 17

Основы программирования/C++/Функции Пример (продолжение). Побочный эффект int x; //глобальная переменная void inc(int & x) Основы программирования/C++/Функции Пример (продолжение). Побочный эффект int x; //глобальная переменная void inc(int & x) //явная передача перемен. { x++; } void main() { x = 0; inc(x); cout << x; // 3. все понятно. } 18

Основы программирования/C++/Функции • Нисходящее программирование – разбиение задачи на подзадачи меньшей сложности, каждую из Основы программирования/C++/Функции • Нисходящее программирование – разбиение задачи на подзадачи меньшей сложности, каждую из которых решает отдельная функция. Задача A A 11 A 2 A 12 A 21 19

Основы программирования/C++/Функции Пример. Дан линейный целочисленный массив a 1, a 2, …, an. Найти Основы программирования/C++/Функции Пример. Дан линейный целочисленный массив a 1, a 2, …, an. Найти и обменять местами максимальный и минимальный элементы массива. //Определения и подключения #include #include #include #include using namespace std; const int n = 10; typedef int Vector[n]; 20

Основы программирования/C++/Функции void main() //Функция main–в конце текста программы { Vector a; Random. Vector(a); Основы программирования/C++/Функции void main() //Функция main–в конце текста программы { Vector a; Random. Vector(a); cout << "Array" << endl; Print. Vector(a); int imin = Min. Index(a); int imax = Max. Index(a); swap(a[imin], a[imax]); cout << "Array" << endl; Print. Vector(a); system("PAUSE"); return; } 21

Основы программирования/C++/Функции //Функция выводит массив на экран void Print. Vector(Vector a) { for(int i Основы программирования/C++/Функции //Функция выводит массив на экран void Print. Vector(Vector a) { for(int i = 0; i < n; i++) cout << setw(4) << a[i]; cout << endl; return; } //Функция заполняет массив случайными числами void Random. Vector(Vector & a) { srand(time(NULL)); for (int i=0; i

Основы программирования/C++/Функции //Функция возвращает индекс минимального //элемента массива а int Min. Index(Vector a) { Основы программирования/C++/Функции //Функция возвращает индекс минимального //элемента массива а int Min. Index(Vector a) { int imin = 0; for(int i = 1; i < n; i++) { if (a[i] < a[imin]) imin = i; } return imin; } 23

Основы программирования/C++/Функции //Функция возвращает индекс максимального //элемента массива а int Max. Index(Vector a) { Основы программирования/C++/Функции //Функция возвращает индекс максимального //элемента массива а int Max. Index(Vector a) { int imax = 0; for(int i = 1; i < n; i++) { if (a[i] > a[imax]) imax = i; } return imax; } 24

Основы программирования/C++/Функции //Функция обменивает значениями две //целые переменные x и y void swap(int &x, Основы программирования/C++/Функции //Функция обменивает значениями две //целые переменные x и y void swap(int &x, int &y) { int tmp = x; x = y; y = tmp; return; } 25

Основы программирования/С++ Особенности функций в С/С++ 26 Основы программирования/С++ Особенности функций в С/С++ 26

Основы программирования/C++/Функции В языке С/С++ имеется ряд механизмов и особенностей, делающих использование функций более Основы программирования/C++/Функции В языке С/С++ имеется ряд механизмов и особенностей, делающих использование функций более гибким. Это: 1. 2. 3. 4. 5. 6. Встраиваемые функции Передача параметров по умолчанию Статические переменные Перегрузка функций Шаблоны функций … 27

Основы программирования/C++/Функции 1. Встраиваемые функции (inline) это функции, вызов которых компилятор попытается оптимизировать, вставив Основы программирования/C++/Функции 1. Встраиваемые функции (inline) это функции, вызов которых компилятор попытается оптимизировать, вставив в место обращения к функции ее тело, а не код вызова. Компилятор это делать не обязан, но следуя своей логике - попытается. Обычно для коротких, но критичных по времени исполнения функций. Пример. inline double sqrt(double x) { return x*x; } 28

Основы программирования/C++/Функции 2. Передача параметров по умолчанию Некоторые из последних по списку формальных параметров Основы программирования/C++/Функции 2. Передача параметров по умолчанию Некоторые из последних по списку формальных параметров функции могут иметь значения, заданные по умолчанию. Тогда могут отсутствовать соответствующие им фактические параметры void f(int a, int b, int c=1, int d=0) {. . . } 29

Основы программирования/C++/Функции Пример. int sum (int a, int b=0, int c=0) { return a Основы программирования/C++/Функции Пример. int sum (int a, int b=0, int c=0) { return a + b + c; } void main() { int x, y, z; x = sum(10, 20, 30); y = sum(10, 20); z = sum(10); } 30

Основы программирования/C++/Функции 3. Статические переменные (static) это локальные переменные, которые инициализируются только один раз Основы программирования/C++/Функции 3. Статические переменные (static) это локальные переменные, которые инициализируются только один раз - при первом вызове функции и сохраняют свое значение даже после выхода из функции. Фактически, время жизни этих переменных продолжается до окончания работы программы. Они размещаются в специальной памяти (статической), а не вместе с экземпляром функции 31

Основы программирования/C++/Функции Пример. void f () { int a = 0; static int b Основы программирования/C++/Функции Пример. void f () { int a = 0; static int b = 0; a++; b++; cout << a << “ “ << b << endl; return; } void main() { f(); 1 1 f(); 1 2 f() 1 3 } 32

Основы программирования/C++/Функции 4. Перегрузка функций - определение нескольких одноимнных функций, различающихся числом и/или типа Основы программирования/C++/Функции 4. Перегрузка функций - определение нескольких одноимнных функций, различающихся числом и/или типа параметров. Обычно так реализуют сходные по своему назначению функции, но отличающиеся типами обрабатываемых данных. 33

Основы программирования/C++/Функции Компилятор «принимает решение» , с каким именно определением функции связать вызов, использую Основы программирования/C++/Функции Компилятор «принимает решение» , с каким именно определением функции связать вызов, использую следующие критерии: 1. совпадение числа параметров 2. совпадение типов параметров 3. возможность приведения к близкому типу параметра (напр. , int к long int) 4. приведение к допустимому типу (напр. , int к float) 34

Основы программирования/C++/Функции Пример. int max (int a, int b) { return a > b Основы программирования/C++/Функции Пример. int max (int a, int b) { return a > b ? a : b; } float max (float { if ( a > b) else return } void main() { cout << max } a, float b) return a; b; (1, 2); //первое определение (1. 5, 2. 5); //второе опред. (1, 2. 0); //второе опред. 35

Основы программирования/C++/Функции 5. Шаблон функции - определение обобщенного алгоритма, не привязанного к конкретному типу Основы программирования/C++/Функции 5. Шаблон функции - определение обобщенного алгоритма, не привязанного к конкретному типу обрабатываемых данных. Обычно так реализуют алгоритм, для которого тип обрабатываемых им данных определяется уже при вызове этой функции. Говорят, что шаблон параметризуется типом данных. 36

Основы программирования/C++/Функции Синтаксис шаблона функции: template <тип 1 T 1, тип 2 T 2, Основы программирования/C++/Функции Синтаксис шаблона функции: template <тип 1 T 1, тип 2 T 2, …> тип имя (параметры) {тело} В угловых скобках указаны типы-параметры, которые могут использоваться в определении функции, но которые конкретизируются при вызове этой функции 37

Основы программирования/C++/Функции Инстансцирование шаблона – задание конкретных типов для типов-параметров при вызове функции. Бывает: Основы программирования/C++/Функции Инстансцирование шаблона – задание конкретных типов для типов-параметров при вызове функции. Бывает: явное инстансцирование – явно указываем типы при вызове неявное инстансцирование – типы определяется компилятором самостоятельно на основании типов фактических параметров 38

Основы программирования/C++/Функции Пример. template <class T> T max (T a, T b) { return Основы программирования/C++/Функции Пример. template T max (T a, T b) { return a > b ? a : b; } void main() { int x; float y; x = max(1, 2); //явное y = max(1. 0, 2. 0); //явное x = max (3, 4); //неявное } 39

Основы программирования/C++/Функции с 40 Основы программирования/C++/Функции с 40

Основы программирования/C++/Функции с 41 Основы программирования/C++/Функции с 41