Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
new_Лекции_1-7.docx
Скачиваний:
117
Добавлен:
05.03.2016
Размер:
1.49 Mб
Скачать

Лекция 2.2. Использование функций План лекции

  1. Функции.

  2. Вызов функций

  3. Возврат значений

  4. Примеры программ с функциями

  5. Личные файлы заголовков и реализаций

  6. Многомодульные проекты

  1. Функции.

Кроме функции main() в С++-программе может быть использовано множество личных и библиотечных (встроенных, системных) функций. Личные функции нужно предварительно объявить, написав только их заголовки (прототипы). Прототип состоит из типа возвращаемого значения, имени функции и параметров (аргументов) функции. Для использования библиотечных функций необходимо подключать системные заголовочные файлы, в которых и находятся прототипы встроенных функций.

  1. Вызов функций

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

  1. Возврат значений

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

// Пример 2.2.1

// Использование личных функций

#include <iostream>

using namespace std;

// объявление функции для вычисления среднего арифметического двух целых

double AVG(int,int);

// Главная функция

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int a,b; // исходные данные - локальные переменные функции main()

double r; // среднее арифметическое

cout << "Мы в main()-функции!\n";

cout << "Введите два числа через пробел: ";

cin >> a >> b;

cout << "\nmain: Вызываю функцию AVG()\n";

r=AVG(a,b); // вызов функции

// a,b -фактические параметры -> целые переменные

cout << "Мы снова в main()-функции!\n";

cout << "r= " << r << endl;

cin.get();

cout << "\nmain: Вызываю функцию AVG()\n";

r=AVG(5,7); // вызов функции

// 5,7 - фактические параметры -> целые константы

cout << "Мы снова в main()-функции!\n";

cout << "r= " << r << endl;

cin.get();

cout << "\nmain: Вызываю функцию AVG()\n";

r=AVG(5*a,7-b); // вызов функции

// 5*a,7-b - фактические параметры -> выражения

cout << "Мы снова в main()-функции!\n";

cout << "r= " << r << endl;

cin.get();

return 0;

}

// реализация функции для среднего арифметического двух целых

double AVG(int x, int y) // x,y - формальные параметры ->

// имена локальных переменных функции

{

double result;

cout << "Мы в функции AVG(). x=" << x << "; y=" << y << endl;

result=(x+y)/2.;

cin.get();

return result;

}

  1. Примеры программ с функциями

// Пример 2.2.2

// Использование личных функций для выполнения математических операций

#include <iostream>

using namespace std;

// прототипы личных функций для вычислений

int sum(int a,int b); // сумма

int raznost(int x, int y); // разность

int proiz(int x, int y); // произведение

double del(int x, int y); // частное

double sred(int x, int y); //среднее арифметическое

// главная функция

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int a,b; // входные данные

int S; // сумма

int R; // разность

int P; // произведение

double D; // частное - результат деления

double Sr; //среднее арифметическое

//Ввод исходных данных

cout << "Введите a,b через пробел и нажмите ENTER: ";

cin >> a >> b;

//Вычисления с помощью функций

S=sum(a,b);

R=raznost(a,b);

P=proiz(a,b);

D=del(a,b);

Sr=sred(a,b);

// Вывод результатов

cout << "\tS=" << S << "\tR=" << R << "\tP=" << P

<< "\tD=" << D << "\tSr=" << Sr << endl;

cin.get(); cin.get();

}

// Реализация личных функций

// сумма

int sum(int a,int b) {

int res;

res=a+b;

return res;

}

// разность

int raznost(int x, int y) {

return x-y;

}

// умножение

int proiz(int x, int y) {

return x*y;

}

// деление

double del(int x, int y) {

return (double)x/y;

}

// среднее

double sred(int x, int y) {

return (x+y)/2.;

}

// Пример 2.2.3

// Использование личных функций для вычисление массы тела

#include <iostream>

using namespace std;

// прототипы личных функций

void avtor(); // сведения об авторе

double calc(double,double); // вычисление массы

void print(double); // вывод на экран

// главная функция

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

avtor(); // сведения об авторе

// объявление переменных

double plotnost=0, obem=0, massa=0;

// ввод данных для вычислений

cout << "Введите плотность и обьем через пробел и нажмите ENTER \n";

cout << "Плотность в кг/куб.м, а объем в куб.м. \n";

cin >> plotnost >> obem; // множественный ввод

// вычисления с помощью функции

massa=calc(plotnost,obem);

// вывод результатов на экран

print(massa);

cin.get(); cin.get();

}

// реализация личных функций

// сведения об авторе

void avtor() {

cout << "Автор - ..." << endl;

cin.get();

}

// вычисление массы

double calc(double p, double o) {

return p*o;

}

// вывод на экран

void print(double m) {

cout << "Масса равна " << m << " кг." << endl;

}

// Пример 2.2.4

// Вычисление параметров окружности, круга, шара

#include <iostream>

using namespace std;

// библиотека математические функции и констант

#define _USE_MATH_DEFINES

#include <math.h>

// прототипы личных функций

double dlina(double r); // вычисление длины окружности

double ploshad(double r); // вычисление площади круга

double obem(double r); // вычисление объема шара

// главная функция

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

double r; // радиус

