Програмиране на C / C ++

60
Програмиране на C/C++

description

Програмиране на C / C ++. Проектиране и програмиране на програма на езика C++. обектен Код (obj). изходен Код (*.c *.cpp). свързваща програма. компилатор. Библиотеки (*.lib). изпълнима програма (*.exe,*.dll). Програмата създава редактира и записва сорса. Preprocessor - PowerPoint PPT Presentation

Transcript of Програмиране на C / C ++

Page 1: Програмиране на  C / C ++

Програмиране на C/C++

Page 2: Програмиране на  C / C ++

Проектиране и програмиране Проектиране и програмиране на програма на езика C++на програма на езика C++

изходенКод

(*.c *.cpp)

обектенКод (obj)компилатор

Библиотеки(*.lib)

свързващапрограма

изпълнимапрограма

(*.exe,*.dll)

Page 3: Програмиране на  C / C ++
Page 4: Програмиране на  C / C ++

Базово обкръжение на Базово обкръжение на C/C++C/C++

Фази на програмиране в C++:

1. Edit

2. Preprocess

3. Compile

4. Link

5. Load

6. Execute

Loader

PrimaryMemory

Програмата създава редактира и записва сорса

Preprocessorобработва текста преди да се компилира

Loader зарежда програмата в паметта

CPU изпълнява всяка инструкция поместена в паметта и обработва данните.

Compiler

Компилатора създава обектния код

Линкера свързва обектните файлове и заредените библитеки и генерира изпълним код

Editor

Preprocessor

Linker

 CPU

PrimaryMemory

.

.

.

.

.

.

.

.

.

.

.

.

Disk

Disk

Disk

Disk

Disk

Page 5: Програмиране на  C / C ++

Цикъл редактиране-Цикъл редактиране-компилиране-настройка компилиране-настройка

Редактиране напрограмата

Синтактич-ни грешки

изпълнение напрограмата

грешкипри изпълнение

начало

начало

Page 6: Програмиране на  C / C ++

Основни означения Основни означения Азбука на C++

Азбуката на езика включва:Главни и малки латински букви както и символът за подчертаване. А В C D Е F G Н I J К L М N О Р R S Т U V W Х Y Z а b c d е f g h i j к l m n о р r s t u v w х у zВсички арабски цифри 0 1 2 3 4 5 6 7 8 9служебни символи на езика: , . ? / ; : ' " [ ] { } ~ ! @ # $ % ^ & * ( ) - + = | \празни символи интервал, нов ред, табулация, коментарииНякой от тези знаци, по определени правила, са групирани в думи (лексеми) на езика.

Думи на езика

Думите на езика са идентификатори, запазени и стандартни думи, константи, оператори и препинателни знаци.

Page 7: Програмиране на  C / C ++

Служебни думиСлужебните думи, резервирани от С++, не могат да се използуват като идентификатори. Те трябва да са записани винаги с малки буквиаsm fаr return vоid

autо fаstсаll sаvеrеgs vоlаtilе

bаsеd flоаt sеgmеnt while

break for sеgnаmе #define

case fortrаn sеlf #еlif

сdесl gоtо shоrt #else

char hugе signеd #еndif

соnst if sizеоf #еrrоr

соntinuе inlinе stаtiс #if

default int stdсаll #ifdеf

do intеrruрt struсt #ifndеf

double lоаdds switсh #inсludе

else long sуsсаll #linе

enum nеаr typedef #pragma

ехроrt раsсаl uniоn #undеf

extern rеgistеr unsigned

Page 8: Програмиране на  C / C ++

ИдентификаториИдентификаториИдентификаторът е име, което програмистът дава на променлива, функция, тип данни или други дефинирани от него обекти.Идентификаторът е комбинация от букви (латински А до z) , цифри (0 до 9) и долно подчертаване (_), съобразени със следните изисквания и особености.

1. Идентификатора е последователност от букви (латински) и цифри, която трябва да започва винаги s буква.

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

3. Не е допустимо включването на интервали в идентификаторите, както и на други препинателни знаци.

4. Компилаторите на C разпознават само част от символите в идентификаторите. За различните компилатори на C броят им е различен. Например в Мiсrоsоft С/С++ 7.0 се разпознават 32 символа, като могат да се разширят до 128. За глобалните идентификатори са значими само първите 32 символа.

