- •Методичні вказівки до виконання лабораторних робіт з дисципліни "Програмування"
- •Порядок виконання лабораторних робіт
- •Загальні відомості
- •Void main()
- •Int func1(int arr[]){..}
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Лабораторні роботи Лабораторна робота №1 Робота з масивами
- •Int main()
- •Int main()
- •Контрольні питання до лабораторної роботи № 1
- •Лабораторна робота № 2 Структури. Об'єднання. Бітові поля структур і об'єднань
- •Int main()
- •Void main()
- •Void main()
- •Int main()
- •Int flag;
- •Контрольні питання до лабораторної роботи № 2
- •Лабораторна робота № 3 Елементарне введення у функції
- •Int main()
- •Int main()
- •Int main()
- •Int arr, barr, arr1, barr1;;
- •Int main()
- •Int main(int argc, char **argv, char **envp)
- •Контрольні питання до лабораторної роботи № 3
- •Int *fp(int,float); int fp(int *,float);
- •Лабораторна робота № 4 Прийоми використання функцій
- •Int main()
- •Void main()
- •Void main()
- •Void main()
- •Контрольні питання до лабораторної роботи № 4
- •Int func1(int, float);
- •Лабораторна робота №5 Робота з файлами
- •Int main()
- •Int main()
- •Int main()
- •Int year;
- •Int main()
- •Контрольні питання до лабораторної роботи № 5
- •Лабораторна робота № 6 Багатофайлова компіляція
- •Int main()
- •Контрольні питання до лабораторної роботи № 6
- •Література
Void main()
{int a=10,res1,res2; float f=55.9;
res1=max(a,20); // res1=20
res2=max(int(f),a+30);} // res2=55
Якщо функція визначена після функції main() або в іншому файлі, то до першого звернення до функції вона має бути описана. Опис функції називається прототипом. Це заголовок функції, наприкінці якого обов'язкова крапка з комою. Прототип необхідний для перевірки відповідності типів та кількості переданих у функцію параметрів і типів повернених значень. У прототипі можна не вказувати імена формальних параметрів. Приклади прототипів:
float sum(float a, float b, float c);
int max(int, int);
Всі параметри функції, крім покажчика і масиву, передаються за значенням. Тобто, для переданих (фактичних) параметрів в функції створюються копії цих параметрів, під які в стеку виділяється пам'ять. Дії, що виконуються над цими копіями в тілі функції, не впливають на значення фактичних параметрів поза функцією.
При передачі в функцію покажчиків (адрес фактичних параметрів) в функції створюються копії цих адрес, а в тілі функції становиться відомо, де знаходяться фактичні параметри, і, тому, їх значення можна змінити.
Функції і масиви. При передачі масиву у функцію в якості параметру вказується ім'я масиву (покажчик-константа), тобто передається адреса початку масиву. Тому усі дії усередині функції проводяться саме з елементами масиву-оригіналу. При цьому список формальних параметрів в заголовку функції має дві рівноправні форми:
Int func1(int arr[]){..}
або int func2(int *mass){..}
В обох випадках у функції створюється копія покажчика відповідного типу, який діє усередині функції як звичайний покажчик-змінна і може змінювати своє значення. Наприклад, arr++.
Доступ до елементів масиву усередині функції можна виконувати за допомогою індексів та за допомогою операції розіменування:
arr[0], arr[i], *(arr+0), *(arr+i).
Для роботи з усіма елементами масиву необхідно знати кількість елементів в масиві. Є два способи визначення кінця масиву:
а) в якості одного з параметрів у функцію передається розмір масиву; б) останній елемент масиву задається будь-яким унікальним значенням, яке аналізують у функції.
Приклад. Функція обчислює суму елементів масиву.
#include <stdio.h>
int sum(int x[],int N) // N визначає кількість елементів в масиві
{for(int S=0,i=0;i<N;i++)
S+=x[i];
return S;}
Void main()
{int a[5]={1,3,5,10,2},c[3]={2,1,6}, res1,res2;
res1=sum(a,5); // виклик функції
res2=sum(c,3); // виклик функції
printf("res1=%d res2=%d\n", res1,res2);} // 21 9
Приклад. Функція обчислює кількість символів в слові.
#include <stdio.h>
int len(char *c) // визначення функції
{int i=0;
while(c[i++]!='\0'); // ознака кінця рядка символ '\0'
return i-1; } // довжина рядка без урахування символу '\0'
Void main()
{char *name="TERMINATOR", str[6]="Рядок";;
printf("Довжина 1 рядка=%d", len(name)); // 10
printf("Довжина 2 рядка=%d", len(str)); } // 5
Функції з параметрами за умовчанням. Це функції, що мають в специфікації формальних параметрів значення за умовчанням. При зверненні до такої функції параметри за умовчанням можна не вказувати. Але якщо параметр має значення за умовчанням, то всі параметри, що йдуть за ним, повинні мати теж значення за умовчанням.
Наприклад:
int def(int a,int b=3,int c=4)
{return a*b+c;}