1.23k likes | 1.42k Views
Увод у програмирање програмски језик C. Електротехнички факултет у Источном Сарајеву. Професор. Doc.dr Slobodan Obradović, dipl.inž.el. E-mail: sobradovic @ vets.edu.yu. Испит. (А или Б) и Ц ___________________________ А) 3 Колоквијума обавезна сва три колоквијума
E N D
Увод у програмирање програмски језик C Електротехнички факултет у Источном Сарајеву
Професор Doc.dr Slobodan Obradović, dipl.inž.el. E-mail: sobradovic@vets.edu.yu
Испит • (А или Б) и Ц ___________________________ • А) 3 Колоквијума • обавезна сва три колоквијума • за сваки колоквијум (51% минимум) • Б) Интегрални испит • Ц) Усмени испит
Литература • Ласло Краус, “Програмски језикСса решеним задацима”, Академска мисао, Београд, 2004. • Додатна литература
Садржај курса из језика С • Дефинисање података • Оператори • Наредбе • Низови • Показивачи • Знакови • Функције • Претпроцесорске наредбе • Структуре • Рад са датотекама • Повезане листе
Историја • Програмски језик C је први пут развијен почетком 1970-тих (BellLabs, USA) • Намена: основа за развој оперативног система UNIX. • Други виши програмски језици тог времена (COBOL, FORTRAN, PL/I, ALGOL...)су били превише спори. • Као основа за програмски језик C су послужила два виша програмскa језика: ALGOLи BCPL.
Историја • 1960: ALGOL (ALGOrithmic Language) • 1967: BCPL (Basic Combined Programming Language) • 1970: B programming language (без типова) • 1972: C: BCPL+B(уведени типови) • 1978: Kernighan + Ritchieстандард заC • 1989: ANSI стандард за C
Предности С језика • Опште намене, од ОС до специфичних проблема • Врло ефикасни компајлери за вели број процесора и оперативних система • Преносивост компајлера • Моћни оператори • Мали скуп наредби и богате библиотеке • Језик средњег нивоа, дакле може ефикасно да приступи и хардверу
Решавање задатака • Анализа задатка, деф. проблема, подела на делове и одређивање коначног циља • Разрада алгоритма, тј. Решавање задатка • Кодирање програма и превођење на машински језик • Тестирање и отклањање грешака • Израда коначне документације • Употреба и одржавање програма
Писање програма • Скуп наредби (instructions, statements) се назива кôд (Code ) или изворни кôд (Sourcecode). • Фајл који садржи кôд се назива Sourcefile. • У C програмском језику се низ наредби групише у целине које се називају функције (function) • Сваки програм мора да садржи бар једну функцију i to funkciju main( )
Како изгледа програм у језику C Претпроцесорска директива Сваки програм мора да имаmainфункцију заглављефункције #include <stdio.h> main() { printf(“Primer”); ; } Почетак блока граничникисказа, наредби телофункције (блок наредби) Крајблока #include <stdio.h> main() { printf(“Primjer”); }
Фазе обраде програма • Писање програма (Editing) • Предобрада (Preprocessing) • Превођење (Compilation) • Повезивање (Linking) • Има још једна фаза код модерних програмских језика а то је пуњење (Loading) • Извршавање (Executing)
1. Предобрада # (Preprocessing) • Обавља се програмом који се назива preprocessor. • Модификује изворни кôд (у RAM-у) у складу сa наредбама за предобраду (preprocessordirectives).Ове наредбе ближе дефинишу начин превођења. • Приликом предобраде се занемарују коментари (comments) и празан простор (whitespace) из кôда. • Кôд, који је програмер написао и претходно снимио на диск, НЕ МЕЊА се у процесу предобраде!
Претпроцесорка директива #include <stdio.h> Претпроцесорска директива #include <stdio.h> main() { printf(“Primer”); } Обрађује се пре превођења програма Обавезно почиње са# #include– најчешће коришћена директива Укључује у програм садржај датотеке која се наводи као параметар #include <ime> или #include ”ime” #define– често коришћена директива Дефинише симболичке константе i макрое #define IME vrednost #define PI 3.14159 #define EPS 0.0001 Стандардне библиотеке <stdio.h> функције за стандардни улаз/излаз <math.h> библиотека математичких функција ...
Претпроцесорка директива • Директиве служе за повезивање програма са стандардним библиотекама, сваки програм захтева бар једну stdio.h • Екстензија .h је од речи header, заглавље • Корисник може да прави сопствене библиотеке • Служе за дефинисање симболичких константи, сва константа има засебну директиву • Свака директива почиње са # • Иза ових редова нема ;
Претпроцесорка директива Претпроцесорска директива укључује стандардне функције за улаз/излаз података Претпроц. директива деф. симболичку константуEPS = 0.000001 Претпроцесорска директива деф. целобројну константуMAXINT = 32767 Претп. директива деф. симболичку константу PI #include <stdio.h> #define PI 3.14159 #define EPS 1e-6 #define MAXINT 32767 Дефинише окталну константу K_OCT = 071 Октална константа започиње са 0 071 = 7*8 + 1*1 = 56 + 1 = 57 dec Деф. Хексадецималну константу K_HEX = 0x41 Хексадецимална конст. почиње са 0x 0x41 = 4*16 + 1*1 = 64 + 1 = 65 dec #define K_OCT 071 #define K_HEX 0x41 printf( ”%d”,MAXINT ); printf( ”%8.5f\n”, PI ); printf( ”%10.8f\n”, EPS ); printf( ”%d %d”,K_OCT, K_HEX ); Главни програм (функција main) Исписује вредност дефинисаних константи на екрану За иепис на екран користи се стандардна функцијаprintf() Пример: #include <stdio.h> #define PI 3.14159 #define EPS 1e-6 #define MAXINT 32767 #define K_OCT 071 #define K_HEX 0x41 main() { printf( ”%d”,MAXINT ); printf( ”%8.5f\n”, PI ); printf( ”%10.8f\n”, EPS ); printf( ”%d %d”,K_OCT, K_HEX ); }
Претпроцесорка директива 32767_ _3.14159 0.00000100 57_65_ printf( ”%d”,MAXINT ); printf( ”%d”,MAXINT ); printf( ”%8.5f\n”, PI ); printf( ”%8.5f\n”, PI ); printf( ”%10.8f\n”, EPS ); printf( ”%10.8f\n”, EPS ); printf( ”%d %d”,K_OCT, K_HEX ); Пример: #include <stdio.h> #define PI 3.14159 #define EPS 1e-6 #define MAXINT 32767 #define K_OCT 071 #define K_HEX 0x41 main() { printf( ”%d”,MAXINT ); printf( ”%8.5f\n”, PI ); printf( ”%10.8f\n”, EPS ); printf( ”%d %d”,K_OCT, K_HEX ); } printf( ”%d %d”,K_OCT, K_HEX );
2. Превођење (Compilation) • Програм којим се обавља превођење назива се преводилац (compiler) • Изворни кôд, претходно подвргнут предобради, преводи се у објектни кôд (objectcode). • Проверава се синтакса грешке (errors) и упозорења (warnings) • Снима објектни кôд на диск (нови фајл). • Ако се приликом превођења констатује грешка, НЕ ГЕНЕРИШЕ се објектни кôд.
3. Повезивање (Linking) • Уколико је кôд писан у више фајлова постоји више фајлова са објектним кодом. • Објектни фајлови се повезују у једну целину како би се формирао извршни фајл (executable file, са екстензијом .еxe). • Други објектни фајлови могу да настану позивањем готових функција из тзв. библиотека (Libraries, Run-Time Library) или објектних фајлова које је креирао програмер. • Уколико се приликом линковања констатује грешка неће се формирати извршни фајл!
Отклањање грешака • deBUGing • bug - computer bugs - debug
Врсте грешака • Синтаксне грешке (syntax errors) • Грешке при извршавању (run time error) • Грешке намере (semantic error)
Синтаксне грешке • Неправилно раздвајање инструкција • Неправилно отварање-затварање коментара • Коришћење апострофа, наводника, ... Унутар стринга • Неправилна употреба зареза или размака • Позивање функције или променљиве пре него што је дефинисана • Употреба функције као инструкције (увек мора бити на десној страни) и погрешна имена
Грешке при извршавању • Неправилна употреба контролних структура • Погрешан унос података • Типски конфликти
Грешке намере • Погрешан математички модел • Погрешан алгоритам • Употреба глобалних променљивих • Недостају ознаке за поч. и крај блока • Употреба погрешних услова лог. Фја. • Појава бесконачне петље • Занемаривање грешака заокругљивања
Формат Cпрограма - стил #include <stdio.h> /* C program koji ispisuje: "Zdravo!" */ int main() { printf("Zdravo!\n"); return 0; } #include <stdio.h>/* C program koji ispisuje: "Zdravo!" */int main (){printf("Zdravo!\n");return 0;}
#include<stdio.h> /* C program koji ispisuje: "Zdravo!" */ int main ( ) { printf( "Zdravo!\n" ) ; return 0 ; } Формат Cпрограма - стил
Формат Cпрограма • Најпрегледније, најразумљивије • Најлакше за тестирање • Најпогодније за “дораду” • Правила#include <stdio.h > printf("Ovo je veoma, veoma,\veoma, veoma,duga linija.");
Улога заграда и неких граничника • () у именима функција, за смештање аргумената • {}, означи почетак и крај тела функције, да издвоји блокове инструкција и ограничи област важења података • ; означава крај једног израза или наредбе • С језик може у једном реду имати јако дуге и угњеждене изразе (више наредби)
Граматика језика • Азбука - скуп дозвољених знакова, симбола • Лексика – исправно писање недељивих целина • Синтакса – исправно писање решеница • Семантика – смисао
Елементи језика C • Скуп знакова • Велика и мала слова енглеског алфабетаAa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz • Децималне цифре 0 1 2 3 4 5 6 7 8 9 • Знаци:: _ ! ? . , : ; ‘ = + - / * # % & \ | ( ) [ ] { } < >
Лексички симболи - токени • Идентификати • Службене, резервисане речи (пишу се малим словима енглеске азбуке!) • Константе • Оператори • Сепаратори(граничници) • Знаковни низови
Идентификатори • Служе за означавање елемената програма (података, симболичких константи, нових типова података, функција ...)и представљају називе објеката језика Правила 1. Могу да се састоје од: • Слова (малих и великих) • Цифара • Знака подвучено ( _ )
Идентификатори 2. Први знак у имену мора да буде слово. Може да буде и знак подвучено али... 3. Дужина имена идентификатора да не буде већа од 31 карактера Пример: JednaPromenljivaKojaImaKarakteraJakoPuno = 1 JednaPromenljivaKojaImaKarakteraSamoJedanVise = 3 4. C разликује мала и велика слова (Rezultatиrezultat)Case Sensitive 5. Имена идентификатора не могу да буду из скупа службених речи.
исправни идентификатори sumaNovoIme c5_4novo_ime JEDAN_BROJBroj_studenata TX_protocolBroj_Studenata TRUE _split_name UporediRezultat_sabiranja dugoimesamnogokaraktera
неисправни идентификатори 70fс почиње бројем x-nameзнак - није дозвољен ime sa razmakom размак није дозвољен intрезервисана реч axx&знак &није дозвољен Površina*kruga знак *није дозвољен jedan,dva знак ,није дозвољен
Подела података • Скаларни (знаковни, целобројни, реални) • Нескаларни (структуре података)
Логички подаци C не располаже логичким типом података у неким програмским језицима то су LOGICAL или BOOLEAN Нису имплементиране ни логичке константе TRUE (istina) i FALSE (laž) Било који података се може посматрати као логички ISTINA ...podatak <> 0 LAŽ ... podatak = 0 Уобичајено је да се користе целобројни подаци Резултат логичких операција је: rezultat=1 ->ISTINA (tačno) rezultat=0 ->LAŽ (netačno)
Подаци, Променљиве и типови података • Подаци су предмет обраде у програмима. • Сваки податак има одређене особине, а скуп свих особина једног податка одређује тип податка. • Тип податка је одређен: • скупом могућих вредности које податак може да узме и • скупом могућих операција које је могуће извести над податком.
Подаци • Подаци у програму могу да се представе помоћу: • вредности или • идентификатора. c=a+5 • Подаци педставњени преко вредности се називају константе • Подаци педстављени преко идентификатора се називају променљиве
Подаци – симболичке константе • Посебан случај непроменљивих података представљају симболичке константе. #define PI=3.14; #define MIN_RASTOJANJE=2; #define Broj_Semestara=8;
Имена, идентификатори променљивих МЕМОРИЈА МЕМОРИЈА 123A podatak_1 Broj-1 BROJ broj Променљиве (варијабле) Променљива је симболичко име за неку меморијску локацију Свака променљива мора имати неко јединствено име!? име се формира од слова, цифара и знака _ први знак не може бити цифра максимално 31 знак разликују се мала и велика слова: име Slovo различито од slovo
Променљиве MEMORIJA G Z 2.35 a A 13 ABC x 13 2.35 -657 6 D ABC СВАКА ПРОМЕНЉИВА МОРА БИТИ ТАЧНО ОДРЕЂЕНОГ ТИПА Тип променљиве не може се мењати током извршења програма променљива може бити неког • скаларног - описана једним бројем,или • нескаларног типа - састоји се од више делова од којих је сваки и засебан и део податка Може да се мења вредност (садржај меморијске локације) зато се и зове променљива (varijabla) char int
Типови променљивих података • Тип неког податка одређује : • Меморијски простор који података заузима • Скуп вредности који тај податак може да има • Скуп операција дефинисаних над њим. • Програмски језикC познаје само нумеричке типове података • целобројни нумерички типови • реални нумерички типови.
Целобројни типови података • Име типа: • int • short int • long int • Опсег вредности: цели бројеви (унутар датог опсега) • Пример: 5, -35, 401 • Операције: аритметичке (сабирање, одузимање, множење, …), друге
Целобројни типови података • сваки од ових типова може бити неозначен (само позитивне вредности) • unsigned int • unsigned short int • unsigned long int
Пример опсега вредности не заборавитеsigned unsigned
Зашто постоје ограничења • Са одређеним бројем бита, могуће је дефинисати одређени скуп вредности • 16 бита, 65536 могућих вредности • 32768 негативних вредности • 1 нула • 32767 позитивних вредности • Прекорачење (Overflow): • покушај да се променљивој додели сувише велика вредности (40000 уshort int)
Целобројни типови података Тип char • Мали означени целобројни податак • величине 8 бита (1 бајт). • Намењен за манипулацију карактерима, али може послужити и за рад са малим бројевима са вредностима у распону од од 128 до 128. • unsigned charможе имати вредности од 0 до 255. ( ASCII табела има 256 знакова).