Лабораторна робота №5
Тема: Функції. Визначення. Оголошення. Передача параметрів. Класи пам’яті.
Мета: отримання практичних навичок у роботі з функціями користувача, передачею параметрів, використання класів пам’яті при оголошенні змінних та функцій.
Контрольні запитання:
Визначити значення наступних арифметичних виразів:
-
sqrt(16.0)
sqrt(16)
pow(2.0, 3.0)
pow(2, 3)
pow(2.0, 3)
pow(1.1, 2)
abs(3)
abs(-3)
abs(0)
fabs(-3.0)
fabs(-3.5)
fabs(3.5)
ceil(5.1)
ceil(5.8)
floor(5.1)
floor(5.8)
pow(3.0, 2) / 2.0
pow(3.0, 2)/2
7 / abs(-2)
(7+sqrt(4.0)) / 3.0
sqrt(pow(3, 2))
Що виведе наведена нижче програма?
#include <iostream>
using namespase std;
char mystery(int first_par, int second_par);
int main()
{
cout<<mystery(10, 9)<< “ow\n”;
return 0;
}
char mystery (int first_par, int second_par)
{
if (first_par >= second_par)
return ‘W’
else
return ‘H’;
}
Опишіть механізм виклику функції.
Перерахуйте спільне і відмінне між використанням перевизначеної (наприклад, бібліотечної ) функції і функції, заданої користувачем.
Поняття часу життя та області видимості об’єкта.
Якими об’єктами є функції в Сі?
Перелічити усі випадки, коли в Сі використовується тип void. Дати визначення цього типу.
Перелічити класи пам'яті, визначені в Сі. Що визначає клас пам'яті? У яких випадках і якому образі клас пам'яті визначається за замовчуванням? Привести приклади.
Що означає СКП static для змінної описаної на внутрішньому та зовнішньому рівнях?
Чи визначений у Сі клас пам'яті для функцій? Якщо визначений, то яким чином; якщо ні, то чому.
Чи припустима в Сі вкладеність функцій? Чи можна в Сі якимось чином керувати видимістю функцій?
Чи еквівалентні наступні оголошення функцій:
a) double f ( ); і double f (void);
b) char g ( int i, char c); і char g ( int, char);
c) h ( double x); і int h ( double x);
d) void h ( int ); і h ( int );
e) extern int q ( int ); і int q ( int);
f) static void s ( char c); і void s ( char c);
0
Визначити, які конструкції є визначеннями, а які оголошеннями; де вони можуть розташовуватися і що позначають:
int i; char c = ‘a’; extern int f ( int, char );
static int j; register int b; double g( ) { return 3.141592; };
extern long k; int h ( int i ); static char q( int, double );
auto short n; s(); static void p( int i ) { };
Чи вірні наступні твердження:
a) «тип виразу в операторі return повинний збігатися з типом результату функції»
b) «функція, що не повертає результату (тип результату void), може не містити оператор return;»
c) «функція, що повертає результат, може не містити оператор return А; але викликає іншу функцію, що містить такий оператор»
d) «функція, що повертає результат, може містити декілька операторів return А; »
e) «у Сі аргументи функції завжди передаються за значенням»
f) «у тілі однієї функції можуть знаходитися два різних оператори, позначених однаковими мітками, якщо ці оператори знаходяться в різних блоках»; наприклад,
void f(void)
{ ... label: S1; ...
{ ... label: S2; ... goto label; ...}
... goto label; ...
}
g) «у Сі не можна використовувати двох (чи більше) взаємно рекурсивних функцій»; наприклад, якщо є void f(void){... g();...} і void g(void){...f();...}, те програма, що використовує такі функції, буде помилковою.
h) «у Сі можна ввійти в блок, минаючи його заголовок; при цьому пам'ять під локальні перемінні, описані в цьому блоці, буде відведена, але ініціалізація (якщо вона є) виконуватися не буде»
i) «будь-яка функція, описана в якому-небудь файлі, що входить до складу програми, може бути використана в цьому і будь-якому іншому файлі цієї програми»
У яких випадках у Сі можлива ініціалізація змінних? Коли вона відбувається? Як визначається ініціалізація за замовчуванням?
ЗАВДАННЯ 1:
Варіант 1.
1. За
даними дійсними числами a,
b
обчислити:
,
де
.
Варіант 2.
Дано координати вершин двох трикутників. Визначити, який з них має більшу площу.
Варіант 3.
Описати функцію Power(X,N) обчислення цілого степеня числа (Y=XN)
Варіант 4.
Дано
дійсні числа x,
y
та
z.
Обчислити:
.
Варіант 5
Дано
дійсні числа x,
y.
Обчислити:
,
де
.
Варіант 6.
Дано
дійсні числа s,
t.
Обчислити:
,
де
.
Варіант 7.
Опишіть функцію, яка як початкові параметри використовує довжини трьох сторін трикутника (S1,S2,S3) і визначає площу трикутника, обчислену за формулою
,
де
Напишіть програму, яка використовує цю функцію.
Варіант 8.
Опишіть
підпрограму-функцію для знаходження
значення функції
cos(x)
за розкладом в ряд Тейлора із заданою
точністю:
. Складіть програму, яка використовує
цю функцію.
Варіант 9.
Дано
дійсні числа x,
y.
Обчислити:
,
де
.
Варіант 10
Дано дійсні числа s, t. Обчислити: , де .
Варіант 11
Опишіть
підпрограму-функцію
для знаходження значення функції ex
за
розкладом в ряд Тейлора із заданою
точністю:
. Складіть програму, яка використовує
цю функцію.
Варіант 12
Опишіть
підпрограму-функцію для знаходження
значення функції sin(x)
за розкладом в ряд Тейлора із заданою
точністю:
. Складіть програму, яка використовує
цю функцію.
ЗАВДАННЯ 2:
Варіант 1
Опишіть рекурсивну підпрограму-функцію для знаходження суми парних двоцифрових чисел: S=10+12+14+…+96+98. Складіть програму, яка використовує цю функцію.
Варіант 2
Опишіть рекурсивну підпрограму-функцію для знаходження суми трицифрових чисел – повних квадратів: S=100+121+ +144+…+900+961. Складіть програму, яка використовує цю функцію.
Варіант 3
Опишіть рекурсивну
підпрограму-функцію
для обчислення довільного N-го
члена послідовності Фібоначі,
якщо існує така залежність:
Знайти суму N перших членів цієї послідовності. В якості параметра підпрограмі передається номер елемента N. Складіть програму, яка використовує цю функцію.
Варіант 4
Опишіть рекурсивну підпрограму-функцію Squares(N) для обчислення суми квадратів N цілих чисел (12+22+…N2). Складіть програму, яка використовує цю функцію.
Варіант 5
Описати рекурсивну функцію обчислення значення A(n,m) - функції Акермана для невід’ємних цілих чисел n і m:
m+1 якщо n = 0
A(n, m) = A(n-1,1) якщо n 0, m = 0
A(n-1, A(n, m-1)) якщо n>0, m>0
За допомогою цієї функції знайти значення A(5,8).
Варіант 6
. Описати рекурсивну функцію обчислення xn для дійсного x (x 0) і цілого n:
1 при n = 0
xn = 1/x|n| при n < 0
x xn-1 при n > 0
Протестувати цю функцію на придатних наборах вхідних даних.
