Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Mova_S.doc
Скачиваний:
19
Добавлен:
23.02.2016
Размер:
1.14 Mб
Скачать

Функції користувача

Виконання програми завжди починається з команд, які містяться у функції main(). Функція main() може викликати інші функції, наприклад, printf() або функції, які написані програмістом.

Функція – це самостійна одиниця програми, яка спрямована для реалізації конкретної задачі. Функції в мові С відіграють ту ж саму роль, що і підпрограми та процедури в інших мовах.

У функцію можна передати один або декілька параметрів та повернути основній програмі значення функції (оператор return). Змінні в функції є її внутрішніми змінними, і вони “не відомі” в функції, яка викликає дану функцію. Так само змінні функції, що викликає іншу, не відомі в функції, яка викликається. Тому для зв’язку між викликаною функцією і функцією, яка викликається використовуються аргументи (параметри) і оператор return.

Приклад:

/* Функція, яка обчислює модуль числа */

float abs(x)

float x;

{

float y;

if (x<0) y =-x;

else y=x;

return y;

}

main()

{

float a=10, b=0, c=-2.2;

float d, e, f;

d = abs (a); e = abs (b); f = abs (c);

printf (“%f, %f, %f\n”, d, e, f);

return 0;

}

Тип функції визначається типом значення, яке вона повертає, а не типом її аргументів. Якщо опис типу функції відсутній, то за замовчуванням вважається, що функція має тип int, тобто повертає ціле значення. Якщо значення функції не належить типу int, то необхідно вказати її тип двічі. Перший раз – там, де вона попередньо визначається (прототип функції), а другий раз – там, де описується її тіло.

Приклад:

/*Функція підрахунку квадрату числа. */

double square(); /* прототип функції */

void main ()

{

float a=1.5;

printf (“%f \n”, square (a));

return;

}

double square(x). /* тіло функції */

double x;

{

return x*x;

}

Ключове слово void використовується, якщо немає параметрів або функція нічого не повертає (void fun(void);). Функція повертає тільки одне значення. Якщо треба повернути два або декілька значень, то це реалізується за допомогою вказівників.

Приклад:

/* Функція, яка обчислює частку і остачу від ділення */

int dl(); /* прототип функції */

main()

{

int a, del, ost, chast;

a=23; del=5;

chast = dl (a, del, & ost);

printf (“\n частка=%d, остача=%d\n”, chast, ost);

return 0;

}

int dl(x,y,z)

int x,y;

int *z;

{

*z=x%y;

return x/y;

}

Функції із змінним числом аргументів

Прикладами функцій із змінним числом аргументів є функції printf и scanf. В кожній з таких функцій має бути хоча б один формальний параметр. За останнім формальним параметром функції, які представлені в явному вигляді, має слідувати формальний параметр, записаний із допомогою символа ... (трикрапка).

Звернення до аргументів, представленим формальним параметром трикрапка, здійснюється за допомогою макровикликів va_arg.

В кожній реалізації мови в заголовочному файлі має знаходитись набір макровизначень va_arg, va_list, va_start та va_end. Їх призначення такі:

va_list– оголошує допоміжну змінну типу va_list;

va_start– зв’язує допоміжну змінну, оголошену за допомогою va_list, з формальним параметром, який передує формальному параметру (…);

va_arg– повертає дане, яке представлено черговим аргументом функції;

va_end– видаляє зв’язок змінної, зроблене макровизначенням va_start.

Приклад:

#include<stdio.h>

#include<stdarg.h>

main(void)

{

void Sum(int,…);

Sum(3,1,4,9);

return 0;

}

int Sum(int Count,…)

{

va_list Text;

va_start(Text,Count);

int Res=0;

while(Count--)

Res+=va_arg(Text,int);

va_end(Text);

}

Перший аргумент функції Sum визначає число аргументів, які слідують безпосередньо за ним.

Послідовні виклики макровизначенння va­­_arg повертають аргументи 1, 4, 9.

Виконання програми веде до виводу числа 14.

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