uvod u programiranje predavanja 1

123
Увод у Увод у програмирање програмирање програмски језик C Електротехнички факултет у Источном Сарајеву

Upload: dragan-kikic

Post on 04-Jan-2016

262 views

Category:

Documents


9 download

DESCRIPTION

uvod u programiranje

TRANSCRIPT

Page 1: uvod u programiranje predavanja 1

Увод у програмирањеУвод у програмирање програмски језик C

Електротехнички факултет у Источном Сарајеву

Page 2: uvod u programiranje predavanja 1

2

Професор Професор

Doc.dr Slobodan Obradović, dipl.inž.el.

E-mail: [email protected]

Page 3: uvod u programiranje predavanja 1

3

ИспитИспит

• (А или Б) и Ц

___________________________

• А) 3 Колоквијума– обавезна сва три колоквијума

– за сваки колоквијум (51% минимум)

• Б) Интегрални испит

• Ц) Усмени испит

Page 4: uvod u programiranje predavanja 1

4

ЛитератураЛитература

• Ласло Краус, “Програмски језик СС са решеним задацима”, Академска мисао, Београд, 2004.

• Додатна литература

Page 5: uvod u programiranje predavanja 1

5

Садржај курса из језика ССадржај курса из језика С

• Дефинисање података• Оператори• Наредбе• Низови• Показивачи• Знакови• Функције• Претпроцесорске наредбе• Структуре• Рад са датотекама• Повезане листе

Page 6: uvod u programiranje predavanja 1

6

ИсторијаИсторија

• Програмски језик C је први пут развијен почетком 1970-тих (Bell Labs, USA)

• Намена: основа за развој оперативног система UNIX.

• Други виши програмски језици тог времена (COBOL, FORTRAN, PL/I, ALGOL...) су били превише спори.

• Као основа за програмски језик C су послужила два виша програмскa језика: ALGOL и BCPL.

Page 7: uvod u programiranje predavanja 1

7

ИсторијаИсторија

• 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

Page 8: uvod u programiranje predavanja 1

8

Предности С језикаПредности С језика

• Опште намене, од ОС до специфичних проблема

• Врло ефикасни компајлери за вели број процесора и оперативних система

• Преносивост компајлера• Моћни оператори• Мали скуп наредби и богате библиотеке• Језик средњег нивоа, дакле може

ефикасно да приступи и хардверу

Page 9: uvod u programiranje predavanja 1

9

Решавање задатака Решавање задатака

• Анализа задатка, деф. проблема, подела на делове и одређивање коначног циља

• Разрада алгоритма, тј. Решавање задатка

• Кодирање програма и превођење на машински језик

• Тестирање и отклањање грешака

• Израда коначне документације

• Употреба и одржавање програма

Page 10: uvod u programiranje predavanja 1

10

Писање програмаПисање програма

• Скуп наредби (instructions, statements) се назива кôд (Code ) или изворни кôд (Source code).

• Фајл који садржи кôд се назива Source file. • У C програмском језику се низ наредби

групише у целине које се називају функције (function)

• Сваки програм мора да садржи бар једну функцију i to funkciju main( )

Page 11: uvod u programiranje predavanja 1

11

Како изгледа програм у језикуКако изгледа програм у језику C C

#include <stdio.h>

main()

{ printf(“Primjer”);}}

Сваки програм мора да има main

функцију

main()

заглавље функције

printf(“Primer”);

тело функције (блок наредби)

{

Почетак блока

}

Крај блока

;

граничник исказа, наредби

#include <stdio.h>

Претпроцесорска директива

Page 12: uvod u programiranje predavanja 1

12

Фазе обраде програмаФазе обраде програма

1. Писање програма (Editing)

2. Предобрада (Preprocessing)

3. Превођење (Compilation)

4. Повезивање (Linking)

5. Има још једна фаза код модерних програмских језика а то је пуњење (Loading)

6. Извршавање (Executing)

Page 13: uvod u programiranje predavanja 1

13

1. Предобрада 1. Предобрада # # ((PreprocessingPreprocessing))

• Обавља се програмом који се назива preprocessor.

• Модификује изворни кôд (у RAM-у) у складу сa наредбама за предобраду (preprocessor directives).Ове наредбе ближе дефинишу начин превођења.

• Приликом предобраде се занемарују коментари (comments) и празан простор (white space) из кôда.

• Кôд, који је програмер написао и претходно снимио на диск, НЕ МЕЊА се у процесу предобраде!

Page 14: uvod u programiranje predavanja 1

14

Претпроцесорка директиваПретпроцесорка директива

#include <stdio.h>

main()

{printf(“Primer”);

}

#include <stdio.h> Претпроцесорска директива

Обрађује се пре превођења програма

Обавезно почиње са #

#include – најчешће коришћена директива

Укључује у програм садржај датотеке која се наводи као параметар

#include <ime>или

#include ”ime”

Стандардне библиотеке

<stdio.h> функције за стандардни улаз/излаз<math.h> библиотека математичких функција ...

#define – често коришћена директива

Дефинише симболичке константе i макрое

#define IME vrednost

#define PI 3.14159#define EPS 0.0001

Page 15: uvod u programiranje predavanja 1

15

Претпроцесорка директиваПретпроцесорка директива

• Директиве служе за повезивање програма са стандардним библиотекама, сваки програм захтева бар једну stdio.h– Екстензија .h је од речи header, заглавље– Корисник може да прави сопствене библиотеке

• Служе за дефинисање симболичких константи, сва константа има засебну директиву

• Свака директива почиње са #

• Иза ових редова нема ;

Page 16: uvod u programiranje predavanja 1

16

Претпроцесорка директиваПретпроцесорка директива

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

#include <stdio.h>#include <stdio.h>

#define PI 3.14159#define PI 3.14159

#define EPS 1e-6#define EPS 1e-6

#define MAXINT 32767#define MAXINT 32767

#define K_OCT 071#define K_OCT 071

#define K_HEX 0x41#define K_HEX 0x41

main()()

{{ printf( ”printf( ”%d%d””,, MAXINTMAXINT ); );

printf(printf( ” ”%8.5f%8.5f\n”\n”,, PI ); PI );

printf(printf( ” ”%%1010..88ff\n”\n”,, EPS ); EPS );

printf(printf( ” ”%%d %d”d %d”,,K_OCT, K_HEX );K_OCT, K_HEX );}}

