2.03k likes | 2.54k Views
C, C++. Osnovi programiranja autor Vlade Urošević. Why Use C?.
E N D
C, C++ Osnovi programiranja autor Vlade Urošević
Why Use C? • In today's world of computer programming, there are many high-level languages to choose from, such as C, Pascal, BASIC, and Java. These are all excellent languages suited for most programming tasks. Even so, there are several reasons why many computer professionals feel that C is at the top of the list:
Why Use C? • C is a powerful and flexible language. What you can accomplish with C is limited only by your imagination. The language itself places no constraints on you. C is used for projects as diverse as operating systems, word processors, graphics, spreadsheets, and even compilers for other languages.
Why Use C? • C is a popular language preferred by professional programmers. As a result, a wide variety of C compilers and helpful accessories are available.
Why Use C? • C is a portable language. Portable means that a C program written for one computer system (an IBM PC, for example) can be compiled and run on another system (a DEC VAX system, perhaps) with little or no modification. Portability is enhanced by the ANSI standard for C, the set of rules for C compilers.
Why Use C? • C is a language of few words, containing only a handful of terms, called keywords, which serve as the base on which the language's functionality is built. You might think that a language with more keywords (sometimes called reserved words) would be more powerful. This isn't true. As you program with C, you will find that it can be programmed to do any task.
Why Use C? • C is modular. C code can (and should) be written in routines called functions. These functions can be reused in other applications or programs. By passing pieces of information to the functions, you can create useful, reusable code.
Why Use C? • What about C++? • You might have heard about C++ and the programming technique called object-oriented programming. Perhaps you're wondering what the differences are between C and C++ and whether you should be teaching yourself C++ instead of C.
Why Use C? • Not to worry! C++ is a superset of C, which means that C++ contains everything C does, plus new additions for object-oriented programming. If you do go on to learn C++, almost everything you learn about C will still apply to the C++ superset.
Why Use C? • In learning C, you are not only learning one of today's most powerful and popular programming languages, but you are also preparing yourself for object-oriented programming. • Another language that has gotten lots of attention is Java. Java, like C++, is based on C. If later you decide to learn Java, you will find that almost everything you learned about C can be applied.
Prednosti C jezika • Jednostavnost • Univerzalnost i slobodne forme programiranja, čine ga jezikom opšte namene i primene • Razvijena sredstva za prikazivanje strukture podataka • Projektovanje programa metodom ”odozgo na dole” • Optimizovani C prevodioci za kreiranje efikasnih programa za sistemsko programiranje • Uvod u jezik C++ u kome su uspešno zaživele ideje objektno orjentisanog programiranja
Tradicionalni, klasični, algoritamski način programiranja je u osnovi proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a zatim i programskog zahteva. • (tipicno unos, obrada prikaz) • Pri tome, podaci (atributi) koji se obrađuju i operacije nad njima nisu grupisani zajedno u objektima kao što je to slučaj kod OBJEKTNO ORJENTISANOG PROGRAMIRANJA, već su razbacani po programu.
Procesi u izvršavanju programa • Tekst editor. Pisanje izvornog koda programa • Pretprocesor. Transformiše izvorni kod prema direktivama koji se u njemu nalaze • Kompajler. Transformiše izvorni kod u kod na asemblerskom jeziku • Asembler.Asemblerski kod translira u objektni kod. • Linker. Od formiranog koda i modula iz biblioteke C jezika kreira izvršiv file
Let’s go ! Example 1. Linear function • #include<stdio.h> • main () • { • int a,b,x,y; • a=2; • b=4; • x=1; • y=a*x+b; • printf("%10d\n",y); • }
Osnovni elementi C jezika • Identifikator je sekvenca velikih i malih slova, cifara, i karaktera ‘_’. Koristi se za dodeljivanje imena objektima u programu (funkcije, promenljive...) • printf("%10d\n",y);je iskazC jezika i predstavlja elementarnu obradu koju program treba da obavi. Mora se završiti karakterom ; • ‘{‘ i ‘ }’su karakteri koji objedinjuju više pojedinačnih iskaza u jednu programsku celinu, analogno komandama BEGIN i END u Pascalu.
Osnovni elementi C jezika, nastavak • Main Print i Scanf su identifikatori sistemskih funkcija • Funkcija Main informiše program gde treba početi izvršavanje programa, a ‘( ); označava da sistemska funkcija main nema argumenata. • #include<stdio.h> • Sve pretprocesorske direktive počinju znakom # i ne pripadaju C jeziku. • #include<stdio.h> je instrukcija prevodiocu da upotrebi standardne ulazno izlazne funkcije koje su definisane u file-u <stdio.h>
Funkcije za realizaciju ulazne i izlazne aktivnosti • Funkcije printfiscanf obavljaju formatizovanu ulazno izlaznu aktivnost. • Argumenti obe funkcije podeljeni su u dva dela: • A) Kontrolni ili konverzioni niz • B) Lista argumenata • Razlika funkcija Scanf i Printf je u u listi argumenata. Argumenti funkcije printfse prenose vrednošću, dok se argumenti funkcije scanf prenose svojom adresom, jer se učitana vrednost mora vratiti u pozivajući program. To se postiže navođenjem karaktera & ( operator indirekcije ) ispred liste argumenata.
Izlazna funkcija Printf() • Sintaksa • Printf (Upravljački string [, Arg1,Arg2,…]) • Upravljački string • A)Printf ( “Ispis izlaznih izvestaja”) • Konstantni tekst • Ispis izlaznih izvestaja • B)Sadrži specifikaciju konverzije • Printf ( “Broj Pi ima vrednost %f\n”, Pi) • Karakter % f određuje na kom mestu i u kom formatu će se štampati vrednost odgovarajućeg argumenta iz liste. • “\n” Jedan karakter. Nekim karakterima se može promeniti uobičajeno značenje ako im prethodi karakter “\” , tzv. Escape karakteri.
Opšti oblik specifikacije konverzije • %[-][ širina_polja][. Tačnost][1] konverzioni_karakter • [-]Argument se poravnava na levoj strani zadane širine • širina_polja Zadaje maksimalnu širinu polja. Mesto na kome se štampa argument naziva se polje, a broj karaktera u polju je širina polja. • Tačnost Definiše se za realne brojeve, koliko se cifara ispisuje desno od decimalne tačke • Konverzioni_karakter definiše konverziju (iz tabele)
Example No 2 • main() • { • print(“karakteri:\n%3c\n%5c\n%7c\n,’A’,’B’,’C’); • } • Izlaz programa • Karakteri: • A B C
Ulazna funkcija scanf() • Sintaksa • scanf (Upravljački string [, Arg1,Arg2,…]) • Upravljački string sadrži niz konverzionih specifikacija • Lista argumenata sadrži adrese promenljivih. Ispred imena promenljive obavezan je znak &, osim kod string promenljive. • Scanf(“%d%d%d,”,&i,&j,&k);
Opšti oblik konverzione specifikacije • %[*]š širina_polja] konverzioni_znak • * Odgovarajuće ulazno polje se ignoriše i ne dodeljuje promenljivoj • širina_polja - Predstavlja maksimalnu širinu ulaznog polja • konverzioni_znak Definiše konverziju (data tabelom)
Example No 3 • main() • { • int xč • print(“ Upotreba f. scanf:\n Ukucajte broj\n:”) ; • scanf (%d\n,”&x); • printf(“Ukucali ste\n%d\n,”x); • } • Izlaz programa • Upotreba f. scanf: • Ukucajte broj • 23 • Ukucali ste • 23
Example No 4 • main() • { • int i,j,k; • scanf(“%2d%3d%2d”,&i,&j,&k); • printf(“ %d%d%d%^n”i,j,k); • scanf(“%d%d%d”,&i,&j,&k); • printf(“/%d/%d/%d%^n”i,j,k); • } • Za ulazne vrednosti • 123 456 789 • 12 34 56 • Ispisuje se • /12/3 /45/ • /6//789/12/
Osnovni tipovi podataka Promenljive i konstante su objekti u okviru programa koji se karakterišu svojim: • Imenom, • tipom podataka koji se može dodeliti promenljivoj, • Skupom operatora koji se može primeniti nad tim vrednostima • Memorijskim prostorom za smeštaj podataka Osnovni tipovi podataka su: • int, float, double i char
Tipovi podataka • Osnovni • Celobrojni (int) • Realni (float) • Znakovni (char) • Nabrojivi (enum) • Prazan (void) • Slozeni ili Struktuirani • Nizovi • strukture • Unije
Promenljive tipa Int • U ovu kategoriju podataka ubrajaju se konstante, promenljive, izrazi i funkcije. • Tri notacije za predstavljanje celobrojnih vrednosti dekadna, oktalna i heksadecimalna. • Pri deklarisanju promenljivih i konstanti može se vršiti i inicijalizacija promenljivih, npr. program Example No5 • Opseg celobrojnih vrednosti je različit i može se menjati primenom kvalifikatora Long i Short • Unsigned deklariše promenljivu za memorisanje + vrednosti • Long int x; • Short int y; • unsigned int z;
Example No 5 • main() • { • int x =11,y =22,z =33; • print(“x = %d\n y = %d\n z = %d\n,”x,y,z); • } • Izlaz programa • x = 11 • y = 22 • z = 33
Promenljivetipa float i double • Promenljive tipa float i double memorišu vrednosti realnih brojeva i vrednosti sa decimalnim zarezom. • Razlika između tipa float i double je u tačnosti predstavljanja realnih vrednosti.( brojem decimalnih cifara koje se mogu memorisati. • Konstante sa pokretnim zarezom se u C jeziku se mogu predstaviti u običnoj i naučnoj konotaciji. • Ne postoji razlika između konstanti tipa float i double C prevodilac sve konstante sa pokretnim zarezom predstavlja kao tip double • Promenljive tipa double mogu memorisati grubo dvaput više decimalnih cifara od promenljivih tipa float
Example No 6 • main() • { • float pi = 3.14159265358979323845; • Double sqrt_3 = 1.732050875687729356; • print(“pi = %20f\n sqrt_3 = %20f\n\n,”pi,sqrt_3); • } • Izlaz programa: • pi = 3.14159274101257320000 • sqrt_3 = 1.73205087568877260000
Promenljive tipa char • Promenljive i konstante tipa char memorišu karaktere. • Promenljive i konstante tipa char učestvuju u izrazima svojom kodnom vrednošću u kome je svaki karakter kodiran svojom. 7-bitnom vrednošću ASCII koda. Pošto su karakteri kodirani celobrojnim vrednostima (leksikografsko uređenje ), moguće je sortiranje karaktera reči i linija. • Promenljive i konstante tipa char učestvuju u izrazima svojom kodnom vrednošću koja se tretira kao celobrojna vrednost. Promenljiva car sadrži karakter “a” . Sukcesivnim inkrementiranjem promenljive kar dobijaju se karakteri “b” i “c”, program example No 7
Example No 7 • main() • { • char car = ‘a‘; • print(“karakter je %c\n”,car); • print(“karakter je %c\n”,car+1); • print(“karakter je %c\n”,car+2); • print(“ Kodna vrednost je %d\n”,car+3); • } • Izlaz programa • Karakter je a • Karakter je b • Karakter je c • Kodna vrednost je 100
main() • { • char car = ‘A‘; • printf(“/ %c / %d/ %o/ %x\n”,c,c.c,c); • } • Izvrsavanjem programa dobija se: • /A/65//101/41 • 65- ASCII dekadna vrednost • 101- ASCII oktalna vrednost • 41- ASCII heksadekadna vrednost
Operacije, izrazi i operatori • Operaciju predstavlja simbol koji označava određenu akciju nad određenim podatkom koji se naziva operand. • Izraz se sastoji od jednog ili više operanada i simbola operacija. • Operacija operira nad operandom • Aritmetičke operacije • * - množenje • / - deljenje • % - izdvaja ostatak pri deljenju celih brojeva • + - sabiranje • - - oduzimanje
Operacije, izrazi i operatori • Operacije poređenja • > - veće • >= - veće ili jednako • < - manje • <= - manje ili jednako • = = - jednako • != - različito • Logičke operacije • ! - negacija • &&, - konjukcija • II - disjunkcija
Operacije, izrazi i operatori • Operacije dodeljivanja • < promenljiva> = <izraz>, izvršava se tako što se vrednost desnog operanda, (izraz) dodeljuje levom operandu ( promenljiva), koji predstavlja vrednost izraza sa operacijom dodeljivanja. • Operator • X = Y = Z = 1; • Se izvršava tako što izraz Z = 1 dobije vrednost 1 koja je dodeljena promenljivoj Z, izračunata vrednost izraza 1 se dodeljuje promenljivoj y i postaje vrednost izraza y = 1, i na kraju se vrednost izraza dodeljuje promenljivoj x
Operacije, izrazi i operatori • Pojam operatora • Operatori su sastavni delovi programa koji predstavljaju potpunu instrukciju računaru. • X = 2 je samo izraz, dok je X = 2; operator. • Operacije uvećavanja i umanjivanja. • Izraz ++ x uvećava vrednost promenljive x za 1, a izraz - - x umanjuje vrednost promenljive x za 1. • Prefiksni oblik++ x, promenljiva se najpre uvećava pa tek onda koristi u izrazu • Postfiksni oblik x++ promenljiva se najpre koristi u izrazu pa tek onda uvećava.
Grananje u programu • Uslovni operator se pojavljuje u sledećim oblicima: • If (izraz) operator1 • If (izraz) operator1 else operator2 • Ako su operator1 i operator2 prosti operatori • If (izraz) Operator1 • Else operator2
Ako su operator1 i operator2 složeni operatori • If (izraz) { Operator11 • Operator12 • Operator1k • } • Else • { Operator21 Operator22 Operator2K }
Operator višestrukog izbora SWITCH • Omogućava grananje u programu izborom jednog između više operatora • switch (izraz) { Case konstanta1: Operator1 Break; Case konstanta2: Operator2 Break; Case konstantan: Operator n Break; Default : Operator0 Break; }
Operator višestrukog izbora SWITCH • Iza službene reči switch navodi se izraz (selektor) čija je vrednost celobrojna, ili znakovna koja se automatski konvertuje u celobrojnu. • Operatorom višestrukog grananja izvršava se ona grupa operatora ispred koje se nalazi konstanta koja je jednaka vrednosti selektora. Ako nije jednaka nijednoj od konstanti izvršava se grupa operatora koja se nalazi iza default alternative. • Operator switch na osnovu brojnih ocena 5,4,3,2,1 ispisuje ocene odličan, vrlo dobar, dobar, dovoljan, nedovoljan u example No 8
Example No 8 • switch (ocena) { Case 5: printf (“odličan\n”)čBreak; Case 4: printf (“vrlo dobar\n”)čBreak; Case 3: printf (“dobar\n”)čBreak; Case 2: printf (“dovoljan\n”)čBreak; Case 1: printf (“nedovoljan\n”)čBreak; Default: printf (“nekorektna ocena\n”); } • Break operator se koristi u switch operatoru da bi se obezbedio izlaz neposredno iza njega. Ako se iza neke grupe operatora u switch- u ispusti break, tada će se u slučaju izbora te grupe izvršavati sve preostale alternative do pojave break- aili kraja switch.-a.
Organizacija ciklusa • Niz operatora koji se može izvršavati više puta naziva se ciklus. • Telo ciklusa - Niz operatora koji obrazuju ciklus • Izlazni kriterijum – Uslov koji određuje da li će se telo ciklusa ponovo izvršavati. • U zavisnosti od položaja izlaznog kriterijuma u odnosu na telo ciklusa, ciklusi mogu biti sa: • Preduslovom (while), skraćeno varijanta sa (for) • Postuslovom (do while)
Ciklus while • Operator ciklusa sa preduslovom while omogućava organizovanje ciklusa sa nepoznatim brojem ponavljanja koji zavisi od izračunavanja u telu ciklusa. • Opšti oblik operatora while je: • while (izraz) • operator • Ako je vrednost izraza tačno , izvršiće se operator koji čini telo ciklusa. Operator se izvršava dok god izraz ima vrednost tačno. Svaki takav korak naziva se iteracija.
Example No 9 • /* Stepen celog broja*/ • main() • { • int a,n, i = 1,stepen = 1; • print(“ Ucitaj a i n:\n”); • scan(“%d%d”,&a&n); • while (i++<=n) • stepen* = a; • scan(“%d%d”,&a&n); • print(“stepen=%d\n”,stepen); • }
Operator ciklusa for • Operator ciklusa for se koristi kada je unapred poznato koliko puta treba izvršiti telo ciklusa. • For (inicijalizacija; provera_uslova; korekcija) • operator • I predstavlja skraćeni zapis ciklusa whileoblika • Inicijalizacija; • while (provera_uslova) • { • operator • korekcija • } • Ako provera_ uslova daje tačno telo ciklusa se izvrša jedanput. • Iz ciklusa se izlazi kada vrednost izraza za proveru_ uslova postane netačno.
Example No 10 • /* Faktorijel*/ • main() • { • long i,n,fakt; • scan(“%ld”,&n); • for (fakt=1,i= 1; i<=n;fakt*=i, i++); • print(“fakt=%ld\n”,fakt); • } • Realizacija programa • 1 • 1*2 • 1*2*3 • 1*2*3*…*n
Operator ciklusa do - while • Operator ciklusa sa postusloviom do - while ima oblik • do • operator • while (izraz) • Operator koji čini telo ciklusa se izvrčava bar jedanput, pošto se provera uslova vršI na kraju ciklusa. Ako je vrednost izraza “tačno” operator tela ciklusa se ponavlja. I ovaj postupak traje, dok izraz ne dobije vrednost “netačnoćć