1. Napisati rekurzivnu funkciju u C-u za izracunavanje vrednosti faktorijela unetog broja. Long fakt(int broj) {if (broj == 1) return(1); else return(broj*fakt(broj-1)); } 2. Napisati procedure za upis i citanje magacina u pseudokodu . inicijalno je vrh:=0 if (vrh <n) then vrh:=vrh+1
-upis
mag(vrh):=podatak endif if (vrh >0) then podatak :=mag(vrh)
- citanje
vrh:=vrh-1 endif 3. Sta je odredjeno tipom podatka? Tipom podatka je odredjeno: 1. Skup vrednosti koje konstante, promenljive ili izrazi mogu uzimati; 2. Skup operatora (operacija) koje se mogu primenjivati nad konstantama i promenljivima odredjenog tipa; 3. način predstavljanja u memoriji računara 4. Pobrojati faze u razvoju C programa po redosledu obavljanja. 1. Editovanje 2. Preprocesiranje 3. Kompilacija 4. Linkovanje 5. Učitavanje(Load) 6. Izvršenje
5. Sta se ispisuje naredbom printf iz poslednje linije sekvence datog koda? Int a, b, c, d; a=3; b=6; c=a*--b; d=a*b--; printf(“%d &d”, c, d); Stampa u ovom slucaju – 15&d, a u slucaju da u printf stoji %d %d, onda stampa – 15 15. 6. Objasniti znacenje: - ulazne konverzije %15Lf (ucitava se broj tipa long double koji moze sa zauzima najvise 15 cifara, ako ima vise u promenljivu se ucitavaju samo prvih 15) - izlazne konverzije %-+15.7e (e oznacava da se ispisuje vrednost promenljive u naucnoj notaciji tj. ima samo jedna cifra ispred decimalne tacke, broj decimalnih mesta je po definiciji 6, zatim ide znak “e” a onda stepen eksponenta; 15 oznacava kolika je sirina polja u kojoj se ispisuje vrednost(ako je ona veca, u ovom slucaju se stavljaju blanko znaci do kraja a ako je manja od duzine vrednosti onda se ispisuje cela vrednost); .7 oznacava da se broj ispisuje na sedam decimal odnosno ako broj ima manje od 7 decimala dodaju se nule do kraja ako ne onda se sedma cifra zaokruzi; prvi znak a to je “-“ oznacava da se onaj visak praznik mesta od 15 koliko je gore receno popunjava blanko znacima sa desna, znaci prvo ide vrednost broja pa onda blanko znaci do kraja 15tog mesta, a + je karakter koji se ispisuje ukoliko je broj pozitivan znaci naglasava znak). 7. Sta su to samoreferencirajuce structure u C-u? To su strukture sa ukazateljima na istu strukturu, odnosno neki clan structure je pokazivac i tipa iste te structure, odnosno on moze da ukazuje na neku drugu promenljivu tipa te stukture ili na samu sebe. Nije dozvoljeno da struktura sadrži instancu same sebe, ali je sasvim korektno da sadrži pokazivač na instancu same sebe. 8. Definisati makro za nalazenje manjeg od dva broja i dati primer koriscenja u C-u. #define MIN(x,y) (((x)>(y))?(x):(y)) min = MIN(a,b); 9. Napisati deo koda u C-u kojim se deklarise promenljiva koja ce se koristiti za cuvanje imena studenata. Ime studenta je maksimalno 30 karaktera, a moze ih biti najvise 50. char ImeStudenta[50][30];
10. Opisati modove za pristup fajlovima koji postoje kod C funkicja za otvaranje fajla. “r” – otvara datoteku za citanje od pocetka “r+” – otvara datoteku za citanje od pocetka i upisivanje na pocetku “w” – otvara postojecu datoteku i brise njen sadrzaj ili otvara novu datoteku, za upis “w+” – isto kao i w samo sto moze i da se cita iz nje “a” – otvara datoteku za upisivanje pocev od kraja vec postojeceg sadrzaja “a+” – isto kao i a samo i za citanje 11. Napisati strukturni dijagram toka i napisati funkciju za izracunavanje najveceg zajednickog delioca dva prirodna broja m i n. #include<stdio.h> int salabbezp(int n, int m) { while (m!=n) { if (m>n) m=m-n; else n=n-m; } return(n); } rekurzivno int NZD(int n, int m) {if (n==m) return(n); else if (n>m) return(NZD(n-m,m)); else return(NZD(n,m-n)); } 12. Navesti osobine polja kao structure podataka. Polja su statičke strukture podataka, dimenzije polja se ne mogu menjati u toku izvršenja programa; ubacivanje ili izbacivanje elementa iz polja zahteva potpuno preuredjenje polja. Polje je homogena struktura podataka (sastavljena od elemenata istog tipa) koji imaju zajedničko ime. jednodimenzionalna (vektori), dvodimenzionalna (matrice), višedimenzionalna. Polja su indexirani tip podataka kod kojih prvi element pocinje sa indexom 0.
13. Objasniti unije. Unija, kao tip podataka, poseduje veoma mnogo sličnosti strukturi, ali dok je struktura agregatni tip podataka koji okuplja objekte (promenljive) čiji su tipovi (verovatno) različiti, unija je elementarni tip podatka od samo jednog elementa koji u nekom trenutku može da bude samo jedan od specificiranih tipova. Naravno, promenljiva je dovoljno velika da može da sadrži najveći od tipova članica unije. union naziv_unije { tip1 ime_promenljive_1; tip2 ime_promenljive_2; … }; 14. Uz pomoc zagrada odrediti kojim redom ce se izvrsiti koja operacija. a*=b+++c!=d>>e~f==--a a*=((b++)+c)!=(d>>e))|((~f)==(--a)) 15. Makroi u programskom jeziku C. Makro je definicija simbola u kojoj se javljaju jedan ili više argumenata. 16. Reci koje mogu biti identifikatori su one koje sadrze slova, donju crtu i brojeve, s tim da ne mogu da pocnu brojevima. 17. Parametri funkcije main su argc, i argv[] argc – (Argument count) - Prvi parametar – predstavlja broj programu (funkciji
parametara koje operativni sistem predaje
main).
- argv - (Argument value) - Drugi parametar – predstavlja pokazivač na tabelu čiji su elementi znakovni nizovi koji
predstavljaju stvarne argumente funkcije main. To znači da funkcija main, u stvari, može imati
proizvoljan broj parametara. •
argc uvek ima početnu vrednost 1, jer prvi element niza argv pokazuje na ime programa.
18. Dodela vrednosti u stringu se vrsi na sledece nacine: char ime[] = {‘k’, ‘i’, ‘c’, ‘a’, ‘\o’}; char *ime = {‘k’, ‘i’, ‘c’, ‘a’, ‘\o’};-ovo ne moze char ime[] = {“kica”}; char *ime = {“kica”}; char ime[] = “kica”; char *ime = “kica”;
19. Elementima znakovnog niza se pristupa navodjenjem zajednickog imena i indexa; postoje dva nacina: s[i] ili *(s+i), time se pristupa i-tom clanu znakovnog niza 20. Linearne strukture podataka. Svaki element strukture, izuzev prvog i poslednjeg, je u relaciji samo sa dva druga elementa, prethodnikom i sledbenikom. polja linearne lančane liste magacini redovi 21. Funkcije za upravljanje memorijom. - void *malloc(size_t size)-Funkcija rezerviše prostor u memoriji veličine size bajtova, i kao rezultat vraća pokazivač na početak rezervisanog prostora. -void *calloc(size_t num, size_t size)-Funkcija rezerviše prostor u memoriji (i inicijalizuje je na vrednost 0) za num elemenata veličine size bajtova, i kao rezultat vraća pokazivač na početak rezervisanog prostora. - void free(void *memblock)- Argument memblock je pokazivač na memorijski blok koji treba osloboditi. Funkcija ne vraća nikakvu vrednost. Oslobađa memorije zauzete funkcijama malloc i calloc. -void *realloc()(void *memblock, size_t size)- Funkcija oslobađa rezervisani blok na koji pokazuje memblock i rezervise novi veličine size bajtova, i kao rezultat vraća pokazivač na početak rezervisanog prostora. 22. Memorijske klase identifikatora u C-u. Memorijska klasa određuje lokaciju i vreme postojanja memorijskog bloka dodeljenog funkciji ili promenljivoj. •
u C jeziku postoje četiri osnovne memorijske klase : 1. Automatska
(auto)
2. Eksterna
(extern)
3. Statička i
(static)
4. Registarska
(register)
Promenljive deklarisane u funkciji ili na početku bloka su po definiciji automatske. Nastaju pri ulasku u blok ili funkciju i nestaju kada se blok ili funkcija završe. Deklaracije ovih promenljivih mogu opciono imati ključnu reč auto. •
Promenljive deklarisane u jednom modulu (fajlu) a koriste se u drugom modulu su eksterne. Deklaracije ovih promenljivih moraju imati ključnu reč extern.
•
Ove promenljive omogućavaju modularno programiranje, odnosno pisanje programa korišćenjem više datoteka (fajlova). Svaka globalna promenljiva je i eksterna promenljiva. Da bi se ona videla iz drugog modula mora se koristiti extern.
•
Promenljive koje zadržavaju vrednost kada se blok ili funkcija gde su deklarisane završe su statičke. Deklaracije ovih promenljivih moraju imati ključnu reč static.
C jezik omogućava programeru da utiče na efikasnost programa. Naime, ako program često koristi neku promenljivu, programer može sugerisati prevodiocu da tu promenljivu smesti u brze registre centralnog procesora. Ovakve promenljive se zovu registarske i u deklaraciji se mora koristiti ključna reč register. 23.Prikazivanje argumenata funkcije main(). #include <stdio.h> void main( int argc, char *argv[] ) { int brojac; for( brojac = 0; brojac < argc; brojac++ ) printf(“%s\n”, argv[brojac]); } 24. Funkcija za razmenu vrednosti dveju promenljivih. void razmena(int *a, int *b) {int pom; pom=*a; *a=*b; *b=pom; } 25. Goto, alfa, Mil, _beta, Uzor_ 26. scanf(“%d”,&i); scanf(“%s”,string); razlika je u konverionom karakteru (d i s) i u tome sto kod ucitavanje celobrojne vrednosti ispred promenljive mora stajati adresni operator, dok kod ucitavanja stringa stoji samo ime jer je ono istovremeno i memorijska adresa prvog elementa.
27. BubbleSort #include “stdio.h” void BubbleSort(int niz[], int n); {int i, j, pom; for (i=1;i<n;i++) for (j=n-1;j>i-1;j--) if (niz[j-1] > niz[j]) {pom = niz[j]; niz[j]=niz[j-1]; niz[j-1]=pom; } } void main() {int A[20], N=20, i; for (i=0; i<N;i++) scanf(“%d”, &A[i]); for (i=0; i<N;i++) prinf(“%d ”, A[i]); BubbleSort(A,N); for (i=0; i<N;i++) scanf(“%d”, A[i]); } 28. Osobine valjanog algoritma. Ako petlja počne unutar then bloka ili else bloka, u tom bloku se mora i završiti! Dozvoljene su paralelne (ugnježdjene) petlje. Nisu dozvoljene petlje koje se seku! 29. Navesti linearne i nelinearne strukture podataka: 1. Linearne – svaki element strukture, izuzev prvog i poslednjeg, je u relaciji samo sa dva druga elementa, prethodnikom i sledbenikom. polja linearne lančane liste magacini redovi 2. Nelinearne – veze izmedju elemenata strukture su proizvoljne (svaki element može imati veći broj prethodnika ili sledbenika) stabla grafovi
30. Vrste petlji: a) sa konstantnim brojem prolaza (for), b) sa promenljivim brojem prolaza (while, do while) for (i=0;i<n;i++) <naredba> while (uslov) <naredba> do <naredba> while(uslov) 31. Sta su strukture? Kako se realizuju. Strukture predstavljaju kompleksne tipove podataka koji mogu sadržati promenljive istog ili različitog tipa. struct naziv_strukture { tip1 ime_promenljive_1; tip2 ime_promenljive_2; … }; struct naziv_strukture
naziv_strukturne_promenljive;
32. Objasniti fopen.
FILE *fopen(const char *path, const char *mode) fopen otvara fajl sa navedenim imenom (string *path koji sadrži pored imena i putanju do fajla), i asocira ga sa odgovarajućim tokom (stream). mode je string koji može da ima sledeće vrednosti:
r – otvara postojeći fajl za čitanje, počinje od početka fajla.
w – kreira novi fajl (ako ne postoji) ili briše sadržaj postojećeg i otvara ga za upis, od početka fajla.
a – otvara ili kreira fajl za dodavanje na kraj tekstualnog fajla.
r+ - otvara fajl za čitanje i upis, počev od startne pozicije (ažuriranje).
w+ - isto kao w, s tim da se fajl otvara za čitanje i upis (ažuriranje).
a+ - isto kao a, s tim da se fajl otvara za čitanje i upis (ažuriranje).
String mode može da sadrži i b kao drugi ili treći karakter, da označi da se radio binarnom fajlu. String mode može da sadrži i druge karaktere koji se mogu koristiti u procesu implementacije. Ako je fopen uspešno otvorio fajl, vraća pointer na FILE. Inače vraća NULL.