Тема 5 Типи даних, оператори та вирази в С

Лекція 18

Константи

Константи являють собою фіксовані значення, що не мо­жуть змінюватися впродовж виконання всієї програми.

Спосіб визначення кожної константи залежить від її типу. Константи мови С++ слід поділяти на літеральні та типізовані.

Літеральна константа— це лексема, що являє собою зо­браження фіксованого числового, рядкового або символьного значення. Такі константи бувають цілі, дійсні, символьні та рядкові(табл. 5).

Таблиця 5  Літеральні константи мови

Константа

Формат

Приклади

Цiла

Десятковий: послідовність десяткових цифр
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
що починається не з нуля, якщо це не число нуль

9, 0, 217925

 

Вісімковий: нуль, за яким розташова­ні вісімкові цифри
(0, 1, 2, 3, 4, 5, 6, 7)

02, 050, 07245

 

Шістнадцятковий: 0х чи 0Х, за яким розташовані шістнадцяткові цифри
(0, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, Е, F)

0x1B9, 0X00FF

Дійсна

Десятковий:[цифри].[цифри]Експоненціальний:
[цифри][.][цифри]{Е|е}[+|−][цифри]

9.7, .001, 87. 0.7Е6, .15е−3 9.2, 920 е−2, 92.Е−1, .92Е1

Символьна

Один чи два символи, що подаються в апострофах

‘А’ , ‘ю’ , ‘* ‘ , ‘db’ ,
’\0′, ‘\n’, ’\012′,
‘\х07\х07’

Рядкова

Послідовність символів, що подають­ся в лапках

“RESULT”,
“\t sum__s=\0x5\n”

Заслуговують уваги послідовності, що починаються зі знака «\», їх називають керуючими або escape−послідовностямиСимвол зворотної косої риски «\» використовується для запису кодів,що не мають графічного зображення, для запису симво­лiв, а також для виведення символьних констант, якщо їх коди заданi у вісімковому та шістнадцятковому вигляді (табл. 6).

Таблиця 6 Керуючі послідовності мови С

звуковий сигнал

\b

повернення на крок

\f

переведення сторінки (формату)

\n

новий рядок

\r

повернення каретки

\t

горизонтальна табуляція

\v

вертикальна табуляція

\\

символ \ — зворотна коса риска

\’

символ ‘ — апостроф

\”

символ ” — лапки

\0

нуль−символ

\?

знак питання

\0ddd

вісімковий код символу

\0xddd

шістнадцятковий код символу

Рядкова константа(рядковий літерал)— це послідовність cимволів,що подається в лапках (тобто в символах «”» )і збері­гаеться у неперервній ділянці пам’яті, наприклад: “Это строковый литерал”. У кінець кожного рядкового літералу компілятором додається нуль−символ,що предствляється керуючою послі­довністю «\0».Тому довжина рядка завжди на одиницю більше кількості символів у його записі. Таким чином, порожній рядок (” “) має довжину 1 байт. Слід звернути увагу на різницю між рядком з одного символу, наприклад, “С” і символьною конс­тантою ‘С’ . Порожня символьна константа неприпустима.

Керуючі послідовності можуть також застосовуватись у ряд­кових константах. Так, якщо всередині рядка потрібно записати лапки, то перед ними слід розташувати зворотну косу риску («\»), за якою компілятор відрізняє їх від лапок, що обмежують рядок:

Рядки,що записані у програмі підряд або через символи пропуску, при компіляції конкатенуються («склеюються»). Тоб­то послідовність двох рядків

Довгу рядкову константу можна розмістити також на декількох рядках. У цьому випадку ставиться зворотна коса рис­ка і натискається клавіша Enter.

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

Існує інша можливість задання констант — з використан­ням директиви препроцесора #define,при цьому оголошення має вигляд:

#define ім’я константи значення константи

і наприкінці такого запису символ «;» не ставиться, тобто:

#define max 65532

#define km 1000.

Директива #define визначає ідентифікатор (ім’я констан­ти) і послідовність символів (значення константи), яка замінює ідентифікатор у тексті програми.

Нульовий покажчик (NULL−покажчик)— єдина неарифме­тична константа мови C++.

При застосуванні великої кількості логічно взаємозалежних констант C доцільно користуватися константами перелічення. Тип перелічення має вигляди:

