Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 19

Zadatci za vebu iz programskog jezika C I kolokvijum

IZVOD IZ ZBIRKE ZADATAKA UVOD U PROGRAMIRANJE M. KARI, V. RADOVI

Osnovi programskog jezikta C


Podatak i njegov tip 22, 1963, "Beograd", 'A', 3.1415, ... Svi navedeni primeri su podaci tj. vrednosti. Njihov smisao moemo da naslutimo, ali pravi smisao svakog podatka zavisi od toga kako ga upotrebimo. Podatak moe biti unesen u program kao fiksna, nepromenljiva vrednost; takve podatke zovemo konstante. Meutim, podatke ee unosi korisnik tokom izvravanja programa i oni se uvaju u posebnim smetajnim jedinicama koje zovemo promenijive. j Ime promenljive se sastoji od slova ili brojeva. Poinje obavezno slovom i ne moe imati razmak (osim donje crte, tj. _ ) ili druge znakove (!#$%&,. .). Jako je bitno voditi rauna o malim velikim slovima jer promenljive Skola i skola nisu iste tavie, obe paralelno mogu da postoje u programu! Tokom izrade programa moramo znati neto o prirodi podatka koje korisnik treba da unese tj. moramo znati da li unosi broj (ceo ili realan), slovo ili npr. re, jer je neophodno rezervisati odgovarajui memorijski prostor raunara za tu vrednost. Prirodu podatka nazvaemo tip podatka. Osnovni tipovi podataka u programskom jeziku C su: char int float double jedno slovo, cifra ili znak ceo (pozitivan ili negativan) broj realanbroj (npr. 3.1415) kao float, ali dvostruke preciznosti

Na osnovne tipove se mogu primeniti i odreeni kvalifikatori (short, long, unsigned...), a rezultati zavise od tipa raunara (C postoji za razliite raunare) Kada u programu napiemo int visina time programu saoptavamo da je visina promenljiva i da e u vreme izvravanja sadrati neki ceo broj (eng. integer). Time smo deklarisali promenljivu. Sve naredbe, pa i deklaracije, moraju da se zavre znakom taka zarez ( ; ) U programiranju je veoma bitno pisanje komentara. Komentari se u programskom jeziku C piu izmeu znakova /* i */ i mogu sadrati vie redova teksta. esto se koristi i jednoredni komentar koji poinje sa / / i zavrava se na kraju reda, ali moramo imati na umu da je to pozajmljeno" iz jezika C++

Znakovi i tekst Pre svega moramo da usvojimo da 1 i 'l' nije isto. ak kada bismo ih sabrali ne bismo dobili 2 ve 50! Zato? 1 je broj ili tzv. brojevna konstanta dok je 'l' znak ili tzv. znakovna konstanta. Vrednost znaka je redni broj u tabeli znakova (tzv. ASCII tabeli), tako da 'l' ima vrednost 49 to daje odgovarajui rezultat pri sabiranju. Tu se i krije odgovor kako raunar koji razume samo brojeve moe da radi sa slovima znakovima. Dakle, znakovne konstante piemo izmeu polunavodnika, npr. 'A', 'a', '7', '+' i za kompjuter one predstavljaj odgovarajui znak u tabeli. Znak '\n' nije ni '\' ni 'n' ve specijalni znak za novi red, tj. instrukcija raunaru da pree u novi red. Poto je \ pomoni znak, da bismo zaista napisali znak \ moramo da napiemo '\\'. "Beograd", "danas je lep dan","l + 1 je 7", Navedeni primeri su tekstualne konstante, to jest string konstante i koristiemo ih najvie za poruke koje korisniku programa kompjuter ispisuje na ekranu. Primer: "unesi udaljenost u kilometrima". Iako su stringovi sastavljeni od znakova, " 1" nije isto to i 'l'. Ulaz i izlaz Osnovna naredba je noredba dodele i izvrava se pomou operatora jednako (tj. =) na primer: A=B+2 ; To znai da leva strana postaje jednak desnoj nakon izvrenja date naredbe i ne mora da znai da su bile jednake pre toga. Rezultat te naredbe je sledei: promenljiva A dobija trenutnu vrednost promenljive B uveanu za 2 to jest dobija vrednost B+2.

Najvie zbunjuje izraz A=A+2 koji, ako ga protumacimo shodno prethodnoj definiciji, dodeljuje A novu vrednost koja je nastala od predhodne vrednosti A uveane za 2; ili kaemo da A dobija vrednost izraza A+2. Sa leve strane operatora dodele mora da bude iskljuivo promenljiva, tj. ne mogu biti konstante ili izraz! Moramo voditi rauna o tome da se u pnmeru A=2. 5 3 ; odseca decimalan deo broja ukoliko je A deklarisano sa int A; jer 53 nema gde da stane u celobrojnu promenljivu. Ako elimo da sauvamo i decimale, moramo da deklariemo A sa float A; ili double A;. Kada se pozove funkcija printf (" %d" , visina); na korisnikovom ekranu se ispisuje trenutna vrednost promenljive visina. Pomou znakova "%d" raunaru se saoptava da visinu mora da ispie kao ceo broj. Kada u programu napiemo scanf (" %d" , &visina), traimo od korisnika programa da unese celobrojnu vrednost (%d) u promenljivu visina. Znak & ispred visina mora da stoji u funkciji scanf i za sada ga neemo tumaiti, ali on ima svo- j' znaenje koje je objanjeno kasnije. Funkcije printf i Scanf mogu da rade sa vie promenljivih odjednom, kao u primeru scanf("%d %d", &visina, &tezina); Takoe je mogue u funkciji printf umesto promenljive staviti ceo izraz. Promenljive u C-u nemaju inicijalnu (poetnu vrednost, pa im pre upotrebe u okviru izraza ili pre ispisa na ekran moramo dodeliti vrednost (naredbom dodele), ili omoguiti da korisnik unese poetnu vrednost (pomou funkci scanf). To je kao kada bismo pokuali da izraunamo izraz koji konvertuje evre u dinare, a da korisnik prethodno nije uneo kurs ili iznos u evrima! Formatiranje ispisa Prikaz upotrebe kontrolnih znakova % i / za formatiranje pri korienju funkcije printf: % d ili %i %f %c %s za unos/ispis celog broja za unos/ispis realnog broja \n \t novi red tabulator znak\ znak%

\\ za unos/ispis znaka za unos/ispis teksta (stringova) \%

printf("%5.2 f " , 8 . 7 ) U prethodnom primeru, broj 5 oznaava minimalan broj znakova koji treba ispisati. U naem primeru ispisuju se etiri znaka (8.70), pa je potrebno dodati jo jedan razmak na poetku. Broj 2 oznaava da treba ispisati dve decimale, a poto imamo samo jednu, neophodno je dodati 0 na kraj. Da smo imali vie decimala, prilikom ispisivanja broj bi bio zaokruen na 2 decimale. Pretprocesorske direktive Da bismo mogli koristiti funkcije printf i scanf, moramo da napiemo #inclue <stdio.h> na poetku programa (videti primere). To j pretprocesorska irektiva koja ukljuuje biblioteku stdio.h u na program - omoguava nam da koristimo njene funkcije. Ako bismo eleli da umesto konstante 3.1415 u programu koristimo PI, to moemo uiniti pomou direktive #define na sledei nain: #define PI 3.1415. Pretprocesorske direktive nemaju taku i zapetu ( ; ) na kraju reda!

Funkcije i operatori Sasvim je logino da u okviru izraza koristimo uobiajene matematike operatore: +, -, *, /, ali moramo voditi rauna o tome da se pri deljenju dva cela broja uvek odseca decimalan deo! Ako elimo da to izbegnemo, moramo napisati ovako: A= (double) B/C. Tako eksplicitno konvertujemo B u realan broj (konkretno, double), pa se pri deljenju nee odsei ceo deo broja. Ostatak pri deljenju moemo dobiti pomou operatora %. Primer: 5%2 je 1, tj. najblii deljiv broj je 4, a razlika do 5 je 1, i to je deo broja 5 koji se ne moe podeliti sa 2. Postoje operatori koji skrauju zapis nekih duih izraza i oni se esto koriste u programskom jeziku C:

operator

primei

znaenje

Osnovi programskog jezikta C.............................................................................................................................2

1. ..............................................................................................................5 1. ..............................................................................................................9

Ciklusi i bitovni operatori..................................................................................................................................10 Kao to se vidi u tabeli, za prva dva operatora postoji prefiksni i postfiksni oblik. Postfiksni oblik oznaava da e se prvo upotrebiti vrednost promenljive u izrazu, a tek onda promeniti njena vrednost, dok je za prefiksni operator obmuto. Postoji veiiki broj ugraenih matematikih funkcija u biblioteci math.h, a moemo da ih upotrebimo ako napiemo #include <math. h> na poetku programa. Sve funkcije u math.h vraaju rezultat tipa double, a apsolutna vrednost celih brojeva nalazi se u stdlib.h. Primeri su dati u sledeoj tabeli: Funkcija fabs(x) sqrt(x) sin(x),cos(x) pow(a,n) log(x) ceil(x) floor(x) znacenje apsolutna vrednost kvadratni koren od x sinus i kosinus (x je u radijanima) stepenovanje an prirodni logaritam lnx zaokruivanje na vei broj zaokruivanje na manji broj primer
fabs (-5)je 5 sqrt (4) je -2 sin (M_P1") je 1 pow (2,3) je 8 log(M_E)je 1 ceil (3.2) je 4 floor(3.8)je 3

Da bismo dobili neku nasumino odabranu vrednost, potrebno je da ukljuimo biblioteke stdlib.h (zbog fuinkcija rand srand) i time.h (zbog fimkcije time). Funkcija srand slui da inicijalizuje generator pseudosluajnih brojeva (tj. da mu dodeli poetnu vrednost) i bitno je da ta vrednost uvek bude drugaija (tu pomae finkcija time). Funkcija rand daje nasumino odabran ceo broj Kada napiemo izraz rand()%10, dobiemo broj u intervalu od 0 do 9.

Primeri 1. Napisati program koji na standardni izlaz ispisuje poruku Zdravo, svete!
#include <stdio.h> int main() { printf ( " Zdrava, svete! \n") ; return 0; }

2. Napisati program koji prevodi duinu datu u stopama u centimetre (1 stopa = 30.48 cm).
#include <stdio.h> #define STOPA 30.48 int main () { float st; printf("Unesite duzinu u stopama ); scanf("%f",&st); printf("%f stopa u cm iznosi: %f \n",st,st*STOPA); return 0; }

3. Napisati program koji na standardni izlaz ispisuje veliko slovo A u polju irine etiri, a u novom redu malo slovo A u polju irine est.
#include <stdio.h> int main() { printf("Slova \n%4c\n%6c\n" A a ); return 0; }

4. Napii program koji vremenski interval dat u minutima izraava u satima i minutima.
#include <stdio.h> int main() { int min; printf "Uneti vremenski interval u minutima :"); scanf("%d" &min); print ("Interval %d minuta ima %d sati i %d minuta\n", min,min/60,min%60);

return 0;

5. Napisati program koji generie sluajan ceo broj iz intervala [1,10].


#include <stdio.h #include <stdlib.h> #include <time.h> int main() { srand(time;0)); printf("Broj : %dr randf()%10+1); return 0; }

6. Program prikazuje upotrebu prefiksnog i postfiksnog operatora ++ (identino je i za operator --).


#include <stio.h> int main() { int a=5; printf("a=%d\n",a); printf("a++=%d\n",a++); printf("a=%d\n",a); printf("++a=%d\n",++a); printf("a=%d\n",a) return 0; }

// a=5 //a++=5 // a=6 //++a=7 // a=7

Zadaci
1. Napisati program koji na standardni izlaz ispisuje poruku Zdravo, svete, tampa prazan red i u narednom redu ispisuje poruku Hello, world. 2. Napisati program koji omoguava prevoenje temperature date u Kelvinima u temperaturu u Celzijusima. Napomena : Tc = Tk - 273.15, gde je Tk - temperatura u Kelvinima, a Tc - temperatura u Celzijusima. 3. Napisati program koji pomae menjau u radu, tako to od njega trai da unese dnevni kurs evra i sumu u evrima koju treba pretvoriti u dinare. Program ispisuje protivvrednost u polju irine pet. 4. Napisati program koji za dve zadate celobrojne promenljive na standardni izlaz ispisuje redom njihov zbir, razliku, proizvod, kolinik, kvadratni koren. 5. Napisati program koji izraunava aritmetiku i geometrijsku sredinu dva broja. 6. Za dati poluprenik kruga ispisati njegovu povrinu. Zadaci za vebu 1. Napisati program koji prevodi kilograme u funte (1 kilogram = 2.2 fiinte). 2. Napisati program koji pretvara centimetre u kilometre. 3. Napisati program koji obraunava popust P za proizvod cene C. 4. Izraunati koliko je vremena potrebno svetlosti sa Sunca da stigne na Zemlju, ako je brzina svetlosti 300 000 m/s, a srednje rastojanje izmeu Zemlie i Sunca 149 600 000 km. 5. Napisati program kojim se anosi ugao dat stepenima, minutima sekundama (posebno se unosi svaki deo stepena). Program treba da kao rezultat ispie dati ugao u asovnim jedinicama (360 = 241' odnosno i = 15 ).

Reenja
1.
#inclue <stdio h> int main() { printf("Zdravo svete\nHello world"); return 0;

2.
#include <stdio.h> int main() { float kl; printf("Unesite temperaturu u Kelvinima:"); scanf(*%f",&kl); printf("Temperatura od %f Kelvina ",kl);

printf("u Celzijusima iznosi: %f \n",kl-273.15); return 0;

3.

}
#include <stdio.h> int main() { float eur, kurs; printf("Menjacnica\nEDR = "); scanf("%f",&kurs); printf("Iznos u evrima = "); scanf("%f", &eur); printf("Iznos : %5f DIN\n" eur*kurs); return 0;

4.
#include <stdio.h> #include <math.h> //Koristi se zbog ugrajene funkcije sqrt int main() { int a,b printf("Uneti brojeve "); scanf("%d%d",&a,&b); printf("Zbir: %d\n",a+b); printf("Razlika: %\n", a-b); printf("Proizvod: %d\n",a*b); printf("Kolicnik: %f\n",(double)a/b); printf ("Kvadratni koren o broja %d je %f \n",a,sqrt(a)); printf("Kvaratni koren o broja %d je %f\n",b,sqrt(b)); return 0;

5. #include <stdio.h>
#include <math.h> int main() { float a,b; printf("Uneti brojeve :"); scanf("%f%f",&a,sb); printi ("Aritmeticka sredina je %f \n", (a+b)/2); printf ("Geometrijska sredina je %f \n",sqrt(a*b)); return 0;

6.

#inclue <stdio.h> #define PI 3.14 int main() { float r; printf("Uneti poluprecnik kruga: ); scanf("%f",&r); printf("Povrsina kruga poluprecnika %f iznosi: %f",r,r*r*PI); return 0;

Uslovne naredbe logiki operatori


Naredba if

if (uslov)

naredba2; Naredba if omoguava da u zavisnosti od toga da li je uslov taan ili ne, izvrimo neke naredbe. U gore prikazanom sluaju, ako je uslov taan izvrie se riaredb1l, a ako nije taan izvrie se naredba2; Naredbu if moemo napisati i bez else i naredbe2 ali, za razliku od programskcg jezika Pascal, neophodno ie uvek pisati ; posle naredbe, pa ak i ispred else! Kada bismo eleli da se umesto samo jedne naredbe izvri vie njih, moramo da ih grupiemo. Naredbe se grupiu pomou vitiastih zagrada, { i } Takva grupa naredaba se zove blok.

else

naredba1;

Logiki operatori Uslov moe da bude bilo koja relacija tipa A>B ili A==B (ne sme da se koristi =) ili celobrojna promenljiva (vrednost 0 je netano, a sve ostale vrednosti su tane). Logiki operatori se piu slino kao i u matematici, a neki od njih su prikazani u tabeli. Poslednja dva logika operatora omoguavaju da spojimo dva ili vie uslova. operator == != ! < > <= >= && || znaenje jednakost razliito (nije jednako) negacija manje vee manje ili jednako vee ili jednako logiko i (konjunkcija) logiko ili (disjunkcija) primer 2==2 1!=2 !A je isto to i A==0 A<B A>B X<=Y X>=Y A==B && B==C A==B || B==C .

Uslovni operator ?:
if (a>b) max=a; else max=b;
ili:

max = a>b ? a:b ;

Osim to mu je zapis krai, uslovni operator vraa vrednost, pa se rezultat moe dodeliti (u naem sluaju) promenljivoj max. Vrednost operatora zavisi od uslova a>b. Ukoliko je uslov taan, vrednost je a, inae je b. U ovom sluaju ne moemo izostaviti vrednost b.

Naredba switch
switch (promenljiva) { case vrednost1: naredbal; break; case vrednost2: naredba2; break; case vrednost3: case vrednost4: naredba34; break; default narebadef;
}

Naredba switch je korisna kada imamo mnogo vei izbor. Tada se ne ispituje tano/netano, ve se u zavisnosti od konkretne vrednosti date promenljive izvravaju odgovarajue naredbe. Promenljiva ije vrednosti ispitujemo u okviru naredbe switch moe biti celobrojnog tipa (int) ili znakovnog tipa (char). Konstante (vrednost1,, vrednost4) oznaavaju gde treba krenuti sa izvravanjem naredaba u sluaju da promenljiva ima upravo tu vrednost. Naredba break slui za prekidanje izvravanja (izlazak iz naredbe switch) i ako se ne navede, nastavlja se izvravanje naredaba bez obzira na to to poinju nove oznake! Oznaka default oznaava naredbu koju treba izvriti ako promenljiva nije jednaka nijednoj navedenoj oznaci (slino kao else u naredbi if).

Moramo voditi rauna o tome da li smo napisali break svuda gde treba, jer je to esta greka! Primeri 1. Napisati program koji ispisuje manji od dva uneta cela broja.
I nain: II nain:

iinclude <stdio.h> int main() { int a,b scanf("%d%d", &a,&b) printf("Manji je:"); if (a<b) printf ("%d",a); else printf("%d",b);

#include <stdio h> int main() { int a,b; scanf("%d%d" &a,&b) printf("Manji je:%d",(a<b)?a:b); return 0; }

Osnovi programskog jezikta C.............................................................................................................................2

1. ..............................................................................................................5 1. ..............................................................................................................9

Ciklusi i bitovni operatori..................................................................................................................................10


-2x, x < 0
if(P%2==0) printf ("Paran\n"); // Broj je paran ako je ostatak else printf ("Neparan\n"); deljenju sa va 0 return 0; } // pri

x, x2,

0<x<1 x>1

3. Za uneto x izraunati y po formuli:


#include <stdio.h> int main() { float x,y scanf("%f" &x) if(x<0) y=-2*x; else if (x<l) y=x; else y=x*x; printf("Y = %f\n",y), return 0;

4. Napisati program koji ispisuje ime dana u nedelji iji je redni broj unet. Npr. za uneti broj 1 ispisuje Ponedeljak,
#include <stdio.h> int main() { int br; scanf("%d", &br); switch(br) { case 1: printf l "Ponedeljak\n"); break; case 2 printf ("Utorak\n"); break, case 3: printf ("Sreda\n"); break; case 4: printf("Cetvrtak\n"); break; case 5 printf ("Petak\n"); break; case 6 printf("Subota\n"); break; case 7: printf ("Nedelja\n"); break; default printf ("Uneta je pogresna vrednost!\n"); } return 0; }

Zadaci 1. Ispisati najvei od uneta tri cela broja. 2. Napisati program koji implementira funkciju abs (x). 3. Napisati program koji izraunava kvadratni koren imetog broja. Ukoliko je ulazni podatak manji od 0, ispisuje se poruka o greci. 4. Napisati program koji proverava da li je uneta godina prestupna. 5. Napisati program koji ispituje da li je broj K deljiv brojem L . 6. Napisati program koji za uneti redni broj meseca (1 = Januar) ispisuje njegov broj dana. Ako je u pitanju Februar, pitati korisnika da li je godina prestupna. 7. Unese se katete dava pravougla trougla, a1, a2, b1 i b2. Ispitati koji od njih ima veu povrinu. 8. Napisati program koji za uneto x izraunava y po formuli: -5, x<0

y=

x+2 0<x<1 3x 2 1 < x < 1 x >5

2x

9. Napisati program koji za uneto x i y izraunava z po formuli:

10. Napisati program koji reava jedaninu ax+b=0. Ispisati sva mogua reenja jedanine.
Zadaci za vebu

z=sqr t

min(x,y)+sin(x+0.5) max2(x,y)-1

15. Napisati program koji izraunava najvei od etiri zadata broja. 16. Napisati program koji odreuje razliku izmeu dva najvea cela broja od uneta tri. 17. Napisati program koji izraunava zbir unetih brojeva a, b, c ukoliko je najvei broj paran, a razliku ako je najvei broj neparan. 18. Napisati program koji za unetu cenu nekog proizvoda obraunava porez od 8% ako je cena manja od 10000 din, a ako nije, porez je 18%. 19.Napisati program koji proverava da li od tri unete dui moe da se napravi trougao. Napomena Zbir bilo koje dve stranice trougla mora da bude vei od tree stranice (nejednakost trougla). 20.Na osnovu poena koje je student osvojio na ispitu, ispisati ocenu. 21. Za uneti redni broj meseca u godini, ispisati njegovo ime.
2. Reenja
1. #include <stdio.h> int main () { int max,a,b,c scanf ("%d%d%d" &a,&b,&c); max=a; //Postavimo da prvi broj ima maksimalnu vrednost if(max<b)max=b; if(max<c)max=c; printf ("Najveci broj je %d\n",max) retum 0; }

3.

2. #include <stdio.h> int main() { int x; scanf("%d" &x); printf("abs(%d)=%d\n",x, (x<0)?-x:x); return 0; } 3. #include <stdio h> #include <math.h> int main () { float x; scanf ("%f " &x); if(x<0) { Printf('Broj ne moze da bude manj od 0!"); return 1; //prekida izvrsavanje prograraa. 1 oznacava da je //doslo do greske, a 0 da je program //normalno zavrsio rad. } printf("Koren od %f je %f",x,sqrt(x)); returni 0; } 4. #include <stdio.h> int main() { int god; scanf("%d" &god); if((god%4==0 && god%100!=0) || god%400==0) printf (" Prestupna \n");

else printf("Nije prestupna\n"); return 0; } 5. #inclue <stdio.h> int main () { int k,l; scanf(%d%d" &k,&l) if(k%l==0) printf("Broj %d je deljiv brojem %d",k,l); else printf("Broj %d nije deljiv brojem %d",k,l); return 0; } 17. #include <stdio h> int main() { int mes; char c; scanf("%d",&mes); switch(mes) { case 1:case 3:case 5:case 7:case 8:case 10:case 12: printf ("Mesec ima 31 dan"); break; case 4:case 6:case 9: case 11: printf("Mesec ima 30 dana'); break; case 2: printf('Da li je godina prestupna (D/N)"); fflush(stdin);
/ Koristi se da bi se ispraznio bafer ulaznog toka // podataka, inace bi se ucitalo '\n' a ne 'D' ili 'N' . // Bice objasnjeno nahnadno

scanf("%c",&c); if(c!= 'D' && c!='N1) { printf("Unet je pogresan znak: %c!",c); return 1; } if(c=='D') printf("Mesec ima 29 dana"); else printf ("Mesec ima 28 dana"); break; default : printf ( "Uneta je nedozvoljena vrednost!"); return 0; }

Ciklus while

Ciklusi i bitovni operatori

while (uslov ponavljanja) naredba ili blok; Ciklus ili petlja je programska struktura koju koristimo kad elimo da se naredba ili blok ponove vie puta. Ponavljanje (ili

iteracija) traje dok je uslov ponavljanja ispunjen (taan). Ako uslov u startu nije taan, naredba ili blok se nee nijednom izvriti i zato se while zove ciklusom sa preduslovom.
Ciklus do whle

do naredba ili blok; while (uslov ponavljanja) ; Ciklus do...while je ciklus sa postuslovom, to znai sledee: poto se uslov ponavljanja proverava na kraju, naredba ili blok se moraju izvriti makar jednom. Izbor izmeu ove dve vrste ciklusa zavisi iskljuivo od naina pisanja programa, tj. nema veze sa uslovom zadatka.
C i k l u s for

for (inicijalizacija; uslovponavljanja; inkrementacija) naredba ili blok; Ciklus for se esto zove i brojaki ciklus jer je podesan u sluajevima kad znamo taan broj ponavljanja. Promenljivu iju vrednost menjamo nakon svakog ponavljanja nazvaemo broja- kapromenljiva. Njena poetna vrednost se postavlja u delu inicijalizacija, dok se njena vrednost modifikuje (uveava, umanjuje .) u delu inkrementacija. Uslov ponavljanja ima isti smisao kao u ciklusu while. Ako bismo izostavili delove inicijalizacija i inkrementacija, imali bismo identino ponaanje kao u ciklusu whi
Naredbe b e a k i c o n t i n u e

Ovim naredbama utiemo na izvravanje petlje tako to naredba break prekida izvravanje petlje (kao i u naredbi switch), a naredba continue prelazi na sledeu iteraciju preskaui ostatak naredaba u bloku. Ove naredbe se mogu koristiti u bilo kom ciklusu. U sluaju da imamo ciklus u ciklusu, break continue utiu na unutranji ciklus.
Obrada teksta

Koristei ciklus while moemo na efikasan nain raditi sa tekstom koji korisnik unosi sa tastature ili iz fajla. Tada koristimc sledee funkcije: funkcija getchar() putchar(x) znaenje funkcija koja ita znak sa tastature funkcija koja ispisuje znak na ekran primer x=getchar(); putchar ( 'A' ) ; .

Prilikom uitavanja podataka sa tastature, moramo na neki nain da znamo kada je kraj tih podataka. Jedan od naina je da taster Enter predstavlja kraj uitavanja i tada uitavamo sve dok funkcija getchar ne vrati vrednost '\n' (novi red). Problem nastaje kada elimo da uitavamo tekst koji ima vie redova; tada je najbolje da uitavamo dok ne dobijemo vrednost EOF (End of File, vrednost je -1). U tom sluaju korisnik zavrava unos pomou tastera CTRL+Z (u Linuxu je CTRL+D).

Bitovni operatori

Svaki broj je u raunaru zapisan kao niz bitova (173= 10101101) Nekada se javlja potreba da proitamo ili postavimo neki bit na odreenu poziciju u broju ili da pomerimo sve bitove ulevo ili udesno (tako gubimo prvi ili poslednji bit). To nam omoguavaju operatori nad bitovma ili bitovni operatori. oper. znaenje primer dekadno primer binarno

&
|

logiko I nad bitovima

5 & 3 je 1
5 | 3 je 7 5 ^ 3 je 6 3 << 1 je 6 3 >> l je l za tip char: ~5 je 250

101 & 011 je 001


101 | 011 je 111 101 ^ 011 je 110 011 << l je ll0 011 >> l je 001 ~00000101 je 11111010

logiko ILI nad bitovima ^ ekskluzivno IL I(netano za obe nule i jedinice) << pomeranje ulevo >> pomeranje udesno ~ Complement (jedinice postaju nule i obmuto)

Primeri
1. Napisati program koji izraunava zbir rvih pet prirodnih brojeva.
I nain:

#include <stdio.h> int main() { int i,zbir = 0; //Postavljamo zbir na 0 jer 0 ne utice na sabiranje for(i=l;i<6;i++) zbir+=i; printf("Zbir = %", zbir) ; return 0; }

II nain:
#include <stdio.h> int main() { int i=l,zbir= 0; while(i<=5) { zbir+=i; zbir+=i++; } printf("Zbir = %d"7zbir); return 0; } III nain: #include <stdio.h> int main() { int i-1,zbir= 0; do zbir+=i++; while (i<=5); printf("Zbir = %d",zbir); return 0; }

llb nain:
#include <stdio.h> int main() { int i=l,zbir=0; while(i<=5) zbir+=i++; printf("Zbir=%d",zbir); return 0; }

2. Napisati program koji sabira brojeve koje unosi korisnik sve dok suma brojeva ne pree n..
#include <stdio.h> int main() { int suma=0,n,br; scanf("%d",&n); while(n>=suma) { printf("Unesite broj :"); scanf("%d",&br); suma+=br; } printf("Suma je %d",suma); return 0; }

3. Napisati program kojim se ispisuje tabela celih brojeva od 1 do uitanog broja n, njihovih kubova, kvadrata korena.
#include <stdio.h> #include <math.h>

int main() { int i,n; scanf ("%d",&n); for(i=l;i<=n;i++) printf("%4d %7d %7d %7.3f\n",i,i*i*i,i*i, sqrt(i)); return 0; }

4. Napiati program koji ispisuje sve trocifrne brojeve ija je cifra desetica manja od 5 a cifra jedinica neparna.
#include<stdio.h> int main () { int i,j,k; for(i=l;i<=9;i++) for(j=0;j<5;j++) for(k=l;k<=9;k+=2) printf("%d\n",100*i+10*j+k) retum 0; }

5. Za uneto N iscrtati piramidu na prikazani nain. Npr. za N = 3 * *** *****


#include <stdio.h> int main () { int i,j,k,n; scanf("%d",&n); for(i=l ; i<=n ; i++) { for(k=l ; k<=n-i ; k++); printf(" "); for (j =1 ; j<2*i ; j++) printf ("*"); printf("\n"); } return 0; }

6. Napisati program koji odreuje broi redova u ulaznom tekstu.


#include <stdio.h> int main() { int ch; int br_redova=0; while((ch=getchar())!=EOF) if(ch==`\n`) br_redova++; printf ("Broj redova je %d",br_redova); return 0; }

7. Napisati program koji ulaz sa tastature kopira na ekran zamenjujui svaku seriju belina jednom belinom.
#include <stdio.h> int main(){ int pch=EOF,ch; while((ch=getchar())!=EOF) { if(!((ch==` ` && pch==` `) || (ch==`\t' && pch==`\t'))) putchar(ch); pch=ch;

} }

return 0;

8. Pomnoiti uneti broj sa 2n bez korienja operacije mnoenja.


#include <stdio.h> int main() { int a=0,n; printf ("Unesite broj : "); scanf("%d",&a); printf ("Unesite stepen broja 2:"); scanf("%d",&n); printf("Broj %d*2^%d=%d",a,n, a<<n);

9. Napisati program koji dati broj N pretvaia u njegov binarm ekvivalent.


#include <stdio.h> int main() { int a,x=128; //za 8-bit scanf("%d",&a); while(x>0) { printf("%d", (a&x)>0?1:0); X=X>>1

} }

