Upload
anon431018856
View
214
Download
0
Embed Size (px)
Citation preview
8/18/2019 Uvodno Predavanje c 2 (1)2
1/42
UVOD U
Programski jezik
C
Prof. dr Borivoje Milošević
8/18/2019 Uvodno Predavanje c 2 (1)2
2/42
1-2
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Uvod
Programski jezik C dizajnirao je Dennis Ritchie iz BellLaboratories ranih 1970.Oslonjen je na
•
ALGOL 60 (1960),•
CPL (Cambridge, 1963),•
BCPL (Martin Richard, 1967),
•
B (Ken Thompson, 1970)Tradicionalno se koristi za sistemsko programiranje, Ipredstavlja podskup C++ jezika
Tradicionalni C je opisan u knjizi:•
The C Programming Language , by Brian Kernighan and DennisRitchie, 2nd
Edition, Prentice Hall
8/18/2019 Uvodno Predavanje c 2 (1)2
3/42
1-3
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Standard C
Standardizovan je 1989 od ANSI (American NationalStandards Institute) poznat kao ANSI C
Internacionalni standard (ISO) 1990. godine usvojen jeod strane ANSI organizacije i
poznat je kao C89
Kao deo normalnog procesa evaluacije standard jeapdejtovan godije 1995. (C95 ) i 1999 (C99 ) C++ i C•
C++ proširenje
C sada uključuje podršku za Object OrientedProgramming i mnoge druge funkcije koje omogućujusučeljavanje sa velikim razvojnim projektima
•
C nije striktno podskup jezika
C++, ali moguće je pisatitakozvani “Clean C ” koji uključuje oba standarda i za C++ i za
C.
8/18/2019 Uvodno Predavanje c 2 (1)2
4/42
1-4
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Source i
Header fajlovi
Header files (*.h) uvode zajedničke definicije za interfejse:•
function prototypes, data types, macros, inline functions i
druge
common deklaracije
Ne treba stavljati
sourc cod (npr.
definitions) u
regione headerfile, sem kod nekoliko izuzetaka:
•
inline’d code•
class definitions•
const definitions
C predrocesor (cpp) se koristi da insertuje zajedničke definicije usource files
Ali postoje i drugi razlozi zbog kojih pišemo naredbe u regionupredprocesora
8/18/2019 Uvodno Predavanje c 2 (1)2
5/42
1-5
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
C Standardni
Header Files koje možemo koristiti
•
stdio.h
–
file i
console (takođ e i
file) IO: perror , printf , open ,close , read , write , scanf , itd.
•
stdlib.h
-
common utility functions: malloc , calloc , strtol , atoi,etc•
string.h
-
string i
byte manipulatcija: strlen , strcpy , strcat ,memcpy , memset , etc.
•
ctype.h
–
tipovi karaktera: isalnum , isprint , isupport , tolower ,itd.•
errno.h
–
definisanje
errno korišćenjem alata
reporting systemerrors
•
math.h
–
matematičke
funkcije: ceil , exp , floor , sqrt , itd.•
signal.h
–
signalne funkcije: raise , signal , itd•
stdint.h
–
standardni
integer
tip: intN_t , uintN_t , itd•
time.h
–
funkcije vremena:
asctime , clock , time_t , itd.
8/18/2019 Uvodno Predavanje c 2 (1)2
6/42
1-6
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
PredrocesorC predrocesor nam dozvoljava da definišemo jednostavne makroekoji se uvode i evalorizuju pre kompilacije.
Komande počinju sa
‘#’. Skraćena
lista može biti:•
#define
: definicija
makroa•
#undef
: uklanjanje definicije makroa•
#include
: insertovanje
teksta
iz datoteke
•
#if
: uslov zasnovan na vrednosti izraza•
#ifdef
: uslov zasnovan
makro definiciji•
#ifndef
: uslov zasnovan
za nedefinisane makroe•
#else
: alternativa•
#elif
: uslovna
alternativa•
defined()
: predrocesorska
funkcija: 1 ako je definisano ime, usuprotnom
0
8/18/2019 Uvodno Predavanje c 2 (1)2
7/42
1-7
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Predrocesor: Makroi
Korišćenje
makro funkcija:•
primer: #define mymult(a,b) a*b Izvorno: k = mymult(i-1, j+5);Post predrocesirano: k = i – 1 * j + 5;
•
bolje: #define mymult(a,b) (a)*(b) Izvorno : k = mymult(i-1, j+5);Post predrocesirano : k = (i – 1)*(j + 5);
Biti obazriv
na efekat strane, naprimer •
Macro: #define mysq(a) (a)*(a)•
flawed usage: Izvorno : k = mysq(i++)Post predrocesirano : k = (i++)*(i++)
Alternativno je korišćenje
inline funkcija• inline int mysq(int a) {return a*a};
• mysq(i++) radi kao što je opisano.
8/18/2019 Uvodno Predavanje c 2 (1)2
8/42
1-8
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
C: High-Level
Language
Dopušta
simbolička
imena
i vrednosti•
ne mora se poznavati koji se registar ili memorija koristi zasmeštanje podataka
Obezbeđ uje
apstrakciju
prema
hardveru•
operacije
ne zavise od seta instrukcija
Obezbeđ uje
široku izražajnost jezika•
korišćenje
sadržajnih simbola
sa prenosnim značenjem
•
jednostavni izrazi za blokove zajedničke kontrole
(if-then-else)
Sopstveni resursi za borbu protiv grešaka
8/18/2019 Uvodno Predavanje c 2 (1)2
9/42
1-9
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Kompilacija
vs. Interpretacija
Različiti načini za prevođ enje
high-level jezikaInterpretacija
•
interpreter = program koji izvršava programske naredbe•
generalno jedna
linija/komanda u vremenu•
limitirano
procesiranje•
lako vršenje
debug
opcija,
promena,
sagledavanja
međ urezultata•
jezici:
BASIC, LISP, Perl, Java, Matlab, C-shell
Kompilacija
•
prevodi naredbe u mašinski jezikne izvršava, već kreira izvršni program•
obezbeđ uje optimizaciju preko velikog broja naredbi•
menjka neophodne uslove za rekompilacijuteže se sprovodi debug jezici: C, C++, Fortran, Pascal
8/18/2019 Uvodno Predavanje c 2 (1)2
10/42
1-10
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Kompilacija
C
ProgramaČitav mehanizam se naziva
“compiler”Predrocesor
•
uključenje makroa
•
uslovna
kompilacija
•
“source-level”
transformacije
izlaz je još uvek C
Kompajler •
generiše
object file
machinske instrukcije
Linker •
kombinuje
objektne
fajlove
(uključujući
libraries)
u izvršnu sliku image
CSource andHeader Files
C Preprocessor
Compiler
Source Code Analysis
Target CodeSynthesis
Symbol Table
Linker
ExecutableImage
LibraryObject Files
8/18/2019 Uvodno Predavanje c 2 (1)2
11/42
1-11
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Kompajler
Analiza Source
Coda•
“front end”
•
parsovanje
programa
za identifikaciju njegovih delova
promenljive, izrazi, naredbe, funkcije, itd.•
u zavisnosti od jezika
(ne od mašine)
Generisanje koda
•
“back end”•
generisanje
mašinskog
koda
iz analiziranog izvornog programa
•
optimizacija
mašinskog
koda
•
zavisno od određene mašinTabela simbola
•
mapiranje između simboličkih imena i stavki
•
kao
asembler, ali sa mnogo više informacija
8/18/2019 Uvodno Predavanje c 2 (1)2
12/42
1-12
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Pisanje i pokretanje programa#include
/* The simplest C Program */
int main(int argc, char **argv)
{
printf(“Hello World\n”);
return 0;
}
1. Napisati teks programa
(source code) kori[‘enjemeditora kao što je
Visual C++,
i zapamtiti fajl kao npr..my_program.c
2.Pokrenuti
kompajler
da bi konvertovali program u jednu “executable”
ili
“binary”
verziju:
my_program
$ gcc -Wall –g my_program.c –o my_program
tt.c: In function `main':
tt.c:6: parse error before `x'
tt.c:5: parm types given both in parmlist and separately
tt.c:8: `x' undeclared (first use in this function)
tt.c:8: (Each undeclared identifier is reported only once
tt.c:8: for each function it appears in.)
tt.c:10: warning: control reaches end of non-void function
tt.c: At top level:
tt.c:11: parse error before `return'
3-N. Kompajler
će nam ukazati na greške -
errors
iliupozoranja -
warning;
editovati
source file, ispravitigraške i izvršiti re-kompilaciju
N. Pokrenuti programi videti kako radi.
☺. / ?
Šta ako ne radi?
8/18/2019 Uvodno Predavanje c 2 (1)2
13/42
1-13
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
C Sintaksa i pozdrav Hello
World
#include
/* The simplest C Program */int
main()
{
printf(“Hello
World\n”);return 0;
}
main() funkcija
je uvek nasamom početku programa.
#include insertuje druge
fajlove.
“.h”
fajlove nazivamo
“header”
files. Oni sadrže stvari potrebne da bi sepovezale biblioteke i kod programa.
Ovo je komentar.
Kompajler
ga ignoriše.
Blos
koda
(“lexical scopes”)
odvojen je zagradama
{ …
}
Štampanje poruke.
‘\n’
znači
“new line”.Return ‘0’
iz ove funkcije
Šta znači?
Da li program može imativiše
.c fajlova?
8/18/2019 Uvodno Predavanje c 2 (1)2
14/42
1-14
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Značenje naredbi
#include Naredbom se od prevodioca traži da uključi (include) u program datotekustdio.h koja sadrži informacije nužne za korišćenje funkcije printf i mnogih drugih.Datoteke sa ekstenzijom .h nazivaju se datoteke zaglavlja (eng. header files) i njihovostavljanje u oštre zagrade < > informiše prevodilac da se radi ostandardnim datotekama zaglavlja, koje se nalaze na unapred određenim mestima u
sistemu datoteka.Sledeća linija predstavlja deklaraciju funkcije main:
int main(void)Funkcija može uzimati jedan ili više argumenata i obično vraća neku vrednost.
Deklaracijom se uvodi ime funkcije, broj i tip argumenata koje uzima i tip povratne
vrednosti. U našem primeru ime funkcije je main i ona ne uzima ni jedan argument. To je deklarisano tako što je u male zagrade stavljena ključna rec void (eng. void=prazan).Povratna vrednost je tipa int, što je oznaka za celi broj.
Iza malih zagrada dolaze velike zagrade koje omeđuju telo programa.Telo funkcije -
programa je sastavljeno od deklaracija promenljivih i izvršnih naredbi.Svedeklaracije promenljivih dolaze pre prve izvršne naredbe. U našem primeru nemamodeklaraciju promenljivih. Telo sadrži samo dve naredbe: poziv funkcije printf i returnnaredbu:{printf(“Hello World.\n");return 0;}
8/18/2019 Uvodno Predavanje c 2 (1)2
15/42
1-15
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Još
o kompajleruinclude /* The simplest C Program */
int main(int argc, char
**argv)
{
printf(“Hello World\n”);
return 0;
}
__extension__ typedef unsigned long long
int __dev_t;
__extension__ typedef unsigned int
__uid_t;
__extension__ typedef unsigned int
__gid_t;
__extension__ typedef unsigned long int
__ino_t;
__extension__ typedef unsigned long long
int __ino64_t;
__extension__ typedef unsigned int
__nlink_t;
__extension__ typedef long int __off_t;
__extension__ typedef long long int
__off64_t;
extern void flockfile (FILE *__stream) ;
extern int ftrylockfile (FILE *__stream) ;
extern void funlockfile (FILE *__stream) ;
int main(int argc, char **argv)
{
printf(“Hello World\n”);
return 0;
}
Kompilacija se izvodi u dvaprolaza:“Preprocessing”
i
“Compiling”
U
Predprocesiranju,
source code je
“expanded”
uformu koja je jednostavnija kompajleru zarazumevanje.
Svaka linija koja počinje sa
‘#’
je
linija koju Preprocessor
mora interpretirati.
• Includovani
fajlovi su “pasted
in”
(#include)• Makroi
su
“expanded”
(#define)• Comentari su ‘’stripped
out’’
( /* */ , // )
Preprocess
Compile
Kompajler
onda konvertuje
dobijeni tekst u
binarni
kod, koji CPU
može direktno pokrenuti.
\ ?
Zašto
?
my_program
8/18/2019 Uvodno Predavanje c 2 (1)2
16/42
1-16
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Šta je
“Memorija”?Memorija
je kao velika tabela
numerisanihmesta, gde bitovi podataka mogu bitizapamćeni. Add
r Value
0
12
3
4 ‘H’
(72)5 ‘e’
(101)
6 ‘l’
(108)
7 ‘l’
(108)8 ‘o’
(111)
9 ‘\n’
(10)
10 ‘\0’
(0)11
Broj mesta je njegova
Adresa.Samo jedan
byte vrednosti
može biti
zapamćen na jednom mestu.
Neke vrednosti
“logical”
podataka
zahtevaju
više od jednog mesta, kao npr. karakter string
“Hello\n”
72?
Tip
označava
logičku veličinu podatka zassmeštaj u memoriji. Neki jednostavnitipovi podataka su:
char
char [10]
int
float
int64_t
a single character (1 slot)an array of 10 characterssigned 4 byte integer 4 byte floating pointsigned 8 byte integer
ne uvek…
Šta je Signed?…
8/18/2019 Uvodno Predavanje c 2 (1)2
17/42
1-17
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Šta je promenljiva?
char x;
char y=‘e’;
Promenljiva imenuje mesto u memoriji gdese pamti Vrednost
za nju određenog
Tipa.Symbol Add
r Value
0
12
3
x 4 ?y 5 ‘e’
(101)
6
78
9
1011
Prvo moramo da
definišemo promenljivudajući joj ime i specificirajući njen
tip,
aopciono i njenu inicijalnu vrednost.
declare vs
define?
Tip je jedan karakter
(char)
extern? static? const?
Ime Koja imena su
legalna?
Inicijalnavrednost
Inicfijalna vrednost
x nije
definisana
Kompajler
je postavljanegde u memoriji.
symbol table?
8/18/2019 Uvodno Predavanje c 2 (1)2
18/42
1-18
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Tipovi promenljivih
Tipovi promenljivih:
char
jedan znak,
short
\kratki" celi broj,
int
celi broj,long
\dugi" celi broj,
float
realan broj jednostruke preciznosti,
double
realan broj dvostruke preciznosti.
Č Š Š
8/18/2019 Uvodno Predavanje c 2 (1)2
19/42
1-19
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Ključne reči
Keywords
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
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ P ki j i i 1
8/18/2019 Uvodno Predavanje c 2 (1)2
20/42
1-20
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Logicki podaci
U ANSI C-u (standard C90) ne postoji poseban logički tip.Svaki celobrojni tip može preuzeti ulogu logičkog tipa tako štose vrednost različita od nule interpretira kao istina, a nula kao
laž.
Standard C99 uvodi poseban logički tip Bool koji prima samovrednosti 0 i 1 (‘’laz" i ‘’istina"). I nadalje se celobrojnepromenljive mogu koristiti za prezentaciju logičkih vrednosti, aliupotreba novog tipa može učiniti program jasnijim. Ključna rečBool je izabrana da se izbegnu konflikti sa aplikacijama koje su
implementirale svoj tip bool. Korisnik može uključiti datotekuzaglavlja u kojoj se donira bool kao sinonim zaBool tip podatka, kada se uvode simbolička imena true i false.
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ P ki j i i 1
8/18/2019 Uvodno Predavanje c 2 (1)2
21/42
1-21
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Promenljive i konstanteKonstanta je specifična vrednost
koja se ne može modifikovatiu programu.
Specijalne konstante korišćenesa stringom:
\n new line \t tabulator \r carriage return \b backspace
\" escape double quote \0 end string
Simboli definisanipredprocesorskim
naredbama:#define ESC '\033’
/* ASCII
escape */
Promenljive
specificiraju mesto umemoriji
koje sadrži vrednost datusvojim tipom koja se može modifikovatikroz program.
short x;long y;unsigned a,b;long double lb;
unsigned short z;
•sizeof()
je
funkcija
koja vraćaveličinupromenljive u bajtima.
•Promenljive se moraju inicijalizovati prenego se koriste u programu, jer ćedrugačije dobiti proizvoljnu vrednost.
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
22/42
1-22
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Promenljive i konstante
Celobrojne dekadne:
1; 50; 15+55; -55
Realne u fiksnom
zarezu:
3.14; +3.0; -0.314;
Realne u pokretnom
zarezu:
3.14 E 0; -0.314E-2
Kompleksne
konstante:
(3.14, 0.13)
Binarne konstante:
10111; 000l
Oktalne konstante:
0567; 0753; 0104
Heksadecimalne
konstante:
0XIF; 0XAA; 0Xll
Logičke
konstante:
true; false
Znakovne konstante:
' A ' ; ' B '
String konstante:
"Beograd";"Alfa
l"
Binarne string
konstante:
'10001111' '11000011'
Simboličke
konstante:
ZERO; SPACE
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
23/42
1-23
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
KONVERZIJA TIPOVA
•
Celobrojni izrazi se automatski konvertuju u realne ukoliko seupotrebe u kontekstu u kojem se očekuje realan izraz, npr. ukolikoželimo dodeliti neki celobrojni izraz realnoj promenljivoj
( promocija ).
(int)(2.541 * 3.17);•
Realan izraz često možemo upotrebiti u kontekstu u kojem seočekuje celobrojni izraz, npr. kao argument neke funkcije koja očekujecelobrojni argument, ili pri dodeli realnog izraza celobrojnoj
promenljivoj. Takve konverzije praćene su gubitkom informacija ( ukonkretaom primeru odsecanjem decimali ), i obično ih nazivamo( degradacija ).
float
broj_l, broj_2;
(int)broj_l / broj_2;
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
24/42
1-24
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Izrazi i njihovo
izvođ enjeIzrazi kombinuju vrednosti korišćenjem operatora,
saglasno
određenimprioritetima izvršavanja operacija.1
+ 2 * 2 1 + 4 5
(1 + 2) * 2 3 * 2 6
Simbolima pridružujemo njihove vrednosti pre nego što vršimo njihovukombinaciju.int
x=1;
int
y=2;x + y * y x + 2 * 2 x + 4 1 + 4 5
Operatori popređenja se koriste da bi uporedili vrednosti odrteđenihveličina.
U jeziku
C, 0 znači “false”, a any other value znači
“true”.int
x=4;
(x < 5) (4 < 5)
(x < 4) (4 < 4) 0
((x < 5) || (x < 4)) ( || (x < 4))
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
25/42
1-25
g j
Operatori poređ enja i matematički operatori
== equal to
< less than
greater than
>= greater than or equal
= not equal
&& logical and
|| logical or
logical not
+ plus
-minus
* mult
/ divide
% modulo
Pravila prioriteta su striktno definisanaali često su teška za pamćenje ilineintuitivna.
Ako sumnjamo u to,
dodavaćemo zagrade da bi ih u
činilieksplicitnim.
U svakom slučaju,kompajler će nam dati upozorenje“Suggest parens
around …”
–
do it!
Oprez za deljenje:• Ako je drugi argument
integer,rezultat će biti integer tipa
:
5 / 10 0 ali je 5 / 10.0 0.5• Deljenje sa
0 će prouzrokovati FPE
& bitwise and
| bitwise or
^ bitwise xor
~ bitwise not
> shift right
Ne mešati
& and &&..
1 & 2 0 ali je 1 && 2
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
26/42
1-26
g j
Označavanje operatora x = y assign
y to x x++ postfiksni-increment
x++x pre fiksni
-increment x x--
post fiksni
-decrement x--x pre fiksni
-decrement x
Zapamtiti razliku između
++x and x++:
Ne praviti konfuziju sa
= i
==! Kompajler
će upozoriti“suggest
parens”.
int
x=5;
int
y; y = ++x;/* x == 6, y == 6 */
int
x=5;
int
y; y = x++;/* x == 6, y == 5 */
int
x=5;if (x=6) /* always true
*/{
/* x is now 6
*/}/* ... */
int
x=5;if (x==6) /* false */{
/* ... */}/* x is still 5 */
x += y dodeljuje
(x+y) na
x x -= y dodeljuje
(x-y) na
x x *= y dodeljuje
(x*y) na
x x /= y dodeljuje
(x/y) na
x x %= y dodeljuje (x%y) t na x
preporučuje se
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
27/42
1-27
Skraćeni prikaz operatora
C dopušta skraćeni prikaz operatora koji ima isti efekat kao istandardno.Ako
++ ili
–
koristimo kao
prefiksne, promenljive se modifikuju urazvoju izraza:
a = 3;b = ++a + 3; /* b = 4 + 3 = 7 i
a = 4 */
Ako
++ ili
--
koristimo kao
postfiksne, promenljive se prvo koriste aonda modifikuju:a = 3;b = a++ + 3; /* b = 3 + 3 = 6 i
a = 4 */
Operatori mogu biti kombinovani:a += b; /* a = a + b */a *= b; /* a = a * b */
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
28/42
1-28
Uslovni operator
Uslovni operator (?:) je specifičan ternarni operator jezika C. lma
tri operanda i piše se u obliku npr.
x=( a?b:c )
Prvo se izračunava vrednost izraza a i ako ima vrednost
logičke istine (
različito od 0
), izračunava se vrednost izraza b i
to predstavlja vrednost celog izraza. Ako a ima vrednost logičke
neistine (=0), izračunava se vrednost izraza c i to predstavlja
rezultat celog izraza. Bitno je da se od izraza b i c uvekizračunava samo jedan.
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
29/42
1-29
Adresni operatori
Adresni operatori služe
za manipulisanje sa adresama podataka.
U užem smislu, tu spadaju:
(&)
-
unarni operatori za nalaženje adrese datog podatka i
(*) -
za posredni pristup podatku pomoću pokazivača - koji senaziva i operatorom indirektnog adresiranja.
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
30/42
1-30
AritmetikaAritmetička izračunavanja
•
Koristiti
* za množenje i
/ za deljenje
•
Integer deljenje
zanemaruje ostatak
7 / 5 odgovara sa 1•
Operator deljernja po modulu(%) vraća ostatak deljenja
7 % 5 odgovara sa 2
Prioriteti operacija•
Neki
aritmetički
operatori
izvršavaju se pre nego drugi (npr,
množenje pre sabiranja)
Koristiti zagrade uvek kada su potrebne•
Primer:
Naći srednju vrednost tri promenljive
a, b i
c
NE KORISTITI: a + b + c / 3
KORISTITI: (a + b + c ) / 3
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
31/42
1-31
Aritmetika
Aritmetič
ki
operatori:
Pravila prioriteta:
C operation Arithmetic
operator
Algebraic
expression
C expression
Addition + f + 7 f + 7
Subtraction - p – c p - cMultiplication * bm b * m
Division / x / y
x / y
Modulus % r mod s r % s
Operatori Operacije Redosled izvršavanje
() Zagrade Prvo se izračunava. Ako su zagrade ugnježdene, izraz u
unutrašnjem paru se prvi izračunava Ako imamo nekoliko
pari zagrada “na istom nivou ” (npr., neugnježdene),izvršavaju se sa leva u desno.
*, /, or % Množenje,
deljenje, moduliIzračunavaju se kao druge. Ako ih ima nekoliko,izvršavaju
se sa leva u desno.
+
or
-
Sabiranje ioduzimanje
Zadnje se izračunavaju. Ako ih ima nekoliko,izvršavaju sesa leva u desno.
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
E l
8/18/2019 Uvodno Predavanje c 2 (1)2
32/42
1-32
ODLUKE:
Relacioni operatori i operatori
jednakostiStandardni algebarski
operatori jednakosti ili
relacioni operatori
C izrazi za
relacione
operatore
Primeri C
uslova
Značenje C uslova
Algebarski operatori
= == x == y x is equal to y
not = != x != y x is not equal to y
Relacioni operatori
> > x > y x is greater than y
< < x < y x is less than y
>= >= x >= y x is greater than orequal to y
8/18/2019 Uvodno Predavanje c 2 (1)2
33/42
1-33
Jednostavan
C Program#include #define STOP 0
/* Function: main */
/* Description: counts down from user input to STOP */ main()
{
/* variable declarations */
int counter; /* an integer to hold count values */int startPoint; /* starting point for countdown */
/* prompt user for input */
printf("Enter a positive number: ");
scanf("%d", &startPoint); /* read into startPoint *//* count down and print count */
for (counter=startPoint; counter >= STOP; counter--)
printf("%d\n", counter);
}
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
34/42
1-34
Predprocesorske
direktive#include
•
Pre
kompajliranja,
kopira sadržaj
header file
(stdio.h)
u oblast
izvornog koda -
source
code.•
Header files tipično sadrži opis funkcija i promenljivih potrebnihprogramu.nema restrikcije – može biti bilo koji C source code
#define STOP 0•
Pre
kompajliranja,
zamenjuje sve instance stringa
"STOP" sa
stringom
"0"•
Pozivanje
macro
•
Koristi se za vrednosti koje se ne menjaju tokom izvršenja, ali semogu promeniti ako ih program ponovo koristi.
(
Mora se izvršiti
rekompilacija.)
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
35/42
1-35
KomentariPočinju sa
/* i završavaju sa
*/
Počinju sa
//...... samo u jednoj liniji
Mogu biti sačinjeni iz velikog broja linija.
Ne može biti komentar u komentaru.
Komentari se ne prepoznaju u okviru stringa.
•
Primer:
"my/*don't print this*/string"
biće prezentovano kao:
my/*don't print this*/string
Kao što je opisano, koristiti komentare da pomognuprogrameru razumevanje programa, njegovu namenu,module, promenljive itd…
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
36/42
1-36
main FunkcijaSvaki
C program mora imati funkciju main().
Ovo je kod koji se izvršava kada pokrenemo program.
Kod
funkcije se piše unutar velikih zagrada:
int main(){
/* ovde se piše kod programa */
return 0;}
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Deklaracija promenljivih
8/18/2019 Uvodno Predavanje c 2 (1)2
37/42
1-37
Deklaracija promenljivih
Promenljive se koriste kao imena korišćenih podataka.
Svakapromenljiva ima svoj tip,
koji govori kompajleru kako će se interpretirati podaci i koliko mesta umemoriji traže, svaki od njih pojedinačno.TIPOVI PODATAKA
predstavljaju jedan od najznačajnijih pojmova uokviru programskih jezika. Sve promenljive koje se koriste u jednomprogramu imaju
:
•
atribut t ipa, što određuje skup vrednosti koji im se može dodeljivati,
•
format predstavljanja ovih vrednosti u memoriji računara,•
skup osnovnih operacija koje se nad njima mogu izvršavati i veze sadrugim tipovima podataka.
int counter;
int startPoint;
int je reč
za predstavku
integer tipa podatka u jeziku
C.
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
38/42
1-38
Ulaz i Izlaz
Postoji mnoštvo I/O
funkcija u C Standardnoj biblioteci.Moramo napisati #include
da bi ih koristili.
printf("%d\n", counter);•
String sadrži
print naredbu za štampanje sadržaja i direktive zaformatiranje promenljive counter.
•
Ova programska rečenica kaže da se odčtampa promenljiva
counter kao decimalni
integer, praćena sa prelaskomu novi red -linefeed (\n).
scanf("%d", &startPoint);•
String sadrži
direktive za formatiranje očekivanog ulaza.•
Ova programska rečenica čita
decimalni
integer i dodeljuje gapromenljivoj
startPoint.
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
8/18/2019 Uvodno Predavanje c 2 (1)2
39/42
1-39
Još
o Izlazu
Mogu se štampati proizvoljni izrazi a ne samo promenljve: printf("%d\n", startPoint - counter);
Štampanje više izraza jednom naredbom: printf("%d %d\n", counter,
startPoint - counter);
Različite opcije formatiranja:%d decimalni
integer
%x heksadecimalni
integer %c ASCII karakter %f realni broj (floating-point)
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Primeri
8/18/2019 Uvodno Predavanje c 2 (1)2
40/42
1-40
Primeri
Kod:printf("%d is a prime number.\n", 43);printf("43 plus 59 in decimal is %d.\n", 43+59);printf("43 plus 59 in hex is %x.\n", 43+59);
printf("43 plus 59 as a character is %c.\n", 43+59);
produkuje izlaz:
43 is a prime number.43 + 59 in decimal is 102.43 + 59 in hex is 66.
43 + 59 as a character is f.
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Primeri Ulaza
8/18/2019 Uvodno Predavanje c 2 (1)2
41/42
1-41
Primeri UlazaMnogo različitih formata može biti upotrebljeno za unospodataka:scanf("%c", &nextChar);
•
Čita
karakter
sa ulaza ( tastatura ) i pamti ga u promenljivoj
nextChar scanf("%f", &radius);
•
Čita realni broj sa ulaza (
floating point number
) i pamti ga upromenljivoj radius
scanf("%d %d", &length, &width);
•
Čita dva
decimalna
integer
broja
(odvojena blanko mestom ),
pamti prvi u promenljivoj length
a drugi u promenljivoj
width.
Mora se koristiti
ampersend
(&)
za postavljanje adrese gdeće podatak, koji smo sa tastature uneli, u memoriji bitizapamćen.
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA NIŠ Programski jezici 1
Primer jednostavnog programa s=a+b+c
8/18/2019 Uvodno Predavanje c 2 (1)2
42/42
1-42
Primer jednostavnog programa s=a+b+c
#include #include
main( )
{
int a, b, c, sum;
a = 1; b = 2; c = 3;sum = a + b + c;
printf("suma brojeva a,b ic je: %d", sum);
return 0;}