enum {список іменованих констант};—неiменоване перелічення,

enum [ім’я] {список іменованих констант};—iменоване перелічення.

де  enum—службове слово(enumerate—перелічувати);

ім’я— ім’я списку констант;

список іменованих констант— розділена комами послідов­нiсть iдентифікаторів або іменованих констант вигляду:

ім’я константи = значення константи.

Наприклад:

enum {Anton, Ivan, Piter};

enum Months {January = 1, February, Marth, April, May, June, July, August, September, October, November, December};

Якщо значення константи перелічення не визначено, то воно на одиницю більше значення попередньої константи. За замовчуванням перша константа має значення 0. Тоді у першому прикладі константи одержать значення:Anton = 0, Ivan = 1, Piter = 2, а у другому — значення: January = 1, February = 2, Marth= З тощо. Іменовані перелічення задають унікальний цілочисловий тип і можуть використовуватися як специфікації типу для визначення змінних.

 

Операції

 

Для здійснення маніпуляцій з даними мова C застосовує широкий набір операцій (див. табл. 7), що виконують форму­вання і, відповідно, подальше обчислення виразів. Вирази міс­тять одну або декілька операцій, об’єкти яких називають опе­рандами. Операції являють собою деяку дію, що виконується над одним (унарна) або декількома (бінарна, триарна) операн­дами , і мають позначення (наприклад, операція перевір­ки на рівність — позначення «==», операція обчислення за­лишку від ділення цілих чисел — позначення «%» тощо).

Операції поділяються на:

·         унарні або одномісні&, *, −, +, ~, !, ++, –−, sizeof;

·         бінарні або двомісні+, −, *, /, %, <<,  >>, &, :, ^, <, >, <=, ==, >=, !=, &&, ||, =,*=, /=, %=, +=, −=, <<=, >>=, &=, |=, ^=, ., −>, ,, (), [];

·         умовну триарну або тримісну операцію — ?: .

Таблиця 7 − Основні операції мови C

 №

 Операції

 Порядок виконання

1

 ()  ,  {}  −>  .

Л −> П

2

 !   ~   ++  —  &  *  (type)

П −> Л

3

 sizeof

П −> Л

4

 *   /   %

Л −> П

5

 +  

 Л −> П

6

 <<   >>

 Л −> П

7

 <   <=   >   >=

 Л −> П

8

 ==   !=

 Л −> П

9

 &

 Л −> П

10

 ^

 Л −> П

11

 |

 Л −> П

12

 &&

 Л −> П

13

 ||

 Л −> П

14

 ?:

П −> Л

15

 =   +=   *=   −=   /=   %=

 П −> Л

16

 ,

Л −> П

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

У табл. 7 літерою «Л» позначено величину, що стоїть ліво­руч від знака операції, літерою «П» — величину, яка розташо­вана праворуч від знака операції, а символом «−>» напрямок виконання операції. Розглянемо основні операції.

Арифметичні операції:

+ — додає величину П до Л;

–     — віднімає П із Л;

     — унарна операція зміни знака величини П;

*     — множення П і Л;

/ — ділення Л на П;

% — залишок від ділення величини Л на величину П (для цілих чисел), наприклад, якщо int g = 12;, то операція g = g % 9; надасть результат: g = 3;

++ — унарна операція інкремент. Якщо змінна розташовується праворуч від знака операції (префіксна форма), то значення збільшується на 1 до використання. Якщо ж змін­на знаходиться ліворуч від знака операції (постфіксна форма), то її значення збільшується на 1 після використання, наприклад:

int d;

++d; — префіксний інкремент,

d++; — постфіксний інкремент;

−− — унарна операція декремент аналогічно інкременту має двi форми: префіксную (змінна розташована праворуч від знака операцii) — зменшення значення змінної на 1 відбувається до її використання; постфіксну (змінна знаходиться ліворуч від знака операції) — зменшення значення змінної на 1 після її використання.

Операції присвоювання:

= — присвоювання значення П змінній Л;

+= — додає величину П до змінної Л;

–= — віднімає величину П від змінної Л;

*= — множення змінної Л на величину П;

/= — ділення Л на П;

%= — видає залишок від ділення Л на П.

Просте присвоювання здійснює операція «=». Допускається одночасне зчіплювання декількох операцій присвоювання за умови, що всі операнди мають однаковий тип, наприклад:

