Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / 3_кол / Лекції / лекция_C++ (9)_у.doc
Скачиваний:
10
Добавлен:
30.05.2020
Размер:
156.16 Кб
Скачать

ЛЕКЦІЯ 9. Базові засоби мови СІ++

План

  1. Склад мови

  2. Типи даних в Сі++

  3. Знаки операцій в Сі++

  4. Вирази

  5. Введення і виведення даних

Склад мови

У тексті на будь-якій природній мові можна виділити чотири основні елементи: символи, слова, словосполуки і пропозиції. Алгоритмічна мова також містить такі елементи, лише слова називають лексемами (елементарними конструкціями ), словосполучення – виразами, пропозиції – операторами. Лексеми утворюються з символів, вираження з лексем і символів, оператори з символів виразів і лексем (Мал. 1.1)

Мал. 1.1. Склад алгоритмічної мови

Таким чином, елементами алгоритмічної мови є:

  1. Алфавіт мови Сі++, яка включає

  • прописні і рядкові латинські букви і знак підкреслення;

  • арабські цифри від 0 до 9;

  • спеціальні знаки “{},| []()+-/%*.\’:;&?<>=!#^

  • пробільні символи (пропуск, символ табуляції, символи переходу на новий рядок).

  1. З символів формуються лексеми мови:

  • Ідентифікатори – імена об'єктів сі-програм. У ідентифікаторі можуть бути використані латинські букви, цифри і знак підкреслення. Прописні і рядкові букви розрізняються, наприклад, PROG1, prog1 і Prog1 – три різні ідентифікатори. Першим символом має бути буква або знак підкреслення (але не цифра). Пропуски в ідентифікаторах не допускаються.

  • Ключові (зарезервовані) слова – це слова, які мають спеціальне значення для компілятора. Їх не можна використовувати як ідентифікатори.

  • Знаки операцій – це один або декілька символів, що визначають дію над операндами. Операції діляться на унарні, бінарні і тернарні по кількості операндів, що беруть участь в цій операції.

  • Константи – це незмінні величини. Існують цілі, дійсні, символьні і строкові константи. Компілятор виділяє константу як лексему (елементарній конструкції) і відносить її до одного з типів по її зовнішньому вигляду.

  • Роздільники – дужки, крапка, кома пробільні символи.

Константи в Сі++

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

Константи діляться на 5 груп:

  • цілі;

  • дійсні (з плаваючою крапкою);

  • перераховувані;

  • символьні;

  • строкові.

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

Цілі константи можуть бути десятковими, вісімковими і шістнадцятиричними. Десяткова константа визначається як послідовність десяткових цифр, що починається не з 0, якщо це число не 0 (приклади: 8, 0, 192345). Вісімкова константа – це константа, яка завжди починається з 0. За 0 слідують вісімкові цифри (приклади: 016 – десяткове значення 14, 01). Шістнадцятиричні константи – послідовність шістнадцятиричних цифр, яким передують символи 0х або 0Х (приклади: 0хА, 0Х00F).

Залежно від значення цілої константи компілятор по-різному представить її в пам'яті комп'ютера (тобто компілятор припише константі відповідного типа даних).

Дійсні константи мають іншу форму внутрішнього представлення в пам'яті комп'ютера. Компілятор розпізнає такі константи по їх вигляду. Дійсні константи можуть мати дві форми представлення: з фіксованою крапкою і з плаваючою крапкою. Вигляд константи з фіксованою крапкою:[цифри].[цифри] (приклади: 5.7, .0001, 41.).Вид константи з плаваючою крапкою: [цифри][.][цифри]E|e[+|-][цифри] (приклади:0.5е5, .11е-5, 5Е3). У записі дійсних констант може опускатися або ціла, або дробова частини, або десяткова крапка, або ознака експоненти з показником міри.

Перераховувані константи вводяться за допомогою ключового слова enum. Це звичайні цілі константи, яким приписані унікальні і зручні для використання позначення. Приклади: enum { one=1, two=2, three=3,four=4};

enum {zero,one,two,three} – якщо у визначенні констант, перераховувані, опустити знаки = і числові значення, то значення приписуватимуться за умовчанням. При цьому найлівіший ідентифікатор набуде значення 0, а кожен подальший збільшуватиметься на 1.

enum { ten=10, three=3, four, five, six};

enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday} ;