#include <stdio.h>

Претпроцесорска директива укључује стандардне функције

за улаз/излаз података

#define PI 3.14159

Претп. директива деф. симболичку константу PI

#define EPS 1e-6

Претпроц. директива деф. симболичку константу EPS =

0.000001

#define MAXINT 32767Претпроцесорска директива деф. целобројну константу MAXINT =

32767#define K_OCT 071

Дефинише окталну константу K_OCT = 071

Октална константа започиње са 0071 = 7*8 + 1*1 = 56 + 1 = 57 dec

#define K_HEX 0x41

Деф. Хексадецималну константу K_HEX = 0x41

Хексадецимална конст. почиње са 0x0x41 = 4*16 + 1*1 = 64 + 1 = 65 dec

printf( ”%d”, MAXINT );

printf( ”%8.5f\n”, PI );

printf( ”%10.8f\n”, EPS );

printf( ”%d %d”,K_OCT, K_HEX );

Главни програм (функција main)Исписује вредност дефинисаних

константи на екрану

За иепис на екран користи се стандардна функција printf()

Page 17: uvod u programiranje predavanja 1

17

Претпроцесорка директиваПретпроцесорка директива

Пример:

#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”, MAXINT );

32767_

printf( ”%8.5f\n”, PI );

_3.14159

printf( ”printf( ”%d%d””,, MAXINTMAXINT ); );

0.00000100

printf( ”%10.8f\n”, EPS );

printf(printf( ” ”%8.5f%8.5f\n”\n”,, PI ); PI );

printf( ”%d %d”,K_OCT, K_HEX );

57_65_

printf(printf( ” ”%%1010..88ff\n”\n”,, EPS ); EPS );

printf(printf( ” ”%%d %d”d %d”,,K_OCT, K_HEX );K_OCT, K_HEX );

Page 18: uvod u programiranje predavanja 1

18

2. Превођење (2. Превођење (CompilationCompilation))

• Програм којим се обавља превођење назива се преводилац (compiler)

• Изворни кôд, претходно подвргнут предобради, преводи се у објектни кôд (object code).

• Проверава се синтакса грешке (errors) и упозорења (warnings)

• Снима објектни кôд на диск (нови фајл).

• Ако се приликом превођења констатује грешка, НЕ ГЕНЕРИШЕ се објектни кôд.

Page 19: uvod u programiranje predavanja 1

19

3. Повезивање (3. Повезивање (LinkingLinking))

• Уколико је кôд писан у више фајлова постоји више фајлова са објектним кодом.

• Објектни фајлови се повезују у једну целину како би се формирао извршни фајл (executable file, са екстензијом .еxe).

• Други објектни фајлови могу да настану позивањем готових функција из тзв. библиотека (Libraries, Run-Time Library) или објектних фајлова које је креирао програмер.

• Уколико се приликом линковања констатује грешка неће се формирати извршни фајл!

Page 20: uvod u programiranje predavanja 1

20

Како до извршног програма?Како до извршног програма?

Повезивање

Програм за унос и обраду текста

filename1.c

filename2.c

...

filenameN.c

Предобрада

Предобрада

Предобрада

Предобрада

filename1.obj

...

filenameN.obj

filename2.obj

Објектни фајлови

Фајл након предобраде, памти се у RAM-у

Превођење

Превођење

Превођење

Превођење

filename1.obj filename1.obj ... filenameN.obj

project_filename.prj

Извршни програм .exe

Page 21: uvod u programiranje predavanja 1

21

Отклањање грешакаОтклањање грешака

• deBUGing

• bug - computer bugs - debug

Page 22: uvod u programiranje predavanja 1

22

Врсте грешакаВрсте грешака

• Синтаксне грешке (syntax errors)

• Грешке при извршавању (run time error)

• Грешке намере (semantic error)

Page 23: uvod u programiranje predavanja 1

23

Синтаксне грешкеСинтаксне грешке

• Неправилно раздвајање инструкција

• Неправилно отварање-затварање коментара

• Коришћење апострофа, наводника, ... Унутар стринга

• Неправилна употреба зареза или размака

• Позивање функције или променљиве пре него што је дефинисана

• Употреба функције као инструкције (увек мора бити на десној страни) и погрешна имена

Page 24: uvod u programiranje predavanja 1

24

Грешке при извршавањуГрешке при извршавању

• Неправилна употреба контролних структура

• Погрешан унос података

• Типски конфликти

Page 25: uvod u programiranje predavanja 1

25

Грешке намереГрешке намере

• Погрешан математички модел

• Погрешан алгоритам

• Употреба глобалних променљивих

• Недостају ознаке за поч. и крај блока

• Употреба погрешних услова лог. Фја.

• Појава бесконачне петље

• Занемаривање грешака заокругљивања

Page 26: uvod u programiranje predavanja 1

26

Формат Формат CC програма - стилпрограма - стил#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;}

Page 27: uvod u programiranje predavanja 1

27

Формат Формат CC програма - стилпрограма - стил

#include<stdio.h>

/* C program koji ispisuje:

"Zdravo!" */

int

main

(

)

{

printf(

"Zdravo!\n"

)

;

return

0

;

}

Page 28: uvod u programiranje predavanja 1

28

Формат Формат CC програмапрограма

• Најпрегледније, најразумљивије

• Најлакше за тестирање

• Најпогодније за “дораду”

• Правила#include <stdio.h >

printf("Ovo je veoma, veoma,\veoma, veoma,duga linija.");

Page 29: uvod u programiranje predavanja 1

29

Улога заграда и неких Улога заграда и неких граничникаграничника

• () у именима функција, за смештање аргумената

• {}, означи почетак и крај тела функције, да издвоји блокове инструкција и ограничи област важења података

• ; означава крај једног израза или наредбе

• С језик може у једном реду имати јако дуге и угњеждене изразе (више наредби)

Page 30: uvod u programiranje predavanja 1

30

Граматика језикаГраматика језика

• Азбука - скуп дозвољених знакова, симбола

