Uvodno Predavanje c 2 (1)2

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 

    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;}