int і, j, с;

i = j = с = 0; .

Операції «+=», «−=», «*=», «/=» виконують складні присвоювання і дозволяють записувати вирази коротше, наприклад:

s += 7;        //s=s + 7;

  і *= j + 5;   //i=i*(j +5);

g%=9;        //g=g%9;.

Операції відношення порівнюють значення Л зі значенням П:
< — менше;
<= — менше або дорівнює (не перевищує);
== — дорівнює;
> — більше;
>= — більше або дорівнює (не менше);
!= — не дорівнює.

У мові C «істина» — це ненульова величина, «неправ­да» — це нуль (0). У більшості випадків одиниця (1) викориc­товується як ненульове значення.

Операції відношення повертають ціле значення 1, якщо умова вірна, або 0, якщо умова помилкова.

Логічні операції оперують з цілими розмірами або з розміра­ми, які можна перетворити на цілі. Обчислення зупиняється, які тільки визначиться, чи є вираз правдивим («істина») або помил­ковим («неправда»). При цьому, як і для операцій відношення, значенням «істина» відповідає 1, а значенням «неправда» — 0.

&& — логічне «AND» (кон’юнкція);

||    — логічне «OR» (диз’юнкція);

!= — логічне «NOT» (заперечення).

Результат операції «&&» є «істина» (1), якщо обидва її oпe­ранди правдиві (не рівні 0). Результат операції «||» — «істина» (1), якщо хоча б один з її операндів є «істина». Логічне заперечення «!=» перетворює свій операнд на «істину» (1), якщо він дорівнює 0, і на «неправду» (0), якщо він не дорівнює 0.

З  використанням логічних операцій та операцій відношення записуються різні умовні вирази, наприклад, умова 3 < х < 5 ма­тиме вигляд: х > 3 && х < 5.

Операції обробки окремих бітів застосовують для обробки даних як послідовностей бітів (розрядів), кожний з яких набуває значення 0 або 1.

&    — операція бітового множення (кон’юнкція);
|    — операція бітового додавання (диз’юнкція);
^    — додавання за модулем 2;
~    — інвертування;
>> — зсув праворуч;
<< — зсув ліворуч.

Змінна−покажчик зберігає значення, що є адресою об’єкта в пам’яті комп’ютера. Через покажчик можна звертатися до об’єкта.

Операції з адресами та покажчиками:

& — одержання адреси: видає адресу змінної, ім’я якої роз­ташоване праворуч від позначення операції;

* — непряма адресація (розіменування): видає значення, записане за адресою, на яку посилається покажчик.

Додаткові операції:

  sizeof() — знаходить розмір (у байтах) операнда, розташова­ного праворуч від назви операції;

  (type) — операція приведення типу перетворює наступне за нею значення в тип, визначений ключовим словом, укладеним у круглі дужки, наприклад:

i = i+(int)*3.14;

?: —  триарна (з трьома операндами)     операція, що має вигляд:

вираз1? вираз2 : виразЗ;,

тут, якщо результат обчислення першого операнда (вираз1) не дорівнює 0 («істина»), то результатом операції буде значення дру­гого операнда (вираз2), інакше — третього операнда (виразЗ). Наприклад, знаходження найбільшої з двох величин а і b, мож­ливо здійснити операцією: max = (b > а)? b : а;.

Мова C налічує широкий спектр математичних функцій (табл. 8). Для їх використання слід включити в код програми заголовний файл math.h.

 

Таблиця 8 − Математичні функції (заголовний файл math.h)

Ім’я

Призначення

sin (x)

синус x (в радіанах) — sin x

cos (x)

косинус x (в радіанах) — cos х

tan (x)

тангенс х (в радіанах) — tg х

asin (x)

арксинус х — arcsin х

acos (x)

арккосинус х — arcos х

atan (x)

арктангенс х — arctg х

atan2 (y,x)

арктангенс у/х — arctg (у/х)

sinh (x)

синус гіперболічний х — sh х

cosh (x)

косинус гіперболічний х — ch х

tanh (x)

тангенс гіперболічний х — th х

log (x)

натуральний логарифм х — ln х

log10 (x)

десятковий логарифм х — log х

exp (x)

піднесення е до степеня х — ех

pow (x,y)

піднесення х до степеня у — ху

pow10 (p)

повертає 10р