• Лексика – исправно писање недељивих целина

• Синтакса – исправно писање решеница

• Семантика – смисао

Page 31: uvod u programiranje predavanja 1

31

Елементи језика Елементи језика CC

• Скуп знакова • Велика и мала слова енглеског алфабета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

• Знаци: : _ ! ? . , : ; ‘ = + - / * # % & \ | ( ) [ ] { } < >

Page 32: uvod u programiranje predavanja 1

32

Лексички симболи - токениЛексички симболи - токени

• Идентификати

• Службене, резервисане речи (пишу се малим словима енглеске азбуке!)

• Константе

• Оператори

• Сепаратори (граничници)

• Знаковни низови

Page 33: uvod u programiranje predavanja 1

33

ИдентификаториИдентификатори

• Служе за означавање елемената програма (података, симболичких константи, нових типова података, функција ...)и представљају називе објеката језика Правила

1.Могу да се састоје од:– Слова (малих и великих)

– Цифара

– Знака подвучено ( _ )

Page 34: uvod u programiranje predavanja 1

34

ИдентификаториИдентификатори

2. Први знак у имену мора да буде слово. Може да буде и знак подвучено али...

3. Дужина имена идентификатора да не буде већа од 31 карактера

Пример:JednaPromenljivaKojaImaKarakteraJakoPuno = 1 JednaPromenljivaKojaImaKarakteraSamoJedanVise = 3

4. C разликује мала и велика слова (Rezultat и rezultat) Case Sensitive

5. Имена идентификатора не могу да буду из скупа службених речи.

Page 35: uvod u programiranje predavanja 1

35

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

suma NovoImec5_4 novo_imeJEDAN_BROJ Broj_studenataTX_protocol Broj_StudenataTRUE _split_name

UporediRezultat_sabiranja dugoimesamnogokaraktera

Page 36: uvod u programiranje predavanja 1

36

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

70fс почиње бројем

x-name знак - није дозвољен

ime sa razmakom размак није дозвољен

int резервисана реч

axx& знак & није дозвољен

Površina*kruga знак * није дозвољен

jedan,dva знак , није дозвољен

Page 37: uvod u programiranje predavanja 1

37

Службене речиСлужбене речи (32)(32)

auto double int struct

break else long switch

case enum register typedef

char extern return union

const float short unsigned

continue for signed void

default goto sizeof volatile

do if static while

Page 38: uvod u programiranje predavanja 1

38

Подела податакаПодела података

• Скаларни (знаковни, целобројни, реални)

• Нескаларни (структуре података)

Page 39: uvod u programiranje predavanja 1

39

Логички подаци

C не располаже логичким типом податакау неким програмским језицима то су

LOGICAL или BOOLEAN

Нису имплементиране ни логичке константе TRUE (istina) i FALSE (laž)

Било који података се може посматрати као логички ISTINA ... podatak <> 0

LAŽ ... podatak = 0Уобичајено је да се користе целобројни подациРезултат логичких операција је:

rezultat=1 -> ISTINA (tačno) rezultat=0 -> LAŽ (netačno)

Page 40: uvod u programiranje predavanja 1

40

Подаци, Променљиве и типови Подаци, Променљиве и типови податакаподатака

• Подаци су предмет обраде у програмима.

• Сваки податак има одређене особине, а скуп свих особина једног податка одређује тип податка.

• Тип податка је одређен:– скупом могућих вредности које податак

може да узме и

– скупом могућих операција које је могуће извести над податком.

Page 41: uvod u programiranje predavanja 1

41

ПодациПодаци

• Подаци у програму могу да се представе помоћу: – вредности или

– идентификатора. c=a+5

• Подаци педставњени преко вредности се називају константе

• Подаци педстављени преко идентификатора се називају променљиве

Page 42: uvod u programiranje predavanja 1

42

Подаци – симболичке константеПодаци – симболичке константе

• Посебан случај непроменљивих података представљају симболичке константе.

#define PI=3.14;

#define MIN_RASTOJANJE=2;

#define Broj_Semestara=8;

Page 43: uvod u programiranje predavanja 1

43

Имена, идентификатори променљивих

Променљиве (варијабле)

Променљива је симболичко име за неку меморијску локацијуСвака променљива мора имати неко јединствено име!?

име се формира од слова, цифара и знака _први знак не може бити цифрамаксимално 31 знакразликују се мала и велика слова: име Slovo различито од slovo

МЕМОРИЈАМЕМОРИЈА

broj

BROJ

podatak_1

Broj-1

123A

Page 44: uvod u programiranje predavanja 1

44

Променљиве Променљиве

СВАКА ПРОМЕНЉИВА МОРА БИТИ ТАЧНО ОДРЕЂЕНОГ ТИПА

Тип променљиве не може се мењати током извршења програма променљива може бити неког -скаларног - описана једним бројем, или -нескаларног типа - састоји се од више делова од којих је сваки и засебан и део податка

Може да се мења вредност (садржај меморијске локације)зато се и зове променљива (varijabla)

MEMORIJA

int

charA

x

ZGa ABC

2.35

13

13

6-657

ABC

2.35

D

Page 45: uvod u programiranje predavanja 1

45

Типови променљивих податакаТипови променљивих података

• Тип неког податка одређује :– Меморијски простор који података заузима

– Скуп вредности који тај податак може да има

– Скуп операција дефинисаних над њим.

• Програмски језик CC познаје само нумеричке типове података– целобројни нумерички типови

– реални нумерички типови.

Page 46: uvod u programiranje predavanja 1

46

Целобројни типови податакаЦелобројни типови података

• Име типа: –int–short int–long int

• Опсег вредности: цели бројеви (унутар датог опсега) – Пример: 5, -35, 401

• Операције: аритметичке (сабирање, одузимање, множење, …), друге

Page 47: uvod u programiranje predavanja 1

47

Целобројни типови податакаЦелобројни типови података

• сваки од ових типова може бити неозначен (само позитивне вредности)–unsigned int–unsigned short int–unsigned long int

Page 48: uvod u programiranje predavanja 1

48

Пример опсега вредностиПример опсега вредности

Тип Бајтова Бита Mин вред. Maкс вред.

short int 2 16 -32768 32767