Символьні константи – це один або два символи, ув'язнені в апострофи. Символьні константи, що складаються з одного символу, мають тип char і займають в пам'яті один байт, символьні константи, що складаються з двох символів, мають типа int і займають два байти. Послідовності, що починаються із знаку \, називаються такими, що управляють, вони використовуються:

  • Для представлення символів, що не мають графічного відображення, наприклад:

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

\b – повернення на один крок

\n – переклад рядка

\t – горизонтальна табуляція.

  • Для представлення символів: \, ’, ?, ” ( \\, \’,\?,\” ).

  • Для представлення символів за допомогою шістнадцятиричних або вісімкових код (\073, \0хF5).

Строкова константа – це послідовність символів, ув'язнений в лапки. В середині рядків також можуть використовуватися символи, що управляють. Наприклад: “\nНовий рядок”

“\n\”Алгоритмические мови програмування високого рівня \”” .

Типи даних в Сі++

Дані відображують в програмі навколишній світ. Мета програми полягає в обробці даних. Дані різних типів зберігаються і обробляються по-різному. Тип даних визначає:

  1. внутрішнє представлення даних в пам'яті комп'ютера;

  2. безліч значень, які можуть приймати величини цього типа;

  3. операції і функції, які можна застосовувати до даних цього типа.

Залежно від вимог завдання програміст вибирає типа для об'єктів програми. Типів Сі++ можна розділити на простих і складених. До простих типів відносять типів, які характеризуються одним значенням. У Сі++ визначено 6 простих типів даних:

  • int (цілий)

  • char (символьний)

  • wchar_t (розширений символьний)

  • bool (логічний)

  • float(дійсний)

  • double (дійсний з подвійною точністю)

Існує 4 специфікатори типа, що уточнюють внутрішню представлення і діапазон стандартних типів

  • short (короткий)

  • long (довгий)

  • signed (знаковий)

  • unsigned (беззнаковий)

1. Тип int

Значеннями цього типа є цілі числа.

Розмір типа int не визначається стандартом, а залежить від комп'ютера і компілятора. Для 16-розрядного процесора під нього відводиться 2 байти, для 32-розрядного – 4 байти.

Якщо перед int розміщен специфікатор short, то під число відводиться 2 байти, а якщо специфікатор long, то 4 байти. Від кількості пам'яті, що відводиться під об'єкт, залежить безліч допустимих значень, які може приймати об'єкт:

short int - займає 2 байти, отже, має діапазон – 32768 ..+32767;

long int – займає 4 байти, отже, має діапазон – 2 147 483 648..+2 147 483 647

Тип int збігається з типом short int на 16-розрядних ПК і з типом long int на 32-розрядних ПК.

Модифікатори signed і unsigned також впливають на безліч допустимих значень, які може приймати об'єкт:

unsigned short int - займає 2 байти, отже, має діапазон 0 ..65536;

unsigned long int – займає 4 байти, отже, має діапазон 0..+4 294 967 295.

2. Тип char

Значеннями цього типа є елементи кінцевої впорядкованої безлічі символів. Кожному символу ставиться у відповідність число, яке називається кодом символу. Під величину символьного типа відводиться 1 байт. Тип char може використовуватися із специфікаторами signed і unsigned. У даних типа signed char можна зберігати значення в діапазоні від –128 до 127. При використанні типа unsigned char значення можуть знаходитися в діапазоні від 0 до 255. Для кодування використовується код ASCII(American Standard Code foe International Interchange). Символи з кодами від 0 до 31 відносяться до службових і мають самостійне значення лише в операторах введення-виводу.

Величини типа char також застосовуються для зберігання чисел з вказаних діапазонів.

3. Тип wchar_t

Призначений для роботи з набором символів, для кодування яких недостатньо 1 байта, наприклад Unicode. Розмір цього типа, як правило, відповідає типові short. Строкові константи такого типа записуються з префіксом L: L“String #1”.

4. Тип bool

Тип bool називається логічним. Його величини можуть набувати значень true і false. Внутрішня форма представлення false – 0, будь-яке інше значення інтерпретується як true.

5. Типи з плаваючою крапкою

Внутрішнє представлення дійсного числа складається з 2 частин: мантиси і порядку. У IBM- сумісних ПК величини типа float займають 4 байти, з яких один розряд відводиться під знак мантиси, 8 розрядів під порядок і 24 – під мантису.

Величини типи double займають 8 байтів, під порядок і мантису відводяться 11 і 52 розряди відповідно. Довжина мантиси визначає точність числа, а довжина порядку його діапазон.

6. Тип void

До основних типів також відноситься тип void Безліч значень цього типа – порожньо.

Змінні

