Полезно за вас: Речник | Игри | Новини | Фирми | Рецепти | Обяви
Начало на реферати

Пищов по C


Информационни технологии | 2009-12-04 | 48 сваляния

Изрази

Видове операнди:

-константи: участват с ст-ст, която зависи от начина на записване. Конст. низове представяват адрес на 1-я байт от паметта където се съдържа низ

-имена: имената на скал.данни в израза представят текущата ст-ст на данната; имената на струк. и обедине-нията представят самите тях; имената на ф-ции по същество са адрес на вх. точка на ф-цията;

-обръщение към ф-ции: участват с върнатата от ф-ята ст-ст

-междинни резултати: операнди, които се получават при изпълнение на операциите

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

- всеки Float се преобразува към double;

- ако единия операнд е Double, другият задължително се преобразува към такъв;

- всеки Char и Short се преобразува в Int, няма данни по-къси от Int;

-беззнаковите Char и Short се преобразуват към безнаков Int;

- Ако единия операнд е Long, другият също се преобразува към такъв;

- Ако единия операнд е беззнаков Long, другият също се преобразува към такъв

- Ако единия операнд е беззнаков Int, другият също се преобразува към такъв

!!! Подредени правила, изброяват се точно в този ред. Това не е множество от правила. Тези правила се допълват от правилото за Min представимост. Трябва да се вземе минималния обем памет.

Приоритетна таблица на операциите. Стрелката показва в какъв ред е приоритета.

  1. ( ) . -> [] ---> свръхприоритетни, те са операндно генериращи операции.

  2. + - ~ ! * & <--- Едноместни операции

++ -- size of преобразуване на тип

  1. * / % ---> мултипликативни операциите

  2. + - ---> адитивни

  3. << >> ---> изместване

  4. < <= > >= --->релации

  5. == != ---> сравнение

  6. & ---> побитово И

  7. ^ ---> сума по mod2 (побитово)

  8. | ---> побитово ИЛИ

  9. && ---> логическо и

  10. || ---> логическо или

  11. !: <--- условна операция

  12. = *= /= %= += -= <<= >>= &= |= ^= <--- Присвоявания

  13. , ---> послед. изчисления


Преобразуване на указатели

Възможен е преход от цели данни към указатели и обратно. Ако цяла данна трябва да се превърне в указател, най-напред се постига необходимата дъл-жина, след което получената ст-ст се тълкува като беззнакова и после като указател. Прехода от указател към цяла ст-ст се извършва по обратния начин. Указателя се тълкува като беззнакова ст-ст, която се отсича на необходимата дължина.



Изпълнение на операциите

а) едноместни операции

+- знаци за цели и плаващи данни; ОАП

~ - побитово НЕ. цели данни. ОАП

! - логическо НЕ. Анализира се раз-рядната решетка на операнда. Ако тя се състои само от нули, то стойността на операнда е лъжа. Ако ли не е исти-на. След което операнда се инвертира.

* - косвено адресиране

& - Получаване на адрес операнда трябва да бъде с разпределена памет. Резултатът е адреса на операнда.

++ -- - Автоинкремента и автодекре-мента. цели, плаващи данни и указа-тели. ОАП. Могат да се запишат пре-фиксно и суфиксно. При префиксно записване, се прочита операнда и неговата ст-ст се увеличава или нама-ля с 1. Паралелно с това се променя и паметта свързана с операнда. Операн-да трябва да е локатор или L-value израз -> ако определя някаква памет. При суфиксно записване прочита се операнда и това е резултата от опера-цията. Паралелно и независимо се променя и паметта свързана с него с 1.

Int i, j,k ,m; i=10; j=5;

k=++i; // k=11, i=11

m=j++; // m=5, j=6

size of (<операнд>) - Операндът може да е данна или типово име. Резултатът от операцията е брой байтове необхо-дими за съхраняване на данната или низа. Ако се използва име на масив, не се получава паметта на указателя, а се получава обема памет за самия масив. Int a[5] size of(a)->10

типово преобразуване (<типово име>)<операнд> - Типът на операнда се преобразува насилствено към посоченото типово име.

б) мултипликативни операции - * ,/ -За цели и плаващи данни, % само за целочислени данни.% - остатъкът от делението

в) адитивни операции - +, - , цели и плаващи данни и указатели. Указател указ. е реализуема операция, ако двата указателя са насочени към един и същ масив. Изваждат се двата указа-теля, резултата се дели на дължината на данните сочени от указателя и това е резултата от операцията. Дава разлика като брой елементи.

г) изместване << >> - Двата операнда трябва да са целочислени, измества се първия, а втория определя на колко разряда. При изместване на дясно, ако местения операнд е знаков, размно-жава се знака т.е. прави се аритметич-но изместване, а ако е беззнаков се прави логическо изместване на разрядната решетка и влизат нули.

