Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Float sqr(float, float g);




Функции

1.1 Определение, описание, вызов функции

Каждая программа представляет собой либо одну главную функцию с именем main(), либо функцию main() и любое количес­тво других дополнительных функций, предназначенных для выполне­ния определенных действий (вычислений, обмена данными и т.д.).

Функция main() обеспечивает точку входа в откомпилирован­ную программу. Остальные функции, используемые в программе, явно или косвенно вызываются из главной функции. Функции, входящие в программу, могут бытьопределены, как в одном с главной функцией файле, так и в отдельных файлах.

Всем именам функций по умолчанию присваивается класс памяти extern, т.е. функции глобальны, имеют внешний вид компоновки, статическую продолжительность существования (до конца выполне­ния программы) и доступны при определенных условиях во всех модулях программы.

Любая функция, кроме главной функции main(), должна быть определена или описана до её использования (вызова) в конкретном модуле. Определение функции имеет следующий синтаксис

Тип_функции имя_функции(список_формальных_параметров)

{ тело функции }

Первая строка функцииназывается заголовком функции:

Тип_функции имя_функции(список_формальных параметров)

Тип_функции – это тип возвращаемого функцией значения, т.е. базовый (например, int, float, т.д.) или производный тип вычис­ленного в функции значения. Если функция ничего не возвращает, то тип функции обозначается void.

Имя_функции – это любой уникальный допустимый идентифи­катор, например, myfunc, sum, mult, F1.

Список_формальных_параметров (или сигнатура функции) – это пусто или void, если в функцию не передаются параметры, либо список спецификаций отдельных параметров с указанием типов и имен, записанных черех запятую.

Тело функции – это последовательность определений, описаний переменных и операторов, заключенных в фигурные скобки.

Когда функция вызывается, управление передается в начало тела функции. Возврат в точку вызова функции выполняется опера­тором return выражение или return. В теле функции может быть несколько операторов return. При этом выход из функции может быть осуществлен в нескольких точках. Если функция не возвращает никакого значения, т.е. имеет тип void, то выражение в операторе return отсутствует и сам оператор return тоже может отсутствовать.

Пример. Функция вычисляет сумму трех переменных типа float. Функция имеет формальные параметры и один оператор return.

Float sum(float a, float b, float c)

{float S=a+b+c;

return S;}

Пример. Функция находит большее из двух переменных. Функция имеет формальные параметры и два оператора return.

Int max(int x, int y)

{if (x>y)return x;

else return y;}

Пример. Функция выводит значение переменной на экран. Функция имеет один формальный параметр и не имеет оператора return.

Void prn1(int x)

{ printf("Заданное число =%d\n", x);}

Пример. Функция выводит строку на экран. Функция не имеет фор­мальных параметров и оператора return.

Void prn2()

{ puts("Моя программа");}

Вызов функции (обращение к функции) – это выражение, в котором указывается имя функции и список фактических параметров в круглых скобках. Результатом этого выражения является возвращаемое значение, тип которого соответствует типу функции:

Имя_функции(список фактических параметров)

где список_фактических_параметров – это либо пусто, либо void, либо фактические параметры (константы или заранее определенные переменные, переменные с преобразованием типов, выражения).

При обращении к функции формальные параметры заменяются фактическими параметрами в строгом соответствии с типами параметров. Соответствие между формальными и фактическими пара­метрами устанавливается по их взаимному расположению в списках.

Например:

Int max(int x, int y)

{if (x>y)return x; else return y;}

Void main()

{int a=10,res1,res2; float f=55.9;

res1=max(a,20); // res1=20

res2=max(int(f),a+30);} // res2=55

Пример.

int func1(int a, int b) // Определение функции

{return a+b;}

float sqr(float f, float g) // Определение функции

{return f*g;}

Void main()

{int am=2,bm=3,res1;

res1=func1(am,bm); // Вызов функции

float em=2.5,gm=3.0,fm=4.2,res2,res3;

res2=sqr(fm,gm); // Вызов функции

res3=sqr(fm+0.5,sqr(em,gm)); // Вызов функции

int res4=(int)sqr(em,float(am)); } // Вызов функции

Если функция определена после функции main() или в другом файле, то до первого обращения к функции она должна быть описана. Описание функции называется прототипом. Это необходимо для проверки компилятором соответствия типов передаваемых в функцию параметров и возвращаемых значений. В прототипе можно не указывать имена формальных параметров. В конце прототипа обязательна точка с запятой. Примеры прототипов:

float sum(float a, float b, float c);

Int max(int, int y);

float sqr(float, float g);

Пример. Функция определена ниже своего первого вызова, перед вызовом помещен прототип.

#include <stdio.h>

int sum(int, int);// Прототип функции – описание функции

Void main()

{int a, b=3, g=4;

a=sum(b, g); // Вызов функции

printf("Сумма=%d\n", a); }

int sum(int arg1, int arg2) // Определение функции

{return arg1+arg2;}

1.2 Передача параметров в функции по значению и по указателю

В языке С++ передача параметров (кроме указателей и массивов) в функции при их вызове осуществляется по значению. Это означает, что для передаваемых (фактических) параметров в функции создаются копии этих параметров. Для формальных параметров выделяется память, в которую заносятся значения фактических параметров. Действия, производимые с этими параметрами (копиями) в функции не влияют на переменные вне функции, т.е. на фактические пере­менные. Формальные параметры недоступны вне тела функции. При выходе из функции выделенная для них память освобождается.

Пример.

#include <stdio.h>





Поделиться с друзьями:


Дата добавления: 2016-11-22; Мы поможем в написании ваших работ!; просмотров: 374 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Стремитесь не к успеху, а к ценностям, которые он дает © Альберт Эйнштейн
==> читать все изречения...

2206 - | 2159 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.