МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
ЗВІТ
До виконання лабораторної роботи №1
На тему: “ОСНОВНІ ПОНЯТТЯ АЛГОРИТМІЧНОЇ МОВИ С.
ОПЕРАТОРИ РОЗГАЛУЖЕННЯ ПРОГРАМИ У МОВІ С”
З курсу “Проблемно-орієнтовані мови програмування”
1. МЕТА РОБОТИ
Мета роботи - вивчення основних понять алгоритмічної мови С, операцій, стандартних функцій, операторів розгалуження програми.
2. ТЕОРЕТИЧНІ ВІДОМОСТІ
C - універсальна мова програмування. Вона розроблялась в тісному зв’язку з системою UNIX, однак не є прив’язаною до цієї операційнї системи і може використовуватись у будь-яких операційних системах або машинах.
C - мова порівняно “низького рівня” У ній немає:
а) прямих операцій над такими об’єктами як множини, стрічки, списки і масиви;
б) операцій які маніпулюють з цілими масивами або стрічками, натомість використовуються структури;
в) засобів розподілу пам’яті окрім можливості визначення статичних змінних і стекового механізму при виділенні місця для локальних змінних функцій;
г) засобів вводу-виводу (READ, WRITE) і методів доступу до файлів.
Все це механізми високого рівня, які в мові C реалізуються за допомогою функцій.
Мова C містить засоби лише послідовного управління ходом обчислень: не містить засобів мультипрограмування і паралельних процесів.
Основна філософія мови C грунтується на тому що програміст знає, що робить і явно вказує ці наміри. Тому мова C не є “строго типізованою” мовою. Крім того, рівень пріоритетності виконання деяких операторів не є загальноприйнятим, деякі синтаксичні конструкції вимагають покращення. Не звертаючи увагу на деякі недоліки, мова C є ефективною і виразною мовою, придатною для широкого кола задач.
2.1. Алфавіт мови C
Програма в мові C записується символами алфавіту, який містить:
1) великі і малі букви латинського алфавіту;
2) десяткові цифри від 0 до 9;
3) спеціальні символи: “,”, [,],(,),{,},+,-,/,%,\,;,:,?,<,>,+,-,|,^,&,*,#.
Із символів складаються базові елементи мови.
Правила запису імені змінної або іменованої константи (ідентифікатора):
Ідентифікатори складаються з букв, цифр і знаку підкреслення (“-”) (до складу ідентифікатора не може входити будь-який спеціальний символ).
Першим символом повинна бути буква. Не можна починати ідентифікатори із знаку підкреслення оскільки багато змінних бібліотечних програм починається саме з цього знаку.
Не можна плутати в ідентифікаторах великі і малі букви (Х і х - це два різні ідентифікатори). Здебільшого імена змінних набирають малими буквами, а іменовані константи - великими.
Ідентифікатори не можуть співпадати з ключовими словами мови C.
Довжина ідентифікатора: для зовнішніх імен не більше 6 символів; для внутрішніх - не більше 31 символа.
2.2 Типи і розміри даних
У мові C дані поділяються на 2 групи:
1) прості або скалярні;
2) складні або структуровані.
Для скалярних даних існують такі базові типи:
1) char - одиничний байт, що містить один символ;
2) int - ціле число;
3) float - число з плаваючою крапкою одиничної точності;
4) double - число з плаваючою крапкою подвійної тосності.
Для розширення базових типів використовуються кваліфікатори:
1) short - короткий; 2) long – довгий.
Ці кваліфікатори застосовуються до цілого типу: short int (можна писати просто short) - короткий цілий. Наприклад, якщо ціле число типу int може займати в пам’яті машини або 16 біт або32 біти, то long займає 32 біти, а short - 16 біт.
Кваліфікатор long може розширювати тип double. Тип long double - числа з плаваючою крапкою підвищеної точності.
Кваліфікатор 1) signed - із знаком; 2) unsigned - без знака - використовуються до типу int i char. Якщо значенню char відводиться 8 біт, то unsigned приймає значення від 0 до 255, а signed від -128 до 127.
У мові C не існує логічного або булевського типу, хоча логічні операції використовуються. Треба запам’ятати, що значенню “істина” відповідає “не нуль”, тобто будь-яке число, що не дорівнює нулю, а “не істина” - “нуль”.
2.3. Константи
Константи можуть бути тих самих типів що і змінні:
1) цілого: 1024
2) цілий довгий: 124727119L - останне літера L (або l);
3) беззнаковий довгий: 124727429UL - останні літери UL (або ul);
4) з плаваючою крапкою 7.1425;
5) в експоненціальній формі 0.742е-1;
6) символьні константи ‘X’,’L’,’0’.
Крім цього константи можуть бути представлені як вісімкове число, або як шістнадцяткове число;
7) вісімкове число 037 починається з цифри 0;
8) шістнадцяткове число 0Х1F - починається з 0Х.
2.4.Декларації
Всі змінні в програмі C повинні бути описані (задекларовані) до того як будуть використані. Деякі декларації можуть бути неявними. Декларація вказує тип і містить список одної або кількох змінних
int i,k,ms[20];
char C, cl;
Одночасно з декларацією змінних можлива і їх ініціалізація (задання початкового значення):
char ls=’0’;
іnt k,l,lk[20], I=1;
float eps=1. 0e-5.
До будь-якої змінної в декларації можна використати кваліфікатор const, тоді змінна перетворюється в константу, тобто її значення при виконанні програми не змінюється.
const int n=20;
const double l=2.71828182.
3. СТРУКТУРА ПРОГРАМИ
По аналогії з Паскалем і Фортраном програма на мові C складається з двох частин:
1) заголовка, 2)тіла програми.
Заголовок складається з директив препроцесора і імені функції. Тіло програми або функції являє собою набір операторів і міститься в фігурних дужках “{}”, що аналогічно оператором Веgin і end у Паскалі. Ознакою закінчення оператора є символ крапка з комою “;”.
В одному рядку може бути кілька операторів як і у Паскалі, але бажано дотримуватись правила “одна стрічка - один оператор” (як у Фортрані), тоді програма більш наглядна і легше читається.
Коментарі в мові C обмежуються символами /* і */.
Наведемо приклад простенької програми за допомогою якої вводимо з клавіатури символ, а на екран виводимо код цього символа.
# include<stdio.h> /* заголовок */
main()
{
char ch;
рrintf (введіть символ\n”); /*тіло функції}*/
scanf (“%с”, &ch);
printf(“\n код символу %C:%d)\n”,ch,ch);
}
Кожна програма на мові C складається з функцій. Функції в C подібні до підпрограм і функцій в Фортрані і до процедур і функцій в Паскалі. В наведеному прикладі це функція main () -основна програма пусті дужки при імені функції означають, що ніяких вхідних параметрів основна програма не потребує. Стрічка # include<stdio.h>вказує компілятору, що необхідно включити інформацію, яка міститься у файлі stdio.h - стандартна бібліотека вводу-виводу. Значок # означає, що це директива препроцесора. Значки “<>” означають, що це стандартні файли, якими комплектується компілятор C.
В наведеному прикладі функція main складається з 4 операторів.
char ch; - опис типу змінної ch.
рrintf (“введіть символ \n”); - виклик бібліотечної функції виводу на друк.В дужках задається список виводу. В даному випадку друкується стрічка символів, що міститься в подвійних лапках:
введіть символ.
Значок \n - перехід на наступну стрічку. scanf (“%с”, &ch); - виклик бібліотечної фукнції форматного вводу.
Аргументами цієї функції є:
1) специфікатор формату: “%c”; 2) вказівник на змінну сh; &ch.
Слід пам’ятати, що для того щоб ввести за допомогою функції scanf якесь значення і присвоїти його змінній одного з основних типів, перед іменем змінної необхідно записати символ “&”(крім char).
Специфікатор формату відображає тип змінної, що виводиться на друк або вводиться з клавіатури.
Розрізняють такі специфікатори формату:
%d- десяткове ціле число:
%f - число з плаваючою крапкою, десятковий запис;
%e - число з плаваючою крапкою, експоненціальний запис;
%g - число з плаваючою крапкою або десятковий або експоненціальний запис аналогічно формату G у Фортрані. Використовується тільки при виводі змінних;
%c - один символ;
%s - стрічка символів;
%u - десяткове ціле без знаку;
%o - вісімкове ціле число без знаку;
%x - шістнадцяткове ціле число без знаку.
Четвертий оператор тіла програми printf(“\n код символу ‘%с’:%d)\n”,ch,ch); виведе на екран повідомлення “код символу”, символ, який Ви набрали з клавіатури, в лапках, а тоді ціле число, що є кодом ASCII цього символа.
4. ОПЕРАЦІЇ
Умовно операції в мові C можна розбити на такі групи:
4.1 Операції аналогічні операціям в мові Паскаль і Фортран.
1)Арифметичні операції: унарні: +;-; бінарні +;-;*;/; (додавання, віднімання, множення, ділення)
До операції ділення в сові C потрібно відноситись дуже уважно. Якщо обидва операнди цілого типу, то і результат буде цілого типу, тому S=2/5; в результаті виконання цього оператора S присвоїться 0, щоб одержати правильний результат необхідно щоб хоча б один операнд був дійсного типу, тобто S = 2.0 /5.0;
У мові C є ще одна бінарна операція % - знаходження залишку від ділення цілих чисел.
K=7% 2; - присвоїти змінній цілого типу К значення 1, оскільки 7:2=3 і 1 залишок. До змінних дійсного типу ця операція не застосовується.
2) Операції порівняння: >; >=; <; <=;
3) Операційні рівності: = = - рівне; != - не рівне
4) Логічні операції: ! - логічне “ні”; || - логічне “або”;
&& - логічне “і”.
4.2 Операції відсутні в мовах Паскаль і Фортран:
4.2.1. Інкрементні та декрементні операції.
Інкрементна операція ++ додає 1 до свого операнда.
Оператор n++; можна записати n=n+1;
Декриментна операція - - віднімає 1 від свого операнда. Розрізняють два види цих операцій:
1)префіксні ++n - змінна n збільшується на 1 до того, як використовується у виразі;
2)постфіксні n++ - змінна n збільшується на 1 після того, як її значення буде використано у виразі.
Для ілюстрації цих операцій виконайте таку програму
# include<stdio.h>
main()
{
int a=1, b=1;
int aplus, plusb;
aplus=a++;
plusb=++b
рrintf (“a aplus b plusb”);
printf(“%3d%5d%5d%5d\n”, a, aplus, b, plusb);
}
В результаті виконання цієї програми одержимо: а aplus b plusb
2 1 2 2
Значення а збільшилось на 1 після того як виконалась операція присвоєння. Значення b спочатку збільшилось на 1, а тоді виконалась операція присвоєння.
4.2.2. Побітові операції
В мові C існує 6 операцій для роботи з бітами.
& - побітове “і”;
| - побітове “або”;
^ - побітове “виключаюче “або”;
~ - побітове “ні”;
>> - зсув вправо;
<< - зсув вліво.
& - побітове “і” - бінарна операція, що по розрядах порівнює два двійкові числа. Результат дорівнює 1, якщо обидва операнди рівні 1 у цьому розряді, тобто
10010011
00111101
_______
00010001
| - побітове “або”. Результат 1, якщо хоча б у одного операнда у цьому розряді 1, тобто
10010011
00111101
_______
10111111
^ - побітове “виключаюче “або” Для кожного розряда результат допівнює 1, якщо один з двох відповідних розрядів дорівнює 1, але не обидва одночасно.
10010011
00111101
_______
10101110
~ - побітове “ні” - унарна операція, яка заміняє кожну 1 на 0, а 0 на 1.
~(10010011)= =01101100
>> - зсув вправо - зсуває розряди лівого, операнда вправо на кількість позицій вказаних у правому операнді (10010011)<<2= =(00100100)
<< - зсув вліво - зсуває розряди лівого операнда вліво на кількість розрядів, що вказані в правому операнді: (10010011)>>2= =(01001100) позиції, які звільняються заповнюються нулями.
4.2.3. Операція “?”:”
Умовний оператор if у мові C можна замінити операцією виду “?”:”
z=(a<b)?a:b;
Цей оператор відповідає оператору умовного переходу такого виду:
if(a<b)
z=a;
else
z=b;
4.2.3. Операція присвоєння.
У мовах Паскаль і Фортран такої операції не було. Було поняття “оператор присвоєння”. У мові C немає одностойкості у застосуванні термінів “оператор” і операція. Так у [1,2] термін “оператор” застосовується і як поняття інструкція і як поняття “операція”, в [3,4] ці поняття розділені аналогічно мовам Паскаль і Фортран.
Операція присвоювання може мати такий вигляд:
<змінна>=<вираз>;
<змінна><знак операції>=<вираз>;
наприклад:
1)S=S+4
2)S+=4
У першому випадку операція присвоювання аналогічна оператору присвоювання у Паскалі і Фортрані, у другому - знак арифметичної операції виноситься за знак “=”;
В операції присвоювання можуть використовуватись такі операції:
+,-,*,/,%,<<,>>,&,|
4.3. Пріорітет і порядок виконання операцій.
В таблиці 1 приведено пріорітет і порядок виконання операцій
Таблиця 1
Пріорітет
Операції
Позначення
Порядок виконання
1.
Виклик функції або вибір
(); []; ->;.
зліва-направо
2.
Унарні операції
+; --; !; &; *; ~
справа-наліво
3.
Мультиплікативні
*; /; %
зліва-направо
4.
Аддитивні
+; -
зліва-направо
5.
Зсуву
>>; <<
зліва-направо
6.
Порівняння
>; >=; <; <=;
зліва-направо
7.
Рівності
==; !=
зліва-направо
8.
Побітове “і”
&
зліва-направо
9.
Побітове виклакаюче “або”
^
зліва-направо
10.
Побітове “або”
|
зліва-направо
11.
Логічне “і”
&&
зліва-направо
12.
Логічне “або”
||
зліва-направо
13.
Умови
?:
справа-наліво
14.
Присвоювання
=; <знак>=
справа-наліво
15.
Кома
,
зліва-направо
Стандартні функції
Основні математичні функції описуються в файлі <math.h> і приводяться в таблиці 2.
Таблиця 2
Ім’я функції
Математичний запис
Тип і межі зміни аргументів
Тип результату
sin(x)
sin x
double
double
cos(x)
cos x
double
double
tan(x)
tg x
double
double
asin(x)
arcsin x
double x([-1,1]
[-(/2,(/2]
acos(x)
arccos x
x([-1,1]
[0,(]
atan(x)
arctg x
x([-(/2,(/2]
double
sinh(x)
sh x
double
double
cosh(x)
ch x
double
double
tanh(x)
th x
double
double
exp(x)
ex
double
double
log(x)
ln x
x>0
double
log10(x)
lg x
x>0
double
pow(x,y)
xy
x(0; y>0
double
sqrt(x)
x(0
double
fabs(x)
|x|
double
double
ldexp(x,n)
x . 2n
x-double, n-int
double
fmod(x,y)
Залишок від ділення дійсних чисел х на у
double
double
5. ПЕРЕТВОРЕННЯ ТИПІВ
В операторах і виразах бажано використовати змінні і константи однакового типу. Якщо у виразі є змішування типів компілятор автоматично перетворить типи за такими правилами.
Якщо операція виконується над змінними різних типів, то оббидві змінні переводяться до “вищого” з двох типів.
Порядок типів від “вищого” до “нижчого” має такий вигляд:
а) double;
в) float;
г) long;
д) int;
е) short;
є) char.
В операторах присвоювання результат перетворюється до типу змінної, якій присвоюється це значення. Це може бути як “підвищення” типу так і “пониження”, наприклад в програмі:
#include<stdio.h>
main()
{int n,m;
float s,p;
n=5/7.0;
m=4.8/9.2;
s=5/7;
p=4.8/9.2;
printf(“n m s p \n”);
printf(“%d%d%f%f\n”,n,m,s,p);
}
одержимо результат
n m s p
0 0 0.00000 0.52174
Найкраще при написанні програми уникати перетворення типів, особливо в бік “пониження”. Але якщо Ви хочете явно вказати із змінними, або константами якого типу працюєте, існує явний вказівник
(<iмя типу>)<змінна або константа>.
Так у прикладі
m=1.6+1.8;
n=(int)1.6+(int)1.8;
Змінній m присвоїться значення 3, оскильки спочатку додадуться два дійсних числа 1.6 і 1.8 від результату 3.4 відкинеться дробова частина. Змінній n присвоїться значення 2, оскільки (int)1.6=1, (int)1.8=1; 1+1=2.
6. ОПЕРАТОРИ
Будь-яка програма складається з послідовності операторів. Ознакою закінчення оператора є крапка з комою “;”. Так запис S=5 не є оператором, це просто вираз, а S=5; це вже оператор присвоювання. Аналогічно Паскалю у мові C розрізняють прості оператори і блоки.
Блок - це група операторів, що міститься у фігурних дужках, вони використовуються:
1) щоб згрупувати кілька логічно зв’язаних операторів в один;
2) як тіло функції;
3) для локалізації дії описів.
6.1 Оператор if
Оператор if-else використовується для вибору одного з двох варіантів рішення. Синтаксичний опис оператора if-else:
if(вираз)
оператор 1;
else
оператор 2;
Обчислюється “вираз”, якщо його значення “істина” (тобто не нуль) виконується “оператор 1”, якщо “не істина” (тобто нуль) виконується оператор 2. Частина else може бути відсутня. При вкладених if-else необхідно пам’ятати, що else відноситься до внутрішнього if.
if(x>0)
if(a>b) z=a;
else z=b;
Якщо треба змінити порядок необхідно використати фігурні дужки, тобто виділити блок.
if(x>0)
{ if(a>b) z=a; }
else z=b;
Щоб розгалузити програму в кількох напрямках можна використати конструкцію: else if
if(вираз 1) оператор 1;
else if (вираз 2) оператор 2;
else if (вираз 3) оператор 3;
else оператор 4;
Якщо <вираз 1> - “істина” виконується оператор1, якщо “не істина” перевіряється вираз 2. Якщо <вираз 2> - “істина”, виконується оператор 2 і так далі.
6.2. Оператор switch
Оператор switch (перемикач) використовується для вибору одного з багатьох варіантів. Він подібний до оператора case у Паскалі.
Синтаксис оператора switch:
switch (вираз) {
case <константа вибору 1>:оператор 1;
case <константа вибору 2>:оператор 2;
…
default: оператор n }
Якщо “вираз” співпадає з одною із констант вибору, то виконується відповідний оператор або блок операторів. Якщо “вираз” не співпадає ні з однією з констант вибору - виконується оператор після слова “default”.
Для прикладу промоделюємо роботу світлофора.
#include<stdio.h>
main()
{
char ch;
printf(“введи першу літеру кольору”);
scanf(“%с\n”,ch);
switch (ch)& {
case `ч`: printf(“Зачекайте\n”); break;
case `ж`: printf(“Увага\n”); break;
case `з`: printf(“Ідіть\n”); break;
default: printf(“такого кольору у світлофора нема”); break;
} }
“Вираз” і константи вибору повинні бути цілого типу, або типу char. Заборонено використовувати в якості константи вибору змінну. Оператор break здійснює негайний вихід з оператора switch. Якщо цього оператора немає, то будуть виконані оператори всіх варіантів після вибраного.
7. КОНТРОЛЬНІ ЗАПИТАННЯ
Правила запису ідентифікаторів.
Ідентифікатори складаються з букв, цифр і знаку підкреслення (“-”) (до складу ідентифікатора не може входити будь-який спеціальний символ).
Першим символом повинна бути буква. Не можна починати ідентифікатори із знаку підкреслення оскільки багато змінних бібліотечних програм починається саме з цього знаку.
Не можна плутати в ідентифікаторах великі і малі букви (Х і х - це два різні ідентифікатори). Здебільшого імена змінних набирають малими буквами, а іменовані константи - великими.
Ідентифікатори не можуть співпадати з ключовими словами мови C.
Довжина ідентифікатора: для зовнішніх імен не більше 6 символів; для внутрішніх - не більше 31 символа.
Які Ви знаєте типи даних і як вони описуються?
У мові C дані поділяються на 2 групи:
1) прості або скалярні;
2) складні або структуровані.
Для скалярних даних існують такі базові типи:
1) char - одиничний байт, що містить один символ;
2) int - ціле число;
3) float - число з плаваючою крапкою одиничної точності;
4) double - число з плаваючою крапкою подвійної тосності.
Для розширення базових типів використовуються кваліфікатори:
1) short - короткий; 2) long – довгий.
Ці кваліфікатори застосовуються до цілого типу: short int (можна писати просто short) - короткий цілий. Наприклад, якщо ціле число типу int може займати в пам’яті машини або 16 біт або32 біти, то long займає 32 біти, а short - 16 біт.
Кваліфікатор long може розширювати тип double. Тип long double - числа з плаваючою крапкою підвищеної точності.
Кваліфікатор 1) signed - із знаком; 2) unsigned - без знака - використовуються до типу int i char. Якщо значенню char відводиться 8 біт, то unsigned приймає значення від 0 до 255, а signed від -128 до 127.
У мові C не існує логічного або булевського типу, хоча логічні операції використовуються. Треба запам’ятати, що значенню “істина” відповідає “не нуль”, тобто будь-яке число, що не дорівнює нулю, а “не істина” - “нуль”.
Структура програми на мові C.
По аналогії з Паскалем і Фортраном програма на мові C складається з двох частин:
1) заголовка, 2)тіла програми.
Заголовок складається з директив препроцесора і імені функції. Тіло програми або функції являє собою набір операторів і міститься в фігурних дужках “{}”, що аналогічно оператором Веgin і end у Паскалі. Ознакою закінчення оператора є символ крапка з комою “;”.
В одному рядку може бути кілька операторів як і у Паскалі, але бажано дотримуватись правила “одна стрічка - один оператор” (як у Фортрані), тоді програма більш наглядна і легше читається.
Перелічіть операції аналогічні операціям у мовах Паскаль і Фортран.
1)Арифметичні операції: унарні: +;-; бінарні +;-;*;/; (додавання, віднімання, множення, ділення) 2) Операції порівняння: >; >=; <; <=;
3) Операційні рівності: = = - рівне; != - не рівне
4) Логічні операції: ! - логічне “ні”; || - логічне “або”;
&& - логічне “і”.
Що таке побітові операції?
В мові C існує 6 операцій для роботи з бітами.
& - побітове “і”;
| - побітове “або”;
^ - побітове “виключаюче “або”;
~ - побітове “ні”;
>> - зсув вправо;
<< - зсув вліво.
Що таке оператор, ознака закінчення оператора.
Будь-яка програма складається з послідовності операторів. Ознакою закінчення оператора є крапка з комою “;”. Так запис S=5 не є оператором, це просто вираз, а S=5; це вже оператор присвоювання.
Напишіть основні стандартні функції у мові C.
sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), sinh(x), cosh(x), tanh(x), exp(x), log(x), log10(x), pow(x,y), sqrt(x), fabs(x), ldexp(x,n), fmod(x,y).
Як здійснюється узгодження типів у виразах?
Якщо операція виконується над змінними різних типів, то оббидві змінні переводяться до “вищого” з двох типів.
Порядок типів від “вищого” до “нижчого”.
В операторах присвоювання результат перетворюється до типу змінної, якій присвоюється це значення.
Яка різниця між оператором і блоком у мові C?
Блок - це група операторів, що міститься у фігурних дужках, вони використовуються:
1) щоб згрупувати кілька логічно зв’язаних операторів в один;
2) як тіло функції;
3) для локалізації дії описів.
Синтаксис умовного оператора if.
Оператор if-else використовується для вибору одного з двох варіантів рішення. Синтаксичний опис оператора if-else:
if(вираз)
оператор 1;
else
оператор 2;
Напишіть приклад оператора switch.
switch(p)
{
case '1': x=0.1; break;
case '2': x=2.0; break;
case '3': x=0.329; break;
default: printf("error\n"); break;
}
Для чого використовується оператор break?
Оператор break здійснює негайний вихід з оператора switch. Якщо цього оператора немає, то будуть виконані оператори всіх варіантів після вибраного.
11. ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
Скласти програму знаходження функції для різних значень аргументу . Вивести на друк значення аргументу, функції і проміжних змінних. Передбачити у програмі обхід алгебраїчних операцій, які можуть при певних значеннях аргумента та інших змінних мати невизначений результат, тобто ділення на нуль, добування кореня парного степеня з від’ємного числа, логарифма від’ємного числа і тому подібне.
28. , ,
, , , , .
Програмний код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
main ()
{
clrscr();
const float K=1.01, L=3.14;
float a,b,x,y;
char p;
scanf("%c\n",&p);
switch(p)
{
case '1': x=0.1; break;
case '2': x=2.0; break;
case '3': x=0.329; break;
default: printf("error\n"); break;
}
if ((7.002*K*x-1+0.1*(exp(2*x)+exp(-2*x)))>0)
a=exp((1/5)*log(7.002*K*x-1+0.1*(exp(2*x)+exp(-2*x))));
else {a=0;printf("error\n");}
b=log10(L*x)*cos(3.14*x/5)+K*cos(3*x/5);
if((a*a+b*b)>0.1) y=sin(5*a*a+7*b*b);
else y=cos(5*a*a+7*b*b);
printf("\ny=%e\na=%e\nb=%e\nx=%e\n",y,a,b,x);
getch();
return 0;
}
Результати виконання програми:
1
1
error
y=9.754168e-01
a=0.000000e+00
b=5.061039e-01
x=1.000000e-01
2
2
y=9.751968e-01
a=1.000000e+00
b=6.130478e-01
x=2.000000e+00
3
3
y=-4.868161e-01
a=1.000000e+00
b=1.004211e+00
x=3.290000e-01
4
4
error
error
y=2.252019e-01
a=0.000000e+00
b=-3.672340e+01
x=5.883929e-39
12.ВИСНОВОК
На цій лабораторній роботі я вивчив основні поняття алгоритмічної мови С, операцій, стандартних функцій, операторів розгалуження програми. Склав програму знаходження функції для різних значень аргументу .