тема 07.ppt
- Количество слайдов: 22
Модуль 7. Функции Описание и использование функций. Параметры функции. Рекурсия. 1
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
Пример использования функции начало а 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; //локальная переменная r=a; a=b; b=r; } void main() { cin>>a, b; change(); cout<<”a=”<
Локальные статические переменные #include
Передача параметров по значению 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 ) // определение функции обмена // значениями двух переменных { int t = a; a = b; b = t; } //. . . int x = 5, y = 6; swap( x, y ); // вызов функции обмена 8
Пример использования различных способов передачи параметров #include
Сумма элементов одномерного массива #include
Сумма элементов двумерного массива. . . 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 nstb){ int i, j, s = 0; for (i = 0; i
Пример 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 int nstb){ int i, j, s = 0; for (i = 0; i
Передача двумерных массивов в функции (альтернативный способ) #include
Умалчивание значений параметров 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, находящиеся в заголовочном файле
Перегрузка функций 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
Неоднозначность #include
Функция main() // без параметров: тип main(){. . . } // с двумя параметрами: тип main(int argc, char* argv[]){. . . } #include
Рекурсивные функции 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