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

тема 07.ppt

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

Модуль 7. Функции Описание и использование функций. Параметры функции. Рекурсия. 1 Модуль 7. Функции Описание и использование функций. Параметры функции. Рекурсия. 1

inline Функции [ класс ] тип имя ([ список_формальных параметров ]){ тело функции } inline Функции [ класс ] тип имя ([ список_формальных параметров ]){ тело функции } Класс: extern — глобальная видимость во всех модулях программы (по умолчанию); static — видимость только в пределах модуля, в котором определена функция. int* f(){ Возврат значения функции 1) return выражение; 2) return; int a = 5; return &a; // нельзя! } void f 2(){ return 1; } //неправильно, f 2 не должна возвращать значение double f 3{ return 1; } //правильно, 1 преобразуется к типу double 2

Объявление и определение функции #include <iostream. h> int sum(int a, int b); int main(){ Объявление и определение функции #include int sum(int a, int b); int main(){ int a = 2, b = 3, c, d; c = sum(a, b); cin >> d; cout << sum(c, d); } int sum(int a, int b){ return (a + b); } // объявление // вызов // определение 3

Пример использования функции начало а P=pr(a) начало pr=3*x конец p конец int main () Пример использования функции начало а P=pr(a) начало pr=3*x конец p конец int main () {float a; printf (“input a”); scanf (“%f”, &a); float p; p=pr(a); printf (“perimetr=%f”, p); } float pr(float x); { return 3*x; } Вычислить периметр равностороннего треугольника 4

Использование функцией глобальных переменных int a, b; //глобальные переменные void change() {int r; //локальная Использование функцией глобальных переменных int a, b; //глобальные переменные void change() {int r; //локальная переменная r=a; a=b; b=r; } void main() { cin>>a, b; change(); cout<<”a=”<

Локальные статические переменные #include <iostream. h> n m void f(int a){ 0 0 cout Локальные статические переменные #include n m void f(int a){ 0 0 cout << "n mn"; 1 0 while (a--){ 2 0 static int n = 0; int m = 0; cout << n++ << ' ' << m++ << 'n'; } } int main(){ f(3); } 6

