Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Копия Си лекция каз.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
3.05 Mб
Скачать

Void z1(int *X, int *y)

{ int t;

t=*x;

*x=*y;

*y=t;

}

Осы функцияны пайдаланатын (шақыру) программа бөлігі:

int a=2, b=3;

Void z1(int*, int*);

printf(“\n a=%d, b=%d”, a, b);

z1(&a, &b);

printf(“\n a=%d, b=%d”, a, b);

Мұнда функцияны шақыру кезінде, мәндер өзгеріске ұшырайды, яғни экранға төмендегі мәндер шығарылады:

a=2, b=3

a=3, b=2

2-мысал. unsigned char типті r параметрімен шақырылатын rus функциясы анықталған. Егер функцияның параметрі орыс алфавитінің әрпі болса, бірге тең бүтін мәнді, ал кері жағдайда 0 мәнін шығарады.

Int rus (unsigned char r)

{if (r>='А' && c<=' ')

return 1;

else

return 0;

}

Функциялар өздерін өздері рекурсивті түрде шақыруы да мүмкін.

3-мысал: n!=1*2*3*…*n санының факториалын есептейтін рекур­сивті функцияны қарастырайық:

fac(int n)

{

int b;

if (n==1) return 1;

b=fac(n-1)*n;

return n;

}

Функцияны рекурсивті шақыру кезінде ол функцияның жаңа көш­ір­­месі құрылмайды, бұл шақыру жергілікті айнымалылар мен пара­метрлердің жаңа көшірмелерін құрады. Рекурсивті функциядан шығу­дың дұрыс жолдарын қарастыру қажет, өйтпеген жағдайда мұндай функциямен жұмыс істеу барысында біраз уақыттан кейін ол “тоқтап қалуы” мүмкін.

Кез келген басқа объектілер сияқты функцияларда да нұсқауышты пайдалануға болады, мысалы, type t, type z параметрлі type типін қайтаратын функциядағы р нұсқауышын келесі түрде сипаттауға болады:

type (*p)(type1 t1, type2 t2);

Айтылғандарды тұжырымдай келе функцияда бір және екі өлшем­ді жиымдарды (массивтерді) пайдалануды қарастырайық.

Функцияға нақты параметр ретінде бір өлшемді жиымды жіберуге болады, ол үшін жиымның бастапқы (нөлінші) элементінің орнын көр­сет­сек жеткілікті.

Бір өлшемді жиымды пайдалану мысалы:

Int min_index(int sp[], int ras)

{ int i, mindx, m;

mindx=0;m=sp[mindx];

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

if(sp[i]<m)

{ m=sp[i]; mindx=i;

};

return(mindx);

}

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

Void init(int mas[],int ras);//функцияны сипаттау

{

int k;

for (k=0; k<ras; k++)

mas[k]=rand();

}

Программаның қандай да бір бөлігінде жоғарыда аталған функ­цияны init(spisok, dlina) түрінде шақырсақ, бір өлшемді ұзын­­дығы dlina болатын spisok жиымының элементтері кездейсоқ мәндерге ие болады. Енді min_index функциясын пайдаланатын программаны қарастырайық:

#include <stdio.h>

#include <conio.h>

#define dlina 150

main()

{int k, list[dlina];

for (k=0; k<dlina; k++)

list[k]=rand();

k= min_index(list, dlina);

printf("list[%3d]=%6d\n",k, list[k]);

}

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

Екі өлшемді жиымды пайдалану мысалы:

void minit(int matrix[][KO],int str);

{

int i,j;

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

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

matrix[i][j]= rand();

}