5
Садржај курса изјезика С
Садржај курса из језика С
• Дефинисање података
• Оператори
• Наредбе
• Низови
• Показивачи
• Знакови
• Функције
• Претпроцесорске наредбе
• Структуре
• Рад са датотекама
• Повезане листе
6.
6
Историја
Историја
• Програмски језикC је први пут развијен
почетком 1970-тих (Bell Labs, USA)
• Намена: основа за развој оперативног
система UNIX.
• Други виши програмски језици тог
времена (COBOL, FORTRAN, PL/I,
ALGOL...) су били превише спори.
• Као основа за програмски језик C су
послужила два виша програмскa језика:
ALGOL и BCPL.
7.
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
8.
8
Предности С језика
ПредностиС језика
• Опште намене, од ОС до специфичних
проблема
• Врло ефикасни компајлери за вели број
процесора и оперативних система
• Преносивост компајлера
• Моћни оператори
• Мали скуп наредби и богате библиотеке
• Језик средњег нивоа, дакле може
ефикасно да приступи и хардверу
9.
9
Решавање задатака
Решавање задатака
•Анализа задатка, деф. проблема, подела на
делове и одређивање коначног циља
• Разрада алгоритма, тј. Решавање задатка
• Кодирање програма и превођење на
машински језик
• Тестирање и отклањање грешака
• Израда коначне документације
• Употреба и одржавање програма
10.
10
Писање програма
Писање програма
•Скуп наредби (instructions, statements) се
назива кôд (Code ) или
изворни кôд (Source code).
• Фајл који садржи кôд се назива Source file.
• У C програмском језику се низ наредби
групише у целине које се називају
функције (function)
• Сваки програм мора да садржи бар једну
функцију i to funkciju main( )
11.
11
Како изгледа програму језику
Како изгледа програм у језику C
C
#include <stdio.h>
main()
{
printf(“Primjer”);
}
}
Сваки програм мора
да има main
функцију
main()
заглавље
функције
printf(“Primer”);
тело функције
(блок наредби)
{
Почетак блока
}
Крај блока
;
граничник
исказа, наредби
#include <stdio.h>
Претпроцесорска
директива
12.
12
Фазе обраде програма
Фазеобраде програма
1. Писање програма (Editing)
2. Предобрада (Preprocessing)
3. Превођење (Compilation)
4. Повезивање (Linking)
5. Има још једна фаза код модерних
програмских језика а то је пуњење (Loading)
6. Извршавање (Executing)
13.
13
1. Предобрада
1. Предобрада#
# (
(Preprocessing
Preprocessing)
)
• Обавља се програмом који се назива preprocessor.
• Модификује изворни кôд (у RAM-у) у складу сa
наредбама за предобраду (preprocessor directives).
Ове наредбе ближе дефинишу начин превођења.
• Приликом предобраде се занемарују коментари
(comments) и празан простор (white space) из кôда.
• Кôд, који је програмер написао и претходно снимио
на диск, НЕ МЕЊА се у процесу предобраде!
14.
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
15.
15
Претпроцесорка директива
Претпроцесорка директива
•Директиве служе за повезивање програма са
стандардним библиотекама, сваки програм
захтева бар једну stdio.h
– Екстензија .h је од речи header, заглавље
– Корисник може да прави сопствене библиотеке
• Служе за дефинисање симболичких константи,
сва константа има засебну директиву
• Свака директива почиње са #
• Иза ових редова нема ;
16.
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”
”,
, MAXINT
MAXINT );
);
printf(
printf( ”
”%8.5f
%8.5fn”
n”,
, PI );
PI );
printf(
printf( ”
”%
%10
10.
.8
8f
fn”
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
Октална константа започиње са 0
071 = 7*8 + 1*1 = 56 + 1 = 57 dec
#define K_HEX 0x41
Деф. Хексадецималну константу
K_HEX = 0x41
Хексадецимална конст. почиње са 0x
0x41 = 4*16 + 1*1 = 64 + 1 = 65 dec
printf( ”%d”, MAXINT );
printf( ”%8.5fn”, PI );
printf( ”%10.8fn”, EPS );
printf( ”%d %d”,K_OCT, K_HEX );
Главни програм (функција main)
Исписује вредност дефинисаних
константи на екрану
За иепис на екран користи се
стандардна функција printf()
18
2. Превођење (
2.Превођење (Compilation
Compilation)
)
• Програм којим се обавља превођење назива се
преводилац (compiler)
• Изворни кôд, претходно подвргнут предобради,
преводи се у објектни кôд (object code).
• Проверава се синтакса
грешке (errors) и
упозорења (warnings)
• Снима објектни кôд на диск (нови фајл).
• Ако се приликом превођења констатује грешка,
НЕ ГЕНЕРИШЕ се објектни кôд.
19.
19
3. Повезивање (
3.Повезивање (Linking
Linking)
)
• Уколико је кôд писан у више фајлова постоји
више фајлова са објектним кодом.
• Објектни фајлови се повезују у једну целину
како би се формирао извршни фајл
(executable file, са екстензијом .еxe).
• Други објектни фајлови могу да настану
позивањем готових функција из тзв.
библиотека (Libraries, Run-Time Library) или
објектних фајлова које је креирао програмер.
• Уколико се приликом линковања констатује
грешка неће се формирати извршни фајл!
20.
20
Како до извршногпрограма?
Како до извршног програма?
Повезивање
Програм за унос
и обраду текста
filename1.c
filename2.c
...
filenameN.c
Предобрада
Предобрада
Предобрада
Предобрада
filename1.obj
...
filenameN.obj
filename2.obj
Објектни фајлови
Фајл након предобраде,
памти се у RAM-у
Превођење
Превођење
Превођење
Превођење
filename1.obj
filename1.obj
...
filenameN.obj
project_filename.prj
Извршни програм
.exe
22
Врсте грешака
Врсте грешака
•Синтаксне грешке (syntax errors)
• Грешке при извршавању (run time error)
• Грешке намере (semantic error)
23.
23
Синтаксне грешке
Синтаксне грешке
•Неправилно раздвајање инструкција
• Неправилно отварање-затварање коментара
• Коришћење апострофа, наводника, ... Унутар
стринга
• Неправилна употреба зареза или размака
• Позивање функције или променљиве пре него
што је дефинисана
• Употреба функције као инструкције (увек мора
бити на десној страни) и погрешна имена
24.
24
Грешке при извршавању
Грешкепри извршавању
• Неправилна употреба контролних
структура
• Погрешан унос података
• Типски конфликти
25.
25
Грешке намере
Грешке намере
•Погрешан математички модел
• Погрешан алгоритам
• Употреба глобалних променљивих
• Недостају ознаке за поч. и крај блока
• Употреба погрешних услова лог. Фја.
• Појава бесконачне петље
• Занемаривање грешака заокругљивања
26.
26
Формат
Формат C
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;}
27.
27
Формат
Формат C
C програма- стил
програма - стил
#include<stdio.h>
/* C program koji
ispisuje:
"Zdravo!" */
int
main
(
)
{
printf(
"Zdravo!n"
)
;
return
0
;
}
28.
28
Формат
Формат C
C програма
програма
•Најпрегледније, најразумљивије
• Најлакше за тестирање
• Најпогодније за “дораду”
• Правила
#include
<stdio.h >
printf("Ovo je veoma, veoma,
veoma, veoma,duga linija.");
29.
29
Улога заграда инеких граничника
Улога заграда и неких граничника
• () у именима функција, за смештање
аргумената
• {}, означи почетак и крај тела функције,
да издвоји блокове инструкција и
ограничи област важења података
• ; означава крај једног израза или наредбе
• С језик може у једном реду имати јако
дуге и угњеждене изразе (више наредби)
30.
30
Граматика језика
Граматика језика
•Азбука - скуп дозвољених знакова,
симбола
• Лексика – исправно писање недељивих
целина
• Синтакса – исправно писање решеница
• Семантика – смисао
31.
31
Елементи језика
Елементи језикаC
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
• Знаци:
: _ ! ? . , : ; ‘ = + -
/ * # % & | ( ) [ ]
{ } < >
33
Идентификатори
Идентификатори
• Служе заозначавање елемената програма
(података, симболичких константи, нових
типова података, функција ...)
и представљају називе објеката језика
Правила
1.Могу да се састоје од:
– Слова (малих и великих)
– Цифара
– Знака подвучено ( _ )
34.
34
Идентификатори
Идентификатори
2. Први знаку имену мора да буде слово.
Може да буде и знак подвучено али...
3. Дужина имена идентификатора да не буде већа од
31 карактера
Пример:
JednaPromenljivaKojaImaKarakteraJakoPuno = 1
JednaPromenljivaKojaImaKarakteraSamoJedanVise = 3
4. C разликује мала и велика слова (Rezultat и rezultat)
Case Sensitive
5. Имена идентификатора не могу да буду из скупа
службених речи.
36
неисправни идентификатори
неисправни идентификатори
70fспочиње бројем
x-name знак - није дозвољен
ime sa razmakom размак није дозвољен
int резервисана реч
axx& знак & није дозвољен
Površina*kruga знак * није дозвољен
jedan,dva знак , није дозвољен
37.
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
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)
40.
40
Подаци, Променљиве итипови података
Подаци, Променљиве и типови података
• Подаци су предмет обраде у програмима.
• Сваки податак има одређене особине, а
скуп свих особина једног податка
одређује тип податка.
• Тип податка је одређен:
– скупом могућих вредности које податак
може да узме и
– скупом могућих операција које је могуће
извести над податком.
41.
41
Подаци
Подаци
• Подаци упрограму могу да се представе
помоћу:
– вредности или
– идентификатора.
c=a+5
• Подаци педставњени преко вредности се
називају константе
• Подаци педстављени преко
идентификатора се називају променљиве
42.
42
Подаци – симболичкеконстанте
Подаци – симболичке константе
• Посебан случај непроменљивих података
представљају симболичке константе.
#define PI=3.14;
#define MIN_RASTOJANJE=2;
#define Broj_Semestara=8;
43.
43
Имена, идентификатори променљивих
Променљиве(варијабле)
Променљива је симболичко име за неку меморијску локацију
Свака променљива мора имати неко јединствено име!?
име се формира од слова, цифара и знака _
први знак не може бити цифра
максимално 31 знак
разликују се мала и велика слова: име Slovo различито од slovo
МЕМОРИЈА
МЕМОРИЈА
broj
BROJ
podatak_1
Broj-1
123A
44.
44
Променљиве
Променљиве
СВАКА ПРОМЕНЉИВА МОРАБИТИ ТАЧНО ОДРЕЂЕНОГ ТИПА
Тип променљиве не може се мењати током извршења програма
променљива може бити неког
-скаларног - описана једним бројем, или
-нескаларног типа - састоји се од више делова од којих је сваки и
засебан и део податка
Може да се мења вредност (садржај меморијске локације)
зато се и зове променљива (varijabla)
MEMORIJA
int
char
A
x
Z
G
a ABC
2.35
13
13
6
-
6
5
7
ABC
2.35
D
45.
45
Типови променљивих података
Типовипроменљивих података
• Тип неког податка одређује :
– Меморијски простор који података заузима
– Скуп вредности који тај податак може да има
– Скуп операција дефинисаних над њим.
• Програмски језик C
C познаје само
нумеричке типове података
– целобројни нумерички типови
– реални нумерички типови.
46.
46
Целобројни типови података
Целобројнитипови података
• Име типа:
–int
–short int
–long int
• Опсег вредности: цели бројеви (унутар
датог опсега)
– Пример: 5, -35, 401
• Операције: аритметичке (сабирање,
одузимање, множење, …), друге
47.
47
Целобројни типови података
Целобројнитипови података
• сваки од ових типова може бити
неозначен (само позитивне вредности)
–unsigned int
–unsigned short int
–unsigned long int
48.
48
Пример опсега вредности
Примеропсега вредности
Тип Бајтова Бита Mин вред. Maкс вред.
short int 2 16 -32768 32767
int 4(2) 32 -2147483648 2147483647
long int 4 32 -2147483648 2147483647
не заборавите signed unsigned
49.
49
Зашто постоје ограничења
Заштопостоје ограничења
• Са одређеним бројем бита, могуће је
дефинисати одређени скуп вредности
• 16 бита, 65 536 могућих вредности
– 32768 негативних вредности
– 1 нула
– 32767 позитивних вредности
• Прекорачење (Overflow):
– покушај да се променљивој додели сувише
велика вредности (40 000 у short int)
50.
50
Целобројни типови података
Целобројнитипови података
Тип char
• Мали означени целобројни податак
• величине 8 бита (1 бајт).
• Намењен за манипулацију карактерима, али
може послужити и за рад са малим бројевима
са вредностима у распону од од 128 до 128.
• unsigned char може имати вредности од 0
до 255.
( ASCII табела има 256 знакова).
51.
51
Реални типови података
Реалнитипови података
• Име типа:
–float (4 bajta)
–double (8 bajtova)
–long double (10 bajtova)
• Могуће вредности: реални бројеви,
5.0, -3.5, 4.01
• Операције: аритметичке (сабирање,
одузимање, множење, …), друге
52.
52
Реални типови података
Реалнитипови података
float: 4 бајта, 32 бита
double: 8 bајтова, 64 бита
long double: 10 бајтова, 80 бита
• Представљање:
– mEe
– m магнитуда, мантиса (одређени број бита),
децимални број и Е ознака за степеновање
са основом
– е експонент, цео број са знаком
54
Целобројне нум. константе
Целобројненум. константе
• Могу бити написане у
– децималном,
– хексадецималном (основе 16) и
– окталном (основе 8) бројевном систему.
974 Декадна константа типа int
0x2fc хексадецимална константа типа int
974l декадна константа типа long int
01234L октална константа типа long int
56
Реалне нум. константе
Реалненум. константе
• Могу бити написане у само у децималном
бројевном систему.
2.54Е-34 представља вредност 2.54 10-34
1.23 3е5
125. 2.1Е-45
.456 22.3F
Подразумевани тип је double
Додавањем суфикса F или f постаје float
57.
57
Дефинисање података
Дефинисање података
•Сваки податак (променљива) мора да се
дефинише пре употребе!
• Општи облик наредбе је
tip_podatka ime_podatka;
или
tip_podatka ime_podatka = početna_vrednost;
tip_podatka ime_podatka[= početna_vrednost];
58.
58
Дефиниција променљиве
Дефиниција променљиве
Преводиоцу(компајлеру) се мора указати на то
да ће се у програму користити нека
променљива, како би он могао да резервише
потребан простор у меморији
Општи облик дефиниције променљиве:
tip imepromjenljive [=vrednost]
Почетна вредност
Не мора се додељивати!!
[ ] ове заграде се користе да би се нагласило да
нешто није обавезно
[=vrednost]
На пример.
int i,j,n=10;
float a, e=2.71;
char znak=’+’,c;
60
Иницијализација
Иницијализација
• је додељивањепочетне вредности (initial value)
променљивој
• Промељива се не мора иницијализовати
(вредност је у том случају случајна)
tip_podatka ime_podatka [=početna_vrednost],
...,ime_podatka [= početna_vrednost];
Пример:
int broj=2, prisutni=0, godina=2004, br_sati;
61.
61
Дефинисање непроменљивих података
Дефинисањенепроменљивих података
• Непроменљиви подаци су именовани подаци
чија се вредност не мења.
• Дефинишу се на сличан начин с тим да:
– дефинисање почиње са кључном речи const
– мора бити додељена почетна вредност
• Општи облик дефинисања непроменљивих
података
const tip_podatka ime_podatka =
početna_vrednost;
62.
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;
63.
63
Читање и писањеподатака
Читање и писање података
• Сви подаци који се уносе са тастатуре се
прихватају као знакови (character).
• Улазна конверзија се у програмском језику C
обавља преко уграђене функције scanf()
• Приликом исписа података на монитор
потребно је да се обави излазна конверзија,
• Ова конверзија се обавља применом
уграђене функције printf()
64.
64
Читање и писањеподатака
Читање и писање података
• Информације о функцијама scanf() и
printf() налазе се у фајлу stdio.h.
• Име stdio потиче од standard input output a
екстензија .h од header (заглавље).
#include <stdio.h>
#include "c:nekoime.h"
65.
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
66.
66
Писање података
Писање података
printf("Ovoje jednostavna poruka")
• Резултат: Ovo je jednostavna poruka
printf(format,izraz,...,izraz)
• izraz може да представља име променљиве,
вредност константе или аритметички израз
format има облик:
”%[Sirina][.Prec]Tip_kon”
67.
67
”
”%
%[
[Sirina
Sirina][.Prec]
][.Prec]Tip
Tip_
_kon
kon”
”
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
у зависности од тога који је погоднији за приказ
68.
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
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=%dn”, i );
printf( ”j=%dn”, j );
printf( ”a=%6.2fn”, a );
printf( ”b=%6.2fn”, b );
}
MEMOРИJA
j
j
a
a
b
b
i
i
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 1001
0000 1001
0000 0000
0000 0000
9
0000 0100
0000 0100
0000 0000
0000 0000
4
1001 0000
1001 0000
0100 0000
0100 0000
0000 0000
0000 0000
0000 0000
0000 0000
4.5
j=i/2;
a=i/2.0;
a=i/2.0;
a=i/2.0;
b=a*2.0/j;
0001 0000
0001 0000
0100 0000
0100 0000
0000 0000
0000 0000
0000 0000
0000 0000
2.25
71.
71
”
”%[
%[Sirina
Sirina][
][.Prec
.Prec]
]Tip
Tip_
_kon
kon”
”
• .Prec представљапрецизност исписа
значај само за реалне бројеве: ( e, f, g)
• одређује број цифара које ће бити исписане
након децималне тачке.
• Подразумевана вредност је 6.
• Уколико је наведена прецизност мања од броја
децимала: исписује се онолико цифара колико
прецизност дефинише а последња цифра се
заокржује.
• За тип конверзије g: одређује укупан број
цифара који ће се исписати (целобројни
+децимални део). Нема заокруживања.
75
”
”%[
%[Sirina
Sirina][.Prec]
][.Prec]Tip
Tip_
_kon
kon”
”
• Sirina Одређујеминимални број карактера
који се резервише за испис неког броја. То је
позитивна вредност. Уколико је за испис
потребно мање карактера од броја који је
одређен параметром Sirina, испис се
допуњава бленковима (размацима) и поравнава
се у десно.
• Уколико се испред параметра Sirina наведе
0 бленкови се, уколико постоје, замењују
нулама.
76.
76
”
”%[
%[Sirina
Sirina][.Prec]
][.Prec]Tip
Tip_
_kon
kon”
”
• printf(″%5c%4d″, ’A’,35);
резултат је: А 35 /* четири бленка
испред А и два бленка испред 35
• printf(″%04d″, 35);
• резултат је: 0035 /* нуле замењују празна
места
• printf("%07.3f", 42.123); /*042.123*/
укупно 7 цифара од тога три цифре након
децим. тачке и једна за децим. тачку */
77.
77
Додатно форматирање
Додатно форматирање
escapesequence
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
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=%dn”, i );
printf( ”j=%dn”, j );
printf( ”a=%6.2fn”, a );
printf( ”b=%6.2fn”, b );
}
MEMORIJA
j
a
b
i
0000 1001
0000 0000
9
0000 0100
0000 0000
4
1001 0000
0100 0000
0000 0000
0000 0000
4.5
0001 0000
0100 0000
0000 0000
0000 0000
2.25
b=a*2.0/j;
printf( ”i=%dn”, i );
i=9
printf( ”i=%dn”, i );
printf( ”j=%dn”, j );
j=4
printf( ”j=%dn”, j );
printf( ”a=%6.2fn”, a );
a= 4.50
printf( ”a=%6.2fn”, a );
printf( ”b=%6.2fn”, b );
b= 2.25
80.
80
Читање података-стандардни улаз
Читањеподатака-стандардни улаз
• Општи облик наредбе је следећи:
scanf(format,&podatak,...,&podatak)
• Oператор & испред имена променљиве означава
да се функцији scanf() додељује меморијска
адреса променљиве (податка) на коју се уписује
резултат конверзије.
• format има исти облик као и код функције
printf().
81.
81
Стандардни улаз података
Стандардниулаз података
Пример:
#include <stdio.h>
main()
{
int broj;
/*printf( ”Unesite ceо broj:n” );*/
scanf( ”%d”, &broj );
printf( ”Uneli ste %dn”, broj );
}
}
MEMOРИЈA
broj
broj
_
6
00
0000
00 0110
0110
0000 0
0000 000
000
0
Uneli ste 6
82.
82
Стандардни улаз података
Стандардниулаз података
Primjer:
#include <stdio.h>
main()
{
int broj;
printf( ”Unesite cео broj:n” );
scanf( ”%d”, &broj );
printf( ”Uneli ste %dn”, broj );
}
}
MEMOРИJA
broj
broj
Unesite cео broj:
6
00
0000
00 0110
0110
0000 0
0000 000
000
0
Uneli ste 6
Пре сваке наредбе за унос
пошаљите поруку на екран!!
83.
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%fn",cVar, dVar,
fVar);
}
87
Оператори
Оператори
• Радње којесе извршавају над операндима
и које дају одређени резултат.
– Аритметички оператори
– Оператор доделе вредности
– Релацијски оператори
– Логички оператори
– Оператори по битовима
– Величина податка
– Условни израз
88.
88
Аритметички оператори
Аритметички оператори
Бинарни оператори
Име Oператор Пример
Сабирање + num1 + num2
Одузимање - initial - spent
Множење * kolicna * 6
Дељење / suma /kolicina
Модуо % m % n
89.
89
Дељење
Дељење
• Ако суоба операнда при дељењу типа int
онда ће и резултат бити типа int.
17 / 5 = 3
4 / 3 = 1
35 / 9 = 3
#include <stdio.h>
main()
{
int x=5, y=2, а;
float z;
а=x/y; /* a=2 */
z=x/y; /* z = 2.5 */
}
90.
90
Дељење
Дељење
• Aко јебар један операнд типа float
резултат ће бити типа float.
• Примери: 17.0/ 5 = 3.4
4/ 3.2 = 1.25
35.2/9.1 = 3.86813
• Објашњење? Целобројни (int) операнд се
привремено конвертује у реалну вредност
(float), па се онда обави дељење.
91.
91
Дељење нулом
Дељење нулом
•Дељење нулом није математички
дефинисано.
• Ако у току извршавања програма дође до
дељења нулом то ће проузроковати
прекид извшења програма fatal error.
92.
92
Модуо - Остатакпри дељењу
Модуо - Остатак при дељењу
• Израрз m % n даје целобројни остатак
дељења m са n.
• Оба операнда МОРАЈУ бити целобројна
• Примери : 17 % 5 = 2
6 % 3 = 0
9 % 2 = 1
5 % 8 = 5
a % b = a – (a/b)*b
93.
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:%02dn”, sek/3600,sek%3600/60,sek
%60 );
}
}
Unesite vreme u sekundama: 4000
To je: 01:06:40
Пример употребе % оператора
94.
94
Аритметички оператори
Аритметички оператори
•Унарни оператори: +, -
Представљају предзнак операнда
• Унарни оператори: ++, −−
Оператор ++ увећава вредност операнда за 1
(increment).
Оператор −− умањује вредност операнда за 1
(decrement).
95.
95
Унарни оператори: ++,−−
Унарни оператори: ++, −−
а++; /* одговара наредби а = а+1; */
++а; /* одговара наредби а = а+1; */
а--; /* одговара наредби а = а-1; */
--а; /* одговара наредби а = а-1; */
96.
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*/
98
Оператор доделе вредности
Оператордоделе вредности
Пример:
#include <stdio.h>
main()
{
int a,b,c;
a=b=c=10;
printf( ”%d %d %dn”, a,b,c );
a = (b=10) + (c=20);
printf( ”%d %d %dn”, a,b,c );
}
MEMOРИJA
a
a
0000 1010
0000 1010
0000 0000
0000 0000
b
b
0000 1010
0000 1010
0000 0000
0000 0000
c
c
0000 1010
0000 1010
0000 0000
0000 0000
10 10 10
0001 0100
0001 0100
0000 0000
0000 0000
0001 1110
0001 1110
0000 0000
0000 0000
30 10 20
99.
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); */
100.
100
Релацијски оператори
Релацијски оператори
>веће од a > b
< мање од a < b
>= веће и једнако a >= b
<= мање и једнако a <= b
== једнако a == b
!= није једнако a != b
• Резултати поређења су целобројног типа
(int) и могу имати вредност:
– 1 ако релација важи или
– 0 уколико релација не важи.
101.
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 */
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 */
104.
104
Оператори по битовима
Операторипо битовима
~ комплемент
<< логичко попмерање у лево
>> логичко померање у десно
& логичко И на битском нивоу
| логичко ИЛИ на битском нивоу
^ ексклузивно или (exor)
107
Оператори над битовима,пример
Оператори над битовима, пример
& - битско AND
Пример:
#include <stdio.h>
main()
{
char c=’9’;
short cifra;
cifra = c & 0x0F;
printf( ”%dn”, cifra );
}
MEMOРИJA
c
c
00
0011
11 10
1001
01
cifra
cifra
c
c
00
0011
11 10
1001
01
00
0000
00 1
1001
001
0x0F
0x0F
00
0000
00 1
1111
111
&
&
00
0000
00 1
1001
001
9
108.
108
Оператори над битовима,пример
Оператори над битовима, пример
| - битско OR
Пример:
#include <stdio.h>
main()
{
short cifra=9;
char c;
c = cifra | 0x30;
printf( ”%cn”, c );
}
MEMORIJA
cifra
cifra
00
0000
00 10
1001
01
c
c
cifra
cifra
00
0000
00 10
1001
01
00
0011
11 1
1001
001
0x30
0x30
00
0011
11 0000
0000
|
|
00
0011
11 1
1001
001
9
109.
109
Оператори над битовима
Операторинад битовима
~ - битско NOT
Пример:
#include <stdio.h>
main()
{
short x=1,y;
y = ~x;
printf( ”%dn”, y );
}
MEMOРИJA
x
x
00
0000
00 0
00
001
01
y
y
x
x
00
0000
00 0
00
001
01
1111
1111 1110
1110
~
~
1111
1111 1110
1110
-2
110.
110
Оператори над битовима
Операторинад битовима
^ - XOR (EX ILI)
Пример:
#include <stdio.h>
main()
{
short x=0x73,y;
y = x^0x32;
printf( ”%cn”, y );
}
MEMORIJA
x
x
0
0111
111 0011
0011
y
y
x
x
0
0111
111 0011
0011
0
0100
100 0001
0001
0x32
0x32
00
0011
11 0010
0010
^
^
0
0100
100 0001
0001
A
111.
111
Оператори померања
Оператори померања
<<- померање лево
Пример:
#include <stdio.h>
main()
{
short x=3,y;
y = x<<1;
printf( ”%dn”, y );
}
MEMOРИJA
x
x
00
0000
00 0
00
011
11
y
y
x
x
00
0000
00 0
00
011
11
0
0000
000 0
011
110
0
<<
<<1
1
0000
0000 0110
0110
6
112.
112
Оператори померања
Оператори померања
<<- померање лево
Пример:
#include <stdio.h>
main()
{
short x=3,y;
y = x<<4;
printf( ”%dn”, y );
}
MEMOРИJA
x
x
00
0000
00 0
00
011
11
y
y
x
x
00
0000
00 0
00
011
11
0
0011
011 0
0000
000
<<
<<4
4
0011 0000
0011 0000
48
113.
113
Оператори померања
Оператори померања
>>- померање десно
Пример:
#include <stdio.h>
main()
{
short x=12,y;
y = x>>1;
printf( ”%dn”, y );
}
MEMOРИJA
x
x
00
0000
00 1100
1100
y
y
x
x
00
0000
00 1100
1100
0
0000
000 0
011
110
0
>>
>>1
1
0000
0000 0110
0110
6
114.
114
Оператори померања
Оператори померања
>>- померање десно
Пример:
#include <stdio.h>
main()
{
short x=-4,y;
y = x>>2;
printf( ”%dn”, y );
}
MEMOРИJA
x
x
1111
1111 11
110
00
0
y
y
x
x
1111
1111 11
110
00
0
11
1111 1111
11 1111
>>
>>2
2
1111
1111 1111
1111
-1
115.
115
Величина податка
Величина податка
•Bеличина меморијске локације коју
заузима неки податак се може израчунати
употребом оператора sizeof.
• Примери:
sizeof( short int);
sizeof( long int);
sizeof( broj_a);
sizeof( broj_a*broj_b-3);
117
Условни оператор
Условни оператор
Условниоператор
Условни оператор (?:)
(?:)
Општи облик
Општи облик:
:
uslov ? izraz1 : izraz2
uslov ? 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
118.
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
*/
119.
119
Конверзија типа
Конверзија типа
•Експлицитном наредба за промену типа
применом тзв. cast-оператора.
• Његов општи облик је:
(novi_tip) izraz
int a;
(char)a;
float x;
double y;
y=sin((double)x);
120.
120
Редослед извршавања оператора
Редоследизвршавања оператора
• Редослед извршавања оператора је
унапред дефинисан одговарајућим
приоритетом .
• Заграде ( ) имају највиши приоритет.