sqrt (x)

корінь iз x, x > 0

hypot (x,y)

корінь із (х22)

fabs (x)

абсолютне значення х — |х| типу double

abs (x)

абсолютне значення х — |х| типу int

labs (x)

абсолютне значення х — |х| типу long

fmod (x,y)

залишок від ділення х на у

ceil (x)

округлення до більшого

floor (x)

повертає найближче ціле, не більше за х

modf(x,&p)

виділяє цілу й дробову частинні числа

atof (s)

перетворює рядок символів
у число з плаваючою крапкою

 

 

Організація введення−виведення даних

 

Потокове введення−виведення

У мові C дії, що пов’язані з операціями введення і виве­дення, виконуються за допомогою функцій бібліотек. Функції ведення і виведення бібліотек мови дозволяють читати дані з файлів та пристроїв і писати дані у файли і на пристрої.

Бібліотека мови C підтримує три рівня введення−виведення даних:

·         введення−виведення потоку;

·         введення−виведення нижнього рівня;

·         введення−виведення для консолі і порту.

При введенні−виведенні потоку всі дані розглядаються як потік окремих байтів. Для користувача потік — це файл на дис­ку або фізичний пристрій, наприклад, дисплей чи клавіатура, або пристрій для друку, з якого чи на який направляється потік даних. Операції введення−виведення для потоку дозволяють об­робляти дані різних розмірів і форматів від одиночного символу до великих структур даних. Програміст може використовувати функції бібліотеки, розробляти власні і включати їх у бібліоте­ку. Для доступу до бібліотеки цих класів треба включити в програму відповідні заголовні файли.

За замовчуванням стандартні введення і виведення повідомлень про помилки відносяться до консолі користувача (клавіатури та екрана). Це означає, що завжди, коли програма очікує введення зі стандартного потоку, дані повинні надходити з клавіатури, а якщо програма виводить дані — то на екран.

У мові C існує декілька бібліотек, які містять засоби введення−виведення, наприклад:stdio.h, iostream.h. Найчастіше застосовують потокове введення−виведення даних, операції яко­го включені до складу класів istream або iostream. Доступ до бібліотеки цих класів здійснюється за допомогою використання у програмі директиви компілятора #include <iostream.h>.

Для потокового введення даних вказується операція «>>» («читати з»). Це перевантажена операція, визначена для всіх простих типів і покажчика на char. Стандартним потоком введення є cin.

Формат запису операції введення має вигляд:

сin [>> values];

де valuesзмінна.

Так, для введення значень змінних х і у можна записати:

сin >> х >> у;

Кожна операція «>>» передбачає введення одного значення. При такому введенні даних необхідно дотримуватись конкретних вимог:

·         для послідовного введення декількох чисел їх слід розділяти символом пропуску (« ») або Enter (дані типу char роздiляти пропуском необов’язково);

·         якщо послідовно вводиться символ і число (або навпаки), пропуск треба записувати тільки в тому випадку, коли символ (типу char) є цифрою;

·         потік введення ігнорує пропуски;

·         для введення великої кількості даних одним оператором їх можна розташовувати в декількох рядках (використовуючи Enter);

·         операція введення з потоку припиняє свою роботу тоді, коли всі включені до нього змінні одержують значення.

 

Для потокового виведення даних необхідна операція «<<» («записати в»), що використовується разом з ім’ям вихідного потоку cout. Наприклад, вираз

cout << х;

означає виведення значення змінної х (або запис у потік). Ця операція вибирає необхідну функцію перетворення даних у потік байтів.

Формат запису операції виведення представляється як:

cout << data [<< data1];,

де data, data1 — це змінні, константи, вирази тощо.

Потокова операція виведення може мати вигляд:

cout << “у =” << x + а – sin(x) << “\n“;.

Застосовуючи логічні операції, вирази треба брати в дужки:

cout << “р =” << (а && b || с) << “\n“;.

Символ переведення на наступний рядок записується як рядкова константа, тобто “\n”, інакше він розглядається не як символ керуючої послідовності, а як число 10 (код символу). Таких помилок можна уникнути шляхом присвоювання значення ке­руючих символів змінним, тобто:

#define << sp " "

#define << ht "\t"

#define << hl "\n".

Тепер операцію виведення можна здійснити так:
cout << “у =” << x + а – sin(x)<< hl; .

