Басқа жоғары деңгейдегі бағдарламалау тілдеріне қарағанда Си тілінде ішкі программалар функция мен процедураға бөлінбейді. Бағдарлама тек функциядан құрылады. Функция – бұл нақты есепті шешуге арналған операторлардың және өрнектердің жиыны. Функция арасындағы байланыс аргументтер, нәтиже мәндері және сыртқы айнымалылар арқылы жасалады.
Мысалы:
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]); /*нәтижені экранға шығару*/
}