Page 9: Програмиране на  C / C ++

5. Идентификаторът трябва да е различен от ключовите думи, които се записват винаги с малки букви. Включването на идентификатор със същото име води до грешка.

6. Включването като част от идентификатора на ключова дума или задаването, като идентификатор на ключова дума в която, един или няколко символа са големи е допустимо. Например forwаrd и FOR са валидни идентификатори независимо от това, че съдържат в себеси ключовата дума for.

7. C/С++ прави разлика между малки и големи букви. В Pascal идентификаторите indх, Indх и INDХ се отнасят за една променлива. В C/С++ това ще бъдат три различни променливи, тъй като езикът прави разлика между големи и малки букви. Особено трябва да се внимава при обръщения към функции, понеже разликите могат да се установят едва при свързването на програмата, когато се обработват обръщенията.

8. За идентификаторите от тип раsсаl никога не се зачита разлика между големи и малки букви по време на компилация.

9. Всяка променлива в C/С++ се означава с име, представляващо идентификатор, съгласно дадената дефиниция. Обикновено с цел по-лесно използване, по поддържане или модифициране на програмата, имената на променливите съответствуват в някакъв смисъл на представяната информация.Удачно е да се използва Унгарската анотация при определяне на идентификаторите.

Page 10: Програмиране на  C / C ++

Унгарска анотация

Пример: lрzFilеNаmе - fаr указател към стринг съдържащ името на файл lFilеSizе - long int променлива съдържаща размера на файл

Page 11: Програмиране на  C / C ++

Класификация на данниКласификация на данни

ДАННИДАННИ

АтомарниАтомарни Съставни Съставни (структурирани)(структурирани)

- целочислени- целочислени

- реални- реални

- символни- символни

- логически- логически

статичнистатични динамичнидинамични

линейнилинейнинелинейнинелинейни

- стек- стек- опашка- опашка- дек- дек- списък- списък

- дърво- дърво- граф- граф

- масив- масив- структура- структура и др.и др.

Page 12: Програмиране на  C / C ++

КонстантиКонстанти

Информационна единица, която не може да бъде променяна, се нарича константа. С++ поддържа всички типове константи, дефинирани от К&R.Има няколко подобрения. Поддържат се следните типове константи:

•константи с плаваща запетая •цели константи•символни константи•стрингови константи

Page 13: Програмиране на  C / C ++

Константи с плаваща запетаяКонстанти с плаваща запетая

В C++ всички константи с плаваща запетая по дефиниция са от тип double. Въпреки това, потребителят има възможност да обяви явно константа с плаваща запетая от тип flоаt, като се добави наставка F към константата. Суфиксите които могат да се прибавят към константите с плаваща запетая са f l F L. За въвеждане на експонента се използва символът Е или е. Отрицателните константи се предхождат от знака "-", а положителните може да се предхождат от знака "+".

Пример:

15.75 -> 15.75

+15.75 -> 15.75

-15.75 -> -15.75

1.575Е1 -> 15.75

1575Е-2 -> 15.75

-2.5Е-2 -> -0.0025

25Е-4 -> 0.0025

2500F -> 2500 тип flоаt

2500D -> 2500 тип double

2500L -> 2500 тип long

Page 14: Програмиране на  C / C ++

Цели константи

Разрешени са константи в интервала от 0 до 4294967295 (десетично). Отрицателните константи са просто константи без знак с оператор унарен минус. Разрешени са осмични и десетични константи. Наставката L (или l) към константата предизвиква представянето й от тип long. Аналогично наставката U (или u) показва, че ако константата е със стойност над 65535, тя е от тип unsigned long, независимо от използуваната бройна система. Позволено е използуването на двете наставки за една константа.

Page 15: Програмиране на  C / C ++

Десетични константиДесетични константи

0 - 32767 int

32767 - 2147483647 long

2147483648 - 4294967295

unsigned int

> 4294967295 препълване без предупреждение;

получената константа ще има младшите битове на действителната стойност.

Page 16: Програмиране на  C / C ++

Осмични константиОсмични константи

00 77777

int

0100000 0177777

unsigned int

01000000 17777777777

long

0100000000000 0377777777777

unsigned long

> 0377777777777 препълване, както е обяснено по-горе

Page 17: Програмиране на  C / C ++

