Одними из самыми распространенными языками программирования высокого уровня являются Си и С++ [1, 2]. Эти языки программирования пользуются успехов у студентов. Они используются студентами при выполнении курсовых проектов, написании выпускных квалификационных работ [3, 4]. Кроме того, язык программирования С++ используются при решении многих научных задач [5-7].
В данной работе на понятном для начинающего программиста уровне рассматривается создание функции пользователя в языке программирования С++.
В отличие от некоторых других языков программирования высокого уровня в языке С++ нет деления подпрограмм на процедуры и функции. Аналогом процедуры здесь является функция, которая ничего не возвращает.
Функция объединяет объявления и операторы. Она оформляется в виде отдельной конструкции и снабжается именем. Имя функции применяется для её объявления, определения и вызова. В языке С++ функция не может быть описана внутри другой функции.
Использование функций в программе позволяет, во-первых, разделить основную задачу на отдельные подзадачи и оформить подзадачи в виде отдельных функций. Во-вторых, функции можно повторно использовать в новых программных кодах. В-третьих, функции позволяют избежать в программе повторения каких-то фрагментов.
Общий вид описания функции пользователя:
[] [] ([] ) [throw () ] {}
Элементы указанные в квадратных скобках могут отсутствовать. Спецификатор задает класс памяти функции пользователя, например, static или extern. класс памяти
Класс памяти static означает, что функция видима в пределах того файла, в котором она определена. Каждая функция может вызывать другие функции с классом памяти static, описанные в этом же исходном файле. Разные функции с классом памяти static, имеющие одинаковые имена, могут быть определены в разных исходных файлах.
Функция класса памяти extern видима во всех исходных файлах проекта. Любая функция может вызывать функции с классом памяти extern. Если при описании функции спецификатор класса памяти отсутствует, то по умолчанию используеться класс памяти extern.
Спецификатор задает тип возвращаемого значения. Если спецификатор отсутствует, то по умолчанию функция возвращает значение типа int. Функция типа void результат не возвращает, а выполняет некоторые действия.
Возвращаемое значение указывается после оператора return. После return указывается выражение. Вычисляется значение выражения, преобразуется к типу возвращаемого значения функцией. Вычисленное значение возвращается в точку вызова функции в качестве результата.
После выполнения оператора return функция завершает свою работу. Общий вид оператора return:
return [] ;
Если функция возвращает значение типа void, то в операторе return должно отсутствовать:
return;
— это последовательность формальных параметров, разделенных запятыми. Формальные параметры являются переменными, которые используются внутри тела функции и получают свои значения при вызове функции от фактических параметров. Между двумя формальными параметрами ставиться запятая.
Примеры объявления функций с несколькими параметрами:
float integral (float x, float y, float z );//функция integral имеет три параметра типа floatdouble f1(int k, double x, int n);// функция f1 имеет два параметра типа int и один параметр типа double
Если у функции нет параметров, то круглые скобки после имени функции обязательно указываются. Вместо пустого списка параметров можно указать слово void:
int f2(void) { ;}
Параметрами функции могут быть массивы. На С++ массивы функциям автоматически передаются по ссылке.
Рассмотрим примеры передачи массивов функциям в качестве параметров.
const int k=30;int mas[k];void Function1 (int [ ], int );
Первый параметр функции Function — это массив, а второй — количество элементов массива. При вызове функции передаем реальные параметры
Function1 (mas, k); //
Пример. Дан одномерный вещественный массив, содержащий 20 элементов. Найти наибольший элемент массива.
Решение задачи. В статье специально все программы приводятся в элементарном виде, чтобы она была понятна для начинающих программистов.
#include#includedouble max_massiv (double y[], int k){int i;double max=y[0];for (i=1;iif(y[i]>max)max=y[i];return max;}int main () {const int k=20;double mas[k];coutfor(int j=0; jcoutcin>>mas[j];}coutreturn 0;}
Пример. Дан одномерный вещественный массив, содержащий 20 элементов. Отсортировать элементы массива по неубыванию.
#include#include#includevoid sort_massiv (double y[], int k){ int i,p,j;double max;for (i=0;ip=i;for (j=i+1;jif(y[p]>y[j]) { p=j; }max=y[p];y[p]=y[i];y[i]=max;}}int main (){const int n=20;int j;double mas[n]={0};randomize();coutfor(j=0;jmas[j]=random(100)-50;cout}sort_massiv (mas, n);coutfor (j=0;jcoutreturn 0;}
Массив является указателем, и поэтому функции sort_massiv массив mas передается по ссылке. При передаче массива функции в качестве параметра все изменения в значениях элементов массива внутри функции сохраняются после выхода из функции.
Для передачи массивов в функцию можно использовать указатели.
Пример. Дан двумерный целочисленный массив, содержащий 5 строк и 4 столбца. Вывести на экран номер строки и сумму элементов этой строки в столбик.
#include#include#include#include/*Функция input_mass() используется для присваивания элементам двумерного массива псевдослучайных чисел с помощью функции random */void input_mass(int **mas, int line, int column){int j, k;for (j=0; jfor (k=0; kmas[j][k]=random(50);}/*Функция out_mass() используется для вывода элементов двумерного массива на экран в виде матрицы */void out_mass(int **mas, int line, int column){coutfor (int j=0;jfor (int k=0;kcoutcout}/*Функция summ_mass() находит сумму элементов строк */int summ_mass(int *x, int column){int s=0, k;for (k=0;kreturn s;}int main () {randomize();int j, line, column;coutcin>> line;coutcin>> column;int **mas = new int *[ line];for (j=0;jinput_mass(mas, line, column);coutout_mass(mas, line, column);for (j=0;jcoutgetch();return 0;}
Таким образом, в статье на понятном для начинающего программиста уровне рассматривается создание функции пользователя в языке программирования С++. Приведены примеры решения задач с помощью функций. Рассмотрена тема передача массивов функции в качестве параметра.