Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lexzii_08 / lexc_1_danye

.doc
Скачиваний:
14
Добавлен:
17.05.2015
Размер:
61.44 Кб
Скачать

Типи даних та їх об'ява. Основні характеристики та специфікації перетворення.

Типи даних.

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

Прості дані – це цілі і дійсні числа, текст і вказівки (адреси).

Структуровані типи даних – це масиви, записи, файли. В мові Сіі розрізняють поняття опису змінної і її визначення. Опис встановлює властивості об’єкту і його тип, розмір. Визначення або об’ява поряд з цим викликає виділення пам’яті. Кожний тип даних визначається одним з ключових слів:

1) int, задає значення цілих чисел: - 6, 0, 28, і т. д.

Диапазон значень від 3 2 7 6 8 до 3 2 7 6 7, зміна int займає 16 біт;

  1. short (коротке ціле), не більше int, теж 16 біт;

  2. long (довге ціле), не менше int, 32 біти;

  3. 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 );

результат:

ввести рядок символів

Вінниця

С = Він

Перетворення типів

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

Основні правила перетворення типів:

  1. Якщо виконується операція над змінними двох різних типів, обидві величини приводяться до “вищого” з двох типів. Цей процес називається “підвищенням” типу;

  2. Послідовність назв типів, впорядкованих від ”вищого” до “нижчого” виглядає наступним чином:

Double, float, long, int, short, char,

Застосування ключового слова unsigned підвищує ранг відповідного типу даних зі знаком.

  1. В операторі присвоєння кінцевий результат обчислення виразу в правій частині приводиться до типу змінної, котрій було присвоєне це значення. Даний процес може призвести до “підвищення ” типу або до “пониження”, при якому величини приводяться до типу даних, що має більш низький пріоритет.

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

mice = 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 роботах через форматне введення-виведення.

5

Соседние файлы в папке lexzii_08