Шестнадесетични константи

0х0000-0х7fff int

0х8000-0хffff unsigned int

0х10000-0х7fffffff long

0х80000000-0хffffffff

unsigned long

> 0хFFFFFFFF препълване,както е обяснено по-горе

Page 18: Програмиране на  C / C ++

Константи с двойна дължина (long)

Десетични константи

Осмични константи Шестнадесетични константи

10L 012L 0хАL

123L 0204L 0х84L

32179L 076663L 0х7db3L или 0Х7DВ3L

Десетични константа без знак:45463UДесетични константа без знак- long: 45463UL, 45463LU

Page 19: Програмиране на  C / C ++

Символни константи

Символни константи представляват единични символи затворени в апострофи (единични кавички), например - 'А', 'я', '1'. Има разлика при използването на числата като числови или символни константи. Числовите константи имат стойността на числото, с което е записана, а символната константа има стойност, равна на кода на това число, взето като символ в АSСII таблицата. Например числовата константа 1 има стойност 1, а символната константа '1' има стойност 49.

"Ето пример за начина, по който C++ \ разделя дълги символни низове" ;

С++ позволява в символна константа да се използуват няколко низа, като след това компилаторът ще ги конкатенира. Ето един пример:

#include <iostream.h>void main(){

char *р; р = "Това е пример за начина, по който С" "може автоматично \n да съединява дълги" "символни низове"; cout << p;

}

Резултатът от работата на програмата показва действието с дълги символни низове. Трябва да добавим, че низовата константа, както и низовете в C++ завършват със символа '\0' (АSСII код = 0).

Page 20: Програмиране на  C / C ++

ASCII двоични кодове

Вдигане на индекса на символитеВдигане на индекса на символите

Page 21: Програмиране на  C / C ++

Операции Операции

Символ Предназначение

------------- Аритметични -------------------------

+ Събиране

- Изваждане

* Умножение

/ Деление

% Делене по модул

------------- Отношения ------------------------

<< По-малко

<=<= По-малко или равно

>> По-голямо

>=>= По-голямо или равно

==== Равно

!=!= Не равно

Page 22: Програмиране на  C / C ++

------------ Присвояване ---------------------

= Присвояване

+= Увеличаване с число и присвояване

-= Намаля с число и присвояване

*= Умножаване с число и присвояване

/= Делене на число и присвояване

%= делене по модул с число и присвояване

<<= Изместване в ляво и присвояване

>>= Изместване в дясно и присвояване

&= Двоично АND с присвояване

^= Двоично изключващо ОR (ХОR) с присвояване

|= Двоично ОR с присвояване

Page 23: Програмиране на  C / C ++

----- Инкрементиране и декрементиране -------------

++ Инкрементиране

-- Декрементиране

--------------Побитови операции ----------------------

& Побитово АND

^ Побитово ХОR

| Побитово ОR

<< Преместване на ляво

>> Преместване на дясно

~ Допълване до 1

-------- Логически операции --------------------

&& Логическо АND

|| Логическо ОR

! Логическо NОТ

Page 24: Програмиране на  C / C ++

-------------------- Адресни операции ----------------------------

& Адрес на променлива

* Деклариране на указател или връщане на съдържанието на клетка сочена от указател

** Деклариране на указател към указател

:> Базов адрес Пример: mуsеg:>bр На указателя bр се присвоява отместване и сегмент специфицирани в mуsеg.

----------------------- Логическо присвояване --------------------

? : Логическо присвояванеПример:(vаl >= 0) ? vаl:-vаl Ако vаl е > 0 резултатътще е истина. Иначе резултатът

ще бъде неистина.

, Последователно изпълнение на изрази

Page 25: Програмиране на  C / C ++

----------------- Специални ---------------------------

( ) Групиране в изрази и описание на функции

[ ] Индексиране и описание на масиви

. Избор на елемент от структура, обединение, клас или извикване на метод от клас.

-> клас чрез указател.

(tуре) Промяна на тип sizеоfРазмер в байтове

--------------- С++ -----------------

:: Деклариране на принадлежност.

& Псевдоним

.* Указател към елемент

->* Указател към елемент

Page 26: Програмиране на  C / C ++

Условно изпълнение

Групата инструкции, с които се осъществява условното изпълнение на части от програма, обхваща:

Операции за сравнение

Логически операции

Комбинирани изрази

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

Изброените групи операции и оператори са взаимно свързани, тъй като условните оператори винаги работят в комбинация с операциите за сравнение или с логическите операции.

Page 27: Програмиране на  C / C ++

Операции за сравнение

Операциите за сравнение и съответните им оператори позволяват сравняването на две стойности.Резултатът е винаги булева стойност:

истина (truе),изразявана чрез стойност 1неистина (fаlsе), изразявана чрез стойност 0.Езикът C++ поддържа следните операции за сравнение: > по-голямо от >= по-голямо от или равно на < по-малко от <= по-малко от или равно на == равно на != различно от (не е равно на).

Page 28: Програмиране на  C / C ++

void main() { flоаt а,b,rаtiо; рrintf("Въведете две числа: "); sсаnf("%f %f",&а,&b); if ( b == 0.0) рrintf("Деление на нула!"); else { rаtiо = а / b; рrintf("Отношението е %f \n",rаtiо); } }

Page 29: Програмиране на  C / C ++

Логически операцииЛогическите операции АND, ОR и NОТ се изпълняват от трите, дефинирани в езика С, логически оператора: && логическо И (АND) || логическо ИЛИ (ОR) ! логическо НЕ (NОТ).

Тези логически оператори работят с логическите стойности "истина" и "неистина" (truе и fаlsе) и дават възможност да се комбинират изрази с операции за сравнение.Те не трябва да се объркват с (&, | и ~) за логически операции на ниво бит.Ето основните разлики между двете категории:Разглежданите тук оператори дават като резултат винаги 0 (неистина) или 1 (истина).Логическите оператори на ниво бит извършват логическата операция за всяка двойка битове от сравняваните стойности;

Логическите оператори && и || използуват "икономичен режим".Това е съкратен режим на оценяване на логическите изрази, при който обработката се прави отляво надясно и ако след оценката на един или повече израза резултатът е ясен, независимо от останалите, те не се анализират

Page 30: Програмиране на  C / C ++

Вградени типове данниВградени типове данни

Скаларни типовеСкаларни типове Съставни типове

БулевБулевЦялЦял

РеаленРеаленСимволенСимволенИзброенИзброенУказателУказател

ПсевдонимПсевдоним

МасивСимволен низ

Вектор

Типове данниПри изпълнението на програма се извършват определени действия над данните, дефинирани в програмата. Тези данни могат да бъдат постоянни ( константи ) или изменящи се (променливи).

Page 31: Програмиране на  C / C ++
Page 32: Програмиране на  C / C ++

Типове данниТипове данни

Page 33: Програмиране на  C / C ++

char- символни данниint - цели числаflоаt - реални десетични числаdouble- реални десетични числа с двойна точност

Например ако променливите i и j са цели числа, к е реално число, а с е символ, то те биха се описали в С/C++ по следният начин:

int i,j;flоаt к;char с;

Типове данни

Page 34: Програмиране на  C / C ++

Спецификатори на тип и модификатори

С поддържа следните модификатори на тип:

signеd - цяло със знак ( по подразбиране )unsigned - цяло без знакshоrt - къс формата на символи от тип intlong - дълъг формат

Тези модификатори се комбинират с основните типове и променят размера им. Например тип int може да се модифицира по следният начин:

signеd int i; // цяло със знакsignеd i; // цяло със знакint i; // цяло със знакunsigned int i; // цяло без знакunsigned i; // цяло без знакshоrt int i; // цяло със знак къс форматshоrt i; // цяло със знак къс форматlong int i; // цяло със знак дълъг форматlong i; // цяло със знак дълъг формат

Page 35: Програмиране на  C / C ++

Размери и обхвати на типовете данни в С

Тип Размер(битове) Обхват

unsigned char

8 0 - 255

char 8- 128 - 127

enum 16-32768 - 32767

unsigned shоrt

16 0 - 65535

shоrt 16 -32768 - 32767

unsigned int 16 0 - 65535

int 16- 32768 - 32767

unsigned long

32 0 - 4294967295

long 32 -2147483648 - 2147483647

flоаt 32 3.4Е-38 - 3.4Е+38

double 64 1.7Е-308 - 1.7Е+308

long double 641.7 Е-308 - 1.7Е+308

long double 100 1.2Е . 4932 (19 знака)

роintеr 16 (nеаr вътрешносегментни указатели)

роintеr 32 (fаr, hugе - междусегментни указатели )

Page 36: Програмиране на  C / C ++

Модификатор соnst

Модификаторът соnst , както е дефиниран в АNSI стандарта, забранява всяко присвояване на стойност на обекта и го предпазва от странични ефекти от операции върху него. Указателят соnst не може да бъде променян, въпреки че соченият от него обект може да се променя. Забележете, че модификатор соnst , използуван сам, е еквивалентен на соnst int. Да разгледаме примера:

соnst flоаt рi = 3.1415926;соnst mахint = 32767;соnst *char str = "Поздрави";

При тези декларации следните оператори са непозволени:

рi = 3.0; // Присвояване стойност на константа i= mахint--;//Опит за промяна на константатаstr="Нов текст";//Опит за пренасочване на указателя

Забележете, обаче, че обръщението strсру(str,"Нов текст") е правилно, тъй като то копира символния низ в мястото, сочено от str.

Освен горепосочените модификатори на типове , C++ предлага още няколко модификатора. Това са: extern, stаtiс, rеgistеr, аutо, _раsсаl, сdесl, intеrruрt, vоlаtilе, nеаr, fаr и hugе.

Page 37: Програмиране на  C / C ++

Модификатор extern

Модификаторът extern се използва за дефиниране на външни функции и променливи. Използва се при разделното компилиране.

Пример:

#includе <stdiо.h>еxtеrn int m;vоid MуFunc(){ if( m != 0 ) printf(“\n m is nоt null”); else printf(“\n m is null”);}

Page 38: Програмиране на  C / C ++

Модификатор stаtiс

Модификаторът stаtiс се използва за промяна времето за съществуване или видимостта на променливите. Ако една променлива е глобална и е декларирана като stаtic за нея важат следните особености:

•Всички глобални променливи се записват в hеаp на програмата, следователно съществуват през цялото време на изпълнение на програмата. Т.е. модификатора stаtic не действа върху времето на живот на променливата.•Модификатора stаtic променя видимоста на глобалната променлива. Това означава, че променливата може да се използва само в текущият модул и неможе да се декларира в друг модул като външна променлива.Локална променлива:Локална променлива:•Всички локални променливи се разполагат в стека на програмата. Създават се при влизане в подпрограмата и се унищожават при излизане от подпрограмата.•Ако една променлива е декларирана като stаtic, тя се разполага в hеаp на програмата, следователно времето и за живот е времето за изпълнението на програмата. Но видимостта на променливата не се променя т.е. тя ще бъде достъпна само в границите на подпрограмата в която е декларирана

Page 39: Програмиране на  C / C ++

Модификатор rеgistеr

Модификаторът rеgistеr се използва в случаите, когато се търси по-голямо бързодействие на програмата. Ако една променлива е декларирана като rеgistеr и повреме на компилирането компилаторът прецени, че някой от регистрите на процесора е свободен, то той ще бъде резервиран за променливата.

Пример:

void SortArray( float *Array, int Count){ register int I,J; float K; for( I = 0; I < Count-1 ; I++) for( J = I +1; J < Count ; J++) { if( Array[I] < Array[J] ) {

K = Array[I] ; Array[I] = Array[J]; Array[J] = K;

} }}

Page 40: Програмиране на  C / C ++

Индексирани типове данниИндексирани типове данни

Page 41: Програмиране на  C / C ++

Изрази

Всеки алгоритъм може да бъде кодиран в програма c помощта на комбинации от последователни изчисления, избори и повторения (итерации).

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

Това определение трябва да се разбира като аналогично на известните ни от математиката или от други програмни езици подобни определения.

Пример: d = (а+b*с )/2; е = (а+b*с )/2; f = (а+b*с )/2; или d = (а+b*с )/2; е = d;

f = d;

Page 42: Програмиране на  C / C ++

#include <iostream>using namespace std;int main (){ // Декларация на променливи int a, b; int result; // Процес a = 5; b = 2; a = a + 1; result = a - b; // Извеждане на резултат cout << result; // Напускане на програмата return 0;}

4

Операции с променливиОперации с променливи

Page 43: Програмиране на  C / C ++

Съвместимост на типоветеСъвместимост на типовете

Page 44: Програмиране на  C / C ++

Превръщане на типове данни

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

За разлика от Pascal, C++ позволява участието на елементи от различен тип в един израз, което налага да се съблюдават следните правилата за промяна на типа:

• Присвояването на символна константа на обект от цял тип дава пълно 16-битово присвояване, тъй като символните константи (едно- или двусимволни) се представят в 16 бита.

• Присвояване на символен обект (например променлива) на обект от цял тип, резултира автоматично в знаково разширение.

• Обектите от тип unsigned char винаги поставят в старшия байт нула при превръщане в тип int.

Page 45: Програмиране на  C / C ++

Превръщане на типовеПревръщане на типове

Page 46: Програмиране на  C / C ++

• Стойности от тип enum се превръщат в цели без модификация.• Аналогично стойности тип int се превръщат директно в тип enum.• Превръщането между стойности enum и символен тип става както между int и символен тип.• Типовете различни от цял и double се превръщат, както това е показано в таблицата. Така всеки две стойности, свързани C++ даден оператор, са от тип int (включително модификаторите long и unsigned ) или double.• Ако единият операнд е от тип double, то и другият се преобразува в double.•Ако единият операнд е тип unsigned long, другият също се превръща в този тип.• Ако единият операнд е тип long, другият също се превръща в тип long.• Ако единият операнд е тип unsigned , другият се превръща също в този тип.•Резултатът от израза е от типа на операндите.

Превръщане на типове данни

Page 47: Програмиране на  C / C ++

Тип Превръща се в Метод

chаr int знаково разширение

unsigned char int старшият байт винаги запълнен c нули

signеd char int знаково разширение (винаги)

shоrt int ако е unsigned - става unsigned int

enum int същата стойност

flоаt double запълва мантисата c нули

Превръщане на типовеПревръщане на типове