int 4(2) 32 -2147483648 2147483647

long int 4 32 -2147483648 2147483647

не заборавите signed unsigned

Page 49: uvod u programiranje predavanja 1

49

Зашто постоје ограничењаЗашто постоје ограничења

• Са одређеним бројем бита, могуће је дефинисати одређени скуп вредности

• 16 бита, 65 536 могућих вредности– 32768 негативних вредности

– 1 нула

– 32767 позитивних вредности

• Прекорачење (Overflow):– покушај да се променљивој додели сувише

велика вредности (40 000 у short int)

Page 50: uvod u programiranje predavanja 1

50

Целобројни типови податакаЦелобројни типови података

Тип char

• Мали означени целобројни податак

• величине 8 бита (1 бајт).

• Намењен за манипулацију карактерима, али може послужити и за рад са малим бројевима са вредностима у распону од од 128 до 128.

• unsigned char може имати вредности од 0 до 255.

( ASCII табела има 256 знакова).

Page 51: uvod u programiranje predavanja 1

51

Реални типови податакаРеални типови података

• Име типа: –float (4 bajta)–double (8 bajtova)–long double (10 bajtova)

• Могуће вредности: реални бројеви, 5.0, -3.5, 4.01

• Операције: аритметичке (сабирање, одузимање, множење, …), друге

Page 52: uvod u programiranje predavanja 1

52

Реални типови податакаРеални типови података

float: 4 бајта, 32 бита

double: 8 bајтова, 64 бита

long double: 10 бајтова, 80 бита

• Представљање:– mEe

– m магнитуда, мантиса (одређени број бита), децимални број и Е ознака за степеновање са основом

– е експонент, цео број са знаком

Page 53: uvod u programiranje predavanja 1

53

Нумеричке константеНумеричке константе

• Целобројне

• Реалне

Page 54: uvod u programiranje predavanja 1

54

Целобројне нум. константеЦелобројне нум. константе

• Могу бити написане у – децималном,

– хексадецималном (основе 16) и

– окталном (основе 8) бројевном систему.

974 Декадна константа типа int

0x2fc хексадецимална константа типа int

974l декадна константа типа long int

01234L октална константа типа long int

Page 55: uvod u programiranje predavanja 1

55

Целобројне нум. константеЦелобројне нум. константе

• 0xffff негативна вредност-хексадец.• 0xffffuпозитивна вредност-хексадец.• 0723 негативна вредност-октална• 0723u позитивна вредност-октална

Page 56: uvod u programiranje predavanja 1

56

Реалне нум. константеРеалне нум. константе• Могу бити написане у само у децималном

бројевном систему.

2.54Е-34 представља вредност 2.54 10-34

1.23 3е5

125. 2.1Е-45

.456 22.3F

Подразумевани тип је double

Додавањем суфикса F или f постаје float

Page 57: uvod u programiranje predavanja 1

57

Дефинисање податакаДефинисање података

• Сваки податак (променљива) мора да се дефинише пре употребе!

• Општи облик наредбе је tip_podatka ime_podatka;

илиtip_podatka ime_podatka = početna_vrednost;

tip_podatka ime_podatka[= početna_vrednost];

Page 58: uvod u programiranje predavanja 1

58

Дефиниција променљивеДефиниција променљиве

Преводиоцу (компајлеру) се мора указати на то да ће се у програму користити нека променљива, како би он могао да резервише потребан простор у меморији

Општи облик дефиниције променљиве:tip imepromjenljive [=vrednost]

Почетна вредност

Не мора се додељивати!!

[ ] ове заграде се користе да би се нагласило да нешто није обавезно

[=vrednost]

На пример.

int i,j,n=10;

float a, e=2.71;

char znak=’+’,c;

Page 59: uvod u programiranje predavanja 1

59

Дефинисање податакаДефинисање података

short int broj1;

short int broj2=34,d, gr=5;

char slovo;

float a=5.43;

float b=12.65;

int visina=34/2;

float povrsina=a*b;

Page 60: uvod u programiranje predavanja 1

60

ИницијализацијаИницијализација

• је додељивање почетне вредности (initial value) променљивој

• Промељива се не мора иницијализовати (вредност је у том случају случајна)

tip_podatka ime_podatka [=početna_vrednost], ...,ime_podatka [= početna_vrednost];

Пример:int broj=2, prisutni=0, godina=2004, br_sati;

Page 61: uvod u programiranje predavanja 1

61

Дефинисање непроменљивих податакаДефинисање непроменљивих података

• Непроменљиви подаци су именовани подаци чија се вредност не мења.

• Дефинишу се на сличан начин с тим да:– дефинисање почиње са кључном речи const– мора бити додељена почетна вредност

• Општи облик дефинисања непроменљивих података

const tip_podatka ime_podatka =

početna_vrednost;

Page 62: uvod u programiranje predavanja 1

62

Дефинисање непроменљивих податакаДефинисање непроменљивих података

const double e=2.71828182845905;

const int br_radnih_dana=26;

const float radijus=14;

const float cena=14.2, porez=0.22; /* i porez je konstanta*/

const float obim=2*radijus*3.14;

Page 63: uvod u programiranje predavanja 1

63

Читање и писање податакаЧитање и писање података

• Сви подаци који се уносе са тастатуре се прихватају као знакови (character).

• Улазна конверзија се у програмском језику C обавља преко уграђене функције scanf()

• Приликом исписа података на монитор потребно је да се обави излазна конверзија,

• Ова конверзија се обавља применом уграђене функције printf()

Page 64: uvod u programiranje predavanja 1

64

Читање и писање податакаЧитање и писање података

• Информације о функцијама scanf() и printf() налазе се у фајлу stdio.h.

• Име stdio потиче од standard input output a екстензија .h од header (заглавље).

#include <stdio.h>

#include "c:\nekoime.h"

Page 65: uvod u programiranje predavanja 1

65

printf

Стандардна функција за излаз (испис) на екран

printf( ”konverzioni string” , lista_argumenata ) ”konverzioni string”

Kontrolni (konverzioni) niz određuje način na koji se vrši ispis

Štampa se sve što se nađe unutar ” ” sve dok se ne dođe do znaka %