Zadaci: 1. Napisati program koji izraunava zbir brojeva od 1 do n. 2. Napisati program koj izraunava proizvod brojeva od 1 do. n. 3. Napisati program koji rauna zbir neparnih, pnrodnih brojeva u intervalu od 1 do n. 4. Napisati program koji izraunava n-ti stepen broja 2, tj 2n. 5. Napisati program koji rauna n!. Napomena: n!={ 1,n=0 n(n-1)...1,n>1 6. Napisati program kojim se izraunava zbir prvih n lanova reda 1+1/2+1/3+1/4+ 7. Napisati program kojim se izraunava zbir prvih n lanova reda 1-1/2+1/3-1/4+ 8. Za zadato n izraunati zbir elemenata niza : 1, x, x2, x3,..., xn. 9. Napisati program koji ispisuje tabelu vrednosti funkcije sqrt(x) u intervalu od M do N sa korakom K. 10. Napisati program koji ispisuje tablicu vrednosti funkcije X3 pri promeni X od 2 do N sa korakom 2. 11. Korisnik unosi brojeve sve dok ne unese broj 0. Program treba da ispie aritmetiku sredinu tako unetih brojeva. 12. Korisnik unosi brojeve razliite od nule (0 je oznaka kraja unosa). Napisati program koji odreuje najmanji od unetih brojeva. 13. Ispisati prvih N brojeva koji imaju svojstvo da pri deljenju sa 2 ili 6 daju osta- tak 1 a da su deljivi sa 7. 1' . Napisati program koji ispisuje zbir cifara unetog broja. 15. Napisati program koji ispisuje najveu cifru u datom broju N. 16. Napisati program kojim se izbacuje svako pojavljivanje cifre CF iz datog bro- ja17. Napisati program kojim se ispituje da Ii je dati prirodan broj prost. Napomena: Broj je prost ako je delji ' samo sa sobom x sa I Proveru moemo ubrzati tako to emo proveravati da Ii je deljiv sa brojevima od 1 do njegovog korena. 18. Za dati broj N ispisati sve Pitagorine brojeve a,b i t, gde a a +b =c a) N=4 * ** *** ****
2 2

b idu od

do N. Napomena: Brojevi su Pitag^rini ako vai

19. Napisati program koji za uneto N iscrtava odgovarajuu figuru b) N=4 * ** *** **** c) N=4 * *** ***** *******

Zadaci za vebu

Napisati program koji implementira funkciju pow(a,n), to jest rauna vrednost izraza an. Napisati program koji odreuje sumu S kvadrata pamih i kubova nepamih brojeva od N do M. 22. Ispitati da li je uneti prirodan broj N stepen broja 3.

23. Napisati program kojim se pravi tabela.prevoenja iz temperature u Celzijusima u temperaturu u Farenhajtima za vrednosti od vr, do vr2 stepeni sa korakom m. 24. Koristei Ajntajnovu formulu E = mc2, ispisati tablicu koja pokazuje kako se energija menja ako se masa menja od m1 do m2. Odrediti najmanji broj pamih brojeva, poevi od 2, ija je suma vea od zadate vrednosti. 26. Napisati program koj i izraunava n!! 1*3*5*...*(n-2)* n,n = 2k+1 Napomena: n!!= 2*4*6**( n - 2 ) * 2n,n = 2k 27. 1+1/3+1/5++1/2n-1 28. 29. Ispisati zbir najvee najmanje cifre unetog broja N. Napisati program kojim se izbacuje prvo pojavljivanje cifre C F iz datog broja. Napisati program kojim se izraunava zbii prvih N lanova reda

Reenja
1.
#include <stdio.h> int main() { int n,suma=0,i; printf("Unesite n : "); scanf("%d",&n); for(i=l i<=n;i++) suma+=i; printf("Suma je %",suma); return 0; }

2.

#include <stdio.h> int main() { int n,p=l,i; printf("Unesite n : "); scanf("%d",&n); for(i=l;i<=n;i++) P*=i; printf("Proizvod je %",p); return 0; } #include <stdio.h> int main() { int n,i,suma=0; scanf("%d",&n); for(i=l;i<=n;i+=2) suma+=i; printf("Suma je %d",suma); retum 0; }

3.

4. #include <stdio.h> int main() { int n,i; double st=l; //ako je n nula, ostaje ova vrednost! printf("Unesite n : "); scanf("%d",&n) for(i=l,i<=abs(n);i++) st*=2; if(n<0) st=l/st; //ako je n negativno printf("Rez je %.41f",st); return 0;

5.
include <stdio.h> int main () { int n,fakt=l,i;

scanf("%d",&n); for(i=l;i<=n;i++) fakt*=i; printf(%d! = %d",n,fakt); return 0;

6.
#include <stdio.h> int main() { int n,i double suma=0.0; scanf("%d",&n); for(i=l;i<=n;i++) suma+=l.0/i printf("Suma je %f",suma); return 0;

7.
#include <stdio.h> int main(){ double suma=0.0; int n,i; scanf("%d",&n); for (i=l;i<=n;i++) if(i%2==0) suma-=l.0/i; else suma+=l.0/i; printf(Suma je %f", suma); return 0;

} 8. I Nain (razumljivije reenje): #include <stdio.h> int main(){ int i,j,x,n,suma=0,p; scanf ("%d",&n); scanf("%d",&x); for(i=0;i<=n;i++) { p=1; for(j=l;j<=i;j++) p*=x; suma+=p; s } printf("Suma: %d",suma); return 0; } II nain (efikasnije reenje):
#include <stdio.h> int main () { int i,j,x,n,suma=l,p=l; scanf("%d",&n); scanf("%d",&x); for(i=l;i<=n;i++){ p=p*X; suma+=p;

printf("Suma: %d",suma); return 0;

9.
#include <stdio.h> #include <math,h> int main() { double m,n,k,i; printf("Unesite granice intervala [M,N] : ]; scanf("%lf%lf",&m,&n); printf("Unesite korak k :"); scanf("%lf",&k); for(i=m;i<=n;i=i+k) printf ("%3.2f %7.2f\n",i,sqrt (i)); return 0; '^oglavlje J: Ciklusi i brtovni operatori #include <stdio.h> int main() { int i,n; scanf("%d",&n; for(i=2;i<=n;i=i+2) printf (" %3d %7d\n", i, i*i*i); return 0; "; ==1) && i%7==0) : %5d\n",i); #include <stdio.h> int main() { int sum=0,brojac=0,br; while(1) { printf("Unesite broj : "); scanf("%d",&br) if(br==0) break; sum+=br; brojac++; if (brojac==0) printf ("Niste uneli brojeve"); else printf("Aritmeticka sredina je %f",(float)sum/brojac); return 0;

} 10.