Слід пам’ятати, що при виведенні даних з використанням «cout <<» не виконується автоматичний перехід на наступ­ний рядок, для реалізації такого переходу застосовується так переведення рядка “\n” або операція endl.

Приклад Написати програму, що містить організацію виведення даних, пояснювальні повідомлення, а також символи переведен­ия рядка.

/* друк значень змінних з відмітками */

#include <iostream.h>

#include <conio.h>

int main()

{

char first = ’W’;

char middle = 'P';

char last = 'S'; 

int vik = 20; 

int doplata = 2;

float zarplata = 309.75; 

float prozent = 8.5;

//−−−−−−−−−−−−−−−− вивід результатів

cout << "Перевірка даних\n";

cout << first << middle << last << "\n\n";

cout << "Вік доплата зарплата процент:\n";

cout << " " << vik << " " << doplata << " " << zarplata << " " << prozent;

getch ();

}

В останніх двох операціях виведеня програми можна використати символи табуляції. Наприклад, «\t» поміщає кожне наступне ім’я або число в наступну позицію табуляції (через вісім символів), у цьому випадку маємо:

cout << “Вік \t доплата\t зарплата\t процент\t \n”;

cout << wozrast << “\t” << doplata << “\t” << zarplata << “\t” << prozent << “\n“;.

 

Форматоване введення−виведення

 

Форматоване введення−виведення величин здійснюється з використанням функцій scanf та printf, які успадковані з мови С. Щоб зв’язати програму користувача зі стандартною бібліотекою, де знаходяться ці функції, необхідно на початку програми включити заголовний файл stdio.h.

Функція scanf, що забезпечує форматоване введення даних, має змінне число параметрів, при цьому перед відповідним параметром ставиться знак «&» — символ взяття адреси змінної. Наприклад, 1 означає адресу змінної х1, а не значення, яке ця змінна має в даний момент. Рядок форматів функції scanf вказує, які дані очікуються на вході. Якщо функція зустрічає у форматному рядку знак « % », за яким розташований знак перетворення, то на вході будуть пропускатися символи, доки не з’явиться деякий непорожній символ.

Форма запису функції scanf має вигляд:

scanf ("рядок форматних кодів", список імен змінних);

Рядок форматних кодів являє собою таку структуру запису:

%[ * ][довжина][f|n][h|l] тип,

де «%» — ознака початку форматного коду. Якщо за символом «% » йде символ, що не є символом керування форматом, то він розглядається як звичайна послідовність символів. При цьому наступні за ним символи (до наступного символу «%») також вважаються просто символами; якщо за символом «%» йде символ «*», то присвоювання наступного вхідного поля приглушується, поле читається, але не зберігається;

довжина — позитивне десяткове ціле число, яке задає макси­мальне число символів, що може бути прочитане з вхідного потоку, доки не зустрінеться символ «  » (пропуск) або символ, який не може бути перетворений відповідно до заданого формату;

  f | n — дозволяють приглушити погодження за замовчуванням про використану модель пам’яті («далека», «близька» пам’ять);

  h | l — предикати, що визначають відповідно аргументи типів short і long;

  тип — задається одним із символів: d — десяткове ціле; і — десяткове, вісімкове чи шістнадцяткове ціле зі знаком; с — одиночний символ;u — беззнакове десяткове число; х, X — беззнакове шістнадцяткове число; 0 — вісімкове число; s — сприймає символи без перетворення до символу «\n» або пропуску, доки не буде досягнута задана довжина (при виведенні видає до пото­ку всі символи до символу «\0» або до досягнення специфікованої точності); f, F — значення з плаваючою крапкою; е, Е — значення у експоненціальній формі; G, g — значення зі знаком у формі f або е.

Аргументи у функції scanf мають бути записані у формі покажчиків, тобто у вигляді &х, &у, &mas[i] тощо. Для введен­ня змінних k (типу int) і р (типу float) цю функцію можна за­писати так:

scanf(” %d  %f   \n ”, &k, &р);.

Приклад Ввести два числа та обчислити їх суму.

// ввід двох чисел и визначення їх суми

#include <stdio.h>

#include <conio.h>

main( )

{ int a, b, c;

scanf ( " %d  %d",&a,&b);     //ввід чисел 5 и 8

с = a + b;

printf ("Summa =%d \n", c);

getch();      //затримка екрану

}

