1 / 60

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

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

robert
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Програмата създава редактира и записва сорса Preprocessor обработва текста преди да се компилира Компилатора създава обектния код Compiler Линкера свързва обектните файлове и заредените библитеки и генерира изпълним код Primary Memory Loader Loader зарежда програмата в паметта Primary Memory CPU изпълнява всяка инструкция поместена в паметта и обработва данните. Preprocessor Linker Editor Disk Disk Disk Disk Disk CPU . . . . . . . . . . . . Базово обкръжение на C/C++ • Фази на програмиране в C++: • Edit • Preprocess • Compile • Link • Load • Execute

  4. Цикъл редактиране-компилиране-настройка начало Редактиранена програмата Синтактич-ни грешки изпълнение на програмата грешки при изпълнение начало

  5. Основни означения • Азбука на 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 • служебни символи на езика: • , . ? / ; : ' " [ ] { } ~ ! @ # $ % ^ & * ( ) - + = | \ • празни символи • интервал, нов ред, табулация, коментарии • Някой от тези знаци, по определени правила, са групирани в думи (лексеми) на езика. • Думи на езика • Думите на езика са идентификатори, запазени и стандартни думи, константи, оператори и препинателни знаци.

  6. Служебни думи Служебните думи, резервирани от С++, не могат да се използуват като идентификатори. Те трябва да са записани винаги с малки букви

  7. Идентификатори Идентификаторът е име, което програмистът дава на променлива, функция, тип данни или други дефинирани от него обекти. Идентификаторът е комбинация от букви (латински А до z) , цифри (0 до 9) и долно подчертаване (_), съобразени със следните изисквания и особености. • Идентификатора е последователност от букви (латински) и цифри, която трябва да започва винаги s буква. • Допустимо е използването на долно подчертаване в идентификатора, като то може да стои и на първа позиция. • Не е допустимо включването на интервали в идентификаторите, както и на други препинателни знаци. • Компилаторите на C разпознават само част от символите в идентификаторите. За различните компилатори на C броят им е различен. Например в Мiсrоsоft С/С++ 7.0 се разпознават 32 символа, като могат да се разширят до 128. За глобалните идентификатори са значими само първите 32 символа.

  8. 5. Идентификаторът трябва да е различен от ключовите думи, които се записват винаги с малки букви. Включването на идентификатор със същото име води до грешка. • Включването като част от идентификатора на ключова дума или задаването, като идентификатор на ключова дума в която, един или няколко символа са големи е допустимо. Например forwаrd и FOR са валидни идентификатори независимо от това, че съдържат в себеси ключовата дума for. • C/С++ прави разлика между малки и големи букви. В Pascal идентификаторите indх, Indх и INDХ се отнасят за една променлива. В C/С++ това ще бъдат три различни променливи, тъй като езикът прави разлика между големи и малки букви. Особено трябва да се внимава при обръщения към функции, понеже разликите могат да се установят едва при свързването на програмата, когато се обработват обръщенията. • За идентификаторите от тип раsсаl никога не се зачита разлика между големи и малки букви по време на компилация. • Всяка променлива в C/С++ се означава с име, представляващо идентификатор, съгласно дадената дефиниция. Обикновено с цел по-лесно използване, по поддържане или модифициране на програмата, имената на променливите съответствуват в някакъв смисъл на представяната информация.Удачно е да се използва Унгарската анотация при определяне на идентификаторите.

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

  10. Класификация на данни ДАННИ Съставни (структурирани) Атомарни - целочислени - реални - символни - логически статични динамични нелинейни линейни - масив - структура и др. - стек - опашка - дек - списък - дърво - граф

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

  12. Константи с плаваща запетая В 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

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

  14. Константи с двойна дължина(long) Десетични константа без знак:45463U Десетични константа без знак- long: 45463UL, 45463LU

  15. Символни константи Символни константи представляват единични символи затворени в апострофи (единични кавички), например - 'А', 'я', '1'.Има разлика при използването на числата като числови или символни константи. Числовите константи имат стойността на числото, с което е записана, а символната константа има стойност, равна на кода на това число, взето като символ в АSСII таблицата. Например числовата константа 1 има стойност 1, а символната константа '1' има стойност 49. "Ето пример за начина, по който C++ \ разделя дълги символни низове" ; С++ позволява в символна константа да се използуват няколко низа, като след това компилаторът ще ги конкатенира. Ето един пример: #include <iostream.h> void main() { char *р; р = "Това е пример за начина, по който С" "може автоматично \n да съединява дълги" "символни низове"; cout << p; } Резултатът от работата на програмата показва действието с дълги символни низове.Трябва да добавим, че низовата константа, както и низовете в C++ завършват със символа '\0' (АSСII код = 0).

  16. ASCII двоични кодове Вдигане на индекса на символите

  17. Операции

  18. Условно изпълнение • Групата инструкции, с които се осъществява условното изпълнение на части от програма, обхваща: • Операции за сравнение • Логически операции • Комбинирани изрази • Условни оператори • Изброените групи операции и оператори са взаимно свързани, тъй като условните оператори винаги работят в комбинация с операциите за сравнение или с логическите операции.

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

  20. voidmain() { 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о); } }

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

  22. Типове данни При изпълнението на програма се извършват определени действия над данните, дефинирани в програмата. Тези данни могат да бъдат постоянни ( константи ) или изменящи се (променливи). Вградени типове данни Скаларни типове Съставни типове Булев Цял Реален Символен Изброен Указател Псевдоним Масив Символен низ Вектор

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

  24. Типове данни char- символни данни int - цели числа flоаt - реални десетични числа double- реални десетични числа с двойна точност Например ако променливите i и j са цели числа, к е реално число, а с е символ, то те биха се описали в С/C++ по следният начин: int i,j; flоаt к; char с;

  25. Спецификатори на тип и модификатори С поддържа следните модификатори на тип: signеd - цяло със знак ( по подразбиране ) unsigned - цяло без знак shоrt - къс формата на символи от тип int long - дълъг формат Тези модификатори се комбинират с основните типове и променят размера им. Например тип int може да се модифицира по следният начин: signеdint i; // цяло със знак signеd i; // цяло със знак int i; // цяло със знак unsigned int i; // цяло без знак unsigned i; // цяло без знак shоrt int i; // цяло със знак къс формат shоrt i; // цяло със знак къс формат longint i; // цяло със знак дълъг формат long i; // цяло със знак дълъг формат

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

  27. Модификатор со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е.

  28. Модификатор extern Модификаторът extern се използва за дефиниране на външни функции и променливи. Използва се при разделното компилиране. Пример: #includе <stdiо.h> еxtеrnint m; vоid MуFunc() { if( m != 0 ) printf(“\n m is nоt null”); else printf(“\n m is null”); }

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

  30. Модификатор rеgistеr Модификаторът rеgistеr се използва в случаите, когато се търси по-голямо бързодействие на програмата. Ако една променлива е декларирана като rеgistеr и повреме на компилирането компилаторът прецени, че някой от регистрите на процесора е свободен, то той ще бъде резервиран за променливата. Пример: void SortArray( float *Array, int Count) { registerint 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; } } }

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

  32. Изрази Всеки алгоритъм може да бъде кодиран в програма c помощта на комбинации от последователни изчисления, избори и повторения (итерации). Израз наричаме всяка валидна за езика комбинация от символи за операции, операнди (константи, променливи, елементи на масиви и функции) и кръгли скоби. Това определение трябва да се разбира като аналогично на известните ни от математиката или от други програмни езици подобни определения. Пример: d = (а+b*с )/2; е = (а+b*с )/2; f = (а+b*с )/2; или d = (а+b*с )/2; е = d; f = d;

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

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

  35. Превръщане на типове данни С поддържа стандартните механизми за автоматично превръщане на данни от един в друг тип. Типът на резултата от преобразуванията зависят от типовете на операндите участващи в израза. Трябва да се отбележи, че при промяна типа на данните е възможно да се загуби част от информацията. Това се получава когато се прави преобразуване от с по-малък размер в тип с по-голям размер. За разлика от Pascal, C++ позволява участието на елементи от различен тип в един израз, което налага да се съблюдават следните правилата за промяна на типа: • Присвояването на символна константа на обект от цял тип дава пълно 16-битово присвояване, тъй като символните константи (едно- или двусимволни) се представят в 16 бита. • Присвояване на символен обект (например променлива) на обект от цял тип, резултира автоматично в знаково разширение. • Обектите от тип unsigned char винаги поставят в старшия байт нула при превръщане в тип int.

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

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

  38. Превръщане на типове 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 } Пример:

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

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

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

More Related