Kad se dođe do znaka % gleda se sljedeći znak (grupa znakova) koji se naziva konverzioni karakter

Konverzioni karakter definiše kako će se ispisati odgovarajući podatak iz liste argumenata

Mora biti onoliko znakova % u cijelom stringu koliko ima i argumenata u listi

lista_argumenata

Određuje šta treba da se ispiše (koji podaci treba da se

ispišu)

Argumenti se odvajaju zapetama

Argumenti mogu da budu promjenljive, konstante,

izrazi

Page 66: uvod u programiranje predavanja 1

66

Писање податакаПисање података

printf("Ovo je jednostavna poruka")• Резултат: Ovo je jednostavna poruka

printf(format,izraz,...,izraz)

• izraz може да представља име променљиве, вредност константе или аритметички израз

format има облик:

”%[Sirina][.Prec]Tip_kon”

Page 67: uvod u programiranje predavanja 1

67

””%%[[SirinaSirina][.Prec]][.Prec]TipTip__konkon””

Tip_kon Тип Излазни формат --------------------------------------------------------------------------------i int децимални цео бројd int децимални цео бројu int неозначени дец. цео бројo int неозначени октални бројx int неозначени хексадецимални „abcdef”X int неозначени хексадецимални, „ABCDEF”c int карактер дефинисан једним бајтом (ASCII)e float реални број једноструке тачносити, експ обликf float реални број једноструке тачносити стд. обликаg float реални број једноструке тачносити облика f ,e

у зависности од тога који је погоднији за приказ

Page 68: uvod u programiranje predavanja 1

68

Писање податакаПисање података• printf("%c ", ’A’);

резултат је: А • printf("%c %d", ’A’, 35);

резултат је: А 35 размак између %c и %d • printf("%c%d", ’A’, 35);

резултат је: А35 oвде нема размака. • printf("%c %d %f", ’A’, 35, 4.5);

резултат је: А 35 4.500000• printf("%c %d %е", ’A’, 35, 42.123);

резултат је: А 35 4.212300е+001

Page 69: uvod u programiranje predavanja 1

69

Пример исписа по разним форматима

Пример:

#include <stdio.h>

main()

{ int var=65;

printf( ”Znakovi:\n”);

printf( ”%2c\n”, ’A’);

printf( ”%4c\n%6c\n”, var, ’B’);

printf( ”%8c\n”, var+1);

printf( ”%3d\n”, ’A’);

printf( ”%03d”, ’A’);

}}

MЕМОРИЈА

0100 0001

int var=65;

Znakovi:

int var=65;

printf( ”Znakovi:\n”);printf( ”Znakovi:\n”);

printf( ”%2c\n”, ’A’);

.A

printf( ”%2c\n”, ’A’);

printf( ”%4c\n%6c\n”, var, ’B’);

...A

.....B

printf( ”%4c\n%6c\n”, var, ’B’);

printf( ”%8c\n”, var+1);

.......B

printf( ”%8c\n”, var+1);

printf( ”%3d\n”, ’A’);

.65

printf( ”%3d\n”, ’A’);

printf( ”%03d”, ’A’);

065

printf( ”%03d”, ’A’);

Page 70: uvod u programiranje predavanja 1

70

Променљиве и меморија

Пример:

#include <stdio.h>

main()

{ int i=9,j;

float a,b;

j=i/2;

a=i/2.0;

b=a*2.0/j;

printf( ”i=%d\n”, i );

printf( ”j=%d\n”, j );

printf( ”a=%6.2f\n”, a );

printf( ”b=%6.2f\n”, b );

}

MEMOРИJA

jj

aa

bb

ii

int i=9,j;int i=9,j;int i=9,j;

float a,b;float a,b;float a,b;

j=i/2;

0000 10010000 1001

0000 00000000 00009

0000 01000000 0100

0000 00000000 00004

1001 00001001 0000

0100 00000100 0000

0000 00000000 0000

0000 00000000 00004.5

j=i/2;

a=i/2.0;a=i/2.0;a=i/2.0;

b=a*2.0/j;

0001 00000001 0000

0100 00000100 0000

0000 00000000 0000

0000 00000000 00002.25

Page 71: uvod u programiranje predavanja 1

71

””%[%[SirinaSirina][][.Prec.Prec]]TipTip__konkon””• .Prec представља прецизност исписа

значај само за реалне бројеве: ( e, f, g)• одређује број цифара које ће бити исписане

након децималне тачке. • Подразумевана вредност је 6. • Уколико је наведена прецизност мања од броја

децимала: исписује се онолико цифара колико прецизност дефинише а последња цифра се заокржује.

• За тип конверзије g: одређује укупан број цифара који ће се исписати (целобројни +децимални део). Нема заокруживања.

Page 72: uvod u programiranje predavanja 1

72

””%[%[SirinaSirina][][.Prec.Prec]]TipTip__konkon””

• printf("%е", 42.126);резултат је: 4.212600е+001

Подразумевана вредност је 6 децимала• printf("%.4е" 42.126);

резултат је: 4.2126е+001

Исписује онолико децимала колико је наведено• printf("%.3е", 42.126);

резултат је: 4.213е+001 Заокруживање последње децимале

Page 73: uvod u programiranje predavanja 1

73

””%[%[SirinaSirina][][.Prec.Prec]]TipTip__konkon””

• printf("%f", 42.126);резултат је: 42.126000 Подразумевана вредност је 6 децимала

• printf("%.7f", 42.12345679);резултат је: 42.1234568Заокруживање

• printf("%.2f", 42.126);резултат је: 42.13 Заокруживање

Page 74: uvod u programiranje predavanja 1

74

””%[%[SirinaSirina][][.Prec.Prec]]TipTip__konkon””

• printf("%g", 42.126);резултат је: 42.126

• printf("%.7g", 42.12345678);резултат је: 42.123467 одсецање

• printf("%.2g", 42.126);резултат је: 42

• printf("%.2g", 142.126);резултат је: 1.4е+002

Page 75: uvod u programiranje predavanja 1

75

””%[%[SirinaSirina][.Prec]][.Prec]TipTip__konkon””

