OP - T05 - Naredbe u Programskom Jeziku C
Transcript of OP - T05 - Naredbe u Programskom Jeziku C
OSNOVOSNOVI I PROGRAMIRANJAPROGRAMIRANJA( V )( V )
NAREDBE U PROGRAMSKOM JEZIKU CNAREDBE U PROGRAMSKOM JEZIKU C
mr Dražen BrđaninElektrotehnički fakultet Banja Luka
2007.
2
55..11.. NaredbeNaredbe u u programskomprogramskom jezikujeziku CC
NAREDBE ?NAREDBE ?
NaredbeNaredbeC raspolaC raspolažže malim skupom naredbie malim skupom naredbi
Svaka naredba (iskaz) zavrSvaka naredba (iskaz) završšava sa ava sa ;; (terminator iskaza)(terminator iskaza)
Osnovne grupe naredbi:Osnovne grupe naredbi:naredbe grananja i izbora:naredbe grananja i izbora: if, switchif, switch
naredbe petlji:naredbe petlji: while, do while, forwhile, do while, for
naredbe za nasilnu promjenu toka:naredbe za nasilnu promjenu toka: break, continue, goto, returnbreak, continue, goto, return
Komponovana (sloKomponovana (složžena) naredbaena) naredbajednu ili vijednu ili višše naredbi grupie naredbi grupiššemo koriemo korišštenjem velikih zagrada tenjem velikih zagrada {}{}
opopššti oblik:ti oblik:{ {
iskaz1;iskaz1;iskaz2;iskaz2;
……iskazNiskazN;;
}}
Složena naredba izvršava se tako što se izvršavaju jedna po jedna prosta naredba (iskaz)
od kojih je sastavljena
Ekvivalentna je BLOKU naredbi u PASCALUBEGIN ... END
3
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
ifif ??
Naredba Naredba ififOmoguOmoguććava realizaciju grananja u programu:ava realizaciju grananja u programu:
jednoblokovsko, dvoblokovsko, vijednoblokovsko, dvoblokovsko, viššeblokovskoeblokovsko
Jednoblokovsko grananjeJednoblokovsko grananje
iskaz
ISTINA LAŽuslov
if (uslov) iskaz;if (uslov) iskaz;
složeni iskaz
ISTINA LAŽuslov
if (uslov) if (uslov) { {
iskaziskaz11;;... ... iskazNiskazN;;
}}
4
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
ifif ??
PrimjerProgram koji provjerava da li je učitani broj pozitivan.
broj
ISTINA LAŽ
POČETAK
"pozitivan"
KRAJ
broj>0
#include <stdio.h>#include <stdio.h>
main()main()
{{float float brojbroj;;
printf(printf( ””UnesiteUnesite brojbroj: : ”” ););
scanfscanf( ( ””%%ff””,, &&brojbroj ););
if ( if ( brojbroj>0 ) >0 )
printf(printf( ””BrojBroj jeje pozitivanpozitivan\\nn””,, ););
}}
5
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
ifif ??
Dvoblokovsko grananjeDvoblokovsko grananje
if (uslov) if (uslov) iskaz1;iskaz1;
elseelseiskaz2;iskaz2;
if (uslov) if (uslov) { {
iskaziskaz11;;... ... iskazNiskazN;;
}}elseelse{ {
iskaziskaz11;;... ... iskazNiskazN;;
}}
ISTINA LAŽuslov
iskaz 1 iskaz 2
ISTINA LAŽuslov
složeni iskaz 1 složeni iskaz 2
6
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
ifif ??
PrimjerProgram koji provjerava da li je učitani prirodni broj paran ili neparan.
#include <stdio.h>#include <stdio.h>main()main(){{
int int brojbroj, ost;, ost;printf(printf( ””UnesiteUnesite brojbroj: : ”” ););scanfscanf( ( ””%d%d””,, &&brojbroj ););if ( if ( brojbroj<=<=0 ) 0 )
printf(printf(””Nije prirodanNije prirodan\\nn””););elseelse{{
ost = broj % 2;ost = broj % 2;if (ost==0)if (ost==0)
printf(printf(””ParanParan\\nn””););elseelse
printf(printf(””NeparanNeparan\\nn””););}}
}}
ISTINA LAŽ
ISTINA LAŽ
POČETAK
broj
"GREŠKA"
"Paran" "Neparan"
KRAJ
ost = broj MOD 2
broj<=0
ost = 0
if (broj % 2 == 0)
7
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
ifif ??
ViViššeblokovsko grananjeeblokovsko grananje
if (uslov1) if (uslov1) iskaz1;iskaz1;
else if (uslov2)else if (uslov2)iskaz2; iskaz2;
else if (uslov3)else if (uslov3)iskaz3; iskaz3;
... ...
else if (uslovN)else if (uslovN)iskazN;iskazN;
[[elseelseiskaz0;iskaz0;]]
Blok 1Uslov 1 ISTINA
LAŽ
Blok 2
Blok NUslov N ISTINA
LAŽ
Uslov 2 ISTINA
LAŽ
Blok 0
8
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
ifif ??
PrimjerProgram koji za učitanu numeričkuocjenu ispisuje opisnu ocjenu.
#include <stdio.h>#include <stdio.h>main()main(){{
int int ocjenaocjena;;printf(printf( ””OcjenaOcjena? ? ”” ););scanfscanf( ( ””%d%d””,, &&ocjenaocjena ););if (if (ocjenaocjena====5) 5)
printf(printf(””OdlicanOdlican\\nn””););elseelse if (if (ocjenaocjena====4) 4)
printf(printf(””VrloVrlo dobardobar\\nn””););elseelse if (if (ocjenaocjena====3) 3)
printf(printf(””DobarDobar\\nn””););elseelse if (if (ocjenaocjena====2) 2)
printf(printf(””DovoljanDovoljan\\nn””););elseelse if (if (ocjenaocjena====1) 1)
printf(printf(””NedovoljanNedovoljan\\nn””););elseelse
printf(printf(””GRESKAGRESKA\\nn””););}}
POČETAK
ocjena=5
ocjena
ISTINA
"Odlican"
LAŽ
"GRESKA"
KRAJ
ISTINA
"Nedovoljan"
ocjena=4ISTINA
"Vrlo dobar"
LAŽ
ocjena=3ISTINA
"Dobar"
LAŽ
ocjena=2
ocjena=1
LAŽISTINA
"Dovoljan"
LAŽ
9
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
switchswitch ??
Naredba Naredba switchswitch
OmoguOmoguććava realizaciju ava realizaciju selektivnogselektivnogviviššeblokovskog grananjaeblokovskog grananja
izraz
v1 v2 vn inače. . .
blok 1 blok 0blok 2 blok n
switch (izraz) switch (izraz) {{
case v1:case v1:iskaz1;iskaz1;......
iskazN;iskazN;case v2:case v2:
iskaz1;iskaz1;......
iskazN;iskazN;......
case case vNvN::iskaz1;iskaz1;......
iskazN;iskazN;[default:[default:
iskaz0;iskaz0;]]}}
10
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
switchswitch ??
Naredba Naredba switchswitchswitch (izraz) switch (izraz) {{
case v1:case v1:iskaz1;iskaz1;......
iskazN;iskazN;case v2:case v2:
iskaz1;iskaz1;......
iskazN;iskazN;......
case case vNvN::iskaz1;iskaz1;......
iskazN;iskazN;[default:[default:
iskaz0;iskaz0;]]}}
selektorski izrazne može biti float ili double
Na početku se izračunava vrijednost izraza
Izračunata vrijednost pronalazi se među konstantama v1 .. vN
Ako se vrijednost pronađe, izvršavaju se svi iskazi od pronađenog case do kraja switch
Ako se vrijednost ne pronađe,prelazi se na iskaze iza default:
Ako se želi izlazak iz naredbe switch kad se završi odgovarajući case, treba koristiti
naredbu break
break;
break;
break;
11
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
switchswitch ??
PrimjerProgram koji za učitanu numeričku ocjenu ispisuje opisnu ocjenukoristeći selektivno višeblokovsko grananje.
#include <stdio.h>#include <stdio.h>main()main(){{
int int ocjenaocjena;;printf(printf(””OcjenaOcjena? ? ””);); scanfscanf((””%d%d””,&,&ocjenaocjena););switch (ocjena)switch (ocjena){{
case 5:case 5:printf(printf(””OdlicanOdlican\\nn””);); break;break;
case 4:case 4:printf(printf(””VrloVrlo dobardobar\\nn””);); break;break;
case 3:case 3:printf(printf(””DobarDobar\\nn””);); break; break;
case 2:case 2:printf(printf(””DovoljanDovoljan\\nn””);); break; break;
case 1:case 1:printf(printf(””NedovoljanNedovoljan\\nn””);); break;break;
default:default:printf(printf(””GRESKAGRESKA\\nn””););
}}}}
12
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
switchswitch ??
Primjer: Program koji simulira rad kalkulatora cjelobrojnih operacija#include <stdio.h>#include <stdio.h>main()main(){{
int x,y,rez;int x,y,rez;char op;char op;printf(printf(””Unesite izraz u obliku op1 operator op2: Unesite izraz u obliku op1 operator op2: \\nn””););scanfscanf((””%d %c %d%d %c %d””,&x,&op,&y),&x,&op,&y);;switch (op)switch (op){{
case case ’’++’’::rezrez==x+yx+y;; break;break;
case case ’’--’’::rezrez==xx--yy;; break;break;
case case ’’**’’::rezrez=x*y;=x*y; break;break;
case case ’’//’’::rezrez==x/yx/y;; break;break;
default:default:printf(printf(””NeNe poznajempoznajem tutu operaciju!operaciju!\\nn””););return (0);return (0);
}}printfprintf ((””%d %c %d = %d %c %d = %d%d””, , x,op,y,rezx,op,y,rez););
}}
Nasilni izlaz izprograma
13
55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora
ZADACI ZAZADACI ZA VJEVJEŽŽBBUU......
ZadaciZadaci::1. Napisati program koji učitava dva broja, a zatim ispisuje manji broj. 2. Napisati program koji učitava tri broja, a zatim ispisuje najmanjeg (najvećeg).3. Napisati program koji učitava prirodan broj manji od 100, a zatim ispisuje zbir njegovih
cifara. 4. Napisati program koji učitava prirodan broj manji od 1000, a zatim ispisuje zbir njegovih
cifara. 5. Učitati godinu, pa ispisati da li je ona prestupna ili nije.6. Napisati program koji za učitani redni broj dana u sedmici ispisuje njegov naziv
(ponedjeljak, utorak, ... , nedjelja). 7. Napisati program koji za učitani redni broj mjeseca u godini ispisuje naziv mjeseca
(januar, februar, ... , decembar). 8. Napisati program koji učitava redni broj mjeseca i godinu, a zatim ispisuje koliko ima
dana u tom mjesecu. U obzir uzeti da li je godina prestupna.
14
55..33.. Naredbe nasilne promjene tokaNaredbe nasilne promjene toka
break break ??
Naredba Naredba breakbreakDejstvo:Dejstvo:
u naredbi u naredbi switchswitch::•• nasilni prekid izvrnasilni prekid izvrššavanja naredbe switchavanja naredbe switch
•• prelazak na prvi iskaz iza naredbe switchprelazak na prvi iskaz iza naredbe switch
u petljama:u petljama:•• nasilni prekid izvrnasilni prekid izvrššavanja petljeavanja petlje
•• prelazak na prvi iskaz iza petljeprelazak na prvi iskaz iza petlje
u ostalim sluu ostalim sluččajevima:ajevima:•• nema dejstvanema dejstva
15
55..33.. Naredbe nasilne promjene tokaNaredbe nasilne promjene toka
return return ??
Naredba Naredba returnreturnDejstvo: izlazak iz funkcije Dejstvo: izlazak iz funkcije
•• prekida izvrprekida izvrššavanje date funkcije avanje date funkcije
(ignori(ignoriššu se svi iskazi iza return)u se svi iskazi iza return)
•• ako se nalazimo u main funkciji ako se nalazimo u main funkciji –– prekid programaprekid programa
OmoguOmoguććava da funkcija vrati neku vrijednostava da funkcija vrati neku vrijednostOpOpššti oblikti oblik
return (vrijednost);return (vrijednost);
iliili
return (izrazreturn (izraz););
16
55..33.. Naredbe nasilne promjene tokaNaredbe nasilne promjene toka
goto goto ??
Naredba Naredba gotogotoOmoguOmoguććava bezuslovni skokava bezuslovni skok
OpOpššti oblikti oblik
goto labela;goto labela;
Labela (oznaka) neke naredbe u istoj funkciji
Primjer#include <stdio.h>#include <stdio.h>main()main(){{
int broj;int broj;lab1:lab1: printf(printf(””Unesite prirodan broj:Unesite prirodan broj: ””););scanfscanf((””%d%d””,&broj,&broj););if (broj<1)if (broj<1){ { printf(printf(””Nije prirodan!Nije prirodan!\\nn””); ); gotogoto krajkraj; }; }printfprintf ((””%d %s %d %s paranparan\\nn””, , brojbroj, (broj%2)? , (broj%2)? ””nijenije”” : : ””jeje””););gotogoto lab1;lab1;krajkraj: : printf(printf(””KRAJKRAJ......””););
}}
Bezuslovni skokna iskaz označen
sa lab1
Bezuslovni skokna iskaz označen
sa kraj
17
55..44.. Naredbe petljiNaredbe petlji
while while ??
Naredba Naredba whilewhileOmoguOmoguććava realizaciju petlje sa izlazom na vrhuava realizaciju petlje sa izlazom na vrhu
while (izraz) while (izraz) { {
iskaziskaz11;;... ... iskazNiskazN;;
}}
uslov
ISTINA
tijelopetlje
LAŽ while (izraz) while (izraz) iskaz;iskaz;
OpOpššti oblikti oblik
Ciklus Ciklus ćće se izvre se izvrššavati sve avati sve dok je uslov ispunjen dok je uslov ispunjen
(ne mora ni jedamput)(ne mora ni jedamput)
iliili
Sve dok je izraz ISTINIT (!=0) izvrSve dok je izraz ISTINIT (!=0) izvrššava se ava se (slo(složžena) naredbaena) naredba
Kad izraz postane LAKad izraz postane LAŽŽ (==0) prekida se (==0) prekida se izvrizvrššavanje petljeavanje petlje
18
55..44.. Naredbe petljiNaredbe petlji
while while ??
Primjer: Program koji N puta ispisuje riječ "ALGORITAM“.
POČETAK
KRAJ
n
b = 1
b <=n
"ALGORITAM"
ISTINA
LAŽ
b = b + 1
#include <stdio.h>#include <stdio.h>main()main(){{
int n, b=1;int n, b=1;printf(printf(””UnesiteUnesite NN: : ””););scanfscanf((””%d%d””,&n,&n););while ( b<=n )while ( b<=n ){{
printf(printf(””AlgoritamAlgoritam\\nn””););b++;b++;
}}}}
19
55..44.. Naredbe petljiNaredbe petlji
while while ??
Primjer: Program koji N puta ispisuje riječ "ALGORITAM".(bez korištenja pomoćnog brojača)
POČETAK
KRAJ
n
n
"ALGORITAM"
ISTINA
LAŽ
n--
#include <stdio.h>#include <stdio.h>main()main(){{
int n;int n;printf(printf(””UnesiteUnesite NN: : ””);); scanfscanf((””%d%d””,&n,&n););while (n)while (n){{
printf(printf(””ALGORITAMALGORITAM\\nn””););nn----;;
}}}}
#include <stdio.h>main(){
int n;printf(”Unesite N: ”); scanf(”%d”,&n);while (n--) printf(”ALGORITAM\n”);
}
20
55..44.. Naredbe petljiNaredbe petlji
while while ??
Primjer: Program koji učitava n, a zatim izračunava i ispisuje n!
#include <stdio.h>#include <stdio.h>
main()main()
{{
int n, f=1;int n, f=1;
printf(printf(””UnesiteUnesite NN: : ””););
scanfscanf((””%d%d””,&n,&n););
printf(printf(””%d!=%d!=””,n,n););
while (n)while (n)
f *= nf *= n----;;
printf(printf(””%d%d””,f,f););
}}
POČETAK
KRAJ
n
f = 1
n
f
ISTINA
LAŽ
f = f * n
n = n -1
21
55..44.. Naredbe petljiNaredbe petlji
while while ??
Primjer: Program koji učitava prirodan broj, a zatim ispisuje zbir njegovih cifara.
#include <stdio.h>#include <stdio.h>main()main(){{
int b, s=0;int b, s=0;printf(printf(””UnesiteUnesite brojbroj: : ””););scanfscanf((””%d%d””,&b,&b););if (b<1)if (b<1)
printf(printf(””Nije prirodan!Nije prirodan!””););elseelse{{
while (b)while (b){{
s += b % 10;s += b % 10;b /= 10;b /= 10;
}}printf(printf(””Zbir cifara je:%dZbir cifara je:%d””,s,s););
}}}}
POČETAK
b
KRAJ
"Nijeprirodan"
b < 1ISTINA LAŽ
s = 0
b > 0LAŽ
ISTINA
c = b MOD 10
s = s + c
b = b DIV 10
s
KRAJ
22
55..44.. Naredbe petljiNaredbe petlji
while while ??
Primjer: Program koji učitava prirodan broj, a zatim ispisuje da li je on prost ili nije.
#include <stdio.h>#include <stdio.h>#include <#include <mathmath.h>.h>main()main(){{
int b, p, d=int b, p, d=11;;printf(printf(””UnesiteUnesite brojbroj: : ””););scanfscanf((””%d%d””,&b,&b););if (b<1)if (b<1)
printf(printf(””Nije prirodan!Nije prirodan!””););elseelse{{
p = p = ((bb ==== 22)) | (b % 2);| (b % 2);while (while (p && (d+=2p && (d+=2))<=<=sqrt(bsqrt(b))))
pp = b % = b % dd;;printf(printf(””%%dd %s prost%s prost””,, b, p ? b, p ? ””jeje””::””nijenije””););
}}}}
POČETAK
b
KRAJ
"Nijeprirodan"
b < 1ISTINA LAŽ
p = (b==2) ∨ (b%2)
LAŽ
ISTINA
p = b%d != 0
d = 3
KRAJ
p && d < b
d = d + 2
LAŽISTINAp
“NIJE"“JESTE"
23
55..44.. Naredbe petljiNaredbe petlji
do ... do ... while while ??
Naredba Naredba do...wdo...whilehileOmoguOmoguććava realizaciju petlje sa izlazom na dnuava realizaciju petlje sa izlazom na dnu
dodo{ {
iskaziskaz11;;... ... iskazNiskazN;;
} } while (izraz); while (izraz);
dodoiskaz;iskaz;
while (izraz); while (izraz);
OpOpššti oblikti oblik
iliiliISTINA
uslov
tijelopetlje
LAŽ
1. Izvr1. Izvrššavaju se iskazi iza avaju se iskazi iza dodo2. Ra2. Raččuna se vrijednost izrazauna se vrijednost izraza3. Ako je izraz ISTINIT (!=0) idi na korak 13. Ako je izraz ISTINIT (!=0) idi na korak 14. Ako je izraz LA4. Ako je izraz LAŽŽ (==0) prekida se izvr(==0) prekida se izvrššavanje avanje
petlje i prelazi na sljedepetlje i prelazi na sljedećći iskaz iza i iskaz iza whilewhile
24
55..44.. Naredbe petljiNaredbe petlji
do ... do ... while while ??
Primjer: Program koji N puta ispisuje riječ "ALGORITAM“.
#include <stdio.h>#include <stdio.h>main()main(){{
int n, b=1;int n, b=1;dodo{{
printf(printf(””UnesiteUnesite NN: : ””););scanfscanf((””%d%d””,&n,&n););
}}while (while (n<1n<1));;dodo{{
printf(printf(””AlgoritamAlgoritam\\nn””););b++;b++;
}}while (b<=n);while (b<=n);
}}
POČETAK
N
b = 1
"ALGORITAM"
b = b + 1
ISTINA N < 1
LAŽ
ISTINAb<=N
KRAJ
LAŽ
#include <stdio.h>main(){
int n, b=1;
do{
printf(”Unesite N: ”);scanf(”%d”,&n);
}while (n<1);
doprintf(”Algoritam\n”);
while ( ++b <= n );}
25
55..44.. Naredbe petljiNaredbe petlji
do ... do ... while while ??
Primjer: Euklidovim algoritmom odrediti NZD dva prirodna broja.
#include <stdio.h>#include <stdio.h>main()main(){{
int int x,y,p,ostx,y,p,ost;;dodo{{
printf(printf(””UnesiteUnesite X i Y:X i Y:””););scanfscanf((””%d%d %d%d””,&,&x,&yx,&y););
}}while (while (x<1 || y<1x<1 || y<1));;if (x<y) if (x<y) { p=x; x=y; y=p; }{ p=x; x=y; y=p; }dodo{ {
ostost = = x%yx%y;;x = y;x = y;y = y = ostost;;
}}while (y);while (y);
}}
POČETAK
X , Y
ISTINA
LAŽ
X<1 v Y<1
P=XX=YY=P
ISTINA LAŽX < Y
T
Y > 0
KRAJ
ISTINA
X = Y
Y = ost
ost=X MOD Y
X
T
LAŽ
26
55..44.. Naredbe petljiNaredbe petlji
do ... do ... while while ??
Primjer: Podijeliti dva prirodna broja na proizvoljan broj decimala.(koristeći pravilo za ručno dijeljenje)
#include <stdio.h>#include <stdio.h>main()main(){{
int int x,yx,y,,bd;bd;dodo{{ printf(printf(””UnesiteUnesite X i Y:X i Y:””);); scanfscanf((””%d%d %d%d””,&,&x,&yx,&y);); }}while (while (x<1 || y<1x<1 || y<1));;dodo{{ printf(printf(””Broj decimalaBroj decimala::””);); scanfscanf((””%d%d””,&bd,&bd);); }}while (bdwhile (bd<1<1)); ; printf(printf(””%d:%d=%d.%d:%d=%d.””, x, y, x/y);, x, y, x/y);dodo{ {
xx = = x%yx%y * 10* 10;;printf(printf(””%d%d””, x/y);, x/y);
}}while (while (----bdbd););
}}
27
55..44.. Naredbe petljiNaredbe petlji
do ... do ... while while ??
Primjer: Program koji računa drugi korijen iz pozitivnog realnog brojaX na četiri decimale koristeći Njutnovu iterativnu formulu.
...2 ,1 ,0 ,2
,2
110 =
+=
+= + nx
XxxXx n
n
n
POČETAK
X
ISTINA
LAŽ
X < 0
eps = 0.0001
xN = (X+1) / 2
xS = xN
xN = (xS + X/ xS) / 2
|xN - xS | > epsISTINA
KRAJ
LAŽ
xN
#include <stdio.h>#include <stdio.h>#include <#include <math.hmath.h>>#define EPS 0.0001#define EPS 0.0001main()main(){{
floatfloat x,xs,xnx,xs,xn;;dodo{ { printf(printf(””X=X=””);); scanfscanf((””%%ff””,&,&x);}x);}while (while (x<0x<0));;xnxn = (x+1)/2; = (x+1)/2; dodo{ { xsxs = = xnxn; ; xnxn = (= (xsxs + + x/xsx/xs) / 2;}) / 2;}while (while (fabs(xnfabs(xn--xsxs)>EPS);)>EPS);printf(printf(””KorijenKorijen jeje: %8.4f: %8.4f””,xn);,xn);
}}
28
55..44.. Naredbe petljiNaredbe petlji
for for ??
Naredba Naredba forfor
for (poc_izraz; uslov; izraz_petlje)for (poc_izraz; uslov; izraz_petlje){ {
iskaziskaz11;;... ... iskazNiskazN;;
}}
for (poc_izraz; uslov; izraz_petlje) for (poc_izraz; uslov; izraz_petlje) iskaz;iskaz;
OpOpššti oblikti oblik
iliiliuslov petlje
ISTINA
tijelopetlje
LAŽ
početniizraz
izraz petlje Ekvivalentno sljedeEkvivalentno sljedeććoj oj whilewhile petlji:petlji:
pocetni_izraz;pocetni_izraz;while (uslov)while (uslov){ {
iskaziskaz; ; izraz_petljeizraz_petlje;;}}
29
55..44.. Naredbe petljiNaredbe petlji
forfor ??
Primjer: Program koji N puta ispisuje riječ "ALGORITAM“.
#include <stdio.h>#include <stdio.h>main()main(){{
int n, int n, ii;;
printf(printf(””UnesiteUnesite NN: : ””);); scanfscanf((””%d%d””,&n,&n););
for (i=1 ; i<=n ; i++)for (i=1 ; i<=n ; i++)printf(printf(””AlgoritamAlgoritam\\nn””););
}}
POČETAK
KRAJ
i = 1, N
"ALGORITAM"
N
#include <stdio.h>main(){
int n;
printf(”Unesite N: ”); scanf(”%d”,&n);
for ( ; n ; n--)printf(”Algoritam\n”);
}
Početni izraz nepotreban, pa je izostavljen.
Uslov petlje (n), odnosno (n>0)
30
55..44.. Naredbe petljiNaredbe petlji
forfor ??
Primjer: Program koji ispisuje cijele brojeve iz intervala <A,B>.
#include <stdio.h>#include <stdio.h>main()main(){{
int a, b, broj;int a, b, broj;
printf(printf(””UnesiteUnesite granice intervalagranice intervala: : ””););scanfscanf((””%d %d%d %d””,&a, &b,&a, &b););
for (for ( brojbroj==a+a+1 ; 1 ; brojbroj<=<=bb--11 ; ; brojbroj++++ ))printf(printf(”” %d%d””, broj, broj););
}}
#include <stdio.h>main(){
int a, b, broj;
printf(”Unesite granice intervala: ”);scanf(”%d %d”,&a, &b);
for ( broj=a+1 ; broj<=b-1 ; )printf(” %d”, broj++);
}
POČETAK
KRAJ
broj = A+1, B-1
broj
A , B
izraz petlje izostavljen ali je implementiran u sljedećem
iskazu!!!printf(” %d”, broj++);
31
55..44.. Naredbe petljiNaredbe petlji
forfor ??
Primjer: Program koji računa n!
#include <stdio.h>#include <stdio.h>main()main(){{
int n, bint n, b, p, p;;dodo{{ printf(printf(””n=n=””);); scanfscanf((””%d%d””,&,&n); }n); }while (n<0);while (n<0);for (for ( p=1, p=1, bb=2 ; =2 ; bb<=n ; <=n ; bb++++ ) )
p=p*b;p=p*b;printf(printf(””%d%d!=%d!=%d””, , n, p);n, p);
}}
POČETAK
KRAJ
P = 1
P
b = 2, N
P = P * b
N
ISTINA N < 0
LAŽ
#include <stdio.h>main(){
int n, p;do{ printf(”n=”); scanf(”%d”,&n); }while (n<0);for ( p=1 ; n ; p*=n-- ); printf(”%d”, p);
}
dva početna izrazameđusobno odvojeni zapetom
32
55..44.. Naredbe petljiNaredbe petlji
forfor ??
Primjer: Učitati prirodan broj, pa provjeritida li je on savršen.
KRAJ
LAŽ
“NIJE"
ISTINA
“JESTE"
broj = S
POČETAK
broj
D = 2, broj/2
ost = broj % D
"Nijeprirodan"
broj < 1ISTINA LAŽ
ost = 0
ISTINA
LAŽ
S = 1
S = S + D
KRAJ
#include <stdio.h>#include <stdio.h>main()main(){{
int broj, d, s;int broj, d, s;printf(printf(””Unesite prirodan broj:Unesite prirodan broj:””););scanfscanf((””%d%d””,&broj,&broj); ); if if ((brojbroj<<11))
printf(printf(””Nije prirodan!Nije prirodan!””););elseelse{{
for (for ( s=1, d=2 ; d<=broj/2 ; d++s=1, d=2 ; d<=broj/2 ; d++ ) ) s += (s += (broj%dbroj%d) ? 0 : d;) ? 0 : d;
printf(printf(””%d%d %s %s savrsensavrsen””, , brojbroj, , ((brojbroj==s) ? ==s) ? ””jeje”” : : ””nijenije”” ););
}}}}
33
55..44.. Naredbe petljiNaredbe petlji
forfor ??
Primjer: Ispisati sve savršene prirodnebrojeve manje od 1000.
LAŽISTINA
broj
broj = S
KRAJ
POČETAK
broj = 1, 999
D = 2, broj/2
ost = broj MOD D
ost = 0
ISTINA
LAŽ
S = 1
S = S + D
#include <stdio.h>#include <stdio.h>main()main(){{
int broj, d, s;int broj, d, s;
for (for ( broj=1broj=1 ; ; brojbroj<1000<1000 ; ; brojbroj++++ ))
{ { for (for ( s=1, d=2 ; d<=broj/2 ; d++s=1, d=2 ; d<=broj/2 ; d++ ) )
s += (s += (broj%dbroj%d) ? 0 : d;) ? 0 : d;
if (broj==s) if (broj==s) printf(printf(”” %d%d””, , brojbroj));;
}}}}
34
55..44.. Naredbe petljiNaredbe petlji
forfor ??
Primjer: Program koji ispisuje prvih n redova sljedećeg trougla:
***************...
#include <stdio.h>#include <stdio.h>main()main(){{
int n, red, broj;int n, red, broj;
do{ printf(”n=? ”); scanf(”%d”,&n); }while (n<1 || n>20);
for (for ( red=1red=1 ; ; red<=nred<=n ; ; redred++++ )){ {
for (for ( brojbroj==11 ; ; brojbroj<=red<=red ; ; brojbroj++++ ) ) printf(printf(””**””););
printf(printf(””\\nn””));;
}}}}
35
55..44.. Naredbe petljiNaredbe petlji
forfor ??
Primjer: Program koji ispisuje prvih n redova sljedećeg trougla:
1121231234...123456789123456789012345678901...
#include <stdio.h>#include <stdio.h>main()main(){{
int n, red, broj;int n, red, broj;
do{ printf(”n=? ”); scanf(”%d”,&n); }while (n<1 || n>20);
for (for ( red=1red=1 ; ; red<=nred<=n ; ; redred++++ )){ {
for (for ( brojbroj==11 ; ; brojbroj<=red<=red ; ; brojbroj++++ ) )
printf(printf(””**””););
printf(printf(””\\nn””));;
}}}}
printf(”%d”, broj%10);
36
55..44.. Naredbe petljiNaredbe petlji
forfor ??
Primjer: Program koji ispisuje prvih n redova sljedeće piramide cifara:1
23234543
4567654...
89012345432109890123456765432109
.
.
.
#include <stdio.h>#include <stdio.h>main()main(){{
int n, red, broj;int n, red, broj;
do{ printf(”n=”); scanf(”%d”,&n); }while (n<1 || n>20);
for (for ( red=1red=1 ; ; red<=nred<=n ; ; redred++++ )){ {
for (for ( brojbroj==11 ; ; brojbroj<=<=nn--redred ; ; brojbroj++++ ) ) printf(printf(”” ””));;
for (for ( brojbroj=red ; =red ; brojbroj<=<=2*2*redred--1 ; 1 ; brojbroj++++ ) ) printf(printf(””%d%d””, broj%10), broj%10);;
for (for ( brojbroj=2*red=2*red--2 ; 2 ; brojbroj>=>=redred ; ; brojbroj---- ) ) printf(printf(””%d%d””, broj%10), broj%10);;
printf(printf(””\\nn””));;}}
}}
37
55..44.. Naredbe petljiNaredbe petlji
ZADACI ZAZADACI ZA VJEVJEŽŽBBUU......
ZadaciZadaci::1. Napisati program koji koji učitava prirodan broj, a zatim ispisuje sve parne brojeve
manje od njega. Zadatak riješiti korištenjem a) for petlje; b) while petlje; c) do…while petlje.
2. Napisati program koji tabelarno ispisuje vrijednosti funkcije f(x)=2x+3, za vrijednostiargumenta x∈[A,B], s korakom Δx. Zadatak riješiti korištenjem a) for petlje; b) while petlje; c) do…while petlje.
3. Učitati n brojeva, a zatim ispisati koliko među njima ima pozitivnih, kao i njihovuaritmetičku sredinu.
4. Učitati n brojeva, a zatim ispisati najvećeg. 5. Učitati n brojeva, a zatim ispisati najmanjeg, kao i njegov redni broj. 6. Ispisati sve dvocifrene proste brojeve. 7. Ispisati prvih n prostih brojeva.8. Ispisati prvih n savršenih brojeva.9. Učitati broj pa provjeriti da li je Armstrongov. Broj je Armstrongov ako je jednak zbiru
kubova svojih cifara. 10. Učitati dva prirodna broja pa provjeriti da li oni predstavljaju par prijateljskih brojeva.
Za dva broja kažemo da su prijateljski ako je prvi jednak zbiru djelilaca drugog, a drugi jednak zbiru djelilaca prvog broja.