Функциялар

Басқа жоғары деңгейдегі бағдарламалау тілдеріне қарағанда Си тілінде ішкі программалар функция мен процедураға бөлінбейді. Бағдарлама тек функциядан құрылады. Функция – бұл нақты есепті шешуге арналған операторлардың және өрнектердің жиыны. Функция арасындағы байланыс аргументтер, нәтиже мәндері және сыртқы айнымалылар арқылы жасалады.

Мысалы:

float srzn(int a, int b)

{

int y;

y=(a+b)/2;

return(y);

}

Функция нәтиже ретінде бір мәнді бере алады. Ол үшін қайтару операторы пайдаланылады:

return (өрнек);

Бұл жердегі өрнек айнымалы болуы мүмкін.

Мысал 1: санның абсолютті шамасын функция көмегімен есептеу.

#include <stdio.h>

#include "abc.cpp"

main()

{

int a=10, b=0, c=-20;

int d,e,f;

d=abc(a);

e=abc(b);

f=abc(c);

printf("%d %d %d", d, e, f);

}

Функцияның өзі

abc(x)

int x;

{int y;

y=(x<0)?-x:x;

return(y);

}

Көрсетілген бағдарламада функция типі сипатталмаған. Ол тек қана функция нәтижесі бүтін типті болғанда мүмкін. Басқа жағдайда типті сипаттау қажет.

Және де осы бағдарламада функция бөлек файлда abc.cpp сақталған және #include процедурасымен қосылған. Тырнақша (“ “) белгісімен қоршалған файл ағымды каталогтан ізделінеді (бағдарлама мен функция ағымды каталогта сақталу керек), ал < > жақшаға алынған файл кітапхана катологында ізделінеді.

Функцияны бағдарламаның ішінде де сипаттауға болады.

Мысал 2: f= формуласын функция көмегімен есептеу.

#include <stdio.h>

double vv(x,y,z)

double x, y, z;

{

double f;

f=sqrt(x)+y/z;

return(f);

}

main()

{

double x=5.5, f, y=10, z=20.5;

f=vv(x,y,z);

printf(“%f “, f);

}

Егер функция main() функциясынан кейін сипатталса оның прототипін көрсету қажет.

Мысалы: алдыңғы есеп

#include <stdio.h>

double vv(double x, double y, double z);

main()

{.......}

double vv(x,y,z)

double x, y, z;

{......}

Си тілінде сонымен қатар, аргументі жоқ функцияны және ешқандай нәтиже қайтармайтын функцияны пайдалануға болады. Нәтиже қайтармайтын функцияға void типін пайдалану қажет. Ол қайтарылатын мәннің болмауын білдіреді.

Мысал 3: а және b айнымалылардың орнын ауыстыру.

#include <stdio.h>

#include “izm.cpp”

main()

{ int a,b;

scanf(“%d %d”, &a, &b);

izm(&a,&b);

printf(“%d %d”, a, b);

}

izm.cpp файлында сақталған функция

void izm(a, b);

int *a, *b;

{ int c;

c=*a;

*a=*b;

*b=c;

}

Егер функция аргументі ретінде массив аты пайдаланса, онда оған массивтің басталу адресі беріледі. Элементтердің өздері көшірілмейді. Функция массив элементтерін индекстеу арқылы басынан жылжыта алады.

Мысал 4: S массивінің элементтерін орындарымен ауыстыру: біріншісін екіншісімен, үшіншісін төртіншісімен және т.с.

#include <stdio.h>

void reverse(s)

int s[];

{

int a,i;

for (i=1; i<5; i+=2)

{a=s[i]; s[i]=s[i+1]; s[i+1]=a;}

}

main()

{int i,j,s[6];

for (i=0; i<6; i++)

scanf(“%d”,&s[i]);

reverse(s); /* reverse функциясын шақыру*/

for (i=0; i<6; i++)

printf(“%d”,s[i]);

}

Бірөлшемді массивті int s[]; деп сипаттауға болады, ал екі өлшемді массивті сипаттағанда екінші жақшада баған саны жазылуы қажет, мысалы: a[][3].

Мысал 5. а(5,5) массивінің барлық элементтерін екіге арттыру.

#include <stdio.h>

void mas(a)

int a[][5]; /* а массивін сипаттау */

{int i,j; /* i,j айнымалыларын сипаттау*/

for (i=0; i<5; i++)

for (j=0; j<5; j++)

a[i][j] = 2*a[i][j]; /*массив элементтерін екі есе арттыру*/

}

main()

{int a[5][5];

int i,j;

for (i=0;i<5;i++)

for (j=0; j<5; j++)

scanf(“%d”,a[i][j]); /*массивті енгізу*/

mas(a); /* mas функциясын шақыру*/

for (i=0; i<5; i++)

for (j=0; j<5; j++)

printf(“%d”, a[i][j]); /*нәтижені экранға шығару*/

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: