Docsity
Docsity

Pripremite ispite
Pripremite ispite

Studirajte zahvaljujući brojnim resursima koji su dostupni na Docsity-u


Nabavite poene za preuzimanje
Nabavite poene za preuzimanje

Zaradite bodove pomažući drugim studentima ili ih kupite uz Premium plan


Školska orijentacija
Školska orijentacija


C jezik osnovi programiranja, Vežbe od Računarski sistemi

C programski jezik

Tipologija: Vežbe

2014/2015

Učitan datuma 08.05.2015.

sada456
sada456 🇧🇦

5

(2)

3 dokumenti

1 / 71

Toggle sidebar

Ova stranica nije vidljiva u pregledu

Ne propustite važne delove!

bg1
Osnovi programiranja
Programski jezik C
Zadaci sa veˇzbi
Milena Vujoˇsevi´c - Janiˇci´c 2005/20061
1Neki 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
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47

Delimični pregled teksta

Preuzmite C jezik osnovi programiranja i više Vežbe u PDF od Računarski sistemi samo na Docsity!

Osnovi programiranja

Programski jezik C

— Zadaci sa veˇzbi —

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

  • 1 Programski jezik C
    • 1.1 Zdravo svete!
    • 1.2 Imena promenljivih
    • 1.3 Deklaracije
    • 1.4 Tipovi i veliˇcina podataka
    • 1.5 Funkcije printf i scanf
    • 1.6 Aritmetiˇcki operatori
    • 1.7 Operatori i izrazi dodeljivanja vrednosti
    • 1.8 Inkrementacija i dekrementacija
    • 1.9 Relacioni i logiˇcki operatori
    • 1.10 Kontrola toka — if, while, do - while, for
      • 1.10.1 if
      • 1.10.2 Else-if
      • 1.10.3 while
      • 1.10.4 do-while
      • 1.10.5 for
    • 1.11 Switch
    • 1.12 Uslovni izraz
    • 1.13 Simboliˇcke konstante
    • 1.14 Enumeracija
    • 1.15 Funkcije
    • 1.16 Nizovi
    • 1.17 Konstante
    • 1.18 Konverzija
      • 1.18.1 Automatska konverzija
      • 1.18.2 Eksplicitna konverzija
      • 1.18.3 Funkcije koje vrˇse konverziju
    • 1.19 Operator sizeof()
    • 1.20 Znakovni ulaz i izlaz
    • 1.21 Nizovi
    • 1.22 Dvostruka for petlja
    • 1.23 Formiranje HTML dokumenta
  • 1.24 Funkcije — prenos parametara po vrednosti 4 SADR ˇZAJ
  • 1.25 Break i continue
  • 1.26 Rad sa niskama karaktera
  • 1.27 Makroi
  • 1.28 Bitski operatori
  • 1.29 Linearna i binarna pretraga
  • 1.30 Razni zadaci

Predgovor

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

Programski jezik C

1.1 Zdravo svete!

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

1.2 Imena promenljivih

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.

1.3 Deklaracije

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.

1.4 Tipovi i veliˇcina podataka

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 Unesi drugi broj : 3 Izlaz: 2 + 3 = 5

1.6 Aritmetiˇcki operatori

% (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); }

1.7 Operatori i izrazi dodeljivanja vrednosti

i = i + 2; ekvivalento je sa i+=2;

Moze i za:

      • / % << >> ^ | izraz1 op = izraz je ekvivalnetno sa izraz1 = (izraz1) op (izraz2)

x*= y+1 je ekvivalento sa x = x * (y+1)

Takvo pisanje je krace i efikasnije.

14 Milena Vujoˇsevi´c–Janiˇci´c

1.8 Inkrementacija i dekrementacija

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 Kontrola toka — if, while, do - while, for

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()