ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.12.2021
Просмотров: 111
Скачиваний: 2
Типи даних та їх об'ява. Основні характеристики та специфікації перетворення.
Типи даних.
Програма на мові Сі працює з різними даними, які можуть бути простими і структурованими.
Прості дані – це цілі і дійсні числа, текст і вказівки (адреси).
Структуровані типи даних – це масиви, записи, файли. В мові Сіі розрізняють поняття опису змінної і її визначення. Опис встановлює властивості об’єкту і його тип, розмір. Визначення або об’ява поряд з цим викликає виділення пам’яті. Кожний тип даних визначається одним з ключових слів:
1) int, задає значення цілих чисел: - 6, 0, 28, і т. д.
Диапазон значень від 3 2 7 6 8 до 3 2 7 6 7, зміна int займає 16 біт;
-
short (коротке ціле), не більше int, теж 16 біт;
-
long (довге ціле), не менше int, 32 біти;
-
char (символьний), значення символів, ... W, y, P, 4, !, *, крім символів, які не мають графічного зображення.
Якщо об’явлено int а і char b; і визначено а = 5, в = ‘ 5’;, то а і в не одне і теж; змінна а має числове значення 5, в значення “ 5”. Число 5 в двійковому коді має вигляд 101, а символ “ 5” – 110101, це значення із таблиці ASCІI. Змінна char займає 8 біт.
5) unsigned (беззнаковий) – в мові Сі можливо визначати деякі типи (char, short, long, int) беззнаковими за допомогою ідентифікатора unsigned . Наприклад, змінна типу uтsignet int може приймати значення від 0 до 65535 при тих же 16 бітах.
В цьому випадку визначення виду unsignet int а; можна записати у більш стислому вигляді: unsigned а;
6. float (дійсний) – для дійсних чисел – 5.27, 0.0... Дійсні числа можна записати у вигляді чисел з плаваючою крапкою.
Наприклад: -1.58Е2, 3.6Е-4, що означає відповідно: 1.58·102, 3.6·10-4. зміна типу float займає 32 біти. Діапазон від ±3.4Е-38 до ±3.4Е+38.
7. double (подвійна точність) –визначає дійсні змінні, які займають в 2 рази більше місця, ніж float, тобто 64 біти( від ±1.7е-308 до ±1.7+308 ).
8. enum (переліковий) – призначений для опису об`єктів з деякої заданої множини, наприклад {весна, літо, зима, осінь}.
Нехай ідентифікатор ПОРИ_РОКУ може приймати одне з чотирьох приведених вище значень( ці значення є константами). Тоді можливо записати так:
еnum ПОРИ_РОКУ{весна, літо, зима, осінь};
Тепер можливо визначити змінні переліковного типу. Наприклад:
еnum ПОРИ_РОКУ a,b,c;
кожна із трьох змінних (a,b,c) може приймати одне із чотирьох значень: весна, літо, зима, осінь.
Як вводити і виводити інформацію.
Розглянемо чотири функції: printf, scanf, putchar, i getchar . Перші дві призначаються для реалізації форматного введення і виведення даних.
Функція printf формально описується таким чином:
printf(„керуючий рядок”, аргумент1, аргумент2...)
Керуючий рядок містить об`єкти трьох типів: звичайні символи, які просто виводяться на екран дисплею (копіюються в стандартий вихідний потік); специфікація перетворення, кожна з яких викликає виведення на екран значення чергового елемента зі списку і керуючі символьні константи.
Кожна специфікація перетворення починається зі знака % і закінчується деяким символом, який задає перетворення. Між знаком % і символом перетворення може бути: знак мінус, який вказує, що перетворений параметр потрібно вирівняти вліво в своєму полі; рядок цифр, який задає мінімальний розмір поля; крапка, яка відокремлює розмір поля від рядка цифр; рядок цифр, який задає максимальне число символів, які треба ввести або кількість цифр, які потрібно вивести справа від десяткової крапки в значеннях float або double.
Далі записується один із символів перетворення :
d – значенням аргумента є дійсне ціле число;
o - значенням аргумента є вісімкове ціле число;
х – значенням аргумента є шістнадцятіркове число;
с – значенням аргумента є символ;
s – значенням аргумента є рядок символів (виводяться до ознаки кінця рядка);
е – значенням аргумента є дійсне десяткове число в експотенційній формі;
f – значенням аргументя є дійсне десяткове число з плаваючою комою;
q – використовується як %е або %f і вилучає виведення несуттєвих нулів;
р – значенням аргумента є покажчик (адреса)
Якщо після знака % записаний не символ перетворення, то він виводиться на екран.
Функція printf використовує керуючий рядок для того, щоб знати, скільки всього аргументів і їх типи. Аргументами можуть бути змінні, константи, вирази, виклики функцій, головне, щоб їх значення відповідали заданій специфікації.
При наявності помилок (наприклад в кількості аргументів або типів перетворення ) результати будуть невірними.
Серед керуючих символьних констант найбільш частіше використовуються такі:
\a – для короткочасної подачі звукового сигналу;
\b – для переведення курсору вліво на одну позицію;
\n – для переходу на новий рядок;
\r – для повернення каретки або переведення курсору в початок поточного рядку;
\t – для горизонтальної табуляції;
\v – для вертикальної табуляції;
Наприклад в результаті запису інструкції виклику функції:
printf( ” \t ЕОМ \n % d\n”, i);
cпочатку виконується горизонтальна табуляція (\t), тобто курсор зміститься з початку краю екрана, потім на екран виведеться на екран слово ЕОМ, після чого курсор перейде в початок нового рядка (\n), потім буде виведено ціле значення і за форматом d і на закінчення курсор перейде в початок нового рядка (\n).
Функція scanf формально записується таким чином:
scanf (” керуючий рядок ”, аргумент 1, аргумент 2, ....)
Аргументом scanf повинен бути покажчик на відповідні значення (перед ім‘ям змінної записується символ &). Призначення покажчиків розглянемо потім.
Scanf розташовує за адресою &і введене значення. В функції scanf допускаються деякі символи перетворення функції printf.
Наприклад:
d – на вході очікується десяткове ціле число;
o – на вході очікується 8-ве ціле число;
x – на вході очікується 16-ве число;
u – на вході очікується поява числа без знаку;
c – на вході очікується поява одиночного символу;
s – на вході очікується поява рядка символів;
f – на вході очікується поява дійсного числа;
p – на вході очікується поява покажчика (адреси) у вигляді 16-го числа;
Перед символами d, o , x , f може стояти буква l. В перших трьох випадках відповідні змінні повинні мати тип long, а в останньому – double. Приклад демонструє деякі можливості використання функції scanf, а також відповідність аргументів символам специфікації. Біля останнього аргумента l не записаний знак & тому, що рядок є масивом символів , оголошений як char [20];
Приклади використання форматного введення - виведення
#include stdio.h
main ()
{
char s [ ]; /* об'ява рядка символів */
float a = 86.531;
printf ( ” % s \n ”, ” Кафедра ПЗ ”); /* виведення рядка символів */
printf ( ” ввести рядок символів \n”)
scanf ( ” % ”, s);
printf ( ” _ _ _ 20 s ; %20s \n”, s ); /* заданий мінімальний розмір поля (20 символів)*/
printf ( ” (_ _ _ -20s ) ; % 20s \n ” , s); /* знак ”-” вказує, що рядок s буде виводитись починаючи з лівої мітки поля (вирівняння зліва)*/
}
Кафедра ПЗ
Ввести рядок символів
ВДТУ
( _ _ _ 20 s) ВДТУ
( _ _ _ -20s) ВДТУ
printf ( ” ввести рядок символів \n”);
scanf ( ” %3s \n ”, s); /* з рядка буде введено 3 символа */
printf ( ” c = %”, c );
результат:
ввести рядок символів
Вінниця
С = Він
Перетворення типів
Повинні використовуватись змінні і константи одного типу. При змішуванні компілятор Сі не вважає програму правильною, як це було на Паскалі. Замість цього компілятор використовує набір правил для перетворення типів.
Основні правила перетворення типів:
-
Якщо виконується операція над змінними двох різних типів, обидві величини приводяться до “вищого” з двох типів. Цей процес називається “підвищенням” типу;
-
Послідовність назв типів, впорядкованих від ”вищого” до “нижчого” виглядає наступним чином:
Double, float, long, int, short, char,
Застосування ключового слова unsigned підвищує ранг відповідного типу даних зі знаком.
-
В операторі присвоєння кінцевий результат обчислення виразу в правій частині приводиться до типу змінної, котрій було присвоєне це значення. Даний процес може призвести до “підвищення ” типу або до “пониження”, при якому величини приводяться до типу даних, що має більш низький пріоритет.
“Підвищення ” типу проходить гладко, а “пониження ” може призвести до ускладнень.
m ice = 1.6 + 1.7 3.3 = 3
mice = ((int)1.6 + (int)1.7 ); 1 + 1 = 2
Введення і виведення інформації за допомогою потоків
В мові С++ є інший, можливо, більш зручний засіб введення-виведення інформації. Це робота з потоком. Зручність полягає в тому, що ми не повинні вказувати тип значень які вводяться чи виводяться. Програма сама визначає його, виходячи з оголошення змінних. Для роботи з потоками необхідно підключити файл iostream.h. Тоді ми зможемо працювати з двома потоками:- cin і cout- стандартні вхідний і вихідний потоки. Вхідним потоком за замовчуванням є клавіатура, а вихідним – дисплей монітора. Запис в потік і зчитування з потоку виконується за допомогою операцій << i >>. Наприклад:
int x;
cin >> x;// зчитуємо значення з клавіатури в змінну х
x++;
cout<<x;//виводимона екран змінене значення змінної х
Якщо треба ввести або вивести декілька змінних, то можна написати так:
int x1, x2,x3;
cin >>x1>>x2>>x3;
x1+=x2+x3;
cout<< “Сума трьох чисел=” <<x1<<”\n” ;
Програма прочитає три числа в змінні х1,х2,х3, додасть їх і виведе на екран напис “Сума трьох чисел=”, а потім результат, який зберігається в х1, і в кінці перейде на новий рядок.
Тому що потоки прерогативи мови С++, а не С, то більш докладна робота з потоками, а також їх можливості розглядаються в курсі об’єктно-орієнтованого програмування на мові С++.
Рекомендується дотримуватися одного стилю введення-виведення, в 1-4 роботах через форматне введення-виведення.