д) Релации цели и плаващи данни и иказатели.ОАП. Указателите могат да се сравняват и за <, > само ако са насочени към един и същи масив;сравняват се за == и != винаги, но не по адрес, а по разредност на решетката. Резултатът е 0, ако релацията не е изпълнена и 1, ако е изпълнена.

А

1<2<3 дава 1, а 3>2>1 дава 0

е)побитови операции- само за цели данни;ОАП; 0=False,1=True; сравняват се разредите

ж) Логически операции &&, ||. Цели,плаващи данни и указатели. Оценяват се по своите разрядни решетки, ако е 0 F, не нулева-T

з)?: Условна операцията

<израз1> ? <израз2> : <израз3> - Изчислява се израз1 и ако той не е равен на 0, се преминава към оценява-не на израз2, което е резултат от опе-ранда. Ако резултата от израз1 е равен на 0 се оценява израз3 и това е резул-татът от операцията. Почти винаги операцията ?: е скобирана.

и) Присвояване налице са множество присвоявания

Присвояването е операция в С, а не оператор.

(1) <израз1>=<израз1>R<израз2> // R знак на операцията

(2) <израз1>R=<израз2> // (1) и (2) не са еквивалентни. Еквивалентни са само, ако (1) няма странични ефекти.

й)последователно изчисление - ,

<израз1>,<израз1>...<изразN>

, - разделител. Предизвиква последо-вателно изчисление на изброените из-рази. Резултатът от цялостния израз е ст-стта на последния израз (N-тия). I=0, j=5, k=0, l=3; Ст-стта на целия израз е 3. Среща се при оператор FOR.


Функции

Дефиниране на функции поддържат се две форми за дефинир-ане на функции

(1) Класическа форма

[<клас памет>][<типов спецификато>] <декларатор>(<име на формален параметър>,,,|void)

[<деклариране на параметри>]

{<тяло>}

(2) Прототипна форма

[<клас памет>][<типов спецификато>] <декларатор>(< деклариране на параметри >,,,|void)

{<тяло>}

В (1) се изброяват параметри като имена или void, ако няма. Формалните параметри се декларират отделно под заглавието.

Клас памет най-често е празен, това се утъждествява с extern т.е. ф-ята е с глобален обсег на действие. Може да се запише static. Статичните функции се защитават в текъщия файл и не могат да станат известни в другите файли чрез декларации.

Типов спецификатор Int по default. Определя типа на връщаната стойност или типа на указателя, ако ф-ята връ-ща указател. Ф-циите могат да връщат всякакъв тип данни с изключение на ф-ции и масиви, но могат да връщат указател към функции или масиви.

Декларатор Определя името на функцията. Може да се модифицира името със *. Върнатата стойност се променя като указател.

Списък на формалните параметри Могат да бъдат всякакви данни с из-ключение на функции.Ако формалния параметър трябва да бъде ф-ция, той трябва да се декларира като указател към такава. При заместване на име на функция, формал. параметър указател автоматично ще се инициализира с входната точка на функцията. За С особеното е, че тази функция трябва да се вика чрез указател, а за С++ не е необходимо.

При класич. форма, декларацията се прави вън от тялото.Всяка декларация не трябва да включва клас памет и инициализация. Класът памет е int по default. Тялото винаги се оформя като блок, дори да се състои от един един-ствен оператор. С допуска създаване на функции с променлив брой параме-три. При записване на заглавието след последния формален параметър тряб-ва да се запише ' ,... '.Изброените фор-мални параметри представляват задъ-лжителния брой параметри, но извик-ването може да се направи с по-голям брой аргументи func(x,y,...). Даже е разрешено да се запише само '...' и това означава, че може да се извиква с нула и повече аргументи.

Активиране на функции

<израз1>([<израз2>],,,)

Израз1 трябва да се изчислява до ст-ст с характер на входна стойност във функция и определя ф-ята как ще бъде извиквана за изпълнение

(x>0:f1:f2)(...) // Частен случай: име

Списъкът изрази в извикването пред-ставлява аргументите за текъщата ак-тивация. Изразите магат да се изчи-сляват за текущата активация. Изрази-те могат да се изчисляват за произвол-ни данни с изключение на функции и масиви. Масив може да се използва, но той се тълкува като указател. Име на функция също може да се замести, но тя се тълкува като указател. Извик-ването предизвиква три проблема:

- съответствието формален параметър аргумент се извършва по позиция То е позиционно! Самото заместване на данните е винаги по стойност! Няма заместване по указател!

Ако искаме да предаваме по адрес правим формален параметър, указате-ли, работим с указатели, а отвън пода-ваме адрес. За да е възможна работата с променлив брой аргументи, те се обработват от дясно на ляво и така се заместват в стек. По този начин задъл-жително декларирания брой формал-ни параметри винаги ще намери точно съответствие с някакви аргументи. Тази конвенция за заместване носи името С-конвенция.


Странични ефекти

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


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

При присвояване определящ е типа на получаващата данна. То се извършва по следните правила:

