































































Studirajte zahvaljujući brojnim resursima koji su dostupni na Docsity-u
Zaradite bodove pomažući drugim studentima ili ih kupite uz Premium plan
Pripremite ispite
Studirajte zahvaljujući brojnim resursima koji su dostupni na Docsity-u
Nabavite poene za preuzimanje
Zaradite bodove pomažući drugim studentima ili ih kupite uz Premium plan
C programski jezik
Tipologija: Vežbe
1 / 71
Ova stranica nije vidljiva u pregledu
Ne propustite važne delove!
































































Milena Vujoˇsevi´c - Janiˇci´c 2005/2006^1
(^1) Neki primeri su preuzeti sa sajta www.matf.bg.ac.yu/˜filip i www.matf.bg.ac.yu/˜jelenagr. Tekstovi su uglavnom zasnovani na knjizi Programski jezik C, autora Kerninghan & Ritchie
2
Ovo je prate´ci materijal za veˇzbe koje drˇzim iz predmenta Osnovi programiranja. On ne moˇze zameniti poha
anje veˇzbi niti koriˇs´cenje druge preporuˇcene literature. Veliki deo materijala ˇcine zadaci i reˇsenja mr Filipa Mari´ca (raspoloˇzivi na www.matf.bg.ac.yu/~filip/pp/0405/index.pl). Tako
e koriˇs´cen je i materijal sa sajta koleginice Jelene Grmuˇse www.matf.bg.ac.yu/~jelenagr. Tekstovi i objaˇsnjenja su uglavnom zasnovani na knjizi Programski jezik C, autora Kerninghan & Ritchie Zahvaljujem svojim studentima na aktivnom uˇceˇs´cu u nastavi ˇcime su mi pomogli u uobliˇcavanju ovog materijala. Svi komentari i sugestije vezane za ovaj materijal bi´ce veoma dobrodoˇsli.
Milena Vujoˇsevi´c-Janiˇci´c www.matf.bg.ac.yu/~milena
Primer 1 Program ˇstampa poruku ”hello, world”.
#include <stdio.h>
main() /iskazi f-je main su zatvoreni u zagrade / { /poziv f-je printf da odstampa poruku/ printf("hello, world\n"); }
Primer 2 Program ˇstampa poruku ”hello, world”
#include <stdio.h>
main() { printf("hello, "); printf("world"); printf("\n"); }
Specijalni znaci:
\n novi red \t tabulator \ kosa crta " navodnici \a zvuk \’ jednstruki navodnik
8 Milena Vujoˇsevi´c–Janiˇci´c
Postoje ograniˇcenja: u imenu se mogu pojaviti slova i cifre, potcrta ” ” se smatra slovom. Velika i mala slova se razlikuju. int x, X; /To su dve razlicite promenljive!!!/ Kljuˇcne reˇci kao ˇsto su if, else, for, while, se ne mogu koristiti za imena promenljivih.
Da bi se promenljiva mogla upotrebljavati ona se mora na poˇcetku programa deklarisati. Prilikom deklaracije moˇze se izvrˇsiti i poˇcetna inicijalizacija.
int broj; /Deklaracija celog broja/ int vrednost=5; /Deklaracija i inicijalizacija celog broja/
Kvalifikator const moˇze biti dodeljen deklaraciji bilo koje promenljive da bi oznaˇcio da se ona ne´ce menjati
const double e=2.
Osnovni tipovi podataka:
int ceo broj char znak, jedan bajt float realan broj double realan broj dvostruke tacnosti
char jedan bajt, sadrzi jedan znak int celobrojna vrednost,2 ili 4 bajta float realan broj, jednostruka tacnost double dvostruka tacnost
Postoje kvalifikatori koje pridruˇzujemo osnovnim tipovima short(16) i long(32):
short int kratak_broj; long int dugacak_broj; short kratak; long dugacak;
10 Milena Vujoˇsevi´c–Janiˇci´c
Primer 4 #include <stdio.h> main() { printf("Slova:\n%3c\n%5c\n", ’z’ , ’Z’); } Izlaz iz programa:
Slova: z Z
%c je za stampanje karaktera %3c je za stampanje karaktera na tri pozicije Isto tako smo mogli i %3d za stampanje broja na tri pozicije ili %6d za stampanje broja na 6 pozicija.
Pravila: %d stampaj kao ceo broj %6d stampaj kao ceo broj sirok najvise 6 znakova %f stampaj kao realan broj %6f stampaj kao realan broj sirok najvise 6 znakova %.2f stampaj kao realan broj sa dve decimale %6.2f stampaj kao realan broj sirok najvise 6 znakova a od toga 2 iza decimalne tacke %c karakter %s string %x heksadecimalni broj %% je procenat
Primer 5 Prikazuje unos celog broja koristeci scanf("%d", &x)
#include <stdio.h>
main() { int x; printf("Unesi ceo broj : ");
/* Obratiti paznju na znak & (operator uzimanja adrese) pre imena promenljive u funkciji scanf */ scanf("%d",&x);
1.6 Aritmetiˇcki operatori 11
/* U funkciji printf nije potrebno stavljati & */ printf("Uneli ste broj %d\n", x); }
Primer 6 Program sabira dva uneta cela broja
#include <stdio.h>
main() { int a, b, c; printf("Unesi prvi broj : "); scanf("%d", &a); printf("Unesi drugi broj : "); scanf("%d", &b); c = a + b; printf("%d + %d = %d\n", a, b, c); } Ulaz: Unesi prvi broj : 2
% (samo za celobrojne vrednosti) unarno + i -
Asocijativnost sleva na desno, prioritet kao u matematici.
Primer 7 Program ilustruje neke od aritmetiˇckih operacija.
#include <stdio.h> main() { int a, b; printf("Unesi prvi broj : "); scanf("%d",&a);
printf("Unesi drugi broj : ");
1.7 Operatori i izrazi dodeljivanja vrednosti 13
printf("c = %f\n",c); printf("Uzrok problema : 5/2 = %f\n", 5/2); printf("Popravljeno : 5.0/2.0 = %f\n", 5.0/2.0); printf("Moze i : 5/2.0 = %f i 5.0/2 = %f \n", 5/2.0, 5.0/2); printf("Za promenljive mora kastovanje : %f\n", (float)a/(float)b);
}
Izlaz iz programa: c = 2. Uzrok problema : 5/2 = 2. Popravljeno : 5.0/2.0 = 2. Moze i : 5/2.0 = 2.500000 i 5.0/2 = 2. Za promenljive mora kastovanje : 2.
Zadatak 1 Sta ´ˇ ce biti ispisano nakon izvrˇsavanja slede´ceg programa?
#include <stdio.h> main() { int x=506, y=3, z=21, t=2; printf("x=%d y=%d\n",x,y); printf("z - t=%d\n", z-t); printf("z / t =%d\n",z / t); printf("-x=%d\n",- x); printf("x %% y=%d\n", x%y); }
i = i + 2; ekvivalento je sa i+=2;
Moze i za:
x*= y+1 je ekvivalento sa x = x * (y+1)
Takvo pisanje je krace i efikasnije.
14 Milena Vujoˇsevi´c–Janiˇci´c
Operatori ++ i --
x=++n; se razlikuje od x=n++;
y=(x++)*(++z);
Primer 9 Ilustracija prefiksnog i postfiksnog operatora ++
#include <stdio.h> main() { int x, y; int a = 0, b = 0;
printf("Na pocetku : \na = %d\nb = %d\n", a, b);
/* Ukoliko se vrednost izraza ne koristi, prefiksni i postfiksni operator se ne razlikuju */ a++; ++b; printf("Posle : a++; ++b; \na = %d\nb = %d\n", a, b);
/* Prefiksni operator uvecava promenljivu, i rezultat je uvecana vrednost */ x = ++a;
/* Postfiksni operator uvecava promenljivu, i rezultat je stara (neuvecana) vrednost */ y = b++;
printf("Posle : x = ++a; \na = %d\nx = %d\n", a, x); printf("Posle : y = b++; \nb = %d\ny = %d\n", b, y); }
Izlaz iz programa: Na pocetku: a = 0 b = 0 Posle : a++; ++b; a = 1 b = 1 Posle : x = ++a;
16 Milena Vujoˇsevi´c–Janiˇci´c
/*Lenjo izracunavanje: kako 3 nije vece od 5 to se vrednost drugog poredjenja nece racunati jer je netacno u konjunkciji sa proizvoljnim izrazom sigurno netacno. */ printf("Konjunkcija : 3>5 && 5>3 - %d\n", a && b);
/Lenjo izravunavanje: tacno u disjunkciji sa proizvoljnim izrazom daje tacno tako da se vrednost izraza 3>5 nece izracunavati/ printf("Disjunkcija : 5>3 || 3>5 - %d\n", b || a); printf("Negacija : !(3>5) - %d\n", !a);
}
Izlaz iz programa: 3>5 - 0 5>3 - 1 3==5 - 0 3!=5 - 1 Konjunkcija : 3>5 && 5>3 - 0 Disjunkcija : 3>5 || 5>3 - 1 Negacija : !(3>5) - 1
Primer 11 Ilustracija lenjog izraˇcunavanja logiˇckih operatora. Prilikom izracunavanja izraza - A && B, ukoliko je A netaˇcno, izraz B se ne izraˇcunava. Prilikom izraˇcunavanja izraza - A ‖ B, ukoliko je A taˇcno, izraz B se ne izraˇcunava.
#include <stdio.h>
/* Globalna promenljiva, vidljiva i iz funkcije main() i iz funkcije izracunaj*/ int b = 0;
/* Funkcija ispisuje da je pozvana i uvecava promenjivu b. Funkcija uvek vraca vrednost 1 (tacno) */ int izracunaj() { printf("Pozvano izracunaj()\n"); b++; return 1; }
1.10 Kontrola toka — if, while, do - while, for 17
main() { /* Funkcija izracunaj() ce biti pozvana samo za parne vrednosti a */ int a; for (a = 0; a < 10; a++) if (a%2 == 0 && izracunaj()) printf("Uslov ispunjen : a = %d, b = %d\n", a, b); else printf("Uslov nije ispunjen : a = %d, b = %d\n", a, b);
printf("----------------------------\n");
/* Funkcija izracunaj() ce se pozivati samo za neparne vrednosti a */ b = 0; for (a = 0; a < 10; a++) if (a%2 == 0 || izracunaj()) printf("Uslov ispunjen : a = %d, b = %d\n", a, b); else printf("Uslov nije ispunjen : a = %d, b = %d\n", a, b); }
1.10.1 if
if (izraz) iskaz else iskaz
Primer 12 Program ilustruje if i ispisuje ukoliko je uneti ceo broj negativan
#include <stdio.h>
main() { int b; printf("Unesi ceo broj:"); scanf("%d", &b); if (b < 0) printf("Broj je negativan\n");
1.10 Kontrola toka — if, while, do - while, for 19
int b; printf("Unesi ceo broj : "); scanf("%d", &b); if (b < 0) printf("Broj je negativan\n"); else if (b == 0) printf("Broj je nula\n"); else printf("Broj je pozitivan\n"); }
Ulaz: Unesi ceo broj:- Izlaz: Broj je negativan
Ulaz: Unesi ceo broj: Izlaz: Broj je pozitivan
Primer 14 Pogresan program sa dodelom = umesto poredjenja ==.
#include <stdio.h>
main() { int b; printf("Unesi ceo broj : "); scanf("%d", &b);
/* Obratiti paznju na = umesto == Analizirati rad programa*/ if (b = 0) printf("Broj je nula\n"); else if (b < 0) printf("Broj je negativan\n"); else printf("Broj je pozitivan\n"); }
Ulaz: Unesi ceo broj:-
20 Milena Vujoˇsevi´c–Janiˇci´c
Izlaz: Broj je pozitivan
1.10.3 while
while(uslov) { ... } Uslov u zagradi se testira i ako je ispunjen telo petlje se izvrsava. Zatim se uslov ponovo testira i ako je ispunjen ponovo se izvrsava telo petlje. I tako sve dok uslov ne bude ispunjen. Tada se izlazi iz petlje i nastavlja sa prvom sledecom naredbom u programu. Ukoliko iza while sledi samo jedna naredba nema potrebe za zagradama.
while (i<j) i=2*i;
1.10.4 do-while
Ovo je sliˇcno paskalskom repeat-until izrazu.
do iskaz while (izraz)
Primer 15 Program ilustruje petlju do-while.
#include <stdio.h>
main() { int x;
x = 1; do { printf("x = %d\n",x); x++; /* x++ je isto kao i x=x+1 */ } while (x<=10); }
1.10.5 for
Primer 16 Program ilustruje petlju - for.
#include <stdio.h>
main()