Змінна в СІ++ - іменована область пам'яті, в якій зберігаються дані певного типа. В змінної є ім'я і значення. Ім'я служить для звернення до області пам'яті, в якій зберігається значення. Перед використанням будь-яка змінна має бути описана. Приклади:

int а; float x;

Загальний вигляд оператора опису:

[Клас пам'яті][const]тип ім'я [ініціалізатор];

Клас пам'яті може набувати значень: auto, extern, static, register. Клас пам'яті визначає час життя і зону видимості змінної. Якщо клас пам'яті не вказаний явно, то компілятор визначає його виходячи з контексту оголошення. Час життя може бути постійним – протягом виконання програми або тимчасовим – протягом блоку. Зона видимості – частина тексту програми, з якої допустимий звичайний доступ до змінної. Зазвичай зона видимості збігається із зоною дії. Окрім того випадку, коли у внутрішньому блоці існує змінна з таким же ім'ям.

Const – показує, що цю змінну не можна змінювати (іменована константа).

При описі можна привласнити змінній початкове значення (ініціалізація).

Класи пам'яті:

auto – автоматична локальна змінна. Специфікатор auto може бути заданий лише при визначенні об'єктів блоку, наприклад, в тілі функції. Цим змінним пам'ять виділяється при вході в блок і звільняється при виході з нього. Поза блоком такі змінні не існують.

extern – глобальна змінна, вона знаходиться у іншому місці програми (у іншому файлі або далі по тексту). Використовується для створення змінних, які доступні у всіх файлах програми.

static – статична змінна, вона існує лише в межах того файлу, де визначена змінна.

register - аналогічні auto, але пам'ять під них виділяється в регістрах процесора. Якщо такої можливості немає, то змінні обробляються як auto.

Приклад

int а; //глобальная змінна

void main(){

int b; //локальная змінна

extern int x; //змінна х визначена у іншому місці

static int с; //локальная статична змінна

a=1; //привласнення глобальною змінною

int а; //локальная змінна а

a=2; // привласнення локальною змінною

::a=3; // привласнення глобальною змінною

}

int x=4; //визначення і ініціалізація х

У прикладі змінна а визначена поза всіма блоками. Зоною дії змінної а є вся програма, окрім тих рядків, де використовується локальна змінна а. Змінні b і с – локальні, зона їх видимості – блок. Час життя різний: пам'ять під b виділяється при вході в блок (оскільки за умовчанням клас пам'яті auto), звільняється при виході з нього. Змінна с (static) існує, поки працює програма.

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

Ім'я змінної має бути унікальним в своїй зоні дії.

Опис змінною може бути виконаний або як оголошення, або як визначення. Оголошення містить інформацію про клас пам'яті і типа змінної, визначення разом з цією інформацією дає вказівку виділити пам'ять. У прикладі extern int x; - оголошення, а останні – визначення.

Знаки операцій в Сі++

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

Унарні операції

&

здобуття адреси операнда

*

Звернення за адресою (разіменування)

-

унарний мінус, міняє знак арифметичного операнда

~

порозрядне інвертування внутрішньої двійкової коди цілочисельного операнда (побітове заперечення)

!

логічне заперечення (НЕ). Як логічні значення використовується 0 - брехня і не 0 - істина, запереченням 0 буде 1, запереченням будь-якого ненульового числа буде 0.

++

Збільшення на одиницю:

  • префіксна операція - збільшує операнд до його використання

  • постфіксна операція збільшує операнд після його використання.

  • int m=1,n=2;

  • int a=(m++)+n; // a=4,m=2,n=2

  • int b=m+(++n);//a=3,m=1,n=3

- -

зменшення на одиницю:

префіксна операція - зменшує операнд до його використання

постфіксна операція зменшує операнд після його використання.

sizeof

обчислення розміру (у байтах) для об'єкту того типа, який має операнд

має дві форми

sizeof вираз

sizeof (тип)

Приклади:

sizeof(float) //4

sizeof(1.0) //8, оскільки дійсні константи за умовчанням мають типа double

Бінарні операції.

Аддитивні:

+

бінарний плюс (складання арифметичних операндів)

-

бінарний мінус (віднімання арифметичних операндів)

Мультиплікативні:

*

множення операндів арифметичного типа

/

ділення операндів арифметичного типа (якщо операнди цілочисельні, то виконується цілочисельне ділення)

%

здобуття залишку від ділення цілочисельних операндів

Операції зрушення (визначені лише для цілочисельних операндів).

Формат вираження з операцією зрушення:

Соседние файлы в папке Лекції