-ако получаващата страна е цяла и по-дълга от присвояваната ст-ст най-напред се постига необходимата дължи-на като при беззнакови данни се извършва разширяване с водещи нули, а при знакови се размножава най-старшия бит;

- ако получаващата страна е беззнако-ва най-напред се постига необходима дължина за присвояваната ст-ст по правило 1 и 3, след което получена-та ст-ст се разглежда като безнакова и се извършва присвояване;

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

-Ако получаващата страна е плаваща трябва да се преобразува към цял тип: double-float-long-целиви тип;отсичат се дробните разреди

-ако трябва да се премине от цял към плаващи:целочислен-long-float-double;

Оператори.

Всички оператори завършват с ; което е част от него.Вс. оп-ор може да бъде етикиран.В качеството на етикети се изп. имена. За вс. ф-я етикетите обра-зуват самостоят. група имена;не могат да се направят видими извън тялото на ф-ята;счита се че деф-ята на етике-тите е локализирана в нач. на тялото.

Безусловни оператори

А) Оп-тор израз-замества оп-ра за присвояване и оп-ра за процедура на езика Паскал. Като израз може да се счита и викане на ф-я,която не връща ст-ст. Ако изразът наистина изчислява някаква ст-т,тя просто се пренебрегва.

Б) Оп-ор за преход

goto <етикет>;

В)return[<израз>]; - изп. се за изход от ф-я. Ако ф-ята връща ст-т,трябва да има израз,т.к. именно неговата ст-т е връщаната от ф-ята ст-т.Оп-рът не е задължителен във ф-ии,които не връщат ст-т,ако логич. и физ. край на ф-ята съвпадат. Ако изчисл. от израза ст-т типово се различ. от заявения тип на връщаната ст-т, се изв. автомат. преобраз. към този тип.

Г)Празен Оп-ор- ; - може да се изп. ако трябва да се прави нещо,напр. забавяне изпълн. на тялото на цикъл.

Д) Оп-ри Блок. Този оп-ор позволява произволна група опер-ри да се превърне в 1 единствен оп-ор. В нач. на блока могат да се деф./ декл. имена или да се декл. типове,данни,ф-ии.(Влагане на ф-ии не е разрешено).Тези имена ще имат сфера на действие до }.

Условни Оператори

А) Оператор if

If(<израз>)<оп-ор> [<оп-ор>]. Няма ограничение по отнош. на оп-рите,к участват в едната или другата клауза. Може да са др оп-ри if и в този случай те се тълкуват,както се тълкуват и вложени if в Паскал.Всеки else отговаря на най-близкото в ляво необвързано then(then не се пише но съществува)

Б)Превключвател

Селекторният иазраз трябва да се изчислява до ст-т,к е целочисл. Или char. Типът на израза трябва да е съвместим с използваните в case конст изрази. Изчислява се селект израз,търси се case-вариант,чийто конст израз съвпада със ст-та на селектора. Ако не се намери,но е наличен вариантът default той ще бъде вх точка.Default трябва да бъде 1 единствен.Ако не може да реализира избор,тялото се прескача. След като се реализира вход в тялото на switch,то се изп последователно от нач към края като срещнатите case или default се игнорират.Default може да се постави,където искаме.

Оп-ор break; - изп се в превкл и цикли.Предизвиква незабавно приключване на тялото на switch.С него може да се симулира изпълн на switch като case оп-ор в Паскал.

Оператори за Цикли

А) оп-ор while

While(<израз>)<оп-ор> Изпълнява се като в Паскал,но не се използва do!

Б) do while

do<оп-ор> while(<израз>) Условието за прекратяване е инверсно

В) for

for([<израз1>];[<израз2>];[<израз3>]) <оп-ор>

Пищов по C

Добави своя коментар:



Тагове от реферата: , , , , , ,

Изтегли в DOC | PDF | ZIP

Подобни материали


Основни характеристики на агентите Информационни технологии | 2010-08-06 | 46 прочитания
Входно изходна система. Канална организация на ВИ операции Информационни технологии | 2010-08-06 | 70 прочитания
ПРЕДМЕТ И ОБХВАТ НА ИТ Информационни технологии | 2010-08-06 | 53 прочитания
Типове данни,променливи и константи Информационни технологии | 2010-08-06 | 111 прочитания
КИТ - ОСНОВА НА ИНФОРМАЦИОННОТО ОБЩЕСТВО Информационни технологии | 2010-08-06 | 51 прочитания
Създаване и използване на заявки Информационни технологии | 2010-08-06 | 42 прочитания
Мрежи, интернет, чат клиенти и файлови трансфери Информационни технологии | 2010-08-06 | 42 прочитания
Проверка за принадлежност към списък Информационни технологии | 2010-08-06 | 33 прочитания
Математически основи на организация та на компютъра Информационни технологии | 2010-08-06 | 40 прочитания
Алгоритми и средства за описването им Информационни технологии | 2010-08-06 | 81 прочитания