Похожие презентации:
5_1 функции
1.
ФУНКЦИИЧАСТЬ 1
ОСНОВНЫЕ ПОНЯТИЯ
ПАРАМЕТРЫ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ПРОТОТИПЫ
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
1
2. Функции в С++
Знакомимся с понятием функций в С++Основные понятия, параметры, параметры
по умолчанию, возвращаемое значение
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
2
3. Типы данных auto и decltype
Ключев#ое слово auto применяется для реализации автоматическоговыведения типа при условии, что задан явный инициализатор. Компилятор
устанавливает тип переменной в тип инициализирующего значения:
// maton получает тип int
auto maton = 112;
Ключевое слово decltype создает переменную типа, который указан
выражением.
double x;
int n;
// s получает тот же тип, что и n, т.е. int
decltype(n) s;
// q получает тот же тип, что и х*n, т.е. double
decltype(x*n) q;
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
3
4. Синтаксис объявления
Основные правила■ Функция объявляется до функции main.
■ Нельзя создавать одну
функцию внутри другой.
#include<iostream>
using namespace std;
■ Нельзя вызвать функцию
функция
до ее объявления.
int main()
{
...
■ Функция объявляется с помощью прототипа
return 0;
}
#include<iostream>
using namespace std;
прототип
int main()
{
...
return 0;
}
функция
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
4
5. Основные понятия
Параметры — входныеданные, которые необходимы
функции для работы над
кодом Например, (int a, bool
b)
Возвращаемое значение — результат
работы функции.
На место возвращаемого значения
подставляется любой из базовых
типов (int, bool и т.д.).
Если функция ничего не возвращает,
на место возвращаемого значения
подставляется void (пусто)
ВОЗВРАЩАЕМОЕ_ЗНАЧЕНИЕ ИМЯ_ФУНКЦИИ
(ПАРАМЕТРЫ)
{
БЛОК_ПОВТОРЯЮЩЕГОСЯ_КОДА (ТЕЛО);
return ЗНАЧЕНИЕ;
}
return — обязательно использовать если функция возвращает значение,
после return ставится значение или переменная тип которой
соответствует типу возвращаемого значения.
Лектор Паршина
Галина Ивановна
Инструкций return может быть несколько
ФУНКЦИИ
Инструкции после return не выполняются
5
6. Примеры создания и вызова функций
Функция, которая не принимает никаких параметрови не возвращает никакого значения.
#include <iostream>
using namespace std;
// создание функции
void Hello()
{ // показ на экран строки текста
cout<<"Hello, World!!!\n\n";
}
int main()
{
Hello(); // вызов
Hello(); // вызов
Hello(); // вызов
Hello(); // вызов
return 0;
Hello(); // вызов
Hello(); // вызов
return 0;
}
void main()
{ Hello(); // вызов
Hello(); // вызов
return;
Hello(); // вызов
Лектор Паршина
ФУНКЦИИ
Галина Ивановна
}
6
7. Примеры создания и вызова функций
Функция, которая принимает один параметри не возвращает никакого значения
#include <iostream>
using namespace std;
// рисует линию из звездочек длиной count
void Star(int count)
{
for(int i=0;i<count;i++)
cout<<'*';
cout<<"\n\n";
}
int main(){
Star(3); // показ линии из трех звездочек
Star(5); // показ линии из пяти звездочек
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
7
8. Примеры создания и вызова функций
Функция, которая принимает два параметраи не возвращает никакого значения
#include <iostream>
using namespace std;
// рисует линию из символа - symb, длиной count
void AnyLine(char symb, int count)
{
for(int i=0;i<count;i++)
cout<<symb;
cout<<"\n\n";
}
int main()
{
AnyLine('+',3);
AnyLine('=',5);
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
8
9. Примеры создания и вызова функций
Функция, которая принимает два параметраи не возвращает никакого значения
#include <iostream>
using namespace std;
// рисует линию из символа - symb, длиной count
void AnyLine(char symb, int count)
{
for(int i=0;i<count;i++)
cout<<symb;
cout<<"\n\n";
}
int main()
{
AnyLine('+',3); // показ линии из трех плюсов
AnyLine('=',5); // показ линии из пяти знаков
// равно
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
9
10. Примеры создания и вызова функций
Функция, которая принимает два параметраи возвращает значение
#include <iostream>
using namespace std;
// вычисляет степень (Pow) числа (Digit)
int MyPow(int Digit, int Pow)
{int key=1;
for(int i=0;i<Pow;i++)
key*=Digit;
return key;
}
int main(){
// запись возвращаемого результата в переменную
int res = MyPow(5,3);
cout<<"Res = "<<res<<"\n\n";
return 0;
}
cout<<"Res = "<<MyPow(5,3)<<"\n\n";
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
10
11. Хвостовой возвращаемый тип
Функция, которая принимает два параметраи возвращает значение
#include <iostream>
using namespace std;
// вычисляет степень (Pow) числа (Digit)
//auto MyPow(int Digit, int Pow) -> double
auto MyPow(int Digit, int Pow) -> decltype (Digit * Pow)
{int key=1;
for(int i=0;i<Pow;i++)
key*=Digit;
Хвостовой возвращаемый тип.
return key;
}
int main(){
// запись возвращаемого результата в переменную
int res = MyPow(5,3);
cout<<"Res = "<<res<<"\n\n";
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
11
12. Примеры создания и вызова функций
Функция, которая принимает два параметраи возвращает максимальное из двух значений:
#include <iostream>
#include <string>
using namespace std;
int Max(int a, int b)
{ return a>b? a: b;}
int main()
{
// Значение, которое вернул
// return можно записать в переменную
int result = Max(10,30);
cout<<"Maximum is: "<<result<<endl;
// Значение, которое вернул
// return можно сразу вывести на экран
cout<<"Maximum is: "<<Max(42,2);
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
12
13. Примеры создания и вызова функций
Функция, которая принимает три параметраи возвращает максимальное или минимальное из двух значений:
#include <iostream>
#include <string>
using namespace std;
int Max(int a, int b)
{ return a>b? a: b;}
int Min(int a, int b)
{ return a<b? a: b;}
int main()
{
// Значение, которое вернул
// return можно записать в переменную
int result = Max(10,30);
cout<<"Maximum is: "<<result<<endl;
// Значение, которое вернул
// return можно сразу вывести на экран
cout<<"Minimum is: "<<Min(42,2);
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
13
14. Примеры создания и вызова функций
Функция, которая принимает три параметраи возвращает максимальное или минимальное из двух значений:
#include <iostream>
#include <string>
using namespace std;
int Max_Min(int a, int b, bool var )
{ if (var) return a>b? a: b;
if (!var) return a<b? a: b;
}
int main()
{
// Значение, которое вернул
// return можно записать в переменную
int result = Max_Min (10,30,1);
cout<<"Maximum is: "<<result<<endl;
// Значение, которое вернул
// return можно сразу вывести на экран
cout<<"Minimum is: "<<Max_Min (42,2,0);
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
14
15. Примеры создания и вызова функций
Функция, которая принимает три параметраи возвращает максимальное или минимальное из двух значений:
#include <iostream>
#include <string>
using namespace std;
int Max_Min(int a, int b, bool var )
else return a<b? a: b;
{ if (var) return a>b? a: b;
if (!var) return a<b? a: b;
return a<b? a: b;
}
int main()
{
// Значение, которое вернул
// return можно записать в переменную
int result = Max_Min (10,30,1);
cout<<"Maximum is: "<<result<<endl;
// Значение, которое вернул
// return можно сразу вывести на экран
cout<<"Minimum is: "<<Max_Min (42,2,0);
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
15
16. Функции в С++
Знакомимсяс
понятиями
аргументы
(параметры) по умолчанию, вызов функции
из другой функции в С++
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
16
17. Аргументы (параметры) по умолчанию
Формальному параметру функции может быть задан аргумент поумолчанию. Это означает, что в данный аргумент значение при вызове
можно не передавать. В этом случае будет использовано значение по
умолчанию
тип_возвращаемого_значения имя_функции (тип_арг имя_арг =
значение_по_умолчанию)
void foot (int i, int j = 7); // допустимо
void foot (int i, int j = 2, int k); // недопустимо
void foot (int i, int j = 3, int k = 7); // допустимо
void foot (int i = 1, int j = 2, int k = 3); // допустимо
void foot (int i=- 3, int j); // недопустимо
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
17
18. Аргументы (параметры) по умолчанию
Пример#include <iostream>
#include <string>
using namespace std;
int Max_Min(int a, int b, bool var = 1 )
{ if (var) return a>b? a: b;
return a<b? a: b;
}
int main()
{
// Значение, которое вернул
// return можно записать в переменную
int result = Max_Min (10,30);
cout<<"Maximum is: "<<result<<endl;
// Значение, которое вернул
// return можно сразу вывести на экран
cout<<"Minimum is: "<<Max_Min (42,2,0);
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
18
19. Аргументы (параметры) по умолчанию
Пример#include <iostream>
using namespaсe std;
// рисует линию из звездочек длиной count
void Star(int count=20)
{ for(int i=0;i<count;i++)
cout<<'*';
cout<<"\n\n";
}
int main()
{
Star(); // показ линии из 20 звездочек
Star(5); // показ линии из пяти звездочек
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
19
20. Примеры создания и вызова функций
Вызов функции внутри другой функции#include <iostream>
#include <string>
using namespace std;
void Second()
{ cout<<"\nSecond function\n";}
void First()
{ cout<<"\nBegin first function\n";
Second();
cout<<"\nEnd first function\n";
}
int main()
{
Begin first function
First();
Second function
return 0;
End first function
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
20
21. Функции в С++
Знакомимся с понятием прототип функции вС++
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
21
22. Прототип функции
возвращаемое_значение имя_функции (аргументы / типы аргументов);библиотеки
возвращаемое_значение имя_функции (аргументы);
void main()
{
тело main;
}
возвращаемое_значение имя_функции(аргументы)
{
тело функции;
}
При передаче массивов в прототипе всегда нужно
указывать аргументы полностью, при передаче
переменных имя аргумента можно опускать
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
22
23. Прототип функции
возвращаемое_значение имя_функции (аргументы / типы аргументов);#include <iostream>
using namespace std;
// прототипы
void MyFunc();
void MyFuncNext();
int main()
{ MyFunc(); // MyFunc
MyFuncNext(); // MyFuncNext
return 0;
}
// описания
void MyFunc()
{ cout<<"MyFunc\n"; }
void MyFuncNext()
{ cout<<"MyFuncNext\n"; }
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
23
24. Прототип функции
возвращаемое_значение имя_функции (аргументы / типы аргументов);#include <iostream>
using namespace std;
// Должна менять значения переменных местами
void Change(int One, int Two);
void Change(int, int);
int main()
{ int a=1,b=2;
cout<<a<<" "<<b<<"\n\n";
// передача по значению
Change(a,b);
сout<<a<<" "<<b<<"\n\n";
return 0;
}
void Change(int One, int Two)
{
cout<<One<<" "<<Two<<"\n\n";
swap (One, Two);
cout<< One <<" "<< Two <<"\n\n";
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
24
25. Функции в С++
Знакомимсяс
понятием
передача
параметров по ссылке и по значению в С++
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
25
26. Передача аргументов
Аргументы, которые указываются при определении функции,называются формальными.
Они создаются в оперативной памяти в момент вызова функции.
При выходе из функции такие параметры будут уничтожены.
#include <iostream>
using namespace std;
// Должна менять значения переменных местами
void Change(int One, int Two)
{
cout<<One<<" "<<Two<<"\n\n";
swap (One, Two);
cout<< One <<" "<< Two <<"\n\n";
}
int main()
{ int a=1,b=2;
cout<<a<<" "<<b<<"\n\n";
// передача по значению
Change(a,b);
сout<<a<<" "<<b<<"\n\n";
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
12
12
21
12
1. В функцию передаются не a и b, а
их точные копии.
2. Все изменения происходят с
копиями (One и Two), при этом
сами a и b остаются неизменными.
3. При выходе из функции временные
копии уничтожаются.
26
27. Передача параметров по ссылке
int x = 5;int y = x;
cout << x<<" " << y;
x = 3;
cout << x << " " << y;
55
35
int x = 5;
int& y = x;
55
33
cout << x<<" " << y;
x = 3;
cout << x << " " << y;
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
27
28. Передача параметров по ссылке
Ссылочный параметр связывается непосредственно собъектом, поэтому через ссылку можно менять сам объект
#include <iostream>
#include <string>
Before square: a = 4 b = 5
using namespace std;
void square(int&, int&);
In square: a = 16 b = 25
void main()
After square: a = 16 b = 25
{ int a = 4;
int b = 5;
cout << "Before square: a = " << a << "\tb=" << b << endl;
square(a, b);
cout << "After square: a = " << a << "\tb=" << b << endl;
}
void square(int &a, int &b)
{ a = a * a;
b = b * b;
cout << "In square: a = " << a << "\tb=" << b << endl;
}
Передача по ссылке
позволяет возвратить из функции сразу несколько значений.
является более эффективной при передаче очень больших объектов, т.к.
Лектор Паршина
функция использует сам ФУНКЦИИ
объект и не происходит копирования значений
Галина Ивановна
28
29. Передача параметров по ссылке
Пример#include <iomanip>
using namespace std;
void SqPer(int a, int& s, int& per)
{
s = a * a;
per = a * 4; a = 6;
}
25 20 5
void main()
{
int a = 5, s{}, per{};
SqPer(a, s, per);
cout << s << ” “ << per << “ “ << a;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
29
30. Функции в С++
Знакомимсяс
передачей
массива в функцию в С++
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
параметров
30
31. Передача аргументов массива
Массивы как аргументы функциивсе изменения, происходящие с массивом внутри функции
— сохраняются при выходе из неё
int summa (int array[], int size)
{ int res=0;
for (int i = 0; i < size; i++)
res += array[i];
return res;
}
Обязательно
Если вы укажите размер внутри пустых квадратных
скобок это ни на что не повлияет.
int summa (int array[][5], int size_row, int size_col)
{ int res=0;
for (int i = 0; i < size_row; i++)
for (int j = 0; j < size_col; j++)
res +=array[i][j];
return res;
int array[] и int array[][5] передает и принимает не
}
массив, а адрес [0] элемента массива
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
31
32. Передача аргументов массива
Заполнения одномерного массива случайными числами иотображения результатов в консоль с помощью функций.
#include <iostream>
#include <string>
using namespace std;
// отображение массива
void ShowArray(int arr[], int size)
{ for(int i = 0; i < size; i++)
cout<<arr[i]<<" ";
cout<<endl;
}
/* инициализируем массив внутри функции случайными числами в отличии от обычных
переменных изменения элементов массива, происходящие внутри функции при выходе
из функции сохраняются
*/
int main()
void InitArray(int arr[], int size)
{ srand(time(NULL));
{ for(int i = 0; i < size; i++)
const int aSize = 10;
arr[i] = rand()%100;
int iArr[aSize];
cout<<endl;
InitArray(iArr, aSize);
}
ShowArray(iArr, aSize);
return 0;
Лектор Паршина
ФУНКЦИИ
32
}
Галина Ивановна
33. Передача аргументов массива
Заполнения двумерного массива случайными числами иотображения результатов в консоль с помощью функций.
#include <iostream>
int main()
#include <string>
{ srand(time(NULL));
using namespace std;
const int mRows = 3;
// отображение матрицы
const int mCols = 3;
void ShowMatrix(int matr[][3], int rows, int cols)
int iMatr[mRows][mCols];
{ for (int i = 0; i < rows; i++)
InitMatrix(iMatr, mRows, mCols);
{
ShowMatrix(iMatr, mRows, mCols);
for (int j = 0; j < cols; j++ )
return 0;
cout << matr[i][j] << " ";
}
cout << endl;
}
cout << endl;
} /* инициализируем матрицу внутри функции случайными
числами в отличии от обычных переменных изменения
элементов массива, происходящие внутри функции
при выходе из функции сохраняются*/
void InitMatrix(int matr[][3], int rows, int cols)
{ for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
matr[i][j] = rand() % 10;
Лектор Паршина
ФУНКЦИИ
cout
<<
endl;
Галина
Ивановна
}
33
34. Передача аргументов массива символов
Массив символов может представлять строку - набор символов,который завершается нулевым символом '\0’.
Фактически нулевой символ служит признаком окончания
символьного массива
void print(char chars[])
{
for (int i = 0; chars[i] != '\0'; i++)
cout << chars[i] << "\t";
cout << endl;
}
char chars[] = “Hello”;
print(chars);
chars[5]= '\0’;
print(chars);
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
34
35. Функции в С++
Разбиение на файлы, область видимостипеременных и классы памяти, внешние
объекты, статические переменные в С++
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
35
36. Разбиение на файлы
Подключение заголовочного файлаЕсли имя_файла — в угловых скобках,
то препроцессор разыскивает файл в
стандартных системных каталогах.
Если имя_файла заключено в кавычки,
то вначале препроцессор
просматривает текущий каталог
пользователя
и только затем обращается к просмотру
стандартных системных каталогов.
#include <iostream>
#include “Header.h”
using namespace std;
int main()
{ MyFunc(); // MyFunc
MyFuncNext(); // MyFuncNext
return 0;
}
Дополнительный файл MyFunc.cpp
#include <iostream>
using namespace std;
// описания
void MyFunc()
{ cout<<"MyFunc\n"; }
void MyFuncNext()
{ cout<<"MyFuncNext\n"; }
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
Заголовочный файл Header.h
#pragma once
// прототипы
void MyFunc();
void MyFuncNext();
Обратите внимание, что
заголовочный файл начинается с
использования директивы pragma.
Формат #pragma once защищает от
повторного подключения файла
36
Header.h.
Если этой директивы не будет,
37. Область видимости. Классы памяти.
Класс памяти STATICВ классе памяти static располагаются глобальные и статические
переменные.
Модификатор static также может быть применен к глобальным
переменным. В этом случае область видимости переменной
ограничивается файлом, в котором она объявлена.
Переменные статической памяти объявляются лишь единожды и
уничтожаются по завершении программы
Глобальная статическая
переменная
static int miles;
int a;
void main()
{
}
Лектор Паршина
Галина Ивановна
Локальная статическая
переменная
void MyFumc()
{
static int miles;
}
ФУНКЦИИ
37
38. Область видимости. Классы памяти.
Класс памяти STATICКласс памяти static инструктирует компилятор поддерживать
локальную переменную в течение всего времени жизни
программы вместо того, чтобы создавать и уничтожать ее каждый
раз, когда она входит и выходит из области видимости.
Таким образом, статичность локальных переменных позволяет им
сохранять свои значения между вызовами функций.
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
38
39. Область видимости. Классы памяти.
Класс памяти EXTERNКласс памяти extern используется для того, чтобы дать ссылку на
глобальную переменную, которая видна ВСЕМ файлам программы.
Использование extern не может инициализировать переменную,
однако указывает на имя переменной в месте памяти,
определенное ранее.
extern используется для объявления глобальной переменной или
функции в другом файле.
Модификатор extern чаще всего применяется при наличии двух или
более файлов, в которых используют одни и те же глобальные
переменные или функции, как показано ниже.
extern int count;
extern void write_extern();
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
39
40. Внешние объекты
Дополнительный файл MyFunc.cppИспользование заголовочного файла
#include <iostream>
#include “Header.h”
using namespace std;
int main()
{ MyFunc(); // MyFunc
MyFuncNext(); // MyFuncNext
cout << "x = " << x << endl;
cout << "y = " << y << endl;
return 0;
}
Заголовочный файл Header.h
// Внешние объекты
extern const int x;
extern double y;
// прототипы
void MyFunc();
void MyFuncNext();
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
#include <iostream>
using namespace std;
// описания
void MyFunc()
{ cout<<"MyFunc\n"; }
void MyFuncNext()
{ cout<<"MyFuncNext\n"; }
Дополнительный файл objects.cpp
#include “Header.h”
const int x = 5;
double y = 3.4;
40
41. Область видимости. Классы памяти.
Динамическая памятьДинамическая память или память свободного хранения отличается
от статической тем, что программа должна явным образом
запросить память для элементов, хранимых в этой области, а
затем освободить память, если она больше не нужна. При работе с
динамической памятью программа может позволить себе,
например, узнать количество элементов массива на этапе
выполнения.
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
41
42. Область видимости. Классы памяти.
Класс памяти AUTOВсе локальные переменные по умолчанию принадлежат классу памяти auto,
то есть являются автоматическими.
Использование auto возможно только внутри функций, т.е. для создания
локальных переменных
В настоящее словно auto не пишется служебное
слово auto используется для обозначения
неопределенного типа
auto int month;
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
Int mount;
42
43. Область видимости. Классы памяти.
Класс памяти REGISTERКласс памяти register используется для определения локальных
переменных, которые должны храниться в регистре процессора, а
не в оперативной памяти (ячейки стека). Это означает, что
переменная имеет максимальный размер, равный размеру
регистра (обычно одно слово)
Класс register следует использовать только для переменных,
требующих быстрого доступа, таких как счетчики. Следует также
отметить, что определение register не означает, что переменная
обязательно будет храниться в register. Это означает, что она
МОЖЕТ храниться в register в зависимости от аппаратных
ограничений и ограничений, связанных с выполнением
программы.
register int miles;
В настоящее время register можно не использовать
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
43
44. Область видимости. Глобальные и локальные переменные
Согласно правилам области видимости — переменные делятся на два вида —локальные и глобальные.
Локальные переменные создаются внутри какого-нибудь отрезка кода.
Любые фигурные скобки в программном коде образуют, так называемую
область видимости, это означает, что переменные, объявленные внутри
этих скобок будут видны только внутри этих скобок
int a=5;
if(a==5)
{ int b=3; }
// ошибка! b не существует она –
// существовала только внутри if
cout<<b;
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
44
45. Область видимости. Глобальные и локальные переменные
Согласно правилам области видимости — переменные делятся на два вида —локальные и глобальные.
Глобальные переменные создаются вне всяких областей видимости. До
функции main().
Глобальная переменная видна в любом месте программы.
По умолчанию глобальные переменные в отличии от локальных
инициализируются 0.
Изменения, которые происходят с глобальной переменной внутри
функции, при выходе из функции сохраняются.
int a=23; // глобальная a
int main()
{
int a=7; // локальная a
cout<<a; // 7, используется локальная
return 0;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
45
46. Область видимости. Глобальные и локальные переменные
Пример#include <iostream>
using namespace std;
int A = 10;
void SetA()
{ A = 99;}
void Show()
{ cout << A << endl; }
/* Внутри функции глобальная
переменная будет не
видна, так как её скрывает
локальная переменная A
*/
void SetASecond()
{ int A = 77;
cout << A <<endl;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
int main()
{ /* на экране отобразится значение 10 из
глобальной переменной A */
Show();
/* записывам в глобальную переменную значение
99 */
SetA();
/* на экране отобразится значение 99 из
глобальной переменной A */
Show();
/* изменяем значение локальной переменной A
на экране будет значение 77 */
SetASecond();
/* на экране отобразится значение 99 из
глобальной переменной A */
Show();
return 0;
}
46
47. Область видимости. Глобальные и локальные переменные
Расширения области видимости ≪::≫#include <iostream>
using namespace std;
int A = 10;
/* Внутри функции глобальная переменная будет не
видна, так как её скрывает локальная переменная A.
Однако, если нам всё-таки нужно обратиться к
глобальной переменной, будем использовать
оператор ::
int main()
*/
{ Test();
void Test()
// отображается значение 333
{ int A = 77;
cout << A << endl;
// обращаемся к локальной переменной
return 0;
// на экране 77
}
cout << A << endl;
// обращаемся к глобальной A
// на экране 10
cout << ::A << endl;
// меняем значение в глобальной переменной
::A = 333;
}
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
47
48. Статическая переменная
Локальные переменные при выходе из их области видимости уничтожаются#include <iostream>
using namespace std;
void SomeFunc()
{ int a = 0;
a++;
cout << a << endl;
}
int main()
{ SomeFunc();
SomeFunc();
SomeFunc();
return 0;
}
1
1
1
Статические локальные переменные (static) создаются один раз при
первом обращении и уничтожаются, когда программа заканчивает своё
исполнение
#include <iostream>
using namespace std;
void SomeFunc()
{ static int a = 0;
a++;
cout << a << endl;
}
Лектор Паршина
Галина Ивановна
int main()
{ SomeFunc();
SomeFunc();
SomeFunc();
return 0;
}
ФУНКЦИИ
1
2
3
48
49. Функции
Самостоятельная работаЗАДАНИЕ 1
Написать функцию, которая проверяет, является ли переданное ей
число простым?
Число называется простым, если оно делится без остатка только на
себя и на единицу.
ЗАДАНИЕ 2
Написать функцию, которая возвращает куб числа. Передать число
по ссылке.
ЗАДАНИЕ 3
Написать функцию, выводящую на экран контур прямоугольника с
высотой N и шириной K.
*************
*
*
*
*
*
*
*************
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
49
50. Функции
Самостоятельная работаЗАДАНИЕ 4
Написать функцию, вычисляющую сумму одномерного массива
ЗАДАНИЕ 5
Написать функцию, вычисляющую среднее арифметическое
двумерного массива
ЗАДАНИЕ 6
Написать функцию для нахождения наибольшего из двух чисел.
ЗАДАНИЕ 7
Написать функцию сортировки одномерного массива.
ЗАДАНИЕ 8
Написать функцию сортировки двумерного массива.
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
50
51. Функции
Самостоятельная работаЗАДАНИЕ 7
Написать функцию, которая возвращает истину, если передаваемое
значение положительное и ложь, если отрицательное.
ЗАДАНИЕ 8
Написать функцию, вычисляющую факториал переданного ей числа.
F(5)=5*4*3*2*1
ЗАДАНИЕ 9
Написать функцию для перевода числа, записанного в двоичном
виде, в десятичное представление.
ЗАДАНИЕ 10
Написать функцию для перевода числа, записанного в десятичном
виде, в двоичное представление.
ЗАДАНИЕ 11
Написать функцию для округления заданного числа с заданной
точностью.
round(3.44, 0) = 3, round(3.55, 1) = 3,6;
Лектор Паршина
Галина Ивановна
ФУНКЦИИ
51
Программирование