У результаті виконання програми буде виведено: Summa=13.

Форматний рядок наказує функції scanf ввести десяткове число, яке треба помістити в змінну а, а потім перейти до на­ступного не порожнього символу і з цього моменту почати вве­дення нового десяткового числа, яке потім присвоюється змін­ній b. Якщо за рядком керування форматом аргументів більше, ніж специфікацій формату, зайві аргументи ігноруються. Ко­ли для специфікацій формату недостатньо аргументів, резуль­тат не визначений.

У наведеному фрагменті програми для форматованого виведення даних використовується функція printf.

Функція printf може використовуватися, наприклад, для виведення повідомлення на екран:

printf ("Введите исходные данные \n");

Для звертання до функції використовуються параметри, якi розташовані у круглих дужках. Найчастіше функція printf реалізується для виведення значень змінних. Першим аргументом у звертанні до функції ставиться рядок форматів (береться в лапки), а наступними, якщо вони є, — об’єкти, що виводяться.

Рядок форматів може включати звичайні символи, які копіюються при виведенні, і специфікації перетворення, що починаються із символу«% », за специфікаціями йде символ перетворення. Кожна специфікація перетворення відповідає одному з аргументів, що йдуть за форматним рядком, і між ними встановлюється взаємно однозначна відповідність, наприклад:

printf (“Значения а, Ь, с равны: %d %d. %d \n”, а, b, с);,

 

тут літера d у специфікації перетворення вказує, що значення аргументу має бути представлено як десяткове ціле число.

При виведенні функція printf використовує ті самі специ­фікації, що і функція scanf при введенні. Наприклад, у функ­ції printf вигляду

 

printf (” % с=%d \n”, g, g);

значення змінної g виводиться як символ алфавіту, а після зна­ка «=» — як числове значення. Перед символом перетворення може стояти числовий коефіцієнт, що вказує кількість позицій у виведеному рядку, відведених для елемента виведення. Список форматних кодів має таку форму запису:

% [прапорець] [довжина] [точність] [f | n] [h | l] тип ,

де прапорець — символ, що керує вирівнюванням виведення і виведенням пропусків, десяткової крапки, ознак чисел вісімкової і шістнадцяткової систем числення. Прапорець може за­даватися одним із символів:

  «−» — вирівнювання вліво усередині заданого поля;

  «+» — виведення знака числа;

  « » (пропуск) — приєднання пропуску до виведеного числа, якщо число є додатним і має тип зі знаком;

  «#» — виводиться ідентифікатор системи числення для цілих: 0 — для вісімкових чисел, чи — для шістнадцяткових чисел;

довжина — визначає мінімальну кількість виведених символiв, якщо довжина більше виведеної кількості символів, то ви­ведене значення доповнюється пропусками, у випадку, коли довжина менше кількості символів у виведеному значенні або вона не задана, виводяться всі символи значення (відповідно до поля точність, якщо воно є);

точність — задається цілим числом після крапки і визначає кількість виведених символів, кількість знаків після крапки; на відміну від поля довжини поле точність може привести до «зрізання» виведених даних.

Параметри f, n, h, l і тип списку форматних кодів за зміс­том аналогічні раніше описаним для функції scanf.

Виведення результатів з використанням форматних кодів функції printf може мати вигляд:

printf (” % 3.0 f % 6.1 f \ n ”, х, у);

 

Приклад Обчислити значення функції у = ах2 – sinx, якщо а =  10,5; х є [−1; 2]; hx = 0,5.

Програмна реалізація матиме такий вигляд:

// використання форматних кодів при виводі

#include <stdio.h>

#include <math.h>

#include <conio.h> 

main( )

{ float x, y, a(10.5);

   printf ("\t Vivod rezultata\n");

   for (x = −1; x <= 2; x += 0.5)

    { у = a * pow(x,2) − sin(x);     //у = a*x*x − sin(x);

      printf (" \t x = % 4.1f    у = % 6.3f \n", x, y);

    }

 getch ();      //затримка екрану

}

Результати обчислення:
Vivod rezultata
x = −1.0 у =11.342
х = −0.5 у = 3.104
х = 0.0  у = 0.000
х = 0.5  у = 2.146
х = 1.0  у = 9.659
х = 1.5  у = 22.628
х = 2.0  у = 41.091.