• Sirina Одређује минимални број карактера који се резервише за испис неког броја. То је позитивна вредност. Уколико је за испис потребно мање карактера од броја који је одређен параметром Sirina, испис се допуњава бленковима (размацима) и поравнава се у десно.

• Уколико се испред параметра Sirina наведе 0 бленкови се, уколико постоје, замењују нулама.

Page 76: uvod u programiranje predavanja 1

76

””%[%[SirinaSirina][.Prec]][.Prec]TipTip__konkon””

• printf(″%5c%4d″, ’A’, 35);

резултат је: А 35 /* четири бленка испред А и два бленка испред 35

• printf(″%04d″, 35);

• резултат је: 0035 /* нуле замењују празна места

• printf("%07.3f", 42.123); /*042.123*/ укупно 7 цифара од тога три цифре након децим. тачке и једна за децим. тачку */

Page 77: uvod u programiranje predavanja 1

77

Додатно форматирањеДодатно форматирање

escape sequence

\a – bell \\ -- backslash\b – backspace \? – question

mark\f – formfeed \’ – single quote \n – new line \” – quote mark\r – CR \o# – # in octal\t – horiz. tab \x# – # in hex\v – vertical tab

Page 78: uvod u programiranje predavanja 1

78

printf("%c\n\t%d\n%f\n", 'A',35, 42.126);

резултат је:

А

35 /* \t je znak tab, 35 je pomeren u desno*/

42.126000

Page 79: uvod u programiranje predavanja 1

79

Променљиве и излаз

Пример:

#include <stdio.h>

main()

{ int i=9,j;

float a,b;

j=i/2;

a=i/2.0;

b=a*2.0/j;

printf( ”i=%d\n”, i );

printf( ”j=%d\n”, j );

printf( ”a=%6.2f\n”, a );

printf( ”b=%6.2f\n”, b );

}

MEMORIJA

j

a

b

i0000 10010000 0000

9

0000 01000000 0000

4

1001 00000100 0000

0000 00000000 0000

4.5

0001 00000100 0000

0000 00000000 0000

2.25

b=a*2.0/j;

printf( ”i=%d\n”, i );

i=9

printf( ”i=%d\n”, i );

printf( ”j=%d\n”, j );

j=4

printf( ”j=%d\n”, j );

printf( ”a=%6.2f\n”, a );

a= 4.50

printf( ”a=%6.2f\n”, a );

printf( ”b=%6.2f\n”, b );

b= 2.25

Page 80: uvod u programiranje predavanja 1

80

Читање података-стандардни улазЧитање података-стандардни улаз

• Општи облик наредбе је следећи:

scanf(format,&podatak,...,&podatak)

• Oператор & испред имена променљиве означава да се функцији scanf() додељује меморијска адреса променљиве (податка) на коју се уписује резултат конверзије.

• format има исти облик као и код функције printf().

Page 81: uvod u programiranje predavanja 1

81

Стандардни улаз податакаСтандардни улаз података

Пример:

#include <stdio.h>

main()

{ int broj;

/*printf( ”Unesite ceо broj:\n” );*/

scanf( ”%d”, &broj );

printf( ”Uneli ste %d\n”, broj );

}}

MEMOРИЈA

brojbroj

_

6

00000000 0110 0110

0000 00000 0000000

Uneli ste 6

Page 82: uvod u programiranje predavanja 1

82

Стандардни улаз податакаСтандардни улаз података

Primjer:

#include <stdio.h>

main()

{ int broj;

printf( ”Unesite cео broj:\n” );

scanf( ”%d”, &broj );

printf( ”Uneli ste %d\n”, broj );

}}

MEMOРИJA

brojbroj

Unesite cео broj:

6

00000000 0110 0110

0000 00000 0000000

Uneli ste 6

Пре сваке наредбе за унос пошаљите поруку на екран!!

Page 83: uvod u programiranje predavanja 1

83

пример 1пример 1

#include <stdio.h>main(){char cVar; int dVar; float fVar;

scanf("%c %d %f", &cVar,&dVar, &fVar);printf("\n%c \n%d \n%f\n",cVar, dVar, fVar);

}

Page 84: uvod u programiranje predavanja 1

84

унете вредности

излазне вредности

пример 1пример 1

Page 85: uvod u programiranje predavanja 1

85

пример 2пример 2#include <stdio.h>main(){int x; char c; float y;

scanf("%d %c %f", &x, &c, &y);printf("\n%d \n%c \n%f\n",x, c, y);scanf("%d", &x);printf("Da li sam cekao za drugi \ unos?\n");printf("\n%d\n",x);

}

Page 86: uvod u programiranje predavanja 1

86

пример 2пример 2

Page 87: uvod u programiranje predavanja 1

87

ОператориОператори

• Радње које се извршавају над операндима и које дају одређени резултат.– Аритметички оператори

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

– Релацијски оператори

– Логички оператори

– Оператори по битовима

– Величина податка

– Условни израз

Page 88: uvod u programiranje predavanja 1

88

Аритметички операториАритметички оператори

Бинарни оператори

Име Oператор Пример Сабирање + num1 + num2

Одузимање - initial - spent

Множење * kolicna * 6

Дељење / suma /kolicina

Модуо % m % n

Page 89: uvod u programiranje predavanja 1

89

ДељењеДељење

• Ако су оба операнда при дељењу типа int онда ће и резултат бити типа int.

17 / 5 = 3 4 / 3 = 135 / 9 = 3#include <stdio.h>main(){int x=5, y=2, а; float z;а=x/y; /* a=2 */z=x/y; /* z = 2.5 */

}

Page 90: uvod u programiranje predavanja 1

90

ДељењеДељење

• Aко је бар један операнд типа float резултат ће бити типа float.

• Примери: 17.0/ 5 = 3.4 4/ 3.2 = 1.25 35.2/9.1 = 3.86813

• Објашњење? Целобројни (int) операнд се привремено конвертује у реалну вредност (float), па се онда обави дељење.

Page 91: uvod u programiranje predavanja 1

91

Дељење нуломДељење нулом

• Дељење нулом није математички дефинисано.

• Ако у току извршавања програма дође до дељења нулом то ће проузроковати прекид извшења програма fatal error.

Page 92: uvod u programiranje predavanja 1

92