17

11.

} 12.

#include <stdio.h> int main() { int min,br; printf("Uneti broj: "); scanf("%d",&br); min=br; while{1) { printf("Uneti broj : "); scanf ("%d",&br); if(br==0) break; if(br<min) min=br;

} }
printf{"Minimum je %d",min); return 0;

13.

#include <stdio.h> } int main() { int i,n; scanf("%d",&n); for(i=l;i<=n;i++) if((i%2==l || i%6==1 && i%7==0); printf("Broj: %5d\n,i); return 0;

14.
#include <stdio.h> int main(){ int broj,suma_cif=0;

scanf(%d,&broj); while(broj!=0){ //Moze id a se napise while(broj)

int cf; cf=broj%10; sum_cif+=cf; broj/=10; } printf(Suma cifara unetog broja je %d,suma_cif); return 0; }

15.
#include <stdio.h> int main(){ int broj,max,cf; scanf(%d,&broj); cf=broj%10; broj/=10; max=cf; while(broj) { cf=broj%10; if(cf>max) max=cf; broj/=cf=10;

}
prinf(Najveca cifra u unetom broju je %d,max); return 0;

16.
#include <stdio.h> int main(){ int i,n=0,broj,cf,c,p=l; scanf("%d%d",&broj,&cf); do if((c=broj%10)!=cf) { n+=p*c; p*=10; while (broj/=10); printf("Izmenjeni broj je %d",n); return 0;

17.
#include <stdio.h> #include <math.h> int main() { int i,br,prost=l; scanf ("%d",&br); for(i=2;i<=sqrt(br);i++) if(br%i==0) { prost=0; break;

}
if(prost && br!=l) printf("Broj je prost"); else printf("Broj nije prost"); return 0;

18.
#include <stdio h> #include <math.h> int main(){ int i,n,j; float c; scanf("%d",&n); printf("%5c %5c %5c\n",[a','b',c'); for(i=l;i<=n;i++) for(j=l;j<=n;j++) { c=sqrt(i*i+j*j); if(ceil(c)==c) printf("%5d %5d %5d\n",i,j,(int)c);

return 0;

19.
a. #include <stdio.h> int main {) { int i,j,n; scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<=i;j++) printf ("*"); printf("\n");

b.

return 0;

#include <stdio.h> int main(){ int i,j,k,n; scanf(%d",&n); for(i=l;i<=n,i++) { for(j=0;j<=n-i;j++) printf ( " "); for(k=0;k<i,k++) printf("*"); printf("\n");

} c.

return 0;

#inclue <stdio.h> int main{){ int n,i j,k; scanf(%6d,&n); for(i=0;i<n;i++) { for(j=0;j<=n-i;j++) printf(" "); for(k=l k<=2*i+1,k++) printf(" *"); printf ("\n"); return 0;

You might also like