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

Көмекші программа. Функцияны пайдалану

Си тілінде стандартты функциялармен қатар тұтынушы өзі құрас­тырған функцияларымен де жұмыс істеу мүмкіндігі жасалған. Ол фун­к­цияны алдын ала main функция­сына дейін толық анықтау керек немесе оны алдын ала қысқаша сипаттап алып, main функциясынан кейін толық анықтауға болады. Сондықтан, тұтынушы функциялары декларациясы екі түрде: қысқаша сипаттау түрінде (main функция­сына дейін) және анықтау түрінде (main функциясынан кейін немесе дейін) толық берілуі мүмкін.

Функцияны алдын ала сипаттау барысында программалық файл­дың басын­да оның прототипі көрсетіледі, өйткені main функция­сында оның айнымалылары типтері белгілі болуы тиіс. Ол келесі түрі жазылады:

<нәтиже_типі> <функция _ аты>(<тип> <айнымалы1>, <тип> <айнымалы2>, …<тип> <айнымалыN>);

Прототиптегі жай жақшаларға алынған айнымалылар идентифика­тор­ларын көрсетпесе де болады, өйткені тілдің компиляторы оларды өңдемейді.

Параметрлер тізімімен берілген fun функциясын сипаттаудың мысалы:

float fun(int, float, int, int);

Функция прототипі компиляторға программа мәтінінде негізгі программадан (main()) кейін оның толық анықтамасы келтірілетінін білдіреді.

Функцияның толық анықталуының жазылу түрі төменде­гідей:

<нәтиже_типі> < функция _ аты >(параметрлер

тізімі)

{

функция коды

}

Нәтиже_типі return операторының көмегімен функцияның ша­қы­рылу нүктесіне қайтарылатын мәннің типін көрсетеді. Егер функция типі көрсетілмесе, қайтарылатын мән int типті деп сана­лады. Параметрлер тізімі үтірмен ажыратылған типтер мен параметр­лер ат­та­­ры­ның тізбегінен тұрады. Егер функцияның параметрлері болмаса да, жай жақшалар бәрі бір міндетті түрде көрсетілуі тиіс.

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

Екі бүтін санның ішіндегі кішісін анықтайтын функцияның мы­са­лы:

Int mini(int X, int y)

{int t;

if (x<y) t=x;

else t=y;

return t;

}

Мini функциясын келесі түрде де жазуға болады:

mini(int x, int y)

{

return (x<y)? x:y;

}

Екі бүтін санның ішіндегі үлкенін анықтайтын функцияның мысалы:

Int maxi(int X, int y)

{

if (x>y)

return (x);

else

return (y);

}

Егер қайтарылатын мәннің типі көрсетілмесе, ол int типті болып есептеледі.

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

Егер функция ешқандай мән қайтармайтын болса, онда ол void (бос) типті функция ретінде сипатталуы тиіс. Мысалы, дисплей экра­нына бір толық жолды шығару үшін келесі функцияны жазамыз:

Void lin(char a)

{

int k;

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

printf(“%c”, a);

}

Егер функцияда ешқандай параметр болмаса, онда функцияны декларациялау барысында жай жақша ішіне void сөзін жазған дұрыс. Мысалы, негізгі функция тақырыбының көбінесе былай жазылуы мүмкін:

void main(void).

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

Функция келесі түрде шақырылады:

<функция_аты>(аргументтер_тізімі);

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

Айнымалылардың әрекет ету аймағы

Айнымалылардың әрекет ету аймағы – программаның ағымдағы әрекеттеріне қандай мәліметтердің қатынасуға болатынын анықтайтын қағида. Айнымалылардың үш типі болады: ауқымды, локальді (жергі­лікті) және формальды. Жергілікті айнымалылардың әрекет ету айма­ғы – олар сипатталған программа бөлігі, яғни олар сол функция тұлға­сында ғана белгілі болып табылады. Программаның осы бөлігінен шыққан соң, жергілікті айнымалылар мен олардың мәндері жоғалады.

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

Ауқымды айнымалылар программадағы функциядан тыс сипат­та­лады. Олар программаның кез келген жерінде қолданылуы мүмкін, сондықтан ауқымды айнымалыларды алдын ала сипаттау және бас­тап­қы мәндерді меншіктеу керек. Ауқымды айнымалылардың әрекет ету аймағы – олар сипатталғаннан бастап, программа соңына дейін болып саналады.

Си тілінде әрбір айнымалы компьютер жадының келесі төрт класының біріне жатуы тиіс, олар – автоматты (auto), сыртқы (extern), статикалық (static), регистрлік (register). Айнымалы класын көрсету үшін оның типі спецификациясының алдына қажетті түйінді сөз (auto, extern, static, register) қоса жазылады. Мысалы, register int a;

Айнымалы үшін жады класы нақты көрсетілмеген жағдайда, ол auto класына жатқызылады.

Си тілінде функцияны шақыру барысында аргументтер өздерінің осы программадағы мәндеріне сәйкес әрекеттер атқарады, яғни функцияға аргументтердің нақты мәндері емес олардың көшірме­лері жіберіледі. Компьютер жадында (стекте) функцияның формальды параметрлері үшін орын бөлінеді және функцияны шақыру кезінде сол бөлінген орындарға нақты аргументтер мәндері орналастырылады. Содан кейін функция осы мәндерді пайдаланады, бірақ функциядан шыққан кезде олар жоғалып кетеді.

Қажет болған жағдайда, функцияны оған берілген аргумент­терді өзгерту үшін қолдануға болады. Ол үшін шақырылатын функцияға аргумент ретінде айнымалы мәнінің орнына оның адресін жіберсе болғаны. Ал аргумент негізгі (оригинал) мәнді пайдалануы үшін “*” нұсқауыш операциясын қолдану қажет.

1- мысал. x және y мәндерінің орындарын ауыстыратын функция­ның анықталуы: