Програма се състои от един или повече файла, които съдържат поредица от знаци. Обикновено един знак е дълъг един байт



Дата24.07.2016
Размер55.43 Kb.



Лекция 2. Основи на лексиката на С++



2.1 Знаци и думи

Една С++ програма се състои от един или повече файла, които съдържат поредица от знаци. Обикновено един знак е дълъг един байт.

Разрешените знаци са: всички малки и големи букви на латинската азбука, всички цифри, специални знаци( ! “ % ^ & * ( ) _ - + = | \ < , > . ? / ~ # : ; ‘) и знаци които не се отпечатват ( интервал, enter, backspace и др.)

Компилаторът разделя (чете) програмата на последователност от думи. Има 5 вида думи: имена (идентификатори), ключови думи, константи, оператори и разделители (сепаратори).



2.2 Бели полета

Коментарите, интервалите, табулаторите, нов ред се означават като бели полета. Белите полета не се разрешават в думите освен в константите от низове или знаци. Компилаторът игнорира белите полета които са между думите.



2.3 Имена

Име е някаква комбинация от букви, цифри и символа долна черта _. Дължината на името е практически без ограничение. Ограничение е, че име не може да започва с цифра.

Ето някои примери за валидни имена:

main


cout

position_1

initial_velocity

_velocity // разрешено но да се избягва

Ето примери за невалидни имена:

velocity$ // $ е забранен знак

2velocity // цифра в началото

v e l o c I t y // интервали в думата

initial-velocity // не смесвай – с _.

0xygen // не смесвай 0 (нула ) с O (буквата)



2.4 Ключови думи

Ключовите думи са специални запазени думи, чието значение се определя от езика а не от програмиста. Долу прилагаме пълния списък на ключовите думи, чието значение засега е неясно:

asm auto break case catch

char class const continue default

delete do double else enum

extern float for friend goto

if inline int long new

operator private protected public register

return short signed sizeof static

struct switch template this throw

try typedef union unsigned virtual

void volatile while

Примери за правилна употреба на ключови думи:

int I; //променливата I се дефинира от тип цяло число

char c; // променливата с се дефинира от тип знак

Примери за неправилна употреба на ключови думи:

int switch; //опит да се декларира switch като цяло число

char class; //опит да се декларира class като знак

i n t I; //бели полета не са разрешени

INT I; //ключовите думи са с малки букви



2.5 Константи

Константите могат да са следните видове : цяло число, реално число, знак или низ.



2.5.1 Константа цяло число

Състои се от поредица цифри

14768

но не:


14,768 // вградена запетайка не е разрешена

14 768 //вградено бяло поле не е разрешено

-14768 //това е константен израз тъй като имаме //действие (знак минус) над константа

2.5.2 Константа реално число

Константите реално число включват десетична точка или експонента:

2500.1 2.5001е3 25001Е-1

стойноста след е или Е е експонентата. Отрицателните реални числа са константни изрази



2.5.3 Константа знак

Константата знак се представя като знак заграден в единични кавички:

‘a’ ‘1’ ‘ ‘

Константата знак е дълга един байт. Забележете че ‘1’ не е равно на числото 1. В ASCII таблицата на знаците ‘1’ е представено с 49.

Някои знаци , които трудно се изразяват се предхождат от наклонена черта. Например ‘\n’ означава нов ред. Тези знакови константи се наричат escape кодове. Пълният списък на тези знакови константи е представен по-долу:

Нова линия \n наклонена черта \\

Табулация \t въпросителна \?

Вертикална табулация \v единична кавичка \’

Backspace \b двойна кавичка \”

Връщане на каретка \r нова страница \f

Звуков сигнал \a осмично число \032

шестнайсетично число \x032



2.5.3 Константа низ от знаци

Низовите константи са последователност от знаци, затворени от кавички: “Hello world”. Вътре в низа се отчитат и белите полета. Низовете винаги завършват със еscape-знака ‘\0’, който означава край на низа. Това значи че “C” и ‘C’ не са едно и също. Първото се състои от два знака, а второто от един знак. Съседните низови константи могат да се свързват. Например:

Cout<<”Hello” “ world” дава на изхода: Hello world

2.6 Оператори

Операторът е дума от езика, състояща се от един или повечн знака. Той инструктира компютъра да извърши някакво определено действие. Например операторът за присвояване = се използва така:

i=1; //присвоява 1 към адрес в паметта, който съдържа //стойноста на I

По-долу привеждаме пълен списък на операторите, а с тяхното

значение ще се запознаем по-късно.

() . [] -> :: ->* & * new delete

! - ++ -- - sizeof / % + .* <<

>> < <= > >= == != ^ | && ||

?: = += -= *= /= %= <<= >>= &= ^=

|= ,


2.7 Основни типове данни

Преди да се запознаем по-подробно с операторите ще разгледаме основните типове променливи които са дефинирани в езика за работа с цели числа, числа с плаваща запетая, знаци и др.. Тези типове данни, които са дефинирани от програмиста за манипулиране на по-сложни обекти като например матрици, комплексни числа, 3-мерни тела и т.н се наричат производни типове. Ползата от дефиниране на типове е че компилатора може да открие много грешки когато проверява съответствието на типовете. В сравнение с други езици основните типове в С++ са малко на брой (например не са включени комплексните числа докато фортран ги включва). Обаче производните типове са неогран брой и могат да разширяват езика до безкрайност.



Тип данни цяло число

Този тип данни съдържа две групи: цели числа и знаци. Целите числа може да са short, int и long, а всеки един от тях може да бъде signed (по подразбиране) или unsigned. Тъй като знаците се представят вътрешно от малки цели числа, типа char също може да се използва за съхраняване и операции с цели числа.

Всеки обект или променлива от даден тип първо трябва да се дефинира или да се декларира преди да се използва в програма, в противен случай компилатора обявява грешка. Това отново се прави за да се избегнат несъответствия в типовете. Следвашите редове дефинират променливи от тип int и им задават конкретни стойности (присвояване на стойност):

int i, ,j, k;

i=1;

j=2;


k=3;

Забележете че = не е знак за равенство, а знак за присвояване на стойност. Операциите + , – и * имат обичайния смисъл на събиране изваждане и умножение. Сега можем да прибавим следните редове:

i = i + j;

k = k – i;

j = k*i;

Това не са равенства, например първият ред не означава че j=0. Смисълът е следният: На променливата i да се присвои нова стойност равна на сумата от сегашните стойности на i и j. Поради тази причина следния ред е грешен:

i + 1 = 7;//грешка

Задача: Проверете областа на целите числа за вашата система като използвате следните редове:

#include

int i, k;

i = INT_MAX;

k = INT_MIN;

Задача: Напишете програма с която да пробвате горните аритметични действия както и оператора за присвояване.

Делене на цели числа


Операторът / означава делене и ако делителя и делимото са цели числа резултатът е цялата част на частното. Например в следния код

int k;


k=3/2;

На к се присвоява стойност 1. Деленето на 0 не е дефинирано и дава грешка.


Оператор модулус


Операторът % е т.нар. модулус оператор или оператор на остатъка тъй като резултат дава остатъкът от деленето. Например 5 % 3 дава 2.

Оператори за нарастване и намаляване с единица

Стойноста на дадена променлива може да се променя и без оператора за присвояване. Така вместо

j = j+1;

можем да запишем:

++j; //стойноста на j нараства преди да се използва стойноста на j

или


j++; // стойноста на j нараства cлед като е използвана стойноста на j

Например в следния код:

int i, j, k, m, n;

i=2;


j=2;

k=3;


m=i++/k; //m получава стойност 0

n=++j/k; // n получава стойност 1

Както може да се очаква съществуват аналогични оператори за намаление на стойноста с единица:

--j;


j--;


База данных защищена авторским правом ©obuch.info 2016
отнасят до администрацията

    Начална страница