Передача параметров по значению double square(double a, double b, double c) {//функция возвращает площадь Передача параметров по значению double square(double a, double b, double c) {//функция возвращает площадь //треугольника, заданного длинами //сторон а, b, c double s, p=(a+b+c)/2; return s=sqrt(p*(p-a)*(p-b)*(p-c)); //формула Герона } Вызов: 1) s 1=square(2. 5, 2, 1); 2) double a=2. 5, b=2, c=1; double s 2=square(a, b, c); Стек: p s c 1 b 2 a 2. 5 7

Передача параметров по ссылке void swap( int &a, int &b ) // определение функции Передача параметров по ссылке void swap( int &a, int &b ) // определение функции обмена // значениями двух переменных { int t = a; a = b; b = t; } //. . . int x = 5, y = 6; swap( x, y ); // вызов функции обмена 8

Пример использования различных способов передачи параметров #include <iostream. h> void f(int i, int* j, Пример использования различных способов передачи параметров #include void f(int i, int* j, int& k); int main(){ int i = 1, j = 2, k = 3; cout <<“ i j kn"; cout <<“до ” << i <<' '<< j <<' '<

Сумма элементов одномерного массива #include <iostream. h> int sum(const int* mas, const int n); Сумма элементов одномерного массива #include int sum(const int* mas, const int n); int const n = 10; void main(){ int marks[n] = {3, 4, 5, 4, 4}; cout << "Сумма эл-в: " << sum(marks, n); } int sum(const int* mas, const int n){ // варианты: int sum(int mas[], int n) // или int sum(int mas[n], int n) // (величина n должна быть константой) int s = 0; for (int i = 0; i

Сумма элементов двумерного массива. . . int sum(const int *a, const int nstr, const Сумма элементов двумерного массива. . . int sum(const int *a, const int nstr, const int nstb); void main(){ int b[2][2] = {{2, 2}, {4, 3}}; printf(" %dn", sum(&b[0][0], 2, 2)); int i, j, nstr, nstb, *a; printf("Введите кол. строк и столбцов: n"); scanf("%d%d", &nstr, &nstb); a = (int *)malloc( nstr * nstb * sizeof(int) ); for (i = 0; i

Функция вычисления суммы элементов двумерного массива int sum(const int *a, const int nstr, const Функция вычисления суммы элементов двумерного массива int sum(const int *a, const int nstr, const int nstb){ int i, j, s = 0; for (i = 0; i

Пример 3 - сумма элементов массива. . . int sum(const int **a, const int Пример 3 - сумма элементов массива. . . int sum(const int **a, const int nstr, const int nstb); void main(){ int nstr, nstb; cin int a = for >> nstb; **a; new int* [nstr]; (int i = 0; i

Пример 3 - сумма элементов массива int sum(const int **a, const int nstr, const Пример 3 - сумма элементов массива int sum(const int **a, const int nstr, const int nstb){ int i, j, s = 0; for (i = 0; i

Передача двумерных массивов в функции (альтернативный способ) #include <iostream> using namespace std; int sum(const Передача двумерных массивов в функции (альтернативный способ) #include using namespace std; int sum(const int **a, const int nstr, const int nstb); void main() { int nstr, nstb; cin >> nstr >> nstb; int **a; a = new int* [nstr]; for (int i = 0; i

Умалчивание значений параметров void print(char*name=”Номер дома: ”, int value=1) {cout<<”n”<<name<<value; } Вызовы: 1. print(); Умалчивание значений параметров void print(char*name=”Номер дома: ”, int value=1) {cout<<”n”<

Функции с переменным числом параметров Определение функции с переменным числом параметров: тип имя (явные Функции с переменным числом параметров Определение функции с переменным числом параметров: тип имя (явные параметры, . . . ) {тело функции } int printf(const char*. . . ); printf("Введите исходные данные"); printf("Сумма: %5. 2 f рублей", sum); printf("%d %d", a, b, c, d); Для доступа к необязательным параметрам внутри функции используются макросы библиотеки va_start, va_arg и va_end, находящиеся в заголовочном файле . 17

Перегрузка функций int max(int, int); char* max(char*, char*); int max (int, char*); int max Перегрузка функций int max(int, int); char* max(char*, char*); int max (int, char*); int max (char*, int); void f(int a, int b, char* c, char* d){ cout << max (a, b) << max(c, d) << max(a, c) << max(c, b); } 18

Неоднозначность может появиться при: lпреобразовании типа; lиспользовании параметров-ссылок; lиспользовании аргументов по умолчанию. #include <iostream. Неоднозначность может появиться при: lпреобразовании типа; lиспользовании параметров-ссылок; lиспользовании аргументов по умолчанию. #include float f(float i){. . . } double f(double i){. . . } int main(){ float x = 10. 09; double y = 10. 09; cout << f(x) << endl; cout << f(y) << endl; // cout << f(10) << endl; Неоднозначность! } 19

Неоднозначность #include <iostream. h> int f(int a){return a; } int f(int a, int b Неоднозначность #include int f(int a){return a; } int f(int a, int b = 1){return a * b; } int main(){ cout << f(10, 2); /* cout << f(10); Неоднозначность — что вызывается: f(int, int) или f(int) ? */ } int f(int a, int b) {…} int f(int a, int &b) {…} 20

Функция main() // без параметров: тип main(){. . . } // с двумя параметрами: Функция main() // без параметров: тип main(){. . . } // с двумя параметрами: тип main(int argc, char* argv[]){. . . } #include void main(int argc, char* argv[]){ for (int i = 0; i

Рекурсивные функции n!=n*(n-1)*… 2*1 0!=1 1!=1 long fact(long n){ if (n==0 || n==1) return Рекурсивные функции n!=n*(n-1)*… 2*1 0!=1 1!=1 long fact(long n){ if (n==0 || n==1) return 1; return (n * fact(n - 1)); } Или: long fact(long n){ return (n > 1) ? n * fact(n - 1) : 1; } 22