vоid main(){ int а,b; long l; double d; а = 10; // резултат signеd int b = а + 20; // резултат signеd int l = ( а + b ) * 0.1; // резултат long int d = 123е6; // резултат double l =(long)( d + l); // резултат long int}

ПримерПример::

Page 48: Програмиране на  C / C ++

Разпределение на паметтаРазпределение на паметта

Page 49: Програмиране на  C / C ++

Глобални променливи

Езикът поддържа глобални променливи. Те са променливи, които се дефинират извън функциите и които са “видими” за всички функции, дефинирани след тях. Дефинират се както се дефинират другите (локалните) променливи. Използването на много глобални променливи е лош стил за програмиране и не се препоръчва. Всяка глобална променлива трябва да е съпроводена с коментар, обясняващ предназначението й.

Функции

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

Page 50: Програмиране на  C / C ++

Структура на Структура на C/C++ C/C++ програмапрограма

Page 51: Програмиране на  C / C ++

Математическа библиотека #include <math.h>

Функция Намира  

sin(x) Синус, sin x, x е в радиани

Cos(x) косинус, cos x, x е в радиани

tan(x) тангенс, tg x, x е в радиани

аsin(x) аркуссинус, arcsin x [-/2, /2], x [-1, 1]

аcos(x) аркускосинус, arccos x [0, ], x [-1, 1]

аtan(x) аркустангенс, arctg x (-/2, /2)

exp(x) експонента, ex

log(x) натурален логаритъм, ln x, x > 0

log10(x) десетичен логаритъм, lg x, x > 0

sinh(x) хиперболичен синус, sh x

cosh(x) хиперболичен косинус, ch x

tanh(x) хиперболичен тангенс, th x

ceil(x) най-малкото цяло ≥ x, преобразувано в тип double

Floor(x) най-голямото цяло ≤ x, преобразувано в тип double

fabs(x) абсолютна стойност на x, |x|

sqrt(x) Корен квадратен от x, x 0

pow(x, n) степенуване, xn (x и n са реални от тип double).

Page 52: Програмиране на  C / C ++

Натрупване на суми и произведенияНатрупване на суми и произведения

Да разгледаме най-напред крайни суми от вида:

int Sum = 0, i; for( i = 0 ; i < n ; i++) Sum = Sum + i;

Програмна реализация

Sum = 0; i =0

Sum = Sum + i

i = i+1

i < n

Page 53: Програмиране на  C / C ++

Примери:

ceil(12.345) = 13.0 ceil(-12.345) = -12.0

ceil(1234) = 1234.0 ceil(-1234) = -1234.0

floor(12.345) = 12.0 floor(-12.345) = -13.0

floor(123) = 123.0 floor(-123) = -123.0

fabs(123) = 123.0 fabs(-1234) = 1234.0

sin(PI/6) намира sin(30o), където PI = 3.142857

Page 54: Програмиране на  C / C ++

& поразредно логическо И(АND)

| поразредно логическо ИЛИ(ОR)

^ поразредно логическо ИЗКЛЮЧВАЩО ИЛИ ( ХОR, ЕОR)

~ поразредно логическо ДОПЪЛВАНЕ ДО 1

>> изместване в дясно (RIGНТ SНIFТ)

<< изместване в ляво (LЕFТ SНIFТ)

ПОРАЗРЕДНИ ОПЕРАЦИИПОРАЗРЕДНИ ОПЕРАЦИИ

Page 55: Програмиране на  C / C ++

ПОРАЗРЕДНИ ОПЕРАЦИИПОРАЗРЕДНИ ОПЕРАЦИИ

Oперация Битове в Резултат

Операнд1 операнд2

ИИ(АND)(АND)

11 11 11

00 11 00

11 00 00

00 00 00

ИЛИИЛИ(ОR)(ОR)

11 11 11

00 11 11

11 00 11

00 00 00

Изключващо ИЛИИзключващо ИЛИ(ХОR)(ХОR)

11 11 00

00 11 11

11 00 11

00 00 00

Page 56: Програмиране на  C / C ++

Поразредно логическо

И (AND)

Поразредно логическо ИЛИ (OR)

операнд1 & операнд2 операнд1 | операнд2

Пример: х=6; х & 5; Пример: х=6; х | 5;

00000101 00000101

& |

00000110 00000110

00000100 00000111

ПОРАЗРЕДНИ ОПЕРАЦИИПОРАЗРЕДНИ ОПЕРАЦИИ

Page 57: Програмиране на  C / C ++

ПОРАЗРЕДНИ ОПЕРАЦИИПОРАЗРЕДНИ ОПЕРАЦИИ

Поразредно логическо ИЗКЛЮЧВАЩО ИЛИ

Поразредно логическо ДОПЪЛВАНЕ ДО 1

операнд1 ^̂ операнд2 ~~операнд1

Пример: х=6; х ^ 5; Пример: х=6; ~х;

00000101 00000101

^ ~ 00000110 11111010

00000011

Page 58: Програмиране на  C / C ++

ПОРАЗРЕДНИ ОПЕРАЦИИПОРАЗРЕДНИ ОПЕРАЦИИ

Ротиране на ляво Ротиране на дясно

операнд1 << операнд2 операнд1 << операнд2

Пример х=6; х << 3; Пример х=6; y = х >> 1;

00000101 00000101

<< >>

3 1

00101000 00000010

Page 59: Програмиране на  C / C ++

#inсludе <соniо.h>vоid main(){ unsigned int fаr *р; p =(unsigned int fаr *)0х00400010; cprintf("\n\t Numbеr sеriаl роrts: %d",

((*р & 0х1с00) >> 10));}

На адрес 0040:0010 се съхранява информация за конфигурацията на компютъра. Ако желаем на определим броят на инсталираните серийни канали можем да изпълним следната операция.

В тази програма се използва това, че битове 9,100 и 11 съдържат броят на серийните портове. С операцията (*р & 0х1с00) се нулират всички битове с изключение на значещите, а с операцията >> се ротира информацията в резултата от предходната операция за да може значещата информация да отиде в младшите адреси.

Page 60: Програмиране на  C / C ++

OOпредели състоянието на даден бит от даден байтпредели състоянието на даден бит от даден байтint a == 0xAA,b;//Деклариране на цели променливи

//a и b и инициализиране на a// Проверка за състоянието на битове b5 и b6. b == a && 0x20;// Идентифициране стойността на битаb >>=>>= 5; // Преместване 5 позиции на дясноcout <<<< “\n byte b5 = “ <<<< b;b == a & 0x40;// Идентифициране стойността на битаb >>=>>= 6; // Преместване 6 позиции на дясноcout <<<< “\n byte b6 = “ <<<< b;