Модуо - Остатак при дељењуМодуо - Остатак при дељењу

• Израрз m % n даје целобројни остатак дељења m са n.

• Оба операнда МОРАЈУ бити целобројна • Примери : 17 % 5 = 2 6 % 3 = 0 9 % 2 = 1 5 % 8 = 5 a % b = a – (a/b)*b

Page 93: uvod u programiranje predavanja 1

93

Модуо - Остатак при дељењуМодуо - Остатак при дељењу

Primjer:

#include <stdio.h>

main()

{ int sek;

printf( ”Unesite vreme u sekundama: ” );

scanf( ”%d”, &sek ); /* ovde se ucitava podatak */

printf( ”To je: %02d:%02d:%02d\n”, sek/3600,sek%3600/60,sek%60 ); }}

Unesite vreme u sekundama: 4000

To je: 01:06:40

Пример употребе % оператора

Page 94: uvod u programiranje predavanja 1

94

Аритметички операториАритметички оператори

• Унарни оператори: +, -

Представљају предзнак операнда

• Унарни оператори: ++, −− Оператор ++ увећава вредност операнда за 1

(increment). Оператор −− умањује вредност операнда за 1

(decrement).

Page 95: uvod u programiranje predavanja 1

95

Унарни оператори: ++, −−Унарни оператори: ++, −−

а++; /* одговара наредби а = а+1; */

++а; /* одговара наредби а = а+1; */

а--; /* одговара наредби а = а-1; */

--а; /* одговара наредби а = а-1; */

Page 96: uvod u programiranje predavanja 1

96

Унарни оператори: ++, −−Унарни оператори: ++, −−

int broj_a, broj_b, broj_c, broj_d;

broj_a = 3;

broj_b = 6;

broj_c = broj_b++; /* broj_c je jednak 6 a nakon toga se povećava b na 7*/

broj_c = ++broj_a; /* prvo se broj_a

poveća na 4 a potom je broj_c jednak 4*/

broj_d= broj_b; /* broj_d je jednak 7*/

Page 97: uvod u programiranje predavanja 1

97

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

operator

= += - = *= /= %=

Општи обликime_promenljive [operator]= izraz

Page 98: uvod u programiranje predavanja 1

98

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

Пример:

#include <stdio.h>

main()

{

int a,b,c;

a=b=c=10;

printf( ”%d %d %d\n”, a,b,c );

a = (b=10) + (c=20);

printf( ”%d %d %d\n”, a,b,c );}

MEMOРИJA

aa0000 10100000 1010

0000 00000000 0000

bb0000 10100000 1010

0000 00000000 0000

cc0000 10100000 1010

0000 00000000 0000

10 10 10

0001 01000001 0100

0000 00000000 0000

0001 11100001 1110

0000 00000000 0000

30 10 20

Page 99: uvod u programiranje predavanja 1

99

Оператор доделе, примерОператор доделе, пример

broj_a=3;broj_c= broj_b;a=а+1;a += b; /* isto je sto i a=a+b; */a -= b; /* isto je sto i a=a-b; */a *= b; /* isto je sto i a=a*b; */a /= b; /* isto je sto i a=a/b; */a %= b; /* isto je sto i a=a%b; */a=b=c=27;b += c+2; /* isto je sto i b=b+(c+2); */d *= e-5; /* isto je sto i d=d*(e-5); */

Page 100: uvod u programiranje predavanja 1

100

Релацијски оператори Релацијски оператори

> веће од a > b < мање од a < b>= веће и једнако a >= b<= мање и једнако a <= b== једнако a == b!= није једнако a != b

• Резултати поређења су целобројног типа (int) и могу имати вредност: – 1 ако релација важи или– 0 уколико релација не важи.

Page 101: uvod u programiranje predavanja 1

101

Релацијски оператори, примерРелацијски оператори, пример

3.1 != -3.1 /* rezultat 1 */

5.2 >= 6 /* rezultat 0 */

7<= 7 /* rezultat 1 */

0.5 == 4.2 /* rezultat 0 */

a != 5 /* rezultat zavisi od vrednosti promenljive a */

Page 102: uvod u programiranje predavanja 1

102

Логички операториЛогички оператори

! негација

&& логичко И

|| логичко ИЛИ

Page 103: uvod u programiranje predavanja 1

103

Логички оператори, примерЛогички оператори, пример

• да ли се вредност променљиве налази између 10 и 100

(10<а) && (а<100) /* Ako je a>10 i a<100 vrednost izraza je 1, u suprotnom 0*/

• да ли је апс. вредност променљиве већа од 15• (а <-15) || (а>15) /* ako je a<-15 ili a>15 vrednost izraza je 1, u suprotnom 0 */

Page 104: uvod u programiranje predavanja 1

104

Оператори по битовимаОператори по битовима

~ комплемент

<< логичко попмерање у лево

>> логичко померање у десно

& логичко И на битском нивоу

| логичко ИЛИ на битском нивоу

^ ексклузивно или (exor)

Page 105: uvod u programiranje predavanja 1

105

Оператори по битовима, примерОператори по битовима, пример

• 0x1234 & 0x5678 (4660 & 22136)

0001 0010 0011 0100

& 0101 0110 0111 1000 = 0001 0010 0011 0000=0x1230(4656)• 0x1234 | 0x5678

0001 0010 0011 0100

| 0101 0110 0111 1000

= 0101 0110 0111 1100 =0x567c

Page 106: uvod u programiranje predavanja 1

106

Оператори по битовима, примерОператори по битовима, пример

• 0x1234 ^ 0x5678 0001 0010 0011 0100 ^ 0101 0110 0111 1000 = 0100 0100 0100 1100 =0x444c • ~0x1234 ~0001 0010 0011 0100 = 1110 1101 1100 1011 =0xedcb • 0x0001<<5 0000 0000 0000 0001 <<5 =0000 0000 0010 0000

Page 107: uvod u programiranje predavanja 1

107

Оператори над битовима, примерОператори над битовима, пример

& - битско AND

Пример:

#include <stdio.h>

main()

{

char c=’9’;

short cifra;

cifra = c & 0x0F;

printf( ”%d\n”, cifra );}

MEMOРИJA

cc00001111 10 100101

cifracifra

