520 likes | 780 Views
Programski jezik I (C) Univer z itet Crne Gore, Elektrotehnički fakultet Studije primijenjenog računarstva (SPR), III semestar. Predavači: Prof. dr Gojko Joksimović Prof. dr Radovan Stojanović Asistenti: doc. dr Nikola Žarić mr Ana Zogović. Programski jezik C.
E N D
Programski jezik I (C)Univerzitet Crne Gore, Elektrotehnički fakultetStudije primijenjenog računarstva (SPR), III semestar Predavači: Prof. dr Gojko Joksimović Prof. dr Radovan Stojanović Asistenti: doc. dr Nikola Žarić mr Ana Zogović
Programski jezik C • Prije početka pogledati ECTS katalog koji opisuje kurs (na sajtu www.etf.ac.me). • • Literatura – M. Ostojić, B. Marković, B. Biberdžić: "Programski jezik C -skripta". – Dražen Brđanin, Uvod u jezik C++, prezentacije, ETFBanjaluka. –Uvod u jezik C, prezentacije, Matematički fakultet BG. – Programski jezik C, Brian Kernighan i Dennis Ritchie, CET,Beograd, 2003. – Programski jezik C - rešenja zadataka, Clovis Tondo, ScottGimpel, CET, Beograd, 2004. – Programski jezik C sa rešenim zadacima, Laslo Kraus,Akademska misao, Beograd, 2004. – Resursi na Internetu
Uvod • Podjela programskih jezika. • Programski jezik C, uopšte. • Postupak pisanja programa uWindowsu. • Pojam algoritma. • Opšta struktura C programa. • Jednostavni primjeri programa.
Podjela programskih jezika • Mašinski jezik—izvršni program, instrukcije ubinarnom kodu. • Asembler —izvorni program (tekst kojeg trebaprevesti), jezik prilagodjen arhitekturi računara (tekstje direktna zamjena za binarne instrukcije i lako seprevodi u njih). • Viši programski jezici—izvorni program, program jetekst sastavljen od naredbi, jezik je prilagodenposebnim zadacima za koje je namijenjen.Najpoznatiji viši programski jezici su: C, FORTRAN, Pascal, C++, Java ...
Mašinski kod i asembler • Primjer mašinskih instrukcija i Assemblera (8086) • Primjer sa prastarog Intelovog procesora 8086 za IBM XT. (Toje 16 bitni procesor, instrukcije se pišu byte po byte). • Mašinski jezikEkvivalentan asemblerski kod 00011110 PUSH DS 00101011 SUB AX, AX 11000000 10111000 PUSH AX 10111000 MOV AX, MYDATA 00000001 10001110 11011000 MOV DS,AX
Mašinski kod i asembler • Osnovne mane takvih programa: Instrukcije su strogo odredjene arhitekturom računara. Posljedica: programi se ne mogu prenijeti na računaredrugačijeg tipa. Pisanje programa je izrazito neefikasno. Instrukcije su vrlo elementarne, prilagodene mašini, a ne poslu kojeg treba napraviti. Rezultat su dugački, nepregledni programi. Podložni greškama, koje se teško otkrivaju. • Asembler je samo “malo humaniji” od mašinskog jezika (zamjena binarnog koda tzv. mnemoničkim kodom— tekstualnim imenima instrukcija).
Mašinski kod i asembler • Stvarna svrha programiranja u asembleru jesamo za specifične zadatke vezane zaupravljanje hardwareom. Programer ima punukontrolu nad svim komponentama računara. • Za sve ostale, ljudima “bliže” poslove koristese tzv. viši programski jezici. • “Viši” = bliži čovjeku, a ne mašini
Viši programski jezici • Postoji veliki broj ovih jezika od kojih su najpoznatiji: C, FORTRAN, Pascal, C++, Java, . . . • Osnovne prednosti nad asemblerom: – Nezavisnost o arhitekturi računara (prenosivost). – Prilagodjenost pojedinim specifičnim zadacima(naredbe prilagodjene tipovimapodataka i operacijama nad njima). • Složenije naredbe, bliže ljudskom načinu mišljenja. • Rezultat: veća efikasnost programiranja (brže ijednostavnije obavljanje posla).
Viši programski jezici • Program u takvom jeziku prvo treba prevestiiz izvornog koda (source code) u izvršni kod (executable code). • Ovaj postupak, obično, ide u više koraka. • Posao prevodenja radi poseban program poznat kao kompajler (compiler). • Prenosivost—program se može (barem u principu) izvršitina bilo kom računaru koji ima kompajler za odredjenijezik. • Prevodenje je bitno složenije nego kod asemblera. Zato višijezici imaju svoja stroga pravila – sintaksu tj. gramatiku
Programski jezik C • C je viši programski jezik opšte namjene. • Autor: Dennis Ritchie (Bell Telephone Laboratories). • Razvijen sedamdestih godina prošlog vijeka. • Osnovna svrha:Pisanje jezgre operacionog sistema Unix. • Ideja:maksimalna portabilnost Unixa na razne vrsteračunara. • Zato je jezgro napisano u posebno smišljenom višemjeziku, a ne u mašinskom
Programski jezik C • C je jezik relativno “niskog nivoa”, ne jako daleko od same arhitekture računara (“high level assembler”). • To znači da C operiše s istim objektima kao i većinaračunara: znakovima, brojevima, adresama (pointerima ilipokazivačima). • C podržava sve operacije na tim podacima koje supodržane arhitekturom računara: – aritmetičke, logičke, relacijske (uporedbe), ali i – posebne operacije nad bitovima, poput pomaka (“shift”).
Programski jezik C • S druge strane, kao viši jezik, C ima • grupisanje naredbi, složene naredbe za kontrolu toka(petlje, uslovne naredbe), • izvedene ili složene tipove podataka, poput polja,struktura, datoteka, • mogućnost razbijanja programa u manje cjeline kojemogu biti smještene u raznim datotekama, • manje programske cjeline (potprograme) —u C-u suto funkcije, – koje mogu vratiti vrijednosti svih osnovnih tipova i – nekih složenih tipova (strukture), – i mogu se rekurzivno pozivati.
Programski jezik C • Na kraju, C ima standardizovanu programskubibliotekukoja sadrži sve mašinski zavisne elementejezika. Sastoji se iz dva bitna dijela. – Niza funkcija za interakciju s okolinom(operativnim sistemom), poput • čitanja i pisanja datoteka, • formatizovani ulaz i izlaz, • alokaciju memorije, • operacije sa znakovima i stringovima, itd. – Skup standardnih zaglavlja (tzv. “headers”) kojiuniformizuju pristupdeklaraciji funkcija i tipova podataka.
Programski jezik C • ANSI–C Standard jezika je opisan u knjizi Brian W. Kernighan i Dennis M. Ritchie, The CProgramming Language (second edition), PrenticeHall, Upper Saddle River, New Jersey, 1988. • Implementiran je u svim modernim C–kompajlerima. • ANSI standard usvojila je i Medunarodna organizacijaza standarde (ISO) 1990. godine (tzv. ISO C). • Ovaj ANSI/ISO standard skraćeno zovemo C90 standard. • Godine 1999. ISO je prihvatio novi C standard, kojiuvodi manje dopune u C90 standard. Skraćeni naziv:C99 standard.
Postupak pisanja programa • Prije svega potrebno je znati šta se programom želi postići, dakle, potreban je precizan opis problema iz koga će proisteći efikasan algoritam • Konstruisati efikasan algoritam znači dati precizan skup uputstava kako doći do rešenja zadatog problema • Algoritmi se mogu opisivati: prirodnim jezikom pseudo jezikom, dijagramom toka
Algoritam opisan riječima 1 • Napisati algoritam za sabiranje dva broja Algoritam Sabiranje ulaz: x,y izlaz: zbir brojeva x,y početak ulaz x,y; zbir = x + y; izlaz zbir; kraj
Algoritam opisan riječima 2 • Napisati algoritam za razmjenu dva broja. Algoritam razmjena ulaz: dva broja izlaz: razmijenjena dva broja početak ulaz x,y; pom=x; /* pom je pomocna promenljiva */ x=y; y=pom; izlaz x,y; kraj
Algoritam opisan dijagramom toka 1 Opišite dijagram toka za algoritam koji odreduje sumu S, aritmetičkusredinu A i proizvod P brojeva X, Y i Z.
Algoritam opisan dijagramom toka 2 Opišite dijagram toka za algoritam koji dva zadana broja ispisuje u opadajućem poretku.
Postupak pisanja programa u C-u • Postupak “programiranja” u programskom jeziku Cpod raznim OS (operativnim sistemima) vrlo je sličan. • Bitni koraci: • Prvo se tekst programa, tj. izvorni kod, upiše u nekutekstualnu datoteku (npr. notepad). Standardneekstenzije su .c ili .h, za zaglavlja. Na primjer, udatoteku prvi.c. • Zatim se poziva program kompajler (C compiler) kojiprevodi napisani program u izvršni kod. Kao rezultatdobija se izvršnifajl (standardna ekstenzijaje .exe naWindows-u). • Pozivom togfajla program se izvršava.
Postupak pisanja programa u C-u • Integrisano razvojno okruženje koje omogućavaobavljanje svih poslova kroz isti razvojni alat (program). • Primjeri integrisanih razvojnih okruženja: – MS Visual Studio, baziran naMicrosoftovom C compileru ipripadnoj razvojnoj podršci (biblioteka, linker). – Borland Builder, takmac MS Visual studiju.Besplatan za studente (u osnovnoj varijanti). Može raditi i saIntelovim compilerom. • Mana: to je ogroman paket (čak i u osnovnoj verziji). • Alternativa: • DevC++ okruženje.
Postupak pisanja programa u C-u • DevC++ okruženje zaWindows Prednosti DevC++ okruženja: – besplatna za sve (link je na webu), – mala i vrlo jednostavna za rad. • Mane: – trenutna verzija je dosta stara • Srećom, za osnovno programiranje u C-u, ove mane nijesu bitne
Postupak pisanja programa u C-u • U našim salama je instaliran Borland Builder C++ compiler, Ver. 6.0 • Pročitati upustvo za instaliranje i startovanje ovog programa.
Prvi program • Izvorni program (source code) u C-u jeobičan tekstualni fajl, kreiran u bilo komeditoru teksta (npr. Notepad). • Program u C-u sastoji se iz definicijafunkcija. • Funkcija koja mora da postoji u svakomprogramu je main(). Izvršavanjeprograma se svodi na izvršavanje tijelaove funkcije. • Tijelo funkcijese navodi iza zaglavljafunkcije main(), između vitičastihzagrada { i }.
Prvi program • U tijelu funkcije se na početku navodedeklaracije promjenljivih, nakon čegaslijedi proizvoljan niz naredbi. main() /* zaglavlje funkcije main */ { /* ovde počinje tijelo */ /* deklaracije promjenljivih */ /* naredbe */ } /* kraj tijela */
Prvi program • Napisati program koji na standardnomizlazu štampa ”Dobar dan!”. #include <stdio.h> main() { printf(“Dobar dan!\n"); } • Izlaz iz programa: • Dobar dan!
Drugi program • Uvođenje promjenljivih u program #include <stdio.h> main() { /* Deklaracija više promjenljivih istogtipa */ int rez,pom1,pom2;pom1=20;pom2=15; rez=pom1-pom2; /* Ispisivanje rezultata */ printf("Rezultat je %d - %d =%d\n", pom1, pom2, rez); } • Izlaz iz programa: • Rezultat je 20-15=5
Leksičke konvencije • U upotrebi su velika i mala slova, cifre ispecijalni simboli iz ASCII skupa • Programski jezik C razlikuje velika i malaslova! • Komentari se navode između sekvenci /*i */. Mogu se prostirati u više linija. Nemogu biti ugniježđeni. • int x, X;/*Dvije različitepromjenljive!!!*/
Identifikatori • Identifikatori se sastoje iz slova, cifarai znaka _ pri čemu prvi karakter nijecifra. • Koriste se za imena promjenljivih, tipova,funkcija, itd.
Ključne riječi • Ključne riječi su rezervisane riječi kojeimaju posebnu ulogu i ne mogu sekoristiti kao identifikatori. • Ključne reči se koriste za: definisanje jezičkih konstrukcija (if, while,for), imena tipova (int, float, char), itd.
Osnovni tipovi podataka u C-u • Tipovi iz prethodne tabele se mogu modifikovatiključnim riječima short, long, signed iunsigned. • Na int se mogu primeniti short i long(u tom slučaju ključna reč int nijeobavezna). • Na double se može primeniti long. • Na float se ne može primeniti nijedanmodifikator. • Modifikatori unsigned i signed semogu primeniti na cjelobrojne tipove(char, int, short i long). • Veličine tipova su platformski zavisne. • Obavezna relacija za celobrojne tipove:short ≤ int ≤ long.
Konstante • Karakterske konstante se navodeizmeđu jednostrukih navodnika.One sutipa char. • Cjelobrojne konstante mogu bitidekadne, oktalne i heksadekadne. Sveove konstante su tipa int. • Oktalne počinju nulom • Heksadekadne počinju sekvencom 0x ili0X. • Sufiksi u ili U daju neoznačenukonstantu. • Sufiksi l ili L daju konstantu tipa long. • Realne konstante mogu biti sa ili bezeksponencijalnog dijela. One su doubletipa. • Realne konstante sa sufiksom f ili F sutipa float. • Realne konstante sa sufiksom l ili L sutipa long double.
Promjenljive, deklaracija i inicijalizacija • Sve promjenljive u C-u se moraju deklarisati.Time se za promjenljivu u memorijirezerviše potreban prostor, a ostatakprograma postaje svestan postojanjapromjenljive i njenog tipa. • Deklaracija se sastoji iz imena tipa za kojimslede imena promenljivih (identifikatori)koje se deklarišu, i koja su razdvojenezarezima. • Deklaracija se završava simbolom ';'. • Svako ime promjenljive u deklaraciji možebiti praćeno inicijalizatorom koji se sastoji izkaraktera '=' za kojim slijedi inicijalnavrijednost.
Promjenljive, deklaracija i inicijalizacija • Dakle, da bi se promjenljiva moglaupotrebljavati u programu ona se mora napočetku programa deklarisati! • Prilikom deklaracije može se izvršiti ipočetna inicijalizacija. • int broj; /* Deklaracija cijelog broja */ • int vrijednost=5; /* Deklaracija iinicijalizacija cijelog broja */ • Postoji i kvalifikator const koji može bitidodijeljen deklaraciji bilo kojepromenljive dabi označio da se ona neće mijenjati • const pi=3.14156;
Drugi program #include <stdio.h> main() { /* Deklaracija više promjenljivih istogtipa */ int rez,pom1,pom2;pom1=20;pom2=15; rez=pom1-pom2; /* Ispisivanje rezultata */ printf("Rezultat je %d - %d =%d\n", pom1, pom2, rez); } • Izlaz iz programa: • Rezultat je 20-15=5
Funkcije ulaza i izlaza • Ulaz i izlaz ostvaruju se posredstvomfunkcija koje su definisane ustandardnoj biblioteci stdio.h. (standard input output) • Ove funkcije su obične C funkcije, kojese služe direktno servisima operativnogsistema prilikom svog rada.
Funkcije ulaza i izlaza • Za korišćenje ovih funkcija neophodnoje uključiti zaglavlje stdio.hnavođenjem tzv. pretprocesorske direktive#include<stdio.h> prije definicijefunkcije main(). • Ovo zaglavlje je obiman tekstualni fajl ukom su navedene deklaracije funkcijaulaza i izlaza. • Direktiva #include na mjestu pozivauključuje kompletan sadržaj fajla koji jenaveden, čime funkcije i podacideklarisani u njemu postaju dostupnifunkciji main().
Funkcija PRINTF() • Ovom funkcijom se ispisuje porukazadata format stringom na standardniizlaz (monitor). • Eventualni konverzioni specifikatori sezamjenjuju vrijednostima izraza koji u tomslučaju slijede nakon format stringa, kaoargumenti funkcije printf(), razdvojenizarezima i u onom poretku u kome suodgovarajući konverzioni specifikatorinavedeni. • Tipovi izraza moraju biti u skladu satipovima koje određuju konverzionispecifikatori.
Funkcija PRINTF() • Funkcija printf je bibliotečka funkcijakoja prikazuje izlazne podatke uodređenom formatu. • Primjer korišćenja funkcije printf je: printf("%d\t%d\n", broj1, broj2); • Prvi argument ove funkcije je uvekizmeđu” ” i određuje format u kome će sepodaci ispisati na izlaz. Ova funkcijavraća kao vrijednosti broj upisanihznakova na izlazu.
Funkcija PRINTF() printf("%d\t%d\n", broj1, broj2); • Sekvenca \n u okviru prvog argumentafunkcije printf je C oznaka za prelazak unovi red, \t je oznaka za tabulator, dok%d označava da će na tom mestu bitiispisana celobrojna vrednost argumentakoji je sa njim u paru. Svaka %konstrukcija je u paru sa odgovarajućimargumentom koji sledi. • %% koristi se za ispis znaka % • \\ koristi se za ispis znaka \ • \” koristi se za ispis znaka ”
Funkcija PRINTF() • Postoji mogućnost da se precizira i širina polja u kome će se ispisati odgovarajuće vrijednosti. • Na primjer, koristi se %3cza štampanje karaktera na tri pozicije poravnato zdesna. • Koristi se %3dza štampanje broja na tri pozicije ili %6dza štampanje broja na 6 pozicija.
Funkcija PRINTF() • %f — štampaj kao realan broj • %6f — štampaj kao realan broj širok najviše 6 znakova • %.2f — štampaj kao realan broj sa dvije decimale • %6.2f — štampaj kao realan broj širok najviše 6 znakova pri čemu su 2 iza decimalne tačke. • Da bi se izvršilo lijevo poravnanje, između % i odgovarajućeg karaktera dodaje se znak -.
Funkcija PRINTF() #include <stdio.h> main() { printf("Slova:\n%3c\n%5c\n", 'z' , 'Z'); } • Izlaz iz programa: Slova: z Z
Funkcija SCANF() • Ovom funkcijom se učitavaju podaci sa standardnog ulaza (tastature). • Prvi argument je format string u kome se navode konverzioni specifikatori kojima se definiše tip podatka koji se očekuje. • Nakon format stringa slijede adrese promjenljivih, razdvojene zarezima, u koje treba upisati vrijednosti učitane sa ulaza. Adresa promjenljive anavodi se kao &a.
Funkcija SCANF() • Adrese se navode u onom poretku u kom su odgovarajući konverzioni specifikatori navedeni u format stringu. • Tipovi promenljivih moraju biti u skladu sa tipovima koje određuju konverzioni specifikatori