Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_5_param.DOC
Скачиваний:
13
Добавлен:
17.05.2015
Размер:
92.67 Кб
Скачать

Результати виконання програми

а =2.5 b =3.7

а =3.7 b =2.5

Розглянемо ще один приклад програми, яка використовує функцію minmax для вибору мінімального і максимального значень із масива а на m значень. Масив а заповнюється випадковими числами за допомогою вбудованих функцій rand i randomize.

Формальними параметрами функції minmax є:

  • а [m] – масив на m значень типу int

  • mn i mx –покажчики на скалярні значення типу int.

При виклику в функцію minmax в якості фактичних параметрів передаються адреси розміщення змінних в викликаючій функції:

  • а –масива а;

  • &amn – змінної amn і

  • &amx – змінної amx

Результатом виконання функції minmax є мінімальне (*mn) і максимальне (*mx) значення елементів масиву а, розташованих відповідно за адресами &amn i &amx.

Лістинг – Програма з функцією minmax для вибору мінімального і максимального значень

# include <stdlib.h>

# include <stdio.h>

# include <conio.h>

# define m 5 // m – зовнішня константа

FILE *f; // покажчик для файла результатів

void main ()

{ int a [m ], i, amn, amx;

void minmax (int a[m], int *mn, int *mx ); //оголошення функції

// f=fopen (“10.rez”, “w”); // для виведення у файл

f=fopen (“con”, “w”); // для виведення на екран

clrscr ();

fprintf (f, “Випадкові числа:”); randomize ();

for (i=0; i<m; i++) a[i]= rand ();

fprintf (f, “%d”, a[i]);

minmax (a, &amn, &amx); // виклик функції minmax

fprintf (f, “\n amn=%d amx=%d”, amn , amx);

fclose (f);

printf (“ \n Для завершення натисніть будь-яку клавішу “);

fclose (f);

getch ();

}

// функція вибору мінімального і максимального значень масиву:

void minmax (int a[m], int *mn, int *mx)

{

int i;

*mn = *mx = a[0];

for (i=1; i<m; i++) // формування результату

if (a[i]<*mn *mn= a[i]; // *mn, і

else if a[i]>*mx) *mx= a[i]; // *mx

}

Результати виконання програми

Випадкові числа: 23758 21007 2136 2036 333 86

amn=2036 amx=32386

Параметри-масиви

Масив в якості параметра може бути переданий в функцію тільки за допомогою покажчика (адреси) масиву. В якості формального параметра масиву даних будь-якого типу можна використовувати:

  1. ім’я масиву з фіксованими межами; наприклад:

int a[10]; float b[m] [n];

  1. ім’я масиву з “пустою ” першою межею; наприклад:

int a[ ]; float b[ ] [ ]; double c [ ] [m] [n];

  1. покажчик на початок масиву або підмасиву; наприклад:

int *a; float *b; double *c;

Визначення формального параметра в формі float a[ ] i float *a еквівалентні. При передачі в функцію покажчика – фактичного параметра в ОП формального параметра функції передається адреса нульового елемента масиву – фактичного параметра.

Приклади оголошення функції з параметрами-масивами:

void f1 (float b[m] [n], int m, int n);

void f2 (float a [10], int k);

void f3 (float a [ ], int k); //ці оголошення еквівалентні

void f4 ( float *a, int k); //для одновимірного масиву

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

Розглянемо різні форми оголошення масивів, допустимі фактичні параметри і допустимі форми завершення до їх елементів.

Соседние файлы в папке lexzii_08