cc00001111 10 100101

00000000 1 1001001

0x0F0x0F00000000 1 1111111&&

00000000 1 1001001

9

Page 108: uvod u programiranje predavanja 1

108

Оператори над битовима, примерОператори над битовима, пример

| - битско OR

Пример:

#include <stdio.h>

main()

{

short cifra=9;

char c;

c = cifra | 0x30;

printf( ”%c\n”, c );}

MEMORIJA

cifracifra00000000 10 100101

cc

cifracifra00000000 10 100101

00001111 1 1001001

0x300x3000001111 00000000||

00001111 1 1001001

9

Page 109: uvod u programiranje predavanja 1

109

Оператори над битовимаОператори над битовима

~ - битско NOT

Пример:

#include <stdio.h>

main()

{

short x=1,y;

y = ~x;

printf( ”%d\n”, y );}

MEMOРИJA

xx00000000 00000101

yy

xx00000000 00000101

11111111 11101110~~

11111111 11101110

-2

Page 110: uvod u programiranje predavanja 1

110

Оператори над битовимаОператори над битовима

^ - XOR (EX ILI)

Пример:

#include <stdio.h>

main()

{

short x=0x73,y;

y = x^0x32;

printf( ”%c\n”, y );}

MEMORIJA

xx00111111 00110011

yy

xx00111111 00110011

00100100 00010001

0x320x3200001111 00100010^̂

00100100 00010001

A

Page 111: uvod u programiranje predavanja 1

111

Оператори померањаОператори померања

<< - померање лево

Пример:

#include <stdio.h>

main()

{

short x=3,y;

y = x<<1;

printf( ”%d\n”, y );}

MEMOРИJA

xx00000000 00001111

yy

xx00000000 00001111

00000 000 00111100

<<<<11

00000000 01100110

6

Page 112: uvod u programiranje predavanja 1

112

Оператори померањаОператори померања

<< - померање лево

Пример:

#include <stdio.h>

main()

{

short x=3,y;

y = x<<4;

printf( ”%d\n”, y );}

MEMOРИJA

xx00000000 00001111

yy

xx00000000 00001111

00011 011 00000000

<<<<44

0011 00000011 0000

48

Page 113: uvod u programiranje predavanja 1

113

Оператори померањаОператори померања

>> - померање десно

Пример:

#include <stdio.h>

main()

{

short x=12,y;

y = x>>1;

printf( ”%d\n”, y );}

MEMOРИJA

xx00000000 11001100

yy

xx00000000 11001100

00000 000 00111100

>>>>11

00000000 01100110

6

Page 114: uvod u programiranje predavanja 1

114

Оператори померањаОператори померања

>> - померање десно

Пример:

#include <stdio.h>

main()

{

short x=-4,y;

y = x>>2;

printf( ”%d\n”, y );}

MEMOРИJA

xx11111111 11110000

yy

xx11111111 11110000

111111 111111 1111

>>>>22

11111111 11111111

-1

Page 115: uvod u programiranje predavanja 1

115

Величина податкаВеличина податка

• Bеличина меморијске локације коју заузима неки податак се може израчунати употребом оператора sizeof.

• Примери:

sizeof( short int);

sizeof( long int);

sizeof( broj_a);

sizeof( broj_a*broj_b-3);

Page 116: uvod u programiranje predavanja 1

116

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

uslov ? izraz1 : izraz2

c= (a>b) ? a : b;

c=(x<=y && y>=z) ? y : (x+z)/2

Page 117: uvod u programiranje predavanja 1

117

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

Условни операторУсловни оператор (?:) (?:)

Општи обликОпшти облик::

uslov ? izraz1 : izraz2uslov ? izraz1 : izraz2

ISTINA LAŽuslov

izraz1 izraz2

нпр. y = 5; x = (y>0) ? 100 : 200; ---------- x 100

нпр. y = -2; x = (y>0) ? 100 : 200; ---------- x 200

Page 118: uvod u programiranje predavanja 1

118

Конверзија типаКонверзија типа

• Бинарни оператори захтевају да два оператора имају исти тип.

• Када то није испуњено долази до аутоматске конверије типова.

5+6.0 /* isto sto i 5.0+6.0*/

5/4+3 /* rezultat 4*/

3.0*5/4 /* (3.0*5)/4=(3.0*5.0)/4

15.0/4 =15.0/4.0=3.75

*/

Page 119: uvod u programiranje predavanja 1

119

Конверзија типаКонверзија типа

• Експлицитном наредба за промену типа применом тзв. cast-оператора.

• Његов општи облик је:(novi_tip) izraz

int a;(char)a; float x;

double y;y=sin((double)x);

Page 120: uvod u programiranje predavanja 1

120

Редослед извршавања оператораРедослед извршавања оператора

• Редослед извршавања оператора је унапред дефинисан одговарајућим приоритетом .

• Заграде ( ) имају највиши приоритет.

Page 121: uvod u programiranje predavanja 1

121

Приоритет оператораПриоритет оператора

Приоритет и асоцијативност оператораПриоритет и асоцијативност оператора

Приоритет Приоритет операториоператори Асоцијативност Асоцијативност

највишинајвиши

најнижинајнижи

(( ) ) { } -> .{ } -> .

! ~ ++ -- + - * & (tip)! ~ ++ -- + - * & (tip)

( ) { } -> .

* / %* / %

! ~ ++ -- + - * & (tip)

+ -+ -

* / %

<< >><< >>

+ + -

< <= > >=< <= > >=

<< >>

== != & ^ | && ||== != & ^ | && ||

< <= > >=

?:?:

== != & ^ | && ||

= += -= *= /= %= &= ^= |== += -= *= /= %= &= ^= |=

?:

,,

= += -= *= /= %= &= ^= |= ,,

Page 122: uvod u programiranje predavanja 1

122

Асоцијативност оператораАсоцијативност оператора

Асоцијативност оператора слева удесно ()тзв. лева асоцијативност оператора

X op Y op Z (X op Y) op Z

Асоцијативност оператора здесна улево ()тзв. десна асоцијативност оператора

X op Y op Z X op (Y op Z)

Page 123: uvod u programiranje predavanja 1

123

Хвала на пажњи

Питања?