Upload
nije-bitno
View
229
Download
1
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.