страница 1
Общеинженерная практика Лабораторное занятие 9
Тема: Функции
(См. «Основы алгоритмизации и программирования», лекция 11)
Функция — это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция может принимать параметры и возвращать значение.
Любая программа на C++ состоит из функций, одна из которых должна иметь имя main (с нее начинается выполнение программы).
В C++ функции подразделяются на два вида: 1) встроенные, которые поставляются с библиотеками среды разработки и 2) нестандартные, которые разрабатываются программистом
Функция начинает выполняться в момент вызова. Любая функция должна быть объявлена и определена. Объявление функции должно находиться в тексте раньше ее вызова для того, чтобы компилятор мог осуществить проверку правильности вызова. Объявление функции (прототип, заголовок, сигнатура) задает ее имя, тип возвращаемого значения и список передаваемых параметров. Определение функции содержит, кроме объявления, тело функции, представляющее собой последовательность операторов и описаний в фигурных скобках:
тип имя ( [ список_параметров ])
{ тело функции }
Параметры в определении функции являются формальными параметрами. При вызове функции формальные параметры заменяются фактическими значениями.
Пример функции, возвращающей сумму двух целых величин:
#include
#include
using namespace std;
// определение функции
int sum( int a, int b) // объявление функции
{ // тело функции
return (а + b);
}
int main()
{
int a = 2, b = 3, c, d;
c = sum(a,b); // вызов функции
cout <<"d=";cin >> d;
cout <<"5+"<
return 0;
}
В этом примере функция sum определена до функции main, в которой происходит вызов функции sum. Ниже приведен тот же пример, в котором функция sum сначала только объявлена и этого достаточно для вызова ее в функции main, но тогда после функции main обязательно должно идти определение функции.
#include
#include
using namespace std;
int sum( int a, int b); // объявление функции
int main()
{
int a = 2, b = 3, c, d;
c = sum(a,b); // вызов функции
cout <<"d=";cin >> d;
cout <<"5+"<// вызов функции
return 0;
}
// определение функции
int sum(int а, int b) // объявление функции
{ // тело функции
return (а + b);
}
В C++ формальному параметру может задаваться значение по умолчанию, которые размещаются последними в списке параметров. Ниже приведен пример, в котором функция sum чаще всего используется для увеличения числа на один, но может использоваться для суммирования двух чисел:
#include
#include
using namespace std;
int sum(int а, int b=1) // объявление функции
{ // тело функции
return (а + b);
}
int main()
{
int a = 2, c, d;
c = sum(a); // вызов функции с одним параметром
cout <<"d=";cin >> d;
cout <<"3+"<//вызов функции с двумя параметрами
return 0;
}
В C++ предусмотрена возможность перегрузки функций, т.е. использование нескольких функций с одинаковыми именами, но различными списками параметров (сигнатурой). Ниже приведен пример, в котором дважды объявляется функция sum с различной сигнатурой.
#include
#include
using namespace std;
int sum( int a, int b) // объявление функции
{ // тело функции
return (a + b);
}
double sum(int a, double b) // объявление функции
{ // тело функции
return (a + b);
}
int main()
{
int a = 2, b = 3, c, d;
double m;
c = sum(a,b); // вызов функции
cout <<"d="; cin >> d;
cout <<"5+"<
cout <<"m="; cin >> m;
cout <<"5+"<
return 0;
}
Задачи для самостоятельной работы
Написать функцию, которая вычисляет объем цилиндра. Параметрами функции должны быть радиус и высота цилиндра (v=πR2H).
Написать функцию, которая возвращает максимальное из двух целых или двух вещественных чисел, полученных в качестве аргумента.
Написать функцию, которая сравнивает два целых или два вещественных числа и возвращает результат сравнения в виде одного из знаков: >, < или =.
Написать функцию, которая вычисляет значение ab. Числа а и b могут быть любыми целыми положительными числами.
Написать функцию Procent, которая возвращает процент от полученного в качестве аргумента числа.
Написать функцию Dohod, которая вычисляет доход по вкладу. Исходными данными для функции являются: величина вклада, процентная ставка (годовых) и срок вклада (количество дней). Количество дней в году считать равным 365.
Написать функцию ZV, которая выводит на экран строку, состоящую из звездочек. Длина строки (количество звездочек) является параметром функции. Используя функцию ZV написать функцию, которая выведет звездочки в несколько строк.
Написать функцию, которая выводит строку, состоящую из одинаковых символов. Длина строки и символ являются параметрами функции.
Решения
-
#include
#include
using namespace std;
double mys(double r, double h) // объявление функции
{ // тело функции
return (3.14*r*r*h);
}
int main()
{
double r,h,s;
do
{cout <<"r="; cin >>r;
if (r<=0) cout<<"r doljno >0"<
}
while(r<=0);
do
{cout <<"h="; cin >>h;
if (h<=0) cout<<"h doljno >0"<
}
while(h<=0);
s = mys(r,h); // вызов функции
cout <<"s="<
return 0;
}
-
#include
#include
using namespace std;
int mymaks(int a, int b) // объявление функции
{ // тело функции
if (a>b)return (a);
else return (b);
}
double mymaks(double a, double b) // объявление функции
{ // тело функции
if (a>b)return (a);
else return (b);
}
int main()
{
int a1,a2;
double b1,b2;
cout <<"a1="; cin >>a1;
cout <<"a2="; cin >>a2;
cout<<"max iz a1 i a2 =" <
cout <<"b1="; cin >>b1;
cout <<"b2="; cin >>b2;
cout<<"max iz b1 i b2 =" <
return 0;
}
-
#include
#include
using namespace std;
char mysr(int a, int b) // объявление функции
{ // тело функции
if (a>b)return ('>');
else if (a
else return ('=');
}
char mysr(double a, double b) // объявление функции
{ // тело функции
if (a>b)return ('>');
else if (a
else return ('=');
}
int main()
{
int a1,a2;
double b1,b2;
cout <<"a1="; cin >>a1;
cout <<"a2="; cin >>a2;
cout<
cout <<"b1="; cin >>b1;
cout <<"b2="; cin >>b2;
cout<
return 0;
}
-
#include
#include
using namespace std;
int myst(int a, int b) // объявление функции
{ // тело функции
int i,p=1;
for (i=1;i<=b;i++)
p=p*a;
return (p);
}
int main()
{
int a,b;
do
{
cout <<"a="; cin >>a;
if (a<=0)cout<<"a doljno >0"<
}
while (a<=0);
do
{
cout <<"b="; cin >>b;
if (b<0)cout<<"b doljno >=0"<
}
while (b<0);
cout<
return 0;
}
-
#include
#include
#include
using namespace std;
float Procent(float x, int p) // объявление функции
{
return x*p/100;
}
int main()
{
float x;
int p;
printf("\nvvedite chislo: ");
scanf("%f",&x);
printf("\nvvedite procent: ");
scanf("%i",&p);
printf("\n%i%% ot %4.1f = %4.1f",p,x,Procent(x,p));
getch();
return 0;
}
-
#include
#include
#include
#include
using namespace std;
float Dohod(float summ, float stavka, int srok) // объявление функции
{
return summ*stavka/365/100*srok;
}
int main()
{
float summ, stavka;
int srok;
printf("\nUkagite dannye:\n");
printf("\nVelichina vklada = ");
scanf("%f",&summ);
printf("\nProcentnaja stavka (godovyh) = ");
scanf("%f",&stavka);
printf("\nSrok vklada = ");
scanf("%i",&srok);
printf("\n Dohod = %6.2f rub.",Dohod(summ, stavka, srok));
getch();
return 0;
}
-
#include
#include
#include
using namespace std;
void ZV(int l) // объявление функции
{
for (int i=1; i<=l; i++)
printf ("*");
}
void nZV(int n, int l) // объявление функции
{
for (int i=1; i<=n; i++)
{ZV(l); printf("\n");}
}
int main()
{
int n, l;
printf("\nvvedite dlinu stroki: ");
scanf("%i",&l);
printf("\nvvedite kol-vo strok: ");
scanf("%i",&n);
printf("\nresultat:\n");
nZV(n,l);
getch();
return 0;
}
-
#include
#include
#include
using namespace std;
void stroka(int s, int l) // объявление функции
{
for (int i=1; i<=l; i++)
printf ("%c",s);
}
int main()
{
char s;
int l;
printf("vvedite simvol: ");
scanf("%c",&s);
printf("\nvvedite dlinu stroki: ");
scanf("%i",&l);
printf("\nzadannaja stroka:\n");
stroka(s,l);
getch();
return 0;
}
страница 1
|