Programiranje C Jezikom - Vjebe

Embed Size (px)

Citation preview

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    1/187

    Primjena računalaak.god. 2013/2014

    1

    Pomorski fakultet u Splitu

    Nastavnici:dr.sc. Anita Gudelj

    Mirko Čorić, mag.ing.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    2/187

    PROGRAMSKI JEZIK

    2

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    3/187

    Primjer C programa• Primjer jednostavnog C programa:

    #include

    void main()

    { /* moj prvi program u C jeziku*/

     

    3

     

    a=3;

    b=4;

    printf(“Zbroj brojeva %d i %d je %d\n”,a,b,a+b);

    }• Program je uveden kako bi se prikazali neki od sintaksnih

    elemenata sa sljedećih slajdovaZADATAK: Testirati program.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    4/187

    Od pisanja do izvršavanja programa

    •• Unos izvornog programa (source code)Unos izvornog programa (source code) – ASCII uređivač teksta (editor)

    • Prevođenje izvornog programa u relokatibilni program – Poziv prevoditelja (compiler) – Otkrivanje pravopisnih pogrešaka (sintax errors) – Ispravci izvornog koda i ponovno prevodenje

     

    4

    • Poziv povezivača (link)Poziv povezivača (link) – Pogreške koje otkriva povezivač• Izvođenje izvršnog programaIzvođenje izvršnog programa

     – Zadavanje potrebnih ulaznih podataka – Provjera programa na osnovi test podataka – Pogreške koje se otkrivaju prilikom izvršenja (run time – errors)

     – Logičke pogreške

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    5/187

    Struktura C programa• C program se sastoji od

     – imenovanih blokova koji se nazivaju funkcije• u C programu mora postojati glavna (main)

    funkcija koja predstavlja mjesto gdje počinjeizvršenje programa

    5

     – “Glavni” program = funkcija main() (fiksno ime)

    • Pravilo pisanja funkcije main:

    intint main()main() voidvoid main()main(){{ iliili {{

    Blok naredbi Blok naredbiBlok naredbi Blok naredbireturnreturn 00;; }}

    }}

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    6/187

    Opća struktura C programa• Tijelo funkcije (blok naredbi) se sastoji od

    naredbinaredbi unutar vitičastih zagradavitičastih zagrada• Osnovni opis bloka:

    – Blok za očin e znakom { , a završava znakom }

    6

     

    – Blok obuhvaća (sadrži) deklaracije/definicije, naredbe ineimenovane blokove

    – Svaka definicija/deklaracija i naredba mora završavati

    znakom ;;– Blok ne završava znakom ;; tj. iza znaka } ne piše se ;

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    7/187

    Primjer/* moj prvi program u C jeziku*//* moj prvi program u C jeziku*/

    #include#include

     /* /*UUkljukljuccuje datotekuje datotekuu zaglavljazaglavlja stdio.h */ stdio.h */ void void mainmain

    DaDa bismobismo moglimogli koristitikoristiti funkcijefunkcije iziz

    standardnestandardne bibliotekebiblioteke zaduzadužženeenezaza ulazulaz ii izlazizlaz podatakapodataka programprogramzapozapoččinjemoinjemo naredbomnaredbom

    KOMENTAR

    Direktiva predprocesoru

    Glavna funkci a

    7

    {{ /* Pocetak bloka *//* Pocetak bloka */int a,b;int a,b;

    a=3;a=3;

    b=4;b=4;

    printf(“Zbroj brojeva %d i %d jeprintf(“Zbroj brojeva %d i %d je%d%d\\n”,a,b,a+b);n”,a,b,a+b);

     /*funkcija za ispis na monitor*/  /*funkcija za ispis na monitor*/ 

    /* kraj bloka*//* kraj bloka*/

    }}

     

    Tijelo funkcije

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    8/187

    KOMENTARI• Sa znakovima /*  otvara se prostor za

    komentar, a sa znakovima */  se zatvara• U C++ -u koristi se, za kraće komentare

    8

    ,kosa crta• c = a + b ;  /* c je zbroj od a i b */ 

    • c = a + b ;  // c++ je zbroj od a i b

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    9/187

    Opća pravila pisanja C programa• C je jezik slobodnog formata – mjesto početka naredbe u retku je proizvoljno

     – svaka izvršna naredba mora završavati znakom ;• Dopušteno je stavljanje više naredbi u istom

    retku

    9

    Pr: int i,n; printf("Unesite n: "); scanf("%d", &n);int i,n; printf("Unesite n: "); scanf("%d", &n);•• CC pravi razlikupravi razliku izmeizmeđđu velikih i malih slovau velikih i malih slova• Ključne riječi se pišu malim slovima. Npr:

    mainprintfdo

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    10/187

    Vježba 2

    10

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    11/187

    Opća struktura C programa

    -ponavljanje-

    11

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    12/187

    Osnovni elementi jezika C

    • Skup znakova• Identifikatori

     

    12

    • Ključne riječi• Osnovni tipovi podataka

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    13/187

    Skup znakova• Programski jezik C koristi sljedeći skup znakova:

     – velika i mala slova engleske abecede A-Z i a-z _  – znamenke 0-9 – specijalne znakove:

    13

    + - * / = % !" # $ & ' ( )

    , . 1: 2 3 4 _ ,bjelina

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    14/187

    Identifikatori• Identifikatori su imena koja pridružujemo

    različitim elementima programa – varijablama, poljima i funkcijama.• Pr vil z i n i n ifik r :

    14

      – Sastoje se od slova i brojeva (znamenki), s

    tim da prvi znak mora biti slovo – Velika i mala slova se razlikuju

     – Znak (donja crta) smatra se slovom – Duljina identifikatora je proizvoljna

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    15/187

    Ključne riječi

    15

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    16/187

    VARIJABLE, TIPOVIPODATAKA

    16

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    17/187

    VARIJABLE55 6A78A;A 6A78A;A je je simboli lokacij>lokacij> >>

    kojojkojoj sese podacipodaci mog>mog> po?ani@ipo?ani@i ii naknadnonaknadno poziva@ipoziva@i i

    kojemu je dodijeljeno ime – Općenito: promjenljiv podatak

    17

    55 8den@iika@o vaijabla ,8den@iika@o vaijabla ,ime varijableime varijable je imenovani dio je imenovani diomemorijememorije

    TIP PODATKATIP PODATKA odre đ 

    uje na č 

    in korištenja varijable odre đ 

    uje na č 

    in korištenja varijable 

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    18/187

    Varijable

    • Simbolički se prikazuje pravokutnikom uz kojistoji ime

    18

    • Smještaj u memoriji računala

    x y

    x y... ...

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    19/187

    Bavila ze keianje valjani? imenaBavila ze keianje valjani? imena

    vaijablivaijabli55 8den@iika@o vaijable8den@iika@o vaijable

    • Primjeri – salary // valjani identifikator – salary2 // valjani identifikator

     

    19

     – 2sa ary neva an ent ator započ

    n eznamenkom) – _salary // valjani identifikator – Salary // valjani identifikator, ali se razlikuje od

    salary – plaća // nevaljani identifikator (u imenu se koristi znak

    'ć')

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    20/187

    IDENTIFIKATOR:IDENTIFIKATOR: primjeriprimjeriKeKelllyFamilylyFamily KvocijentKvocijent

    KEKELLLYFamilyLYFamily PostotakPostotakKeKelllyFAMILYlyFAMILY Ime_i_PrezimeIme_i_PrezimeOK.OK.

    20

    aandnd switchswitch

    coutcout ..FILE..FILE

    *

    AA--1 0071 007

    Polje 2Polje 2 VaraždinVaraždin

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    21/187

    TABELA OSNOVNIH TIPOVA

    PODATAKAC8B BDEACFAC8B BDEACFA CDGHDICCDGHDIC

    JKJD78IF8JKJD78IF8B7DICD7 B7DICD7 LLACD68JAACD68JA

    KLJUČNA RIJEČKLJUČNA RIJEČ

     znak (CHARACTER) znak (CHARACTER) 1 char

     

    21

     

    realni broj s pomič nomrealni broj s pomič nom

    decimalnom toč komdecimalnom toč kom

    (FLOATING POINT)(FLOATING POINT)

    7 decimalnih znamenki 4 float

    realni broj dvostrukerealni broj dvostruke

    toč nostitoč nosti

    (DOUBLE )(DOUBLE )

    15 decimalnihznamenki

    8 double

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    22/187

    TABELA DODATNIH TIPOVA

    BROJEVA

    C8B BDEACFAC8B BDEACFA 7AIBDH 678KEHDIC87AIBDH 678KEHDIC8 CDGHDICCDGHDIC JKJD78IF8 B7DICD7JKJD78IF8 B7DICD7L ACD68JAL ACD68JA

    F;LGHK 78KG8F;LGHK 78KG8

    kratki cijeli broj(SHORT INTEGER)

    od –128 do 127 1 (ili 2) short int

    22

    dugi cijeli broj (LONGINTEGER)

    od –2147483648 do2147483647

    4 long int

    realni brojmaksimalane točnosti

    (LONG DOUBLE )

    od ± 3.4 · 10-4932 do ±1.1 · 104932

    18 decimalnihznamenki

    10 long double

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    23/187

    VARIJABLE...•• Varijable koje definira korisnik moraju biti deklarirane prijeVarijable koje definira korisnik moraju biti deklarirane prijenego će se koristiti u programunego će se koristiti u programu

    DEKLARIRATI VARIJABLU ZNAČ

    IJEDNOZNAČNO ODREDITI NJEZIN TIP

    int a, b, c;

    23

    5 Dsnovni oma@ deklaianja vaijabli jetip podatka ime_var1, ime_var2, ... ;

     – – C8BC8B BDEACFABDEACFA odeM>jeodeM>je napoabe vaijablevaijable5@ip poda@aka jedan od ble556ijednos@ 6ijednos@ vaijablivaijabli ovisiovisi oo njenomnjenom @ip>@ip> poda@kapoda@ka55BimjeiceBimjeice44 cjelobojnacjelobojna ,,in@egein@ege vaijablavaijabla moNemoNe popimi@ipopimi@isamosamo cjelobojnecjelobojne vijednos@ivijednos@i ,,pp3344 OO44 P00P0044 --POPO

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    24/187

    Deklaracija i inicijalizacijain@ i2

    Deklaracia varia!le i i "#aavili $a kori%te#e, od#oo$a'$eli pro&tor ' memorii(

    Ne $#amo %to &e tre#'t#o #ala$i 'pi&a#o ' to varia!li er

    to $avi&i od pret)od#o* &ta#a ' memorii

    in@ i2i=02

    Nako# deklaracie #e*de ' pro*ram' moramopo&taviti #ek' po+et#' vried#o&t. vo &e #a$iva

    24

    .

    in@ i=02-ro*rameri +e&to rade deklaraci' i i#iciali$aci'$aed#o

    vo &e #a$iva dei#iciom varia!le.

    in@ c4 i=Q4b=02 Deklaracie i dei#icie &e mo*' kom!i#irati.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    25/187

    • Operator pridruživanja (=)55 6aijabli 6aijabli pid>N>jepid>N>je vijednos@vijednos@

    55 BimjeBimje::

    in@ s>m2in@ s>m2s>m = R00 + PR2s>m = R00 + PR2

    55 BogamBogam deklaiadeklaia vaijabl>vaijabl> s>ms>m kaokao @ip@ip 8HCKSK7 8HCKSK7 ,in@,in@

    DEKLARACIJA I PRIDRUŽIVANJE

    ISTOin@ s>m = R00 + PR2

    25

    55 LL TT-->> vvaijabliaijabli s>ms>m sese pid>N>jepid>N>jevijednos@vijednos@ R00R00++PRPR kois@eUikois@eUi opea@oopea@o pid>Nivanjapid>Nivanja

    /to $#a+i #ared!a 0 k=k+P2

    1

    k 5 6

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    26/187

    55 Bimje deklaacijeBimje deklaacije in@egein@ege vaijablevaijable cijeli_bojcijeli_boj ::in@in@ cijeli_boj2cijeli_boj2cijeli_boj =cijeli_boj = POV2POV2

    • Bimje deklaacije loa@ vaijable ealni_boj :loa@loa@ ealni_boj2ealni_boj2

     

    Primjeri

    26

    _ = _ = 3 23 2

    • Primjer deklariranja double varijable tocniji_realni_br :do>bledo>ble @ocniji_ealni_b@ocniji_ealni_b;@ocniji_ealni_b@ocniji_ealni_b ==POVWRXQ3POVWRXQYKPOVWRXQ3POVWRXQYK--YY;

    55 Bimje deklaianja znakovne vaijableBimje deklaianja znakovne vaijable slovoslovo :c?ac?a slovo2slovo2slovo =slovo = AA22

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    27/187

    Domaći rad1. Koje od navedenih deklaracija varijabli su valjane?i#t a,!,c;

    i#t # 133;lo#* m 2, p 4;i#t 2k;do'!le 5 2 6 m;loat 7 7 6 2;do'!le d 3.89;loat _ 3.:2;c)ar c

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    28/187

    Funkcija printf

    28

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    29/187

    Što će ispisati sljedeći programi?Što će ispisati sljedeći programi?

    Kakoće ispisati?Kako

    će ispisati?

    #include#include voidvoid main()main()

    {{ printfprintf("Naredbe se završavaju točka("Naredbe se završavaju točka--zarezom.");zarezom.");printfprintf("Izvršavanje programa počinje prvom("Izvršavanje programa počinje prvom

    29

    nare om un c e ma n .nare om un c e ma n . n ;n ;}}

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    30/187

    Funkcija printf• Funkcija printf se može javiti u dva oblika.

    Prvi je jednostavniji:pin@,[neki @eks@ > navodnicima sa specijalnim znakovimapin@,[neki @eks@ > navodnicima sa specijalnim znakovima ( (nn\ \22

    -or'ka !i !ila od%tampa#a #a ekra#' ' datom o!lik'.

    30

    • Drugi oblik je znatno značajniji:

     – printf(“%d %d %e tekst %c \n”,in,60,fl,ch);

     

    >'#kcia pri#t ' ovom o!lik' opet %tampa &tri#* koi o e prviar*'me#t? ali o#o %to e i$a @ mie#a &e redom &a ar*'me#tima koi

    &liede. ako &e 'me&to @d %tampa varia!la i# i to kao celo!ro#a"@d $#a+i %tampa kao celo!ro#' varia!l'(.

    B#ak $a #ovi redkoi e +e&t &a&tav#ieleme#at #ared!epri#t.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    31/187

    FunkcijaFunkcija printfprintf• Poziv funkcije printf izgleda:pri#t "Cpri#t "Copi&_ormataopi&_ormataC,varia!la,varia!la,...(;C,varia!la,varia!la,...(;

    55 BimjeBimjepin@,7ez>l@a@ je %d4 R2pin@,7ez>l@a@ je %d4 R2

    31

     _  _ 

    ispisatiispisati•• UkolikoUkoliko prikazujeteprikazujete vrijednostvrijednost jedne jedne iliili viševiše varijabli,varijabli,

    potrebnopotrebno je je nana odgovarajućeodgovarajuće mjestomjesto upisatiupisati opisopisformataformata pretvorbepretvorbe zaza svakusvaku varijabluvarijablu SastojiSastoji sese odod oznakeoznake postotkapostotka ((%%)) izaiza kojegkojeg slijedislijedi slovoslovo

    slovoslovo opisujeopisuje tiptip podatkapodatka kojikoji sese upotrebljavaupotrebljava

    •• OčekujeOčekuje sese dada brojbroj argumentaargumenta nakonnakon stringastringa uu naredbinaredbi printfprintfbudebude jednak jednak brojubroju ““%%”” unutarunutar stringastringa

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    32/187

    Funkcija printf

    •• Formati ispisa imaju sljedeće značenje (navodimo samoFormati ispisa imaju sljedeće značenje (navodimo samoneke važnije):neke važnije): – %d ci eli bro evi

    edan ili vi]e opisa oma@a je smje]@eno izmeM>edan ili vi]e opisa oma@a je smje]@eno izmeM>dvos@>ki? navodnikadvos@>ki? navodnika

    32

     

     – %f realni brojevi – %c znak – %bd cijeli broj sa b znamenki – %a.bf realni broj sa a pozicija i b decimalnih mjesta,

    podrazumjeva se a>b – %e eksponencijalni zapis – %x heksadecimalni zapis

     – %o oktalni zapis...

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    33/187

    Modifikatori za formatiranje ispisaSpecijalni znakovi: \n prelazak u novi red

     \t horizontalni tabulator \v vertikalni tabulator

    33

    unazad (backspace) \r postavljanje kursora na

    početak linije

     \f nova stranica \a zvučni signal \\  kosa crta ulijevo

     \” dvostruki navodnik

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    34/187

    Slijed naredbi

    #include void main(){

    Sljedeći program ispisuje zbroj brojeva 500 i 15.

    34

    int zbroj;zbroj = 500 + 15;printf("Zbroj 500 i 15 iznosi %d\n", zbroj);

    }

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    35/187

    Sljedeći program ispisuje dvije cjelobrojne vrijednosti

    razdvojene horizontalnim tabulatorom : \t 

    #include#include

    void void main()main(){{intint broj1, broj2;broj1, broj2;

     ==

    35

     

    broj2 = 15;broj2 = 15; printf printf("%d("%d\\t%dt%d\\n", broj1,broj2);n", broj1,broj2);}}

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    36/187

    Primjer programa koji pokazuje uporabu svih tipovapodataka i formatiranje ispisa realnih brojeva:##includeinclude  main() main(){{

    intint broj=10; broj=10;

    floatfloat novac=342.75;novac=342.75;charchar slovo='A';slovo='A';doubledouble pi=3.14159265359; pi=3.14159265359;

    "" ""

    36

    ..

     printf(" printf("Kolicina novaca jeKolicina novaca je %.2f Kn.%.2f Kn.\\n",n", novacnovac );); printf(" printf("OvoOvo je je slovoslovo %c.%c.\\n", slovo );n", slovo ); printf(" printf("MatematickaMatematicka konstantakonstanta pi pi nana jedanaest decimala jedanaest decimala

    iznosiiznosi %.11f.%.11f.\\n", pi );n", pi );}}

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    37/187

    KONVERZIJA TIPA PODATKA!incl>de!incl>de s@dio3?s@dio3?voidvoid main,main,

    in@in@ bojP = QbojP = Q44 bojO = O2bojO = O2  loa@loa@ kvocijen@ = 02kvocijen@ = 02

     

    37

     

    pin@,%d dijeljeno s %d jepin@,%d dijeljeno s %d je %% ( (n4bojP4bojO4kvocijen@ 2n4bojP4bojO4kvocijen@ 211

    Ispis programa:7 dijeljeno s 2 je 3.000000

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    38/187

    ZADATAK• Zadano je Z=‘#’, X=-14.57889 i Y= 99.

    • U programu treba ispisati vrijednosti X iY, na slijedeći način:

    38

     – e sp san na ec ma na m es a,zatim se ispisuje tabulator (\t), te znak Z,

     jedan razmak pa ASCII vrijednost znaka Z;nakon toga ide novi red, a zatim ispis brojaY dekatski, oktalno i heksadecimalno.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    39/187

    #include

    void  main()

    { int Y=99;

    float X=-14.57889;

      =’ ’

    39

     

     printf(“Ispis rezultata: \n”); printf(“ %.2f \t %c %d \n %d %o %x\n”, X,Z,Z,Y,Y,Y);

    }

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    40/187

    Brzi test 1• Koja su od ovih imena pravilni nazivi varijabli

     _a37 4aB a4b a 37 int int37 a&32Navedite tipove podataka i ključne riječi

    Navedite formate is isa

    40

     

    Navesti primjer ispisa cjelobrojne varijable a.

    UNOS PODATAKA S

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    41/187

    UNOS PODATAKA S

    TIPKOVNICE u C55 ^>nkcija^>nkcija &ca# &ca# 

    55 sl>Ni > poda@aka sa s@andadnog >laza zasl>Ni > poda@aka sa s@andadnog >laza zavijemevijeme izvoMenjaizvoMenja pogama ,na konzolipogama ,na konzoli

    55

    41

     

    scan,[kon@olni_s@ing\4ag_P4ag_O4 3334ag_n2scan,[kon@olni_s@ing\4ag_P4ag_O4 3334ag_n255 gdjegdje je je kon@olnikon@olni s@ings@ing kons@an@nikons@an@ni znakovniznakovni nizniz kojikoji

    sadNisadNi inomacijeinomacije oo vijednos@imavijednos@ima kojekoje sese >> >>ag>men@eag>men@e agag PP4433 33 33 4ag4ag nn ,,%%d4d4 %%44 %%cc

    UNOS PODATAKA S

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    42/187

    UNOS PODATAKA S

    TIPKOVNICE u C#include

    void main()  // program s primjerom unosa s tipkovnice{ int broj;

     

    42

    printf("Unesite broj:");scanf("%d", &broj);

    printf("Broj koji ste unijeli je %d.\n", broj);}

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    43/187

    KonstanteKonstante1. Konstante koje započinju s 0 (nula)

    interpretiraju se kao oktalne2. Konstante ko e za očin u s 0x

    43

    interpretiraju se kaoheksadecimalne

    3. Simboličke konstante

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    44/187

    Simboličke konstante

    •• umjestoumjestofloat Opseg = 2. * r * 3.14159265359; float Opseg = 2. * r * 3.14159265359; 

    •• float Povrsina = r * r * 3.14159265359; float Povrsina = r * r * 3.14159265359; •• double Oplosje = 4. * r * r * 3.14159265359; double Oplosje = 4. * r * r * 3.14159265359; •• može se pisatimože se pisati

     

    44

      = .  = .

    •• iliili•• #define Pi = 3.14159265359; #define Pi = 3.14159265359; •• i ondai onda•• float Opseg = 2. * r * Pi; float Opseg = 2. * r * Pi; •• float Povrsina = r * r * Pi; float Povrsina = r * r * Pi; •• double Oplosje = 4. * r * r * Pi; double Oplosje = 4. * r * r * Pi; 

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    45/187

    Napiši program kojim ćeš izračunati opseg i površinu kruga

    za proizvoljno zadani radijus.

    • ALGORITAM:

    Definiranje konstante PI

     

    45

    Definiranje varijable rRačunanje opsega i površineIspis dobivenih rezultata

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    46/187

    #include

    void main(){

    const float PI=3.14;int r=10;  = * *

    46

     

    float O=2*r*PI;printf("Opseg je %f\n",O);

    printf("Povrsina je %f\n",P);}

    Rj š j i j C

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    47/187

    Rješenje primjera u C-u /* Aritmeticka Sredina*/#include

    void main ()

    {int i, j, k;

    float sredina;

    Ha novome@k>

    47

     

     printf(“Unesi tri broja\n”);scanf("%d,%d,%d", &i,&j,&k);sredina = (i + j + k) / 3.;

     printf ("Aritmeticka sredina brojeva %d, %d i"

    " %d iznosi %f", i, j, k, sredina);

     printf(“\ndek %d,okt %o, heksa %x\n”,i,i,i);

    }

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    48/187

    Za domaći:

    • Korištenjem scanf učitajte dekadsku vrijednost stipkovnice u integer varijablu broj_ucenika, apotom je ispišite pomoću printf u dekadaskom,oktalnom i heksadekadskom obliku.

    48

    varijable cijena_tel_imp , a potom je ispišitepomoću printf na dva decimalna mjesta.

    • Korištenjem scanf učitajte jedan znak s

    tipkovnice u varijablu operator, a potom gaispišite. Preskočite razmake , tabulatore i oznakenovog reda, prije upisa.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    49/187

    Dodatak:• Funkcija scanf(),printf(),”Cast” operatori

    49

    F k ij f()

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    50/187

    Funkcija scanf()

    - Omogućava formatirani unos podataka.

    scanf(“kontrolni string”,&arg1,&arg2,…);- Kontrolni string određuje format unosa podataka

     - , ,

    se tip podatka unositi s tastature, te taj podatakpridružuju argumentima.

    Pr. int a;scanf(“%d”,&a);

    Dakle, unosimo cijeli broj i spremamo ga u varijablu a.

    -Prazno mjesto(space),\n,\t omogućuju

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    51/187

    j ( p ), , g jpreskakanje praznina ulaznog niza.

    Pr. char a,b;scanf(“ %c %c”,&a,&b);

    -U kontrolnom stringu se mogu pojaviti i drugiznakovi. -

    ulazu.Pr. float a;

    int j;scanf(“%f,%d”,&a,&j);

    Tada ulaz mora biti u obliku: npr. 1.456,8 

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    52/187

    Pr. scanf(“%d/%d/%d”,&dan,&mjesec,&godina);

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    53/187

    Funkcija printf()- Omogućava formatirani ispis podataka.

    printf(“kontrolni string”, arg1,arg2,…);Pr. printf(“ Nekakva poruka bez argumenata”);

     .

    printf(“Vrijednost varijable i je %d”,i);

    Pr. printf(“%2d”,i); varijabla “i” ć e prilikom ispisa na

    ekranu zauzeti minimalno 2 pozicije 

    Pr. float var = 123.3456;

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    54/187

    ;printf(“%.2f”,var); broj se ispisuje s 2

    decimale

    printf(“%8.3f”,var); broj se ispisuje s 3decimale, a zauzima najmanje 8 pozicija prilikom ispisa 

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    55/187

    “Cast” operatori-Tip rezultata aritmetičkih izraza gdje su operandi

    istog tipa, odgovara tipu operanada.Pr. int j = 2;int i = 7; 

    float rez;rez = i / j;Rezultat izraza “i / j” je “int” tipa, dakle broj 3.

    - U izrazima ćemo često imati imati operande

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    56/187

    prazličitog tipa. U tom slučaju se konverzija odvijaprema višem tipu podataka.

    Pr. int x;float y;double z;rez =x * y - z;   rez je tipa “double” 

    Pr. int i = 5;double d = 2.85;d = i;   cjelobrojna vrijednost varijable “i” se

    najprije pretvori u odgovaraju ć u realnu vrijednost i ondase pridruži varijabli “d”.

    i = d; varijabli “i” se pridruži cjelobrojna

    vrijednost varijable d,tj.odbaci se decimalni dio.

    Eksplicitna pretvorba:

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    57/187

    (tip_podatka) operand; operand može bitivarijabla ili aritmeti č ki izraz.

    Pr. rez = (float) (i / j); Rezultat izraza (i / j) je

    sam po sebi “int” tipa (jer su oba operanda u izrazu “int”tipa).

      “ ”

    tip “float” (3 

    3.000000).

    Nadalje: rez = (float) i / j; “cast” operator jeprimjenjen samo na varijablu “i” koja je sada pretvorenau “float” tip podatka.

    Rezultat cijelog izraza “(float)i / j” je tipa float zbog

    konverzije tj. pretvorbe prema višem tipu podatka.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    58/187

    2. OPERATORI2.1. Operatori pridruživanja

    2.2. Aritmetički operatori2.3. Relacijski i logički operatori

    58

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    59/187

    AritmetičkiAritmetički

    operatorioperatori

    *

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    60/187

    UUnarni operatorinarni operatori DDpea@opea@oii kojikoji djel>j>djel>j> nana jednom jednom opeand>opeand>

    pred$#acipred$#aci+X+X unarni plusunarni plus--XX unarni minusunarni minus

    i#kreme#i#kreme#tira#etira#eX++X++ uvećaj nakonuvećaj nakon++X++X uvećaj prijeuvećaj prije

    dekreme#dekreme#tira#etira#eXX---- umanji nakonumanji nakon----XX umanji prijeumanji prije

    *

    OperatorOperatoriiinkrementiranja/dekrementiranjainkrementiranja/dekrementiranja

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    61/187

    inkrementiranja/dekrementiranjainkrementiranja/dekrementiranja

    55 Dpea@oDpea@o inkemen@ianjainkemen@ianja ++++ poveUavapoveUavavijednos@vijednos@ vaijablevaijable zaza PP

    55 8zaz8zaz  5 5;;  je je ekvivalen@anekvivalen@an izaz>izaz> 55 5511;;

    *

    55 Dpea@oDpea@o dekemen@ianjadekemen@ianja ---- smanj>jesmanj>jevijednos@ vaijable za Pvijednos@ vaijable za P

    55 8zaz8zaz  5 5;;  je ekvivalen@no izaz> je ekvivalen@no izaz>  55 551;1;

    Prefiks i postfiks notacijePrefiks i postfiks notacije

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    62/187

     5 ili 5 5 ili 5 5 5 iliili 5 5

    Dpea@oeDpea@oe inkemen@ianja/dekemen@ianjainkemen@ianja/dekemen@ianja mog>Uemog>Ue je je pisa@ipisa@iispedisped ii izaiza vaijablevaijable::

    *

    LL peikspeiks no@acijino@aciji ,++4,++4 ---- vaijablavaijabla UeUe bi@ibi@i pomijenjenapomijenjenapijepije nono ]@o]@o UeUe njenanjena vijednos@vijednos@ bi@ibi@i iskoi]@enaiskoi]@ena >> sloNenomsloNenomizaz>izaz>

    L pos@iks no@aciji ,++4 -- vaijabla Ue bi@ipomijenjena nakon ]@o Ue njena vijednos@ bi@i iskoi]@ena> sloNenom izaz>

    Prefix oblik:Prefix oblik:

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    63/187

    Prefix oblik:Prefix oblik:

    ... i ji = 2; 2 ? 

    j = ++i; 3 3 

    ... i j

    i = 2; 2 ?

    j = --i; 1 1

    Postfix oblik:Postfix oblik:

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    64/187

    Postfix oblik:Postfix oblik:

    ...... ii jj

    i = 2;i = 2; 22 ??j = i++;j = i++; 33 22

    ...... ii jj

    i = 2;i = 2; 22 ??

    j = ij = i----;; 11 22

    Prefiks i postfiks notacijePrefiks i postfiks notacije

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    65/187

    `@o`@o UeUe sese ispisa@iispisa@i::#include#include

    voidvoid main()main()

    {int{int i=i=55;;printf("printf("%%dd\\n",n",--i)i);;

    printf("printf("%%dd\\n",n",----i)i);;

    *

    printf("printf("%%dd\\n",i++)n",i++);;

    printf("printf("%%d",i)d",i);;}}

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    66/187

    Ako su početne vrijednosti cjelobrojnihAko su početne vrijednosti cjelobrojnih

    varijabli zadane kao:varijabli zadane kao:int i=1, j=2, k=7;

     o e e vr e nos na on zvr avan ao e e vr e nos na on zvr avan a

    sljedećih naredbi.sljedećih naredbi.i+=j;

     j=i++; k*=i;

    BBinarni operatoriinarni operatori

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    67/187

    pp

    zbrajanjezbrajanje X + YX + Y oduziman eoduziman e XX -- YY

    BinarniBinarni susu onioni operatorioperatori kojikoji sese upotrebljavajuupotrebljavaju uukombinacijikombinaciji ss dvadva operandaoperanda

     

    množenjemnoženje X * YX * Y dijeljenjedijeljenje X / YX / Y modulomodulo X % YX % Y

    Operacija modulo (%) djeluje na cjelobrojnim operandima iOperacija modulo (%) djeluje na cjelobrojnim operandima i

    kao rezultat daje ostatak pri cjelobrojnom dijeljenju operanadakao rezultat daje ostatak pri cjelobrojnom dijeljenju operanada

    Primjer

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    68/187

    int a, b;int a, b;

    a =a = 99; b =; b = 22;;

     Izraz Rezultat 

    j

    float a, b;float a, b;

    a = 12.5; b = 2.;a = 12.5; b = 2.;

     Izraz Rezultat 

    a + b 11

    a - b 7

    a * b 18

    a / b 4

    -a/b -4

    a % b 1

    a + b 14.5

    a - b 10.5

    a * b 25.0

    a / b 6.25

    a % b pogreška

    Prioritet osnovnih aritmetiPrioritet osnovnih aritmetiččkihkihoperatoraoperatora

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    69/187

    operatoraoperatora1.1. ** /  / %%

    2.2. ++ --

    Ako u izrazu ima više operatora jednakog prioriteta,izračunavaju se slijeva nadesno

    O + V / O * WO + V / O * W – – R * X % YR * X % Y

    O +O + PP * W* W – – V0V0 % Y% Y

    OO ++ WW – – XXXX – – XX

    00

    ZadatakZadatak 11:: CebaCeba izana@iizana@i zboj4zboj4 azlik>4azlik>4 >mnoNak4>mnoNak4kvocijen@kvocijen@ ii os@a@ak os@a@ak dvadva cijelacijela bojevabojeva33 8spis8spis nekaneka b>deb>de

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    70/187

    jj jj jj pp

    oblikaoblika::Unesi prvi broj:Unesi prvi broj:UUnesi drugi broj:nesi drugi broj:.... + .... = ........ + .... = ....

    ........ -- .... = ........ = ....

    .... * .... = ........ * .... = ....

    .... / .... = ........ / .... = .... ........ %%.... = ........ = ....

    Zadatak 2:Zadatak 2: Bo@ebno je izana@i sednj> vijednos@ poBo@ebno je izana@i sednj> vijednos@ povolji izabana de oblika:volji izabana de oblika:Unesi cetiri cijela broja:Unesi cetiri cijela broja:

    Srednja vrijednost brojevaSrednja vrijednost brojeva

    ...., ...., .... i .... je ........., ...., .... i .... je .....

    Operator dodjele tipaOperator dodjele tipa

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    71/187

     Deklaracija i definicija varijabli: Deklaracija i definicija varijabli:

    int Brojnik = 1;int Brojnik = 1; int Nazivnik = 3;int Nazivnik = 3;

    elimoelimo podijeli@ipodijeli@i dvijedvije cjelobojnecjelobojne vaijable4vaijable4 aa dadaez>l@a@ez>l@a@ b>deb>de ealniealni bojboj::

    Ovo e OK:Ovo e OK: 

    float TocniKvocijent = (float)Brojnik / (float)Nazivnik;float TocniKvocijent = (float)Brojnik / (float)Nazivnik; I ovo: I ovo:

    float TocniKvocijent = float(Brojnik) / float(Nazivnik);float TocniKvocijent = float(Brojnik) / float(Nazivnik);

     Ali ovo nije: Ali ovo nije:

    float Krivo = Brojnik / Nazivnik;float Krivo = Brojnik / Nazivnik; // ispisuje nulu!!! // ispisuje nulu!!!*

    Zadatak :Zadatak : Što će se ispisatiŠto će se ispisati##incl>de s@dio3?incl>de s@dio3?

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    72/187

    void main,void main,in@ a = P02in@ a = P02

    loa@ b=P032

    pin@,a/V = %d (n4 a/V2pin@,b/V = % (n4b/V2

     

    pin@,c = % (n4 c2c = ,loa@a/V2 //pimjena opea@oa dodjele @ipa ,loa@

    pin@,c = % (n4 c2

    c=b*a2pin@,c = % (n4 c2

    11

    SkraSkraćena notacijaćena notacija

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    73/187

    U programiranju su česte operacije tipa:U programiranju su česte operacije tipa: a=a+b;a=a+b;

    Za operacije ovog tipa u CZa operacije ovog tipa u C--uu susu uvedenuvedenee skraćenskraćeneenotacijnotacijee::a+=b;a+=b; aa--=b;=b; a*=b;a*=b; aa/=b; /=b; a%=b;a%=b;

     kojekoje znače redom:znače redom:a=a+b;a=a+b; a=aa=a--b; a=a*b;b; a=a*b; a=aa=a/b; /b; a=a%b;a=a%b;

    Već ste (ja se nadam) uočili znakVeć ste (ja se nadam) uočili znak ;; koji stoji na krajukoji stoji na krajusvake od naredbi i znači kraj naredbesvake od naredbi i znači kraj naredbe

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    74/187

    2.3. Relacijski i2.3. Relacijski i

    logički operatorilogički operatori

    *

    čč

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    75/187

    Logički tipovi podatakaLogički tipovi podataka

    boolbool ImamLiMnogoNovaca =FALSE;ImamLiMnogoNovaca =FALSE;

    boolbool JeLiVamDosadno = TRUE;JeLiVamDosadno = TRUE;

     

    FALSE = 0;FALSE = 0;

    George BoolGeorge Bool (1815(1815--1864),1864),

    engleski matematičar,engleski matematičar,utemeljitelj logičke algebreutemeljitelj logičke algebre

    *

    Relacijski operatoriRelacijski operatori

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    76/187

    Tvore atomne sudoveTvore atomne sudoveOperatorOperator Znač enje Znač enje Logič  ki izraz Logič  ki izraz Rezultat Rezultat

    ====  jednako jednako 11== ==11 11 (Istina)(Istina)

    !=!= različitorazličito 22!=!=22++22 11 (Istina)(Istina)>> većeveće 55>>66 00 (Laž)(Laž)

    *

    >=>= većeveće iliili ednakoednako 66>=>=66 11 (Istina)(Istina)

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    77/187

    Jednostavni logički izraziJednostavni logički izrazi

    a = = ba = = b operand 1operand 1(subjekt)(subjekt)

    operand 2operand 2(objekt)(objekt)

    relacijarelacija

    (odnos)(odnos)

    sudsud(tvrdnja)(tvrdnja)

    *

    Logički operatoriLogički operatori

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    78/187

    IloNenijiIloNeniji logi sese pomoU>pomoU>logi

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    79/187

    Kolike su vrijednosti varijabli k, k1Kolike su vrijednosti varijabli k, k1

    nakon što se izvrši sljedeći bloknakon što se izvrši sljedeći bloknaredbinaredbi

      , ,

    k=!(a==8);

    k1=(a+=3)>=8 || !0;

    PrimjerPrimjer

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    80/187

    // Ispitivanje istinitosti// Ispitivanje istinitosti

    #include #include

    void main()void main(){{

     n x, , , es ;n x, , , es ;

    scanf("%d", &x);scanf("%d", &x);t1 = (xt1 = (x -- x/3*3)x/3*3) ==== 0;0;

    t2 =t2 = ((xx %% 7)7) ==== 0;0;

    test = t1 || t2;test = t1 || t2;

     printf("x = %d test = %d  printf("x = %d test = %d\\n",n", x,test)x,test);;

    }}

    Napisati program koji će utvrditi za učitani cijelibroj x je li dijeljiv i sa 3 i sa 4

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    81/187

    definiraj cijele brojeve x, t1, t2, test učitaj (x)

     

    postavi t2 na rezultat ispitivanja djeljivosti x sa 4 test = t1 i t2

    ispiši (x, test)

    kraj

    Primjer – rješenje u C-u

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    82/187

    #include #include

    void main ()void main ()

    {{int x, t1, t2, test;int x, t1, t2, test;

    “ ”“ ”,,

    t1 = (xt1 = (x%%3) == 0;3) == 0;t2 = (x%t2 = (x%44) == 0;) == 0;testtest== t1t1 &&&& t2;t2;

    printf(“x= %dprintf(“x= %d t1=%d t2=%dt1=%d t2=%d test = %dtest = %d\  \n”, x,n”, x,t1,t2,t1,t2, test);test);}}

    Složeni logički izraziSloženi logički izrazi

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    83/187

    (a < b) && (c = = d) || (e > f)(a < b) && (c = = d) || (e > f) jednostavni jednostavnilog. izraz 1log. izraz 1

     jednostavni jednostavnilog. izraz 2log. izraz 2  jednostavni jednostavni

    log. izraz 3log. izraz 3

    llogičkiogički operator 1operator 1 llogičkiogički operatoroperator 22

    ssudud (tvrdnja)(tvrdnja)

    *

    Foja je vijednos@ logiFoja je vijednos@ logislijedeUe vijednos@i a=b=P4 c=d=O4slijedeUe vijednos@i a=b=P4 c=d=O4 ee ==4, f=3:4, f=3:

    (a < b) && (c = = d) || (e > f)(a < b) && (c = = d) || (e > f)

    00 11 11

    00 1111

    &&&&

    ||||

    ako je a ako je b (a |||||||| b) je

    ‘ili’ tablica‘ili’ tablica

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    84/187

    točno (1) točno (1) točno (1)

    točno (1) pogrešno (0) točno (1)

    pogrešno (0) točno (1) točno (1)

    pogrešno (0) pogrešno (0) pogrešno (0)

    *

    ako je a ako je b (a&&b) je

    točno (1) točno (1) točno (1)

    točno (1) pogrešno (0) pogrešno (0)

    pogrešno (0) točno (1) pogrešno (0)

    pogrešno (0) pogrešno (0) pogrešno (0)

    ‘i’ tablica‘i’ tablica

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    85/187

    Prioriteti ispitivanjaPrioriteti ispitivanja(1) jednostavni logički izrazi(1) jednostavni logički izrazi

    (2) negacije(2) negacije

    (3) zagrade(3) zagrade(4) konjunkcija(4) konjunkcija

    (5) disjunkcija(5) disjunkcija

    *

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    86/187

    Zarez: operator razdvajanjaZarez: operator razdvajanja

    i = 10, i + 5;i = 10, i + 5; // // rezultat: i=15rezultat: i=15

     or s se zaor s se za raz va an e zrazaraz va an e zraza uu

    naredbama.naredbama.

    *

    Operatori obnavljajućegOperatori obnavljajućeg

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    87/187

    pridruživanjapridruživanja

    SastojeSastoje sese odod operatoraoperatora ii znakaznaka jednakosti jednakosti.. OmogućavajuOmogućavaju kraćikraći zapiszapis

    = +== += --= *= /= %== *= /= %=

    *

    Primjeri s aritmetičkimPrimjeri s aritmetičkimoperatorima:operatorima:

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    88/187

    int a;

    a = 20;a += 5;

    a = 20a = 20a =a = a+a+55   a=25a=25

     EkvivalentniEkvivalentni

    a -= 5;

    a *= 5;

    a /= 5;

    a %= 5

    a =a = aa --55 a = 20a = 20

    a =a = a * 5a * 5 a = 100a = 100

    a =a = a / 5a / 5 a = 20a = 20

    a =a = a%5a%5 a =a = 00

    *

    izraziizrazi

    Zadatak:Zadatak: Što će se ispisati:Što će se ispisati:

    #i l d tdi h#i l d tdi h

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    89/187

    #include #include void main()void main(){{

    int n = 10;n+=5; printf("n = %d \n", n);n-=20; printf("n = %d \n", n);

     n*=-2; printf("n = %d n", n);

    n%=3; printf("n = %d \n", n);}}

    Dodatak:Dodatak:

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    90/187

    Operatori po prioritetima (hijerarhija):Operatori po prioritetima (hijerarhija):

    Operatori po prioritetimaOperatori po prioritetima

    U iU i !!

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    91/187

    Unarni opUnarni op -- !! ++++ ----

    Aritm opAritm op ** / / %%

    ++ --

     

    = == = !=!=

    Logičko ANDLogičko AND &&&&

    Logičko ORLogičko OR ||||

    op pridruživanjaop pridruživanja = +== += --= *= /= %== *= /= %=

    c = a*b + d/e;c = a*b + d/e;

    ( *(b d)) /( *(b d)) /

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    92/187

    c = (a*(b+d)) /e;c = (a*(b+d)) /e;

    t < i +1;t < i +1; t < ( i+1 );t < ( i+1 );

    5*2 >= 10;5*2 >= 10; (5*2) >= 10;(5*2) >= 10;1 != 7 = = 0;1 != 7 = = 0; (1 != 7) = = 0;(1 != 7) = = 0;

    1 && !0 || 11 && !0 || 1 rezultat je1.rezultat je1.

    1 && !(0 || 1)1 && !(0 || 1) rezultat je 0.rezultat je 0.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    93/187

    93

    V3 Fon@ola @oka pogam

    V3 Fon@ola @oka pogam

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    94/187

    V3P3 8^V3P3 8^V3O3 8^V3O3 8^--K;IKK;IK

    V3V3 I8CTV3V3 I8CT

    94

    HA7KEA i

    UU

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    95/187

    Dsnovni opUi oblik ove naedbe je :Dsnovni opUi oblik ove naedbe je :i" lo*i+ki_ i" lo*i+ki_ii$ra$ ($ra$ (

    FF !lok_#ared!i!lok_#ared!i ;;G

    95

    ILIILIi" lo*i+ki_ i" lo*i+ki_ii$ra$ ($ra$ ( #ared!#ared!a ;a ;

    NAREDBA if

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    96/187

    Primjer:

    96

    if ( uspjeh >= 60 ) printf(“Student je prošao. \n “);

    U CU Cjezikujeziku

    Pogledajmo slijedeći program koji utvrđuje je li

    znak unesen s tipkovnice u rasponu od A do Z

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    97/187

    znak unesen s tipkovnice u rasponu od A do Z.#include

    void main()

    {

     

    97

     

     printf("Unesite znak : ");scanf(" %c", &slovo );

    if( slovo >= 'A' )

    if( slovo

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    98/187

    #include

    void main()

    {

    char slovo;

    98

     

     printf("Unesite znak : ");

    scanf(" %c", &slovo );

    if(slovo >= 'A‘ && slovo

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    99/187

    9999

    Zapamtite !!!

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    100/187

    • Korištenje praznog mjesta (ispred %c)u naredbi scanf (" %c", &slovo );omogućava ignoriranje TAB, SPACE

    100

    unesen neki znak.

    NAREDHE i el&edvos@ana selekcija

    DpUi oblik ovi? naedbi je :DpUi oblik ovi? naedbi je :

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    101/187

    DpUi oblik ovi? naedbi je :DpUi oblik ovi? naedbi je :i i , logi

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    102/187

    dvostrana selekcijaPrimjer:

    102

    if ( uspjeh >= 60 ){

    printf(“Student je prošao. \n “); }else

    { printf("\t Student je pao ispit.\n");}

    Koju vrijednost poprimaju varijable a, b, c nakonizvršenog bloka naredbi?

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    103/187

    void main(){

     

    103

      , ,

    if (!(a >b)){c=a++;

    b=b-a;}

    elseb=--c; }

    Bimje: Hapisa@i pogam koji > oba pana ispis>je nji?ov>

    s>m>2 inamnoNak

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    104/187

    s>m>2 inamnoNak #include #include

    void main()void main()

    {{

    intint prvi_broj prvi_broj,, drugi_brojdrugi_broj;;

     printf(”Unesite prvi broj: ” ) ; printf(”Unesite prvi broj: ” ) ;

    ” ”” ”

    104

    ,, _  _ 

     printf(”Unesite printf(”Unesite drugidrugi broj: ” ) ; broj: ” ) ;

    scanf(”%d”,&scanf(”%d”,&drugi_ drugi_broj); broj);

    if((if((p prvirvi_  _broj%2 == 0)&& (drugi broj%2 == 0)&& (drugi_  _broj%2 == 0)) broj%2 == 0))

     printf(”%d  printf(”%d\\n”,prvin”,prvi_  _broj + drugi broj + drugi_  _broj) ; broj) ;

    elseelse

     printf(”%d  printf(”%d\\n”,prvin”,prvi_  _broj broj ** drugidrugi_  _broj) ; broj) ;

    }}

    // unijeti troznamenkasti broj i ispitati da li je suma

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    105/187

     // unijeti troznamenkasti broj i ispitati da li je sumaznamenki jednaka umnosku

     

     početak 

    ročita a

    105

     

    ne a > 99 i a

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    106/187

    i#t a, &, d, ;pri#t"CU#e&ite tro$#ame#ka&ti !ro C(;&ca#"C@dC,Ma(;

    i "a1333 MM a(F O6 Da li e !ro ' i#terval' P133, Q6O

    & aO133; OO &totice 

    106

    d "a &6133(O13; OO de&etice  a "&6133 d613(; OO edi#icepri#t"CHro' @d &'ma $#ame#ki C,a(;

    i "&d &6d6( OO Da li e &'ma 'm#o$ak0pri#t"Ce&t ed#aka C(;

    el&e pri#t" C#ie ed#aka C(;pri#t"C'm#o&k' #e*ovi) $#ame#ki. #C(;G

    el&e pri#t"CHro #ie ' i#terval' P133,QS#C(;G

    HLKTI i el&e NAREDHI

      i.i. 2 2el&eel&e naedbnaedbee mog> se nadoveziva@imog> se nadoveziva@i

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    107/187

    i, logi

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    108/187

    ZADATAK Napisati program koji omogućava unos visine (u

    cm) i težine (kg) za neku osobu i ispisuje jednuod sljedećih poruka: prelagan, normalan, ili

     

    108

    pre e a , pr m enom r er a:

    prelagan: težina < visina / 2.5 normalan: visina/ 2.5

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    109/187

    {int tezina, visina;

     printf("Unesite tezinu (kg) i visinu(cm)\n");

    scanf("%d,%d%",&tezina,&visina);

    if (tezina

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    110/187

    Sljedeći program ispituje da li je i

    110

    korisnik upisao broj između 1 i 1 0 .

    !incl>de s@dio3?void main, in@ boj2

    pin@,Lnesi@e boj izmedj> P i P0 : 2

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    111/187

    scan,%d4boj2i , boj P

    F pin@,(n(@ Pogresno!!!(n(@ Broj %d je manji od 13(n4boj2

    111

    el&e i , boj P0

    F pin@,( n\tPogresno!!!(n(@ Broj %d  je veci od 10.\ n4boj2

    G

    el&eF pin@,(n(@(@avo """(n(@ oj %d je veci od 0 i manji od PP(n4 boj2 G

    G

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    112/187

    Sljedeći program radi kao

    112

    e nostavn a u ator:

    #include void main(){ int nije_operator =0;

    char a_operator;float broj1, broj2, rezultat;printf("Unesite dva broja i operator\n");

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    113/187

    printf( Unesite dva broja i operator\n );printf(" broj1 operator broj2\n");scanf("%f%c%f ", &broj1, &a_operator, &broj2);

    if (a_operator == '*')rezultat = broj1 * broj2;else if (a_operator == '/')

     

    113

    rezu a = ro ro ;else if(a_operator == '+')

    rezultat = broj1 + broj2;else if(a_operator == '-')

    rezultat = broj1 - broj2;else

    nije_operator = 1;

    if( nije_operator)printf("Nedozvoljeni operator.\n");

    elseprintf("%f %c %f iznosi %f .\n", broj1, a_operator, broj2, rezultat );

    }

    if naredba i uvjetni operator ?

    • Sljedeće dvije naredbe su ekvivalentne:1) max = a>b ? a : b

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    114/187

    1) max = a>b ? a : b2)

    if(a>b) max=a;else max=b;

    114

    • Opći oblik je:

    logički_izraz ? izraz1 : izraz2

    55 Ako je Ako je lo*i+ki_i$ra$ lo*i+ki_i$ra$ is@ini@ ,C7LK @j3 azlile 4is@ini@ ,C7LK @j3 azlile 4

    izv]ava se izazP4 a ako je neis@ini@izv]ava se izazP4 a ako je neis@ini@ ,^A;IK 4 @j3 n>la4,^A;IK 4 @j3 n>la4@ada se izv]ava izazO@ada se izv]ava izazO

    if naredba i uvjetni operator ?

    55 `@o ispis>je slijedeUi isjeje slijedeUi isje

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    115/187

    vaijable popimi@i nakon ]@o se @aj kod izv]i#vaijable popimi@i nakon ]@o se @aj kod izv]i#

    int a = 1, b = 2, c = 3, d = 4;int a = 1, b = 2, c = 3, d = 4; printf("%d  printf("%d\\n%d", ++a, ((d/=8) ? cn%d", ++a, ((d/=8) ? c---- : b: b----));));

    115

    55 Bid>Bid>NNivanje ima manji pioi@e@ od dijeljenja4 pa izazivanje ima manji pioi@e@ od dijeljenja4 pa izaz dOdOodgovaaodgovaa izaz>izaz> dd " "dOdO((

    55 BBvo se a dijeli svo se a dijeli s 4 a za@im se ez>l@a@ ponovno pospema >4 a za@im se ez>l@a@ ponovno pospema > vaijabl>vaijabl>

    dd dOdO 4O 3 4O 3   nova vijednos@ vaijablenova vijednos@ vaijable dd iznosiiznosi #'la#'la

    55 6ijednos@ 0 6ijednos@ 0 = ^A;IK= ^A;IK 4 pa se eval>ia 8Z7AZO4 pa se eval>ia 8Z7AZO= b= b----

    Uvjetna naredba – kratki oblik

    • Treba unijeti cijeli broj različit od 0 pa ispisati apsolutnuvrijednost broja. Ispis neka bude oblika:

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    116/187

    Upisi broj:

     Apsolutna vrijednost je....

    #include#include

     

    116

    vo ma nvo ma n

    { int a;{ int a;printf("Upisi broj:");printf("Upisi broj:");

    scanf("%d",&a);scanf("%d",&a);

    (a==0) ? printf(“ ERROr(a==0) ? printf(“ ERROr \  \n”) :n”) :

    (a

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    117/187

    int broj;

     printf("Ispisat cu da li ste unijelinulu,pozitivan ili negativan broj!\n");

     

    117

     pr n nes e ro : ;

    scanf("%d", &broj );(broj==0) ? printf("nula\n") :

    ((broj>0) ? printf("pozitivan\n") :

     printf("negativan\n "));}

    IljedeUiIljedeUi pogampogam kois@ikois@i   i. i.  naedb>naedb> ss logipis >>

    aspon>aspon> izmeM>izmeM> PP ii P0P033#include#include

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    118/187

    ##

    void void  main() main()

    {{

    intint broj; broj;

     printf printf("Unesite broj izmedju 1 i 10 :("Unesite broj izmedju 1 i 10 :\\nn ");");

    118

    scanfscanf("%d", &broj);("%d", &broj);

    ifif (broj(broj < 1< 1 |||| broj broj > 10> 10)){{ printf printf("("\\nn\\tt\\tPogresno!!!tPogresno!!!\\nn\\t Broj %d nijet Broj %d nije

    izmeđ u 1 i 10.izmeđ u 1 i 10.\\n", broj);n", broj); }}

    elseelse{{ printf printf("("\\nn\\tt\\tBravo !!!tBravo !!!\\nn\\t Broj %d jet Broj %d jeveci od 0 i manji od 11veci od 0 i manji od 11 \\n", broj); }n", broj); }

    }}

    Koju vrijednost poprimaju varijable a i b nakonizvršenog bloka naredbi?

    #include void main()

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    119/187

    {int a=3, b=0;if (a +=b)a+=1

    119

    b=a+1;}

    printf("a=%4d\n b=%d\n",a,b);}

    NAREDHA &=itc) HaedbaHaedba   &=itc) &=itc)  je je boljibolji naje vi]evi]e naedbinaedbi el&e el&e i. i. 

    DpUiDpUi oblikoblik

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    120/187

    DpUiDpUi oblik oblik si@c?si@c? ,, cjelobojni_izazcjelobojni_izaz

    casecase vijednos@vijednos@PP::blok_naedbiblok_naedbiPPbeak beak22

    120

    casecase vijednos@vijednos@OO::

    blok_naedbiblok_naedbiOObeak beak22casecase vijednos@vijednos@VV::

    blok_naedbiblok_naedbiVV

    beak beak22 3333333333dea>l@:dea>l@:

    blok_naedbiblok_naedbi11

    ZAPAMTI!!!

    • Ključna riječ  break mora biti uključena nakraju svake alternative osim zadnje

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    121/187

    kraju svake alternative, osim zadnje

    • Ključ

    na riječ

     default označ

    ava alternativukoja  će biti izabrana ako nijedna od prethodnih

    121

    ,

    ispuštena• Desna zagrada na kraju označava kraj izbora

    alternativa

    Pravila za switch naredbu

    Vrijednosti 'case' moraju biti cjelobrojne ili

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    122/187

    Vrijednosti case moraju biti cjelobrojne iliznakovne konstante

    Poredak 'case' izraza nije važan

    122

    ‘Default’ se može smjestiti bili gdje unutarswitch bloka (uobičajeno je na kraju)

    Ne smiju se koristiti izrazi kao vrijednosti

    'case'

    Kolika je vrijednost varijable a nakon

    što se izvrši sljedeći blok naredbi#include#include

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    123/187

    void main()void main(){{ int a=int a=3333;;

    switch(a%4)switch(a%4)

    123

    case 1: a+=2;break;case 1: a+=2;break;

    case 2: acase 2: a--=3;break;=3;break;default:a+=4;default:a+=4;

    }}

    printf("printf("\  \na=%dna=%d\  \n",a);n",a);}}

    #include

    void main (){

    L vijednos@ slovima

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    124/187

    int broj;

     printf("Unesite brojcanu vrijednost: \n");

    scanf("%d",&broj);switch (broj)

    124

    case 1:

     printf("Jedan\n"); break;case 2:

     printf("Dva\n"); break;

    case 3:

     printf("Tri\n"); break;

    default:

     printf("Unijeli ste pogresnu vrijednost\n");  break;}

    }

    Hapi]i pogam koji Ue za bojeve P4O4V4W ni]@a ispisa@i4 a ako je boj jednak R ispisa@i Ue R4 ako je ne]@o d>go ispisa@ Ue Boge]an >nos3

    Početak

    #includevoid main()

    { int x; printf("upiši broj");scanf("%d",&x);

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    125/187

    Unos broja

    Ispitivanje broja

    switch(x){case 1:case 2:case 3:case 4:

    125

    Broj je od 1-4

    Broj:5

    Pogrešan unos

    Kraj

     {

     printf("broj je 1-4\n");

     break;}

    case 5:{ printf("broj je 5\n");

     break;}default:

     printf("Broj vangranica\n");

    }

    Napiši program koristeći switch case naredbu kojim ćeš upisati 2broja po želji i operator po želji +-*/ te ovisno o izboru operatoraizbaciti rješenje.

    Početak

    Unos broja1Unos broja2

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    126/187

    Ispitivanje

    operatoraFunkcijaza omjer

    Funkcijaza zbroj

     / 

    * -

    +

    126

    Ispiši omjer

    Kraj

    Ispiši umnožak Ispiši razliku

    Ispiši zbroj

    Funkcija zaumnozak

    Funkcijaza razliku

    // kalkulator// kalkulator// kalkulator// kalkulator

    #include #include void main()void main()

    {{ charchar oper;oper; //operator//operatorfloatfloat broj1, broj2, rezultat; broj1, broj2, rezultat;

     printf("Unesite dva broja i operator printf("Unesite dva broja i operator \\n");n");scanf("%f%c%f", &broj1, &oper, &broj2);scanf("%f%c%f", &broj1, &oper, &broj2);switchswitch (oper)(oper){{ ' '' '

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    127/187

    {{ case '+':case '+':rezultat = broj1 + broj2;rezultat = broj1 + broj2; printf("%f %c %f iznosi %f. printf("%f %c %f iznosi %f.\\n", broj1,oper,broj2,rezultatn", broj1,oper,broj2,rezultat);); break break;;

    case'case'--':':

    127

    rezultat = broj1rezultat = broj1 -- broj2; broj2; printf("%f %c %f iznosi %f. printf("%f %c %f iznosi %f.\\n", broj1,oper,broj2,rezultatn", broj1,oper,broj2,rezultat

    );); break break;;

    case '/':case '/':rezultat = broj1 / broj2;rezultat = broj1 / broj2; printf("%f %c %f iznosi %f. printf("%f %c %f iznosi %f.\\n", broj1,oper,broj2,rezultat);n", broj1,oper,broj2,rezultat);

     break; break;case '*':case '*':rezultat = broj1 * broj2;rezultat = broj1 * broj2;

     printf("%f %c %f iznosi %f. printf("%f %c %f iznosi %f.\\n", broj1,oper,broj2,rezultat );n", broj1,oper,broj2,rezultat ); break; break;

    default:default:

    rintf "Nedozvol eni o erator.rintf "Nedozvol eni o erator.\\n"n"

    Za domaći rad:1.  Napišite C program koji omogućava korisniku

    da upiše 5 brojeva između 1 i 100. Program

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    128/187

    da upiše 5 brojeva izmeđ u 1 i 100. Programtreba izrač unati prosječ nu vrijednost unesenih

    brojeva , te odrediti koji su brojevi manji od 54i koliko e takvih bro eva.

    128

    2.  Napišite program koji ispituje (pomoću moduloperatora %) da li je upisani broj paran ilineparan.

    3. Proširite ZADATAK 2 za provjeru parnosti, takoda za parne i neparne brojeve dodatno ispitatedjeljivost s 3, a za parne brojeve i djeljivost s 4.

    Dodatak:

    • Kontrola toka programa:

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    129/187

    p g

    129

    KONTROLA TOKA PROGRAMA

    • JEDNOSTRUKO UVJETNO GRANANJE(IF)

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    130/187

    (IF)

    if (uvjet) opći oblik naredbe za jednostruko grananje

    blok naredbi;}-ako je uvjet ispunjen(tj.istinit), izvršava se blok naredbi.-u protivnom se blok naredbi preskače.-blok naredbi se može sastojati od 1 ili više naredbi.

    Pr.int a;

    scanf(“%d”,&a);if (a>10){

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    131/187

    {

    a=a+3;}printf(“%d”,a);

    Pr.int a;

    scanf(“%d”,&a);if (a%2 = = 0)

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    132/187

    {

    printf(“Unijeli ste paran broj”);}

     if (a%2 != 0)

    {printf(“Unijeli ste neparan broj”);

    }

    - uvjet može biti bilo koji logički ili aritmetički izraz.

    • VIŠESTRUKA UVJETNA GRANANJA (IF)if (uvjet1) opći oblik

    {blok naredbi1;

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    133/187

    }

    else{

    blok naredbi2;

    }-Ako je uvjet1 ispunjen izvršava se blok naredbi1 i

    preskače blok naredbi2, u protivnom se preskače blok

    naredbi1 i izvršava bloknaredbi2.

    if (uvjet1){

    blok naredbi1;

    }else if(uvjet2){

    Ispitivanje niza uvjeta.

    -Dakle, ako je bilo koji uvjet ispunjenizvršit će se blok naredbi pridružen

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    134/187

    {

    blok naredbi2;}

    izvršit će se blok naredbi pridružentom uvjetu, a svi ostali blokovi naredbi

    će biti preskočeni

    -…else if(Uvjet7){

    blok naredbi7;}

    else{

    blok naredbi8;

    }

      .

    Pr.int a;

    scanf(“%d”,&a);if(a%2==0){

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    135/187

    {

    printf(“Broj %d je paran”,a);}

     else

    {printf(“Broj %d je neparan”,a);

    }

    • VIŠESTRUKA UVJETNA GRANANJA (SWITCH-CASE)Omogućava izbor jednog između više mogućih putova daljnjeg izvođenja

    programa, što ovisi o vrijednosti varijable tj. izraza.

    switch(izraz){

    case konstanta1:

    -Prvo se izračuna vrijednost izraza,a zatim serezultat izraza usporedi s konstantama. Ako jerezultat izraza jednak nekoj od konstanti, tada seizvršava blok naredbi pridružen toj konstanti Ako

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    136/187

    blok naredbi1;

    break;case konstanta2:

     

    izvršava blok naredbi pridružen toj konstanti.Akorezultat ne odgovara ni jednoj od konstanti,

    izvršava se blok naredbi pridružen opciji default.-Izvršavanje bloka naredbi neke konstante se

    break;

    ….case konstanta9:

    blok naredbi9;break;default:

    blok naredbi10;break;

    }

     označava kraj switch – case strukture.

    • Switch-case ispituje jednakost rezultata izraza i konstante, dok kodif-a izraz moze biti bilo sto.

    • Dvije konstante u case ne mogu imati istu vrijednost.

    • Ako blok naredbi u case ne završava s break, nastavlja se izvršavatiblok naredbi idućeg case-a. Naredbe se izvršavaju sve dok se nenaiđe na break.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    137/187

    int i;scanf(“%d”,&i);

    switch(i){

    case 1:

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    138/187

    case 1:

    printf(“Izabrali ste broj 1”);break;

     case 2:

    printf(“Izabrali ste broj 2”);break;default:

    printf(“Pogrešan izbor”);break;}

    int i;scanf(“%d”,&i);switch(i)

    {case 1:case 2:

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    139/187

    case 2:case 3:

    blok naredbi 1;breakcase 4:

    case 5:blok naredbi 2;

    break;default:

    printf(“Niste unijeli niti jedan od ovih brojeva”);break;

    }

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    140/187

     

    PROGRAMSKE PETLJEPROGRAMSKE PETLJE

    Be@ljeBe@lje omog>U>j>omog>U>j> ponavljanjeponavljanje izvoMenjaizvoMenja jedne jedne iliilivi]evi]e linijalinija pogamskogpogamskog kodakoda

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    141/187

    jj p g gp g g

    PETLJE 141

    P3P3 Be@ljaBe@lja ss eksplici@nimeksplici@nim boja::  ?ile ?ile V3V3 II izlazomizlazom nana dn>dn>:: do_ do_ ?ile ?ile 

    4.1. Petlja s eksplicitnim brojačem4.1. Petlja s eksplicitnim brojačem:: for for 

    formatforfor ((inicijalizacijainicijalizacija; uvjet; izraz prirasta); uvjet; izraz prirasta)

    kois@ikois@i sese zaza ponavljanjeponavljanje izazaizaza >n>@a>n>@a pe@ljepe@lje @o@a

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    142/187

    forfor ((inicijalizacijainicijalizacija; uvjet; izraz_prirasta); uvjet; izraz_prirasta)// blok_naredbi// blok_naredbi

     

    PETLJE 142

    nene

    n c a zac a on ro ne var a e

    blok naredbi

    promjena vrijednostikontrolne varijable

    uvjet

    prekidprekidponavljanjaponavljanja

    dada

    Primjer jednostavne for petlje

    Primjer

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    143/187

    Primjer!incl>de s@dio3?in@ brojac2main,

    brojac = 1

     nene

    PETLJE 143

     /* Program broji do 20 i ispisuje

    brojeve */o ,bojac = P2 brojac = O02 brojac++

    pin@,(n%d4 brojac 21

    ispis

    brojac = brojac + 1

    brojac

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    144/187

    void main()void main()

    {{  '''' ''''

    PETLJE 144

      = de s@dio3?!incl>de s@dio3?voidvoid main,main,FF

    B78JK7:B78JK7: Bogam ispis>je s>m> pviBogam ispis>je s>m> pvi nn piodni? bojeva3piodni? bojeva3

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    145/187

    in@ i4n4 s>ma=02in@ i4n4 s>ma=02pin@,pin@,( (n Lnesi jedan pozi@ivni cijeli boj:2n Lnesi jedan pozi@ivni cijeli boj:2

    PETLJE 145

    o, i = P2 i = n2 i++ o, i = P2 i = n2 i++

    s>ma += i21s>ma += i21pin@,pin@,( (nn Zbroj brojeva od 1 doZbroj brojeva od 1 do %d%d iznosiiznosi %d3%d3( (n4n4n4n4 s>mas>ma22

    pin@,pin@,( (nn ProsjekProsjek brojeva od 1 dobrojeva od 1 do %d%d iznosiiznosi %%3O 3O33( (n4n4n4n4 ,loa@,loa@

    s>mas>ma/n /n22GG

    !incl>de s@dio3?!incl>de s@dio3?voidvoid main,main,FF

    in@ i nin@ i n bojboj s>ma 02s>ma 02

    B78JK7:B78JK7: Bogam ispis>je s>m> pviBogam ispis>je s>m> pvi nn piodni? bojeva3piodni? bojeva3

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    146/187

    in@ i4n4in@ i4n4 boj4boj4s>ma=02s>ma=02

    pin@,pin@,( (n Lnesi jedan pozi@ivni cijeli boj:2n Lnesi jedan pozi@ivni cijeli boj:2scan,%d4n2scan,%d4n2

    PETLJE 146

    o, i = P2 i = n2 i++ o, i = P2 i = n2 i++

    scan,[%d\4boj 2scan,[%d\4boj 2i ,bojP )) bojP00 scan,[%d\4boj2i ,bojP )) bojP00 scan,[%d\4boj2s>ma +=s>ma += bojboj2121

    pin@,pin@,( (nn Zbroj brojeva iznosiZbroj brojeva iznosi %d3%d3( (n4n4 s>mas>ma22pin@,pin@,( (nn ProsjekProsjek brojeva iznosibrojeva iznosi %%3O 3O33( (n4n4 ,loa@,loa@ s>mas>ma/n /n22GG

    PRIMJER:PRIMJER: Dvaj pogam ana ak@oijel> >nesenog boja n3Dvaj pogam ana ak@oijel> >nesenog boja n3^ak@oijel je >mnoNak svi? bojeva od P do n:^ak@oijel je >mnoNak svi? bojeva od P do n:

    n" =P f O f V f W f 333 f , nn" =P f O f V f W f 333 f , n – – O f , nO f , n – – P f nP f n

    • Rješenje s programskom petljom spoznatim brojem ponavljanja

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    147/187

    poznatim brojem ponavljanja

    • Pseudokod 

    PETLJE 147

    >> a na n

    ak@:=Pak@:=Pza i=P do nza i=P do nak@:=ak@*iak@:=ak@*i

    ispi]i ,n4ak@ispi]i ,n4ak@)

    Bogam za izanavanje H ak@oijelaje]enje > T->

    !incl>de s@dio3?!incl>de s@dio3?voidvoid main,main,

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    148/187

    in@ i=O4 n2in@ i=O4 n2

    PETLJE 148

    pin@, Lnesi piodan boj : 2pin@, Lnesi piodan boj : 2  // manji od PQ0 "# // manji od PQ0 "#

    scan,%d4scan,%d4 n2n2o ,i2i=n2 i++o ,i2i=n2 i++ak *=i 21ak *=i 21

    pin@,pin@,( (nn( (nn ^ak@oijela od %d je %^ak@oijela od %d je %dd33( ( n4n4ak2n4n4ak211

    B78JK7:B78JK7: 8IB8I ZHAFD6A8IB8I ZHAFD6A

    #includeint main()

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    149/187

    int main(){

     

    PETLJE 149

    char slovo;

    for( slovo = 'A'; slovo

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    150/187

    main(){

     

    PETLJE 150

    int zbroj = 0;

    for(int brojac = 1; brojac or>or petlapetla!!incl>deincl>de s@dios@dio33??mainmain,,

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    151/187

    in@ i4j2in@ i4j2

    PETLJE 151

    o,j=P2jP02j++o,j=P2jP02j++pin@,%Vd4i*j2pin@,%Vd4i*j2

    pin@,pin@,( (n2n2

    1111

    4.2. Petlja s izlazom na vrhu4.2. Petlja s izlazom na vrhu:: whilewhile

    format

    while (uvjet_izvođ enja)

    naredba;nene

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    152/187

    uvjetdada ili

    PETLJE 152

    Bloknaredbi

    PrekidPrekidponavljanjaponavljanja

    while (uvjet_izvođ enja)

    {

     blok_naredbi;}

    HHaedbaaedba UUee sese izvizv]]ava@iava@i svesve dok dok izazizaz imaima vijednos@vijednos@is@ineis@ine ,azli,azlile

    ?ile?ile pe@ljape@lja

    a = 5  primjerint a = 5;int b;

    nene

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    153/187

    a != 0while (a != 0){ printf("\n Unesi cijeli broj b:");

    dada

    nene

    PETLJE 153

    ,a = a - b; }

    a = a -b

    učitaj:b (a = 0)(a = 0)

    PrekidPrekidponavljanjaponavljanja

    ?ile?ile pe@ljape@lja55 FolikaFolika je je vijednos@vijednos@ vaijablevaijable aa ii bb

    nakonnakon izv]enogizv]enog blok blok naedbi#naedbi#void main()void main()

    {{

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    154/187

    {{

    int a=25,b=0,c=4;int a=25,b=0,c=4;

    while a>bwhile a>b

    PETLJE 154

     

    {{ aa--=c;=c;

     b++; b++;}}

     printf(" printf("\\n a=%d n a=%d\\tb=%d,,,tb=%d,,,\\n",a,b);n",a,b);

    }}

    Primjer programa s petljom while

    #include void main()

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    155/187

    ()

    PETLJE 155

     =

    while( brojac ma svi? pani? bojeva od P do n3I>ma svi? pani? bojeva od P do n3

     /* /*I>ma svi? pani? bojeva od P do n*/I>ma svi? pani? bojeva od P do n*/

    !incl>de!incl>de s@dio3?s@dio3?voidvoid main,main,FF

    in@in@ n in i s>ma 0s>ma 022

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    156/187

    in@in@ n4 in4 i 4 s>ma=04 s>ma=022i=P2i=P2pin@,pin@,( (n Lnesi@e vijednos@ za n"2n Lnesi@e vijednos@ za n"2

    PETLJE 156

    scan,%d4 n2scan,%d4 n2

    ?ile,?ile, ii == nn i, i%O==0 i, i%O==0 s>ma+=i2s>ma+=i2

    ii++2++2 11pin@,pin@,( (nn Suma svih parnih brojeva od 1 do %d iznosiSuma svih parnih brojeva od 1 do %d iznosi %d%d( (nn44n4n4 s>ma2s>ma2 GG

    BimjeBimje:: izaizana@i posjek posjek nepozna@ognepozna@og bojaboja pozi@ivni?pozi@ivni? cijeli?cijeli?bojevabojeva ,bojevi,bojevi sese >> dok dok sese nene >nese>nese 0033

    !incl>de!incl>de s@dios@dio33??voidvoid mainmain ,, in@in@ s>ma4s>ma4 boj4boj4 nn22

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    157/187

    jj

    s>ma=s>ma=0022 n=n=0022pin@,[Lnesipin@,[Lnesi boj\boj\22

    PETLJE 157

    scan,[dscan,[d%%\4boj\4boj22  /* /* inicijalnoinicijalno ss@anje@anje */*/?ile?ile ,boj"=,boj"=00

    i i ,boj,boj00 s>mas>ma +=boj+=boj22

    ++n++n22 11

    scan,[dscan,[d%%\4boj\4boj22  /* /* svasva os@alaos@ala ma/n2211

    44..33.. PetljaPetlja ss izlazomizlazom nana dnudnu:: do_whiledo_while

    formatdo{ blok_naredbi;

    Bloknaredbi

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    158/187

    }while (uvjet_izvođ enja);

    naredbi

    PETLJE 158

    PrekidPrekid

    ponavljanjaponavljanja

    uvjet

    dada

    nene

    HHaedbaaedba UUee sese izvizv]]ava@iava@i svesvedok dok >vje@>vje@ imaima vijednos@vijednos@ is@ineis@ineZaZa azlik>azlik> odod ?ile?ile pe@ljepe@lje

    vijednos@vijednos@ >vje@a>vje@a sese kon@oliakon@olia

    nana kaj>kaj> polazapolaza kozkoz pe@lj>pe@lj>

    do_?iledo_?ile pe@ljape@lja

     primjerint a = 5;int b;

    učitaj:b

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    159/187

    int b;do{

     

    a = a -b

    PETLJE 159

    a != 0

     printf(" n Unesi cijeli broj b:");scanf("%d",&b);

    a = a - b;}while (a != 0);

    (a = 0)(a = 0)

    prekidprekidponavljanjaponavljanja

    dada

    nene

    Primjer

    • Sljedeći program ispisuje broj, koji unesekorisnik, od kraja. To   čini koristeći ostatak

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    160/187

    dijeljenja ( %  operator ) da bi krajnje desnu

    PETLJE 160

     _ .

    • Početni broj se zatim dijeli sa 10, i operacijase ponavlja dok broj ne postane jednak 0.

    #include void main()

    { int broj, d_znamenka;printf("Unesite broj koji će se ispisati od kraja.\n");scanf("%d", &broj);

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    161/187

    dod znamenka = bro % 10

    PETLJE 161

     _ printf("%d", d_znamenka);

    broj = broj / 10; }while( broj != 0 );printf("\n");

    }

    Lz pomoU do =)ile pe@lje ispisa@i bojeve veUe od R00 imanji? Q00 koji s> djeljivi sa PQ3 8spisa@i koliko ima @akvi?bojeva3#include

    void  main()

    {int n,i;

    n=500;

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    162/187

    i=0;

    do

    PETLJE 162

    {n++;

    if(n%17==0){i++;

     printf(" %d-ti broj je %d \n",i,n);}}

    while(n

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    163/187

    beskonačna pelja

    PETLJE 163

    o,in@ bojac = P22bojac++ 2o,in@ bojac = P22bojac++ 2o,in@ bojac = P2 bojac = P02 2o,in@ bojac = P2 bojac = P02 2o,in@ bojac = P2 bojac = P02 bojaco,in@ bojac = P2 bojac = P02 bojac----4bojac++ 24bojac++ 2

    5. Kontrola toka programaKontrola toka programaSkokovi u programuSkokovi u programu

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    164/187

    55 Haedba eak Haedba eak  

    PETLJE 164

    55 Haedba Ton@in>eHaedba Ton@in>e

    55 Haedba SoCoHaedba SoCo

    Haedbe skokaHaedbe skoka

    • Bezuvjetni skok• Uvjetni skok

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    165/187

     –

    PETLJE 165

    zadati da se izvršenje programa nastavi

    naredbom koja je označena nekim imenom

    Prijevremeni prekid ponavljanja: break 

    Primjerint a;

    Učitaj: a

    dada

    Zadatak

    Program opetovano uč

    itava varijablu a.Regularni prekid petlje: (a==0). Prijevremeniprekid petlje: (a= =5).

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    166/187

    ;do {

     printf("Unesi broj");scanf ("%d",&a);

    a= =5

    PETLJE 166

    if (a==5) break; //prekida petlju

     printf("\n%d",a);}while (a!=0);ispis: a

    a!=0

    pr evremenpr evremenii

    prekidprekidponavljanjaponavljanja

    dada

    #e#e

    #e#e

    regularniregularniprekidprekid

    ponavljanjaponavljanja

    Rezultat izvođ enja1.primjer: 2.primjer:a=2 a=2

    a=2 a=2a=3 a=5a=3

    *

    BogamBogam kois@ikois@i   !reak !reak  naedb>naedb> >> beskonaje svesve bojevebojeve odod 00 dodo P0P0 ii pekidapekida

    sese kadkad sese >nese>nese bojboj RR

    #include

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    167/187

    void main() 

    PETLJE 167

     while( brojac 100). Preskok akcije:a negativno ili nula.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    168/187

    do { printf("Unesi broj a ");

    scanf ("%d",&a);

    a

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    169/187

     

    PETLJE 169

     ?ile, bojac P0?ile, bojac P0 ++bojac2 ++bojac2

    i, bojac==Ri, bojac==R con@in>e2con@in>e2

    pin@,%dpin@,%d( (n4 bojac2 1n4 bojac2 111

    Naredba goto

    • Naredba goto omogućava bezuvjetni skokna neku drugu naredbu unutar iste funkcije

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    170/187

    • 

    PETLJE 170

    • p o e:

    goto oznaka_programske_linije;• NIJE POŽELJNO KORISITITI 

    Razmatrat ćemo slučaj kada korisnik

    upisuje neku vrijednost, a onda seprovjerava pripada li ona zadanomrasponu, npr. između 1 i 100

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    171/187

    PETLJE 171

    Sve dok uvjet nije zadovoljen unos i

    provjera se ponavlja

    #include void main(){

    int broj;{

    unos: printf("Unesite broj izmedju 1 i 100\n\n");

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    172/187

    scanf("%d", &broj );if bro 100

    PETLJE 172

     {

    printf("Broj je izvan zadanog raspona\n\n");goto unos;}

    printf("Broj je %d\n", broj );}

    }

    Program provjerava je li znak kojeg upisujekorisnik između A-Z.!incl>de!incl>de s@dio3?s@dio3?voidvoid main,main, c?ac?a znak2znak2

    in@in@ >vje@ = 02>vje@ = 02

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    173/187

    ?ile?ile,">vje@,">vje@

    PETLJE 173

      --scan, %c4 znak2scan, %c4 znak2

    i i ,,znak = A ,znak =Z,,znak = A ,znak =Z>vje@ = P2>vje@ = P2elseelse

    pin@,Znak je izvan dozvoljenog asponapin@,Znak je izvan dozvoljenog aspona( (n2n2

    11pin@,Lpisani znak je %cpin@,Lpisani znak je %c( (n4 znak2n4 znak2

    11

    Izračunavanje broja dana; obično rješenjeIzračunavanje broja dana; obično rješenje

    #include

    int main () {

    int Sij,Velj,Ozu,Tra,Svi,Lip;int Srp,Kol,Ruj,Lis,Stu,Pro,DD,MM,GG,i;

    Sij=Ozu=Svi=Srp=Kol=Lis=Pro=31;Tra=Lip=Ruj=Stu=30;

    do{

    deklaracija

    početak

    inicijalizacija

    ponavljanje

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    174/187

    int Velj=28;veljača!

    PETLJE 174

    cout GG;cout MM;cout DD;cout

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    175/187

    Suma=Suma+Stu;case 11:

    Suma=Suma+Lis; 

    PETLJE 175

    case 10:Suma=Suma+Ruj;

    case 9:

    Suma=Suma+Kol;case 8:Suma=Suma+Srp;

    case 7:Suma=Suma+Lip;

    case 6:

    Suma=Suma+Svi;case 5:Suma=Suma+Tra;

    Rješenje br. 2Rješenje br. 2

    case 4:Suma=Suma+Ozu;

    case 3:Suma=Suma+Velj;

    case 2:Suma=Suma+Sij;

    case 1:Suma=Suma+DD;

    }//ispis

    //indikacija kraja

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    176/187

    //indikacija kraja} while (i==1);return 0;

    PETLJE 176

    }

    Algoritam

    ZadajteZadajte 1010 brojevabrojeva.. IzračunateIzračunate ii ispišiispišibrojbroj pozitivnihpozitivnih brojeva,brojeva, brojbroj negativnihnegativnihbrojevabrojeva ii brojbroj pojavljivanjapojavljivanja nulenule..

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    177/187

    Algoritam

    PETLJE 177

    33 44 44 3344negneg3344 bojboj n>lan>la33

    O3O3 Lpisa@iLpisa@i elemen@eelemen@eV3V3 8spi@a@i8spi@a@i elemen@eelemen@e pomoU>pomoU> 8^8^ naedbenaedbe

    W3W3 Beboja@iBeboja@i bojboj pozi@ivni?4pozi@ivni?4 nega@ivni?nega@ivni? ii bojboj n>lan>laR3R3 8spisa@i8spisa@i ez>l@a@eez>l@a@e

    #include void main(){int brojac;int x, brpoz=0, brneg=0, brnula=0;for (brojac=1; brojac

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    178/187

    scanf( %d\n ,&x);if(x>0)

    PETLJE 178

    brpoz=brpoz+1;else if(x

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    179/187

     min=broj;redni=1;

    PETLJE 179

    for (i=2;i

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    180/187

    180

    • PROGRAMSKE PETLJE-Omogućavaju višestruka uvjetna ponavljanja blokova

    naredbi.-Programske petlje s ispitivanjem uvjeta na početku

    (for,while)-Programske petlje s ispitivanjem uvjeta na kraju(do-while)

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    181/187

    • FOR PETLJAfor(izraz1; izraz2; izraz3){

    blok naredbi;}-Izvršavanje petlje teče u koracima:

    1 Postavi kontrolnu varijablu petlje na početnu vrijednost (izraz1)

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    182/187

    1.Postavi kontrolnu varijablu petlje na početnu vrijednost (izraz1)2.Ispitaj da li je uvjet ponavljanja bloka naredbi petlje zadovoljen

    (izraz2):NE: završi petlju;

    DA: izvrši blok naredbi;: dodijeli kontrolnoj varijabli novu vrijednost (izraz3);: idi na 2 korak;

    -izraz1 – poč. stanje.-izraz2 – uvjet koji mora biti zadovoljen za ponavljanje bloka naredbi.-izraz3 – izraz koji mijenja vrijednost kontrolne varijable petlje.

    Ispis brojeva od 1 do 10 pomo ć u for petlje 

    int main()

    {int i;for (i=1; i

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    183/187

    {pr n , ;

    }

    }

    • WHILE PETLJAwhile(uvjet)

    { blok naredbi;}-Blok naredbi u petlji se ponavlja sve dok je uvjet istinit

    (true) odnosno različit od nule Kad uvjet postane lažan

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    184/187

    (true), odnosno različit od nule. Kad uvjet postane lažan, ,

    izvršiti.

    -Uvjet ponavljanja petlje se ispituje na početku petlje. Toznači da blok naredbi ne mora biti izvršen niti jednom.

    -I for i while petlja pripadaju istoj skupini petlji, što znači da

    se svaka for petlja može zamijeniti programskom petljomwhile.Vrijedi i obrat.

    For petljafor(izraz1;izraz2;izraz3)

    { blok naredbi;}

    Istovjetna je while petlji

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    185/187

    Istovjetna je while petljizraz ;while(izraz2){

    blok naredbi;

    izraz3;}

    Ispis brojeva od 1 do 10 pomo ć u while petlje 

    int main()

    {int i=1;while(i

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    186/187

    {printf(“%d”,i);

    i++; //ako uklonimo ovu naredbu dobijemobeskonačnu petlju}

    }

    • DO WHILE PETLJAdo{

    blok naredbi;} while(uvjet);-Izvršavanje petlje teče u koracima:

    1.Izvrši blok naredbi.

  • 8/16/2019 Programiranje C Jezikom - Vjebe

    187/187

     NE: završi petlju.DA: idi na korak 1.

    -Blok naredbi se mora izvršiti barem jednom.