МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ПРОГРАМУВАННЯ ПРОБЛЕМНО-ОРІЄНТОВАНИХ ЗАДАЧ МОВОЮ C
МЕТОДИЧНІ ВКАЗІВКИ ТА ІНДИВІДУАЛЬНІ ЗАВДАННЯ
(частина 1)
до лабораторних робіт з курсу
“Проблемно-орієнтовані мови програмування”
для студентів базового напряму 050101
“Комп’ютерні науки”
Затверджено
на засіданні кафедри АСУ
Протокол № 1 від 02.09.2008 р.
Львів – 2008
Програмування проблемно-орієнтованих задач мовою С: Методичні вказівки та індивідуальні завдання (частина 1 )до лабораторних робіт з курсу “Проблемно-орієнтовані мови програмування” для студентів базового напряму 050101 “Комп’ютерні науки” / Укл. З.Я. Шпак, Кустра Н.О. – Львів: Видавництво Національного університету “Львівська політехніка”, 2008. – 38 с.
Укладачі Шпак З.Я., к.т.н., доцент
Кустра Н.О., асистент
Відповідальна за випуск Обельовська К.М., к.т.н., доцент
Рецензент Рашкевич Ю.М., д.т.н., професор
ВСТУП
Загальна мета лабораторних занять полягає у розширенні й практичному закріпленні знань та вмінь формулювати проблемно-орієнтовану задачу, обирати алгоритм її розв’язання та програмувати його засобами мови C, налагоджувати й реалізовувати розроблену програму.
Мова програмування C, яку обрано за базову для вивчення курсу “Проблемно-орієнтовані мови програмування” є однією з найпопулярніших мов із широкою сферою застосування, зокрема при створенні програмних продуктів для автоматизованих систем керування та комп’ютерних інформаційних технологій. C характеризується потужністю функціональних можливостей, гнучкістю та високою ефективністю коду, лаконізмом записів, логічною строгістю. За швидкодією програми, складені мовою C, наближаються до програм, написаних на асемблері, але водночас вони значно простіші й наочніші в супроводі та розумінні. Мова C дуже вдало поєднує властивості універсальних мов програмування високого рівня із можливістю безпосереднього доступу до апаратних ресурсів комп’ютера.
У результатi виконання лабораторних робіт студенти повиннi:
знати технологiю програмування проблемно-орієнтованих задач; базові алгоритми, що застосовуються в задачах інформаційного й обчислювального характеру, та відповідні структури даних; синтаксис і семантику мови програмування C, її функціональні можливості, бібліотеки та розширення;
вмiти здійснювати постановку задачі i розробляти алгоритм її розв’язання; записувати програму розв’язання проблемно-орієнтованої задачі мовою C, використовуючи стандартні бібліотечні функції; редагувати, налагоджувати та реалізовувати програму в інтегрованому середовищі Borland C/C++; створювати текстові й графічні зображення та інтерфейси, формувати бібліотеки користувацьких функцій.
ПОРЯДОК ВИКОНАННЯ ЛАБОРАТОРНИХ РОБІТ
Готуючись до лабораторного заняття, студент повинен виконати:
повторити теоретичний матеріал та ознайомитися з прикладами програм, що пов’язані з тематикою виконуваної лабораторної роботи, використовуючи матеріал лекцій і практичних занять, а також підручники, навчальні посібники та методичні розробками з дисципліни до даної теми;
уважно прочитати всі пункти завдання лабораторної роботи, занотувати в звіт тему роботи, мету та своє індивідуальне завдання – номер індивідуального завдання співпадає з порядковим номером студента в журналі академгрупи (не підгрупи);
розробити програму комп’ютерного розв’язання задачі, заданої в індивідуальному завданні, для чого:
у разі потреби сформулювати математичну або інформаційну постановку задачі;
розробити алгоритм розв’язання поставленої задачі, враховуючи вимоги даної лабораторної роботи;
написати відповідну програму мовою С – програма обов’язково має бути записана в т. зв. “доброму стилі” і супроводжуватиь необхідними коментарами;
продумати й підготувати вхідні дані, які перевірятимуть правильність та коректність роботи програми за різних умов її виконання, зокрема стійкість до помилок введення вхідної інформації.
На лабораторному занятті студент повинен виконати:
відповісти на поставлені йому запитання за темою даної лабораторної роботи;
використовуючи засоби iнтегрованого інструментального середовища Borland C/C++, ввести, відредагувати та налагодити текст програми;
виконати програму для підготованих наборів вхідних даних і зафіксувати отримані результати;
у разі необхідності внести в алгоритм розв’язання і текст програми необхідні зміни та доповнення і повторно виконати пункти 2 та 3;
виконати всі інші завдання, вказані в даній лабораторній роботі, та занотувати їхні результати в звіті;
оформити та захистити звіт про виконання лабораторної роботи.
ОФОРМЛЕННЯ ЗВІТУ ПРО ВИКОНАННЯ
ЛАБОРАТОРНОЇ РОБОТИ
Звіти про виконання лабораторних робіт оформляються в окремому зошиті, який в кінці семестру (після захисту всіх лабораторних робіт) здається на кафедру. Можна оформляти звіти на аркушах формату А4 – в цьому випадку перед здаванням на кафедру всі звіти необхідно зброшурувати.
Звіт до кожної роботи повинен починатись з нової сторінки і містити такі розділи:
заголовок лабораторної роботи;
тема лабораторної роботи;
мета виконання лабораторної роботи;
для лабораторних робіт 1 та 2:
результати виконання кожного пункту завдання – дії, що виконувались відповідно до цього пункту завдання і засоби, що використовувались для їхньої реалізації,
для лабораторних робіт, починаючи від 3-ї:
індивідуальне завдання (формулювання);
постановка задачі (у випадках, коли формулювання індивідуального завдання потребує доповнення або конкретизації);
алгоритм розв’язання задачі – у формі блок-схеми і/або стислого словесного опису вибраних методів та основних кроків процесу реалізації задачі;
текст програми мовою С;
результати комп’ютерної реалізації програми для різних наборів вхідних даних, які підтверджують правильність роботи програми і встановлюють область її застосування – треба вказати форму введення даних та їхні значення, а також форму і значення отриманих результатів для кожної реалізації;
для всіх лабораторних робіт:
висновки, в яких необхідно зазначити, які знання отримано в процесі виконання даної роботи; а також навести коротку характеристику розробленої програми і зазначити можливі варіанти її застосування та вдосконалення.
Звіт повинен бути написаний чітко, грамотно, з дотриманням норм ділової документації. Кожен розділ звіту треба виділяти відповідним заголовком і візуально (підкресленням, розміром літер тощо). Оформлений звіт після захисту лабораторної роботи підписує викладач.
ЗАВДАННЯ ДО ЛАБОРАТОРНИХ РОБІТ
Лабораторна робота № 1
Тема роботи: Ознайомлення зі складом та функціональними можливостями інтегрованого середовища програмування Borland C++ 3.1.
Мета роботи: ( ознайомитись з основними складовими компонентами інтегрованого середовища програмування Borland C++ 3.1; ( здобути навики введення та редагування текстів програм; ( навчитись користуватися засобами допомоги підсистеми HELP.
Завдання лабораторної роботи. 1. Використовуючи методичний посібник до лабораторних робіт “Створення, відлагодження та виконання програм в інтегрованому середовищі Borland C++ 3.1” [1], ознайомитись зі структурою та призначенням основних складових частин інструментальної системи програмування Borland С/C++.
2. Переглянути всі розділи головного меню інтегрованого середовища, ознайомитись з пунктами і підпунктами кожного з вертикальних меню. Окремо звернути увагу на пункти меню розділу OPTIONS: Compiler (підпункти Code Generation та Advanced Code Generation), Linker (підпункт Libraries), Directories, Environment (підпункт Editor) – за допомогою яких встановлюються параметри інтегрованого середовища, серед яких: параметри компіляції (моделі пам’яті, опції вирівнювання, інтерпретації даних з типом char тощо), компонування (зокрема під’єднання графічних бібліотек), шляхи до заголовних файлів і бібліотек, параметри редактора (вибір стандарту мови, розширень файлів тощо) та інші.
3. Оволодіти засобами вбудованого редактора текстів для швидкого введення та редагування програм, зокрема командами виділення блоків, копіювання, перенесення, витирання, пересування курсора, пошуку й заміни, тощо. Для тренування набрати текст програми, поданий нижче.
4. Зберегти програму для подальшого виконання, використовуючи засоби підсистеми роботи з файлами.
5. Навчитись працювати з підсистемою вікон інтегрованого середовища: відкривати та закривати вікна, здійснювати перехід з одного вікна в інше, змінювати розміри вікон та створювати зручний для роботи багатовіконний інтерфейс.
6. Розглянути структуру підсистеми допомоги. Навчитись швидко отримувати необхідну підказку через тематичні розділи, алфавітний пошук, контекстне звертання (Ctrl+F1). Здійснити прохід по системі допомоги, використовуючи інтерактивні ключові слова та "гарячі" клавіші. Ознайомитись з вбудованою системою оперативної підказки вікон.
7. Оформити звіт з лабораторної роботи, в якому до кожного пункту завдання вказати, що було вивчено і/або зроблено в процесі його виконання та які засоби інтегрованого середовища використовувались для цього. Звіт повинен відповідати вимогам, зазначеним у розділі “Оформлення звіту”.
Література: [1] . . [5] .
Програма для введення:
#include <stdio.h>
#include <stdlib.h>
#define RMIN 1 /* найменше число */
#define RMAX 100 /* найбільше число */
#define K 6 /* кількість спроб */
int main (void)
{
int numb, answ, k;
randomize();
numb = RMIN + random(RMAX - RMIN + 1); /* випадкове число */
printf("\n**** Задумано число з проміжку %d..%d – \n"
"\t\t вгадайте його за %d спроб ****\n\n", RMIN, RMAX, K);
for (k = 1; k <= K; k++) { /* цикл вгадування з K спроб */
printf("Спроба %d - ",k);
scanf("%d", &answ);
if (answ == numb) { /* число вгадано */
printf("\n\t *** %d - Ви вгадали!!! ***", numb);
return 0;
}
if (answ > numb) /* виведення підказки */
printf("\t\t - завелике\n");
else
printf("\t\t - замале\n");
}
printf("\n\t*** Ви не вгадали, це число - %d ***", numb);
return 0;
}
Лабораторна робота № 2
Тема роботи: Структура С-програми. Введення, налагодження та виконання програм в інтегрованому середовищі Borland C++ 3.1.
Мета роботи: ( ознайомитись із загальною структурою С-програми, її основними компонентами та правилами і стилями запису програм мовою С; ( навчитись компілювати, налагоджувати і виконувати програми, а також контролювати хід їхнього виконання, використовуючи засоби інтегрованого інструментального середовища Borland C++.
Завдання лабораторної роботи. 1. Прочитати текст програми, поданої нижче. Це розширений варіант програми з лабораторної роботи №1, в якому для підвищення наочності відображення результатів використано бібліотечні функції керування формою виведення екранних повідомлень (ці функції оголошені в заголовному файлі <conio.h>).
2. Визначити основні структурні компоненти програми:
директиви компілятору;
дві складові функції програми: функцію main() і користувацьку функцію RandomNumber();
оголошення змінних;
оператори;
звертання до функцій – бібліотечних і користувацької.
Обов’язково звернути увагу на стиль запису програми, передусім:
вертикальне вирівнювання в межах блоку;
відступи для вкладених блоків й операторів;
розстановку та вирівнювання фігурних дужок {};
використання коментарів, пробілів та інші прийоми підвищення наочності й читабельності програми.
3. Ввести текст програми або доповнити програмний файл, створений під час виконання лабораторної роботи №1, і зберегти його у файлі з новим іменем. У процесі введення програми використати засоби вбудованого редактора текстів, які істотно пришвидшують набір програми, зокрема: копіювання, заміну, перенесення фрагментів. Для вертикального вирівнювання рядків слід застосовувати клавіші Tab і Bkspace, попередньо встановивши відповідний крок табуляції.
4. Відкомпілювати програму і за необхідності виправити помилки. Проаналізувати всі повідомлення компілятора. Навчитись переходити між вікном програми і вікном повідомлень, а також послідовно переглядати повідомлення компілятора.
5. Виконати програму декілька разів для різних значень вхідних даних. Познайомитись із засобами налагодження програм. Встановити точку зупинки на початку циклу і покроково виконати цикл. У вікні спостереження відслідкувати зміну значень змінних програми (k, kmax, answ, numb). Зняти точку зупинки.
6. Оформити звіт про виконання лабораторної роботи, зазначивши всі основні кроки, що були зроблені для введення, налагодження та виконання програми. Навести текст програми і результати її реалізацій та спостереження за ходом виконання. Звіт повинен відповідати вимогам, вказаним у розділі “Оформлення звіту”.
Література: [1] . . [5] .
Програма для опрацювання:
/*********************** ВГАДАЙ ЧИСЛО *************************/
/* Гра, в якій треба вгадати число "задумане" комп’ютером */
/****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define RMIN 1 /* найменше число */
#define RMAX 100 /* найбільше число */
int RandomNumber (int a, int b) /* генерування числа */
{ /* з діапазону [a,b] */
if (a < b)
return random(b - a + 1) + a;
else
return random(a - b + 1) + b;
}
int main (void)
{
int numb, answ, k, kmax;
clrscr();
textcolor(YELLOW); gotoxy(10,2);
cprintf("Вкажіть кількість спроб - ");
textcolor(WHITE);
cscanf("%d", &kmax);
randomize();
numb = RandomNumber(RMIN, RMAX); /* загадування випадкового числа */
textcolor(LIGHTGREEN); gotoxy(2,5);
cprintf("*** Число з проміжку %d..%d задумано – спробуйте "
" вгадати його за %d спроб ***", RMIN, RMAX, kmax);
for (k = 1; k <= kmax; k++) { /* цикл вгадування */
textcolor(YELLOW);
gotoxy(10,6+k);
cprintf("Спроба %d - ",k);
textcolor(WHITE);
cscanf ("%d", &answ);
if (answ == numb) { /* число вгадано */
textcolor(LIGHTGREEN); gotoxy(15, wherey()+2);
cprintf("*** %d - Ви вгадали за %d спроб! ***", numb, k);
getch(); getch(); /* затримка зображення */
return 0;
} else { /* число не вгадано */
textcolor(LIGHTRED);
gotoxy(25, wherey());
if (answ > numb && k < kmax)
cprintf(" -> завелике");
else if (k < kmax)
cprintf(" -> замале");
}
}
/* якщо за встановлену кількість спроб число не вгадано */
textcolor(LIGHTRED); gotoxy(15,wherey()+2);
cprintf("*** Спроби закінчились, задумане число - %d ***", numb);
getch(); getch(); /* затримка зображення */
return 0;
}
Лабораторна робота № 3
Тема роботи: Вирази та операції мови C. Перетворення типів.
Виведення даних за допомогою функції printf().
Мета роботи: Навчитись: ( складати і записувати різнотипні вирази, використовуючи набір операцій мови С; ( визначати значення виразів різних типів для заданих значень операндів з ураховуваням внутрішніх форм збереження даних; ( виводити на екран комп’ютера у потрібній формі значення даних і виразів засобами стандартної бібліотечної функції форматного виведення printf().
Методичні вказівки. Індивідуальні завдання даної лабораторної роботи складаються з трьох частин: а, б та в, до кожної з яких треба розробити окрему програму.
Завдання а. Написати програму, в якій реалізувати різні можливі форми виведення значень змінних, вказаних у завданні, використовуючи відповідні специфікації формату функції printf(). Програма повинна складатись із послідовності операторів виклику printf() з різними допустимими специфікаціями. До значень цілочислових типів слід застосувати специфікації формату d, i, u, x, X, o з необхідними модифікаторами та допустимими прапорцями; до значень дійсних типів застосувати специфікації f, e, E, g, задаючи необхідну точність зображення чисел. Проаналізувати й пояснити отримані на екрані результати виведення та зафіксувати їх у звіті.
Завдання б. Спочатку уважно переглянути записану в завданні функцію printf() та проаналізувати її параметри: рядок формату та дані, що виводяться. Розрахувати значення виразів для заданих значень змінних і вказати в якій формі, з якою точністю, в яких позиціях тощо вони будуть відображені на екрані. Потім програмно реалізувати задану функцію printf() і порівняти отримані результати з прогнозованими. Виявити й проаналізувати відмінності та зробити відповідні висновки.
Завдання в. Записати вираз, що відповідає заданій у цьому завданні умові. Для перевірки правильності складеного виразу написати програму, в якій розроблений вираз має бути елементом виведення у функції printf(). Реалізувати програму для різних варіантів значень змінних і записати результати. Рекомендації: 1) бажано, щоб окрім значення виразу в printf() виводилися також значення змінних, для яких обчислюється даний вираз (див. приклад); 2) якщо вираз використовує побітові операції, то для значень змінних і значення виразу слід використати 16-ві форми зображення даних; 3) якщо вираз має дати відповідь на поставлене в умові запитання, то найкраще, якщо значенням виразу буде символьний рядок (див. приклад).
Приклад: Написати вираз, що визначає, яке з двох заданих дійсних чисел менше.
Фрагмент програми перевірки виразу:
double r = 34.895, h = -5.34;
printf ("\n З двох чисел: %.2f та %.2f менше - %s ", r, h, r > h ? "друге" : "перше");
Література: [2] . . [12] .
Варіанти індивідуальних завдань
а) unsigned long asd = 54312; double rt = 0.133e6;
б) long y = -48; int x = -y / 5;
printf("\n\t y = %#lX x = %d\n z = %06o\n", y, x, (int)~y | x << 4 );
в) Написати вираз, який повертає дві найстарші цифри дробової частини заданого дійсного числа.
а) char c = '8'; float u = 34.36;
б) unsigned long d = 0XC25B; unsigned h = 52;
printf("\n zh: %4d zd: %#08lx \n symbol=> %c\n", h & 15, d | ~h, (char)d /2 );
в) Задано символ. Написати вираз, який перевіряє, чи даний символ є круглою дужкою (лівою або правою).
а) double y = 71.745e-5; int a = -4569;
б) long m = 0x3af; unsigned n = m >> 4;
printf("\n\t %ld %#lo %#x \ n", m /3, n % 2 ? ~m : m & 0xffaf, n |(unsigned)m );
в) Задано чотирицифрове ціле число. Написати вираз, який співпадають дві середні цифри цього числа.
а) unsigned int pp = 092; long double gg = 4.983e-3;
б) int r = 'D', a = 0123, s = а + r -'A';
printf(" symbol = %c = %d \n ~a = %d \n exp = %#0.6X \n ", r, r, ~a, s ^ a );
в) Задано довге ціле число. Записати вираз, який інвертує два середні байти цього числа.
а) double w = 17.7455; unsigned a = 0x56d8;
б) int b = 66, c = ′8′;
printf("b/3 = %u \t c = %u\n sm1 = %c sm2 = %c \n", b /4, c, b <= c ? b + 2 : c - 5, b+(c -'0') );
в) Задано певний рік. Визначити, чи цей рік високосний. Підказка: високосним вважається рік, що цілочислово ділиться на 4, але не ділиться на 100, крім років, що діляться на 400 (2000 рік високосний, а 1900 – ні).
а) float p = 77.9387e-2; long d = 67050;
б) double z = 118.75; char k = 67;
printf("\tk = %d = %c, ~k >>3 = %#o, z = %10.3e, sz = %u \n", k, k, ~k >>3, z, sizeof z );
в) Задано певний символ. Написати вираз, який перевіряє, чи даний символ є цифрою.
а) long ln = 07045; double y = -17.3;
б) unsigned int a = 13, b = 0x7a;
printf("%-7o %-7d %-#7x %d \n", a, ~b, a ^ b, a & b);
в) Задано два цілих числа. Написати вираз, який перевіряє, чи остання цифра меншого з цих чисел дорівнює 3.
а) unsigned q = 0X102c; long double gg = -74.983;
б) int x = 07305; double y = 126.83e-3;
printf("\t x = %d, ~x = %#o, y = %10.2lf (%d байт) \n", x, ~x, y, sizeof (y) );
в) Написати вираз, який перевіряє, чи найближче до заданого дійсного числа більше ціле є числом, що закінчується цифрою 0. З
а) unsigned long b = 0xd12aa; double x = -157.11388;
б) unsigned char c1 = 70, c2 = '2'; float z = 0.3568; int d = 14;
printf("c1 = %3c c2 = %3d\n вираз = %#x \t z = %-8.3f \n", c1, c2, c1 ^ ~d, z );
в) Задано три дійсних числа. Написати вираз, який визначає найменше з цих чисел.
а) unsigned dd = 0712; double s = -317.98237;
б) int a = -6; long b = -3*a;
printf("\n a = %u b = %lo expr = %#lx \n", a, b, ~a | b << 4 );
в) Задано дійсне число. Написати вираз, який перевіряє, чи найближче до даного числа ціле є числом, що закінчується цифрою 7.
а) double ry = 517.438; long rl = 0x9a12;
б) int a = 0703; char c = a >> 4;
printf("op1 = %5d op2 = %5u \n op3 = %#x op4 = %d\n", (int)c, ~a, c % 2 ? a ^ c: a & c, sizeof(a) );
в) Написати вираз, який міняє місцями значення старшого і молодшого байтів заданого беззнакового цілого числа.
а) float t = 13; unsigned int u = 071200;
б) int x = 0xb7; long y = -34;
printf("\n\t x = %u \n z1 = %ld\t z2 = %#10lx\t z3 = %-#lo", x, y >> 3, x | y, x & y );
в) Задано довге ціле число. Написати вираз, який буде істинним, якщо значення молодшого байта цього числа вдвічі менше за значення його старшого байта.
а) long rr = 67012; double yy = -587.97;
б) int ch = '3'; unsigned b = 0123, s = b + ch - '0';
printf("ch = %c = %d \n~b = %d\nexpr = %#06X \n", ch, ch, ~b, s & b);
в) Написати вираз, що повертає дві наймолодші цифри числа, яке є результатом округлення до ближчого цілого більшого з двох заданих дійсних чисел.
а) int ch = ′R′; double sum = 4517.3;
б) long w = 372; unsigned v = 0xa2d3;
printf("v: %-5dw: %#lo \n size = %u \t resul = %#x\n", v, w, sizeof(w) * 10, v ^(unsigned) w );
в) Записати вираз, який повертає найстаршу цифру дробової частини меншого з двох заданих дійсних чисел.
а) int w = 0xd02; double zar = -5617.73e-4;
б) long m = 0134; unsigned n = m >> 3;
printf("\n%#o \t %d \t %#X\n", n, n%2 ? ~n:(int)m /10, (unsigned)m |n );
в) Записати вираз, який для заданого значення x визначає знак (плюс або мінус) функції .
а) long q = 037512; double y = -81.7456;
б) unsigned x = 0xb217; int y = -14;
printf("\n\t x = %# \t z1 = %u \t z2 = %d \n z3 = %#x", x, x >> 7, ~y + 8, x & y );
в) Написати вираз, який перевіряє, чи точка з координатами (x, y) потрапляє у частину кола з радіусом R , що розташована в другому квадранті (центр кола в точці початку координат).
а) unsigned q = 070512; float g = 9.1273e5;
б) double y = 28.75; short x = 0x3c3;
printf("\tx = %d, ~x /100 = %d, y = %10.2e (%d байт)\n", x, ~x /100, y, sizeof y );
в) Задано два беззнакових цілих числа а1 та а2 . Написати вираз, який замінює старший байт числа а1 молодшим байтом а2 .
а) double u = 0.58797e5; long s = 0xb12;
б) int c = '5', b = 0123, a = b + c - '0';
printf( "\t c = %-2c = %3d \n dyz = %#0.5x \n", c, c, a ^ ~b );
в) Задано дійсне число. Написати вираз, який перевіряє, чи найближче до даного числа ціле є числом кратним 5.
а) int sym = ′6′; double y = -145.13;
б) int h = -18; long b = -3*h;
printf( "\n\t h = %u bh = %#lo expr = %lX\n", h, b&h, ~h | b >>3 );
в) Задано трицифрове число. Написати вираз, який перевіряє, чи хоча б одна з цифр цього числа дорівнює 5.
а) long l = 045612; double gw = 0.0173;
б) unsigned int x = 23, b = 0xfa68;
printf( "\t %-10o %-10d %#0.6X \n", x, ~b, x ^ b );
в) Написати вираз, який перевіряє, чи найближче до заданого дійсного числа більше ціле є парним числом.
а) long t = 0xb1d2; double y = -441731.7e-6;
б) int ch = 'A'; unsigned b = 0x54, s = b + ch - '0';
printf( "ch = %c = %d\n mb = %d\n exp = %#06x\n", ch, ch, b % 3, s & b );
в) Задано довге ціле число. Записати вираз, який інвертує молодший байт цього числа.
а) unsigned п = 0612; double s = 317.98234е-4;
б) int a = -16; long b = -5*a;
printf( "~a = %u \n b - %s \n expr => %#07.6lX\n", ~a, b % 2 ? "непарне":"парне", (long)a <<4 & b );
в) Записати вираз, який визначає, чи старша цифра дробової частини заданого дійсного числа непарна.
а) double y = 1.3703e-5; int d = ′K′;
б) unsigned v = 0xa2d3; long w = 332;
printf("rv: %4d rw: %#08lX \n result -> %c\n", v&12, w | ~v, (unsigned)w /5 );
в) Написати вираз, який повертає наймолодшу цифру числа, що формується як результат округлення до ближчого цілого меншого з двох заданих дійсних чисел.
а) long qq = 0xc1c2; double y = -1.7563e4;
б) short a = 388; int k = a >> 2;
printf("op1 = %d op2 = %d \n op3 = %#x op4 = %d\n", k, a /5, k % 3 ? a ^ k:a & k, sizeof(a) );
в) Задано ціле число. Записати вираз, який інвертує чотири молодші біти цього числа.
а) unsigned long m = 01266; double w = -1.5913e6;
б) unsigned char sm = 'B'; float z = 3.5062; int d = 14;
printf(" \t sm = %c = %d \n вираз = %#x\n z = %.3g\n", sm, sm, sm ^ ~d, z );
в) Записати вираз, який перевіряє, чи значення функції у заданій точці u вдвічі або більше перевищує значення u .
а) int r = ′Z′; double x = -7.4513;
б) long m = 0x2а1; unsigned n = m >> 3;
printf("\n %#X \t %d \t %#o \n", n, n%2 ? ~n :(int)m /10, n |(unsigned)m );
в) Записати вираз, який повертає найстаршу цифру дробової частини більшого з двох заданих дійсних чисел.
а) unsigned a = 0xdd00; double t = 13;
б) int x = 0217; long y = -14;
printf("\n\t x = %u \nz1 = %ld\t z2 = %8o z3 = %#lx", x, y << 4, x ^(int)y, ~x & y );
в) Задано довге ціле число. Записати вираз, який обчислює суму двох середніх байтів цього числа.
а) long s = 0xf12a; unsigned d = 15173;
б) int c1 = 47, c2 = '7'; long double z = 5.2477;
printf("c1 = %2c c2 = %04d \n вираз = %#x\tz = %-8.3Le \n", c1, c2, c1 ^ ~c2, z );
в) Написати вираз, який обчислює суму найстаршого і наймолодшого байтів заданого довгого цілого числа.
а) double w = -47.438e-4; unsigned long k = 04120073;
б) int a = 98, c = ′Y′;
printf("a/3 = %u \t c = %u\n smb1 = %c smb2 = %c \n", a /3, c, a > c ? a + 3 : c - 5, c-(a -'a') );
в) Записати вираз, який визначає чи хоча б один з трьох молодших двійкових розрядів заданого цілого числа не дорівнює 1.
а) int ch = ′9′; double sum = -66.5173;
б) unsigned v = 0xb10c; long w = 108;
printf("v: %-5dw: %#lo \n size = %u \t resul = %#x\n", v, w, sizeof(w)*15, v ^(unsigned)w );
в) Записати вираз, який перевіряє, чи значення функції у заданій