- •О.Ф.Тарасов, о.В.Алтухов
- •1 Заняття № 1 Вивчення інтегрованого середовища с
- •1.1 Теоретичні відомості
- •1.2 Хід роботи
- •1.3 Вимоги до звітів
- •1.4 Питання для контролю і самостійної роботи
- •2 Заняття № 2 Функції введення/виведення даних printf( ), scanf( ). Лінійні обчислювальні процеси
- •2.1 Теоретичні відомості
- •2.2 Хід роботи
- •2.3 Індивідуальне завдання до заняття №2
- •2.4 Питання для контролю і самостійної роботи
- •3 Заняття № 3 Розробка програм зі скалярними типами даних
- •3.1 Теоретичні відомості
- •Приклад
- •3.2 Хід роботи
- •3.3 Індивідуальне завдання до заняття № 3
- •3.4 Питання для контролю і самостійної роботи
- •4 Заняття № 4 Розробка програм з циклічними обчислювальними процесами
- •4.1 Теоретичні відомості
- •Алгоритм роботи оператора циклу for ( )
- •4.2 Хід роботи
- •4.3 Індивідуальне завдання до заняття № 4
- •4.4 Питання для контролю і самостійної роботи
- •5 Заняття № 5
- •Розгалуження обчислювального процесу.
- •Оператори, які реалізують розгалуження: if... Else, switch,
- •Умовна операція ( ? : )
- •5.1 Теоретичні відомості
- •Умовна тернарна операція ( ? : )
- •Оператор варіанта switch
- •Приклад
- •5.2 Хід роботи
- •5.3 Індивідуальне завдання до заняття № 5
- •5.4 Питання для контролю і самостійної роботи
- •6 Заняття № 6 Операції с, їхні пріоритети і використання. Перетворення типів
- •Пріоритет операцій і порядок виконання (асоційованість)
- •(Новий_тип) Операнд
- •Приклад
- •6.2 Хід роботи
- •6.3 Індивідуальне завдання до заняття № 6
- •6.4 Питання для контролю і самостійної роботи
- •7 Заняття № 7
- •7.1 Теоретичні відомості
- •Оголошення функцій (створення прототипів)
- •([ Список_типів_параметрів ])
- •Синтаксис визначення функцій
- •[ Return Значення_типу_що_повертається ]
- •Використання локальних і глобальних перемінних у функціях. Виклик функції
- •Приклад
- •7.2 Хід роботи
- •7.3 Індивідуальне завдання до заняття № 7
- •7.4 Питання для контролю і самостійної роботи
- •8 Заняття № 8
- •8.1 Теоретичні відомості
- •Основні операції з покажчиками
- •Покажчики і цілі величини
- •Динамічне розміщення покажчиків у пам'яті
- •Приклад
- •Приклад
- •8.2 Хід роботи
- •8.3 Індивідуальне завдання до заняття № 8
- •8.4 Питання для контролю і самостійної роботи
- •9 Заняття № 9
- •9.1 Теоретичні відомості
- •Приклад
- •9.2 Хід роботи
- •9.3 Індивідуальне завдання до заняття №9
- •9.4 Питання для контролю і самостійної роботи
- •10 Заняття № 10
- •10.1 Теоретичні відомості
- •Приклад
- •10.2 Хід роботи
- •10.3 Індивідуальне завдання до заняття № 10
- •10.4 Питання для контролю і самостійної роботи
- •Заняття №11 Обробка символьних даних
- •Теоретичні відомості
- •Індивідуальне завдання до заняття №11
- •Питання для контролю і самостійної роботи
- •Приклад
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Теоретичні відомості
- •Приклад
- •Індивідуальне завдання до завдання №13
- •Питання для контролю і самостійної роботи
- •Заняття № 14 Розробка програм зі складеними типами даних
- •Структури
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Заняття № 15 Використання покажчиків для роботи зі складеними типами даних (2години)
- •Теоретичні відомості
- •Приклад
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Використання покажчиків для роботи з функціями
- •Покажчики як параметри функції
- •[Const ] Тип * Ім'я_покажчика
- •Приклад
- •Хід роботи
- •Індивідуальне завдання до заняття №16
- •Питання для контролю і самостійної роботи
- •Використання функцій високого і низького рівня для роботи з потоками (файлами)
- •Функції для роботи з файлами
- •Хід роботи
- •Індивідуальне завдання до заняття №17
- •Питання для контролю і самостійної роботи
- •Розробка програм із багатофайловою структурою. Заголовочні файли. Класи пам'яті перемінних і функцій
- •Керування многофайловими проектами
- •Використання адміністратора проектів
- •Приклад
- •Основний файл проекту
- •Заголовний файл
- •Хід роботи
- •Індивідуальне завдання до заняття №18
- •Питання для контролю і самостійної роботи
- •Графічні функції
- •Графічні примітиви
- •Хід роботи
- •Індивідуальне завдання до заняття №19
- •Питання для контролю і самостійної роботи
- •Заняття№20 Розробка програм з використанням класів
- •Теоретичні відомості
- •Оголошення і визначення класу
- •Тіло класу
- •Інкапсуляція. Керування доступом до членів класу
- •Використання даних-членів класу
- •Хід роботи
- •Індивідуальне завдання до заняття №20
- •Питання для контролю і самостійної роботи
- •Заняття№21 Використання конструкторів і деструкторів у класах
- •Теоретичні відомості
- •Ініціалізація об'єктів класу
- •Деструктори
- •Виклик деструкторів
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •"Друзі" класів (friend)
- •Хід роботи
- •Індивідуальне завдання до заняття №22
- •Контрольні питання для підготовки і самостійної роботи
- •Віртуальні базові класи
- •Віртуальні деструктори
- •Хід роботи
(Новий_тип) Операнд
або
Новий_тип (Операнд)
Ряд операцій може в залежності від типів своїх операндів виконувати неявне перетворення значення операнда з одного типу в інший (перетворення за умовчанням).
Розглянемо результати таких перетворень.
Дані типу char чи short int можуть використовуватися скрізь, де використовується тип int. В усіх випадках значення перетворюються до цілого типу.
Арифметичні операції над речовинними числами (float і double) за умовчанням виконуються з подвійною точністю.
Перетворення цілочислених значень у речовинні виконується без ускладнень, але можлива втрата точності, якщо для результату не передбачено достатньої кількості битів. Перетворення речовинних чисел до цілочисленого типу машино -залежно. Результат невизначений, якщо значення не попадає у відведений діапазон.
Якщо ціле без знака (unsigned) використовується разом із знаковим цілим, то знакове ціле і результат перетворяться в ціле без знака.
Переважна більшість операцій викликає перетворення і визначає типи результату відповідно до вищенаведених правил. Приведена нижче схема перетворень реалізується за умовчанням при обчисленні виразів С.
Спочатку будь-які операнди типів char, unsigned char або short перетворюються в int, а будь-які операнди типу float перетворюються в double.
Потім, якщо який-небудь операнд має тип double, то інші операнди перетворюються до типу double і типом результату буде double.
У випадку, якщо який-небудь операнд має тип unsigned long, то інші операнди перетворюються до типу unsigned long і це ж буде і типом результату.
У випадку, якщо який-небудь операнд має тип long, то інші операнди перетворюються до типу long і це ж буде типом результату.
У випадку, якщо операнд має тип unsigned, то інші операнди перетворюються до типу unsigned, і це буде типом результату.
Об'єкт типу void* (покажчик на порожній тип) може бути оголошений для адресації об'єктів невідомого типу. Перетворення типу такого покажчика задається за допомогою явної операції перетворення типів.
Покажчики можуть перетворюватися в кожний з цілих типів, досить великий для того, щоб умістити їх.
Покажчик на один тип може бути перетворений у покажчик на інший тип. При цьому можливо перетворення покажчика в покажчик на об'єкт меншого розміру і назад без змін.
Наприклад, функція виділення пам'яті може приймати розмір (у байтах) об'єкта, для якого треба виділити пам'ять, і повертати покажчик на тип void для перетворення у необхідний тип, що може в такий спосіб використовуватися.
Приклад
doube *dp; //Оголошення покажчика на тип doube
… //void *malloc (size_t size); - бібліотечна функція С
//для виділення пам'яті розміром size_t size байт
dp = (doube *) malloc (sizeof (doube)); //Виділення пам'яті для
//покажчика на тип doube
*dp = 2.6 / 8.4;
Приклад
#include <stdio.h>
#include <conio.h>
#include <math.h>
main( )
{float r1, r2; int a, b, b1;
unsigned c, d;
char e, f;
unsigned char g;
float f1, f2;
clrscr( );
printf("Введення першого і другого речовинних чисел: ");
scanf("%f %f", &r1, &r2);
printf("Виведення результатів операцій для чисел: %5.2f %5.2f\n", r1, r2 );
printf("!r1 = %d ", !r1); printf("!r2= %d ", ! r2 );
printf("r1 > r2 %d ", r1 > r2); printf("r1<r2 %d\n", r1< r2);
printf("r1 || r2 %d ", r1|| r2); printf("r1&&r2 %d ", r1 && r2 );
printf("r1= = r2 %d ", r1 = = r2); printf("r1>=r2 %d\n", r1>= r2 );
printf("r1 <= r2 %d ", r1<= r2); printf("r1!=r2 %d\n", r1!= r2 );
//Вкладений блок, перемінні переоголошені: int r1, r2; float b;
{int r1, r2; float b;
printf("Введення першого і другого цілих чисел: ");
scanf("%d %d", &r1, &r2);
printf("Виведення результатів операцій для цілих чисел: %2d %2d\n", r1, r2 );
printf("!r1= %d ", ! r1); printf("!r2= %d ", !r2 );
printf("r1>r2 %d ", r1>r2); printf("r1<r2 %d\n" , r1< r2 );
printf("r1|| r2 %d ", r1 || r2); printf("r1&&r2 %d ", r1 && r2 );
printf("r1= = r2 %d ", r1= = r2); printf("r1>= r2 %d\n" , r1>= r2 );
printf("r1<= r2 %d ", r1<= r2); printf("r1!= r2 %d ", r1!= r2 );
printf("~ r1 %d ", ~ r1); printf("r1 | r2 %d\n" , r1 | r2 );
printf("r1^ r2 %d ", r1^ r2); printf("r1 & r2 %d ", r1 & r2 );
printf("r1<< r2 %d ", r1<< r2); printf("r1>> r2 %d\n" , r1>> r2 );
printf("Вихідні значення: r1= %d r2= %d\n", r1, r2 );
r2 = r1++; //Постфікснї операції: а1++ а1- -
printf("r2 = r1++; r1= %d r2= %d\n", r1, r2 );
- - r1; r2 = ++r1; //Префіксні операції: ++а1 - - а1
printf("-іr1; r2=++r1; r1= %d r2= %d\n", r1, r2 );
r1- =4; r2 += 5; //Складене присвоювання
printf("r1-=4; r2+= 5; r1= %d r2= %d\n", r1, r2 );
a = r2- =2, r1+= 5; //Складене присвоювання
printf("a= r2 - = 2, r1+= 5; r1= %d r2= %d a= %d\n", r1, r2, a );
a = (r1< r2) ? r1: r2; //Тернарна операція: якщо r1< r2, то а = r1 інакше а = r2
printf("a= (r1< r2) ? r1: r2; a= %d\n", a );
a = r 2% r1; //Залишок від розподілу цілих
printf("а= r1 % r2; "); printf("а = %d\n", r2 % r1 );
a = r2 / r1; //Розподіл цілих
printf("a= r2 / r1; a=%d\n", a );
b = (float) r2 / (float) r1; //Розподіл c перетворенням типів
printf("b= (float) r2 / (float) r1; b= %f\n", b );
}
float q = 1.3, q1= 2.4, raz;
printf("Введіть перемінні: a - (int), c - (unsigned), \
g - (unsigned char)\n");
scanf("%i, %u, %uc", &a, &c, &g );
b = (a & (c<< 3));
b1 = (a & 3) << 7;
f = (a & 3) << 7;
f1 = q / (c | 0x3E);
f2 = a / (c | 0x3E);
raz = exp (q + q1) / 4;
printf("g=%u, q=%5.2f, q1=%7.2f, b=%i, b1=%i, \
\n", g, q, q1, b, b1);
printf("f= %i, f1= %6.3f, f2= %6.3f, raz=%f\n", f, f1, f2, raz );
getch( ); return 0;
}
/* Введення першого і другого речовинних чисел: 56 7
Виведення результатів операцій для чисел: 56.00 7.00
!r1= 0 !r2 = 0 r1> r2 1 r1< r2 0
r1|| r2 1 r1 && r2 1 r1==r2 0 r1>= r2 1
r1<= r2 0 r1 != r2 1
Введення першого і другого цілих чисел: 45 2
Виведення результатів операцій для цілих чисел: 45 2
!r1= 0 !r2= 0 r1> r2 1 r1< r2 0
r1|| r2 1 r1 && r2 1 r1= = r2 0 r1>= r2 1
r1<= r2 0 r1!= r2 1 ~r1 -46 r1 | r2 47
r1^ r2 47 r1 & r2 0 r1<< r2 180 r1>> r2 11
Вихідні значення: r1 = 45 r2 = 2
r2 = r1++; r1= 46 r2= 45
- - r1; r2=++r1; r1= 46 r2= 46
r1 - = 4; r2+= 5; r1= 42 r2= 51
a= r2 - =2, r1+= 5; r1= 47 r2= 49 a=49
a= (r1< r2) ? r1: r2; a= 47
а= r1 % r2; а= 2
a= r2 / r1; a= 1
b= (float) r2 / (float) r1; b= 1.042553
Введіть перемінні a-(int), c-(unsigned), g-(unsigned char)
-34 6 7
g = 122, q = 1.30, q1= 2.40, b= 512, b1= 256,
f = 0, f1 = 0.010, f2 = 519.000, raz = 10.111827 */