КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Функции. Вызов функций с формальными параметрами, передаваемыми по значению
Лабораторная работа 4
Цель работы – приобрести навыки работы с функциями в языке С++.
Теория Функция Функция – это подпрограмма, которая может оперировать данными и возвращать значение. Каждая программа на языке С++ содержит, по крайней мере одну функцию – main(), которая при запуске программы вызывается автоматически. Функция main() может вызывать другие функции, а те, в свою очередь, могут вызывать следующие и т.д. Каждая функция состоит из заголовка и тела. Заголовок – это прототип, только в конце точка с запятой не ставится. В заголовке задается имя функции, список параметров, тип возвращаемого значения. Тело функции – это блок. Тело функции определяет алгоритм работы. Рассмотрим программу, печатающую степени числа 2:
float pow(float, int); /*pow() определена в другом месте*/ main() { for (int i=0; i<10; i++) cout << pow(2,i) << "\n"; }
Первая строка функции – описание, указывающее, что pow – функция, получающая параметры типа float и int и возвращающая float. Описание функции используется для того, чтобы сделать определенными обращения к функции в других местах. При вызове функции тип каждого параметра функции сопоставляется с ожидаемым типом точно так же, как если бы инициализировалась переменная описанного типа. Это гарантирует надлежащую проверку и преобразование типов. Например, обращение pow(12.3,"abcd") вызовет недовольство компилятора, поскольку "abcd" является строкой, а не int. При вызове pow(2,i) компилятор преобразует 2 к типу float, как того требует функция. Функция pow может быть определена следующим образом.
Пример float pow(float x, int n) { if(n<0)error("извините, отрицательный показатель для pow()"); switch (n) { case 0: return 1; case 1: return x; default: return x*pow(x,n-1); } }
Первая часть определения функции задает имя функции, тип возвращаемого ею значения (если таковое имеется) и типы и имена ее параметров (если они есть). Значение возвращается из функции с помощью оператора return. Каждая функция в программе на С++ должна быть один раз определена и может быть объявлена несколько раз по мере необходимости. По правилам языка С++ функция должна быть определена (или объявлена) до того, как использована (вызвана). Определение функции состоит из двух частей: заголовка и тела. В общем случае заголовок функции включает следующие части: 1) спецификаторы класса памяти: extern или static. По умолчанию – extern; 2) тип возврата, возможно void. По умолчанию – int; 3) модификаторы; 4) имя функции; 5) список объявления параметров; 6) спецификациюисключений throw (список типов исключений). Спецификация класса памяти влияет на область видимости имени функции. Так спецификатор extern означает, что объявленная функция доступна из любого места программы. Тело функции – это блок, т. е. последовательность описаний переменных и операторов, заключенных в фигурные скобки. Даже если функция не выполняет никаких действий, тело функции должно присутствовать в определении. В этом случае тело функции будет состоять просто из скобок { }. Примеры определений функций void print (char *name, int value) //Ничего не возвращает { cout << “\n” << name << value; //Нет оператора return }
float min (float a, float b) //В функции два оператора возврата { if (a<b) return a; //Возвращает минимальное return b; //из значений аргумента }
float cube (float x) // возвращает значение типа float { return x*x*x; // Возведение в куб вещественного числа }
void write (void) //Ничего не возвращает, { //ничего не получает cout << “\n имя: ”; //Всегда печатает одно и то же }
Определения функций не должны быть вложенными. В отличие от определений, прототипы – объявления функции – могут быть вложенными в другие функции. Главное, чтобы прототип был прописан до вызова соответствующей функции.
Пример float Max(float x, float y) // определение до вызова { return (x<y? y: x); } void main () { float Cube (float a); // прототип вложен до определения в //главную функцию int cc=15, k=2; k=Cube (k); cc=5+Max(k, cc)/3+ Cube(k); // вызовы функций cout << c; } float Cube (float x) //определение функции Cube { return (x*x*x); }
Результат: 522
Параметры Параметр – это значение некоторого данного, которое нужно передать из одной функции в другой. При передаче параметров они сохраняются в стеке. Вы можете менять параметры в функции, но, так как вы меняете параметр, сохраненный в стеке, то при возврате из функции все изменения будут потеряны. Если вы хотите получить из функции модифицированные параметры, то следует передавать в функцию не сами параметры, а их адреса, и в функции, соответственно работать с адресами. Пример #include <iostream.h> void main() { int fun(int x); int a=5; fun(a); cout << fun(a); } int fun(int x) { return (x++); }
Результат: 6.
Несмотря на то, что в функции параметр меняется, в основной программе значение переменной a остается неименной. Вот как выглядит та же программа при работе с адресами:
Пример #include <iostream.h> void main() { int fun(int *x); int a=5; fun(&a); cout << fun(a); } int fun(int *x) { return (*x++); }
Результат: 6.
Локальные и внешние переменные Разность между ними состоит в определении области действия. Внешние (external) переменные отличаются тем, что имеют глобальную область действия, доступны любой функции. Пример: int x=456; main() { cout << x; }
Хотя x определена за пределами функции main, она доступна в этой функции. Локальные переменные доступны только в теле тех функций, в которых они определены. Если возникает конфликт между именами глобальных и локальных переменных, то выигрывают локальные.
Пример int x=456; //глобальное описание main() { int x=675; // локальное описание cout << x; }
Результат: 675.
Задание 1. Запустите C++Builder. 2. Составьте программу в соответствии с вашим вариантом задания, вычисляющую многократно значение функции при изменении аргумента в указанном диапазоне и с заданным шагом (см. таблицу вариантов задания). Вычисления проводить в отдельной функции. Организовать вывод значения аргумента и вычисленного значения функции в виде таблицы:
3. Выполнить компиляцию программы. При наличии ошибок внести исправления. 4. Сдайте отчет преподавателю.
Варианты
Продолжение табл.
Продолжение табл.
Продолжение табл.
Дата добавления: 2015-08-31; Просмотров: 439; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |