Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_prog2_ru_2016_3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
334.34 Кб
Скачать

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>

Void func(int intg,float fltp)

{printf("intg=%d &intg=%p ",intg, &intg);

printf("fltp=%f &fltp=%p\n",fltp, &fltp);

intg+=10; fltp*=2;

printf("intg_n=%d fltp_n=%f\n",intg,fltp);}

Void main()

{int i=200; float f=100.25;

func(i,f);

printf("i=%d &i=%p f=%f &f=%p\n",i,&i,f,&f);}

В результате работы программы на экран выведется:

intg=200 &intg=8FD8:0FF2 fltp=100.25 &fltp=8FD8:0FF4

intg_n=210 fltp_n=200.5

i=200 &i=8FD8:0FFC f=100.25 &f=8FD8:0FF8

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

Пример.  В функцию передаются указатели на переменные и значения этих переменных меняются местами:

#include <stdio.h>

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

{printf("&a=%p a=%p *a=%d\n",&a,a,*a);

printf("&b=%p b=%p *b=%d\n",&b,b,*b);

int tmp=*a; *a=*b; *b=tmp;

printf("*a_n=%d *b_n=%d\n",*a,*b);}

Void main()

{int i=5,j=60;

printf("&i=%p i=%d &j=%p j=%d\n",&i,i,&j,j);

swap(&i,&j); // Вызов функции

printf("i=%d j=%d\n",i,j);}

В результате работы программы на экран выведется:

&i=8FD8:0FFE i=5 &j=8FD8:0FFC j=60

&a=8FD8:0FF4 a=8FD8:0FFE *a=5

&b=8FD8:0FF8 b=8FD8:0FFC *b=60

*a_n=60 *b_n=5

i=60 j=5

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