double C; // длина окружности

double S,V; // площадь круга, объем шара

// ввод радиуса

cout << "Введите значение радиуса (в см.) и нажмите ENTER: " ;

cin >> r;

//Вычисления с помощью функций

C=dlina(r);

S=ploshad(r);

V=obem(r);

// Вывод результатов

cout << "\tC=" << C << endl;

cout << "\tS=" << S << endl;

cout << "\tV=" << V << endl;

cin.get();

}

// реализации личных функций

// вычисление длины окружности

double dlina(double r) {

return 2*3.14*r; // Число Πi задано неименованной константой - 3.14

}

// вычисление площади круга

double ploshad(double r) {

const double PI=3.14; // Число Πi задано именованной константой - PI

double S=0;

S=2*PI*r*r;

return S;

}

// вычисление объема шара

double obem(double r) {

double V=0;

V=4./3. * M_PI * r * r *r; // Число Πi объявлено в math.h - M_PI

return V;

}

  1. Личные файлы заголовков и реализаций

Прототипы личных функций и их реализации могут быть вынесены в отдельные программные файлы. Первому файлу обычно дают расширение имени .h или .hpp , а второму – c. или .cpp. Включение этих файлов в программу выполняется директивой препроцессора #include “имя_файла”. Двойные кавычки этой директивы указывают, что эти файлы находятся в вашей личной папке, а не в системной. Внешний вид менджера решений и файлов проекта показан на рисунках.

// Пример 2.2.5

// использование личных файлов заголовков и реализаций функций

// прототипы личных функций - файл MyFunc.h

// объявление функции для вычисления среднего арифметического двух целых

double AVG(int,int);

// реализации личных функций- файл MyFunc.cpp

// включение прототипов личных функций из файла MyFunc.h

#include "MyFunc.h"

// реализация функции для среднего арифметического двух целых

double AVG(int x, int y) {

double result;

cout << "Мы в функции AVG(). x=" << x << "; y=" << y << endl;

result=(x+y)/2.;

cin.get();

return result;

}

// Главная программа - файл L2.5.5.cpp

#include <iostream>

using namespace std;

// включение личных функций из файла MyFunc.сpp

#include "MyFunc.cpp"

// Главная функция

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int a,b; // исходные данные - локальные переменные функции main()

double r; // среднее арифметическое

cout << "Мы в main()-функции!\n";

cout << "Введите два числа через пробел: ";

cin >> a >> b;

cout << "\nmain: Вызываю функцию AVG()\n";

r=AVG(a,b); // вызов функции, a,b - параметры -> переменные

cout << "Мы снова в main()-функции!\n";

cout << "r= " << r << endl;

cin.get();

cout << "\nmain: Вызываю функцию AVG()\n";

r=AVG(5,7); // вызов функции, 5,7 - параметры -> константы

cout << "Мы снова в main()-функции!\n";

cout << "r= " << r << endl;

cin.get();

cout << "\nmain: Вызываю функцию AVG()\n";

r=AVG(5*a,7-b);// вызов функции, 5*a,7-b - параметры -> выражения

cout << "Мы снова в main()-функции!\n";

cout << "r= " << r << endl;

cin.get();

return 0;

}

Аналогичным образом можно оформить проекты для примеров 2.2.2,

2.2.3, 2.2.4.

  1. Многомодульные проекты

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

// Пример 2.2.6

// многомодульные проекты

// прототипы личных функций - файл MyFunc.h

// объявление функции для вычисления среднего арифметического двух целых

double AVG(int,int);

// реализации личных функций- файл MyFunc.cpp

// подключение системных библиотек

#include <iostream>

using namespace std;

// включение прототипов личных функций из файла MyFunc.h

#include "MyFunc.h"

// реализация функции для среднего арифметического двух целых

double AVG(int x, int y) {

double result;

cout << "Мы в функции AVG(). x=" << x << "; y=" << y << endl;

result=(x+y)/2.;

cin.get();

return result;

}

// Главная программа - файл L2.5.6.cpp

#include <iostream>

using namespace std;

// включение личных функций из файла MyFunc.сpp

#include "MyFunc.h"

// Главная функция

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int a,b; // исходные данные - локальные переменные функции main()

double r; // среднее арифметическое

cout << "Мы в main()-функции!\n";

cout << "Введите два числа через пробел: ";

cin >> a >> b;

cout << "\nmain: Вызываю функцию AVG()\n";

r=AVG(a,b); // вызов функции, a,b - параметры -> переменные

cout << "Мы снова в main()-функции!\n";

cout << "r= " << r << endl;

cin.get();

cout << "\nmain: Вызываю функцию AVG()\n";

r=AVG(5,7); // вызов функции, 5,7 - параметры -> константы

cout << "Мы снова в main()-функции!\n";

cout << "r= " << r << endl;

cin.get();

cout << "\nmain: Вызываю функцию AVG()\n";

r=AVG(5*a,7-b);// вызов функции, 5*a,7-b - параметры -> выражения

cout << "Мы снова в main()-функции!\n";

cout << "r= " << r << endl;

cin.get();

return 0;

}

Аналогичным образом можно оформить проекты для примеров 2.2.2,

2.2.3, 2.2.4.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]