1 / 52

Predavači: Prof. dr Gojko Joksimović Prof. dr Radovan Stojanović Asistenti: doc. dr Nikola Žarić

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.

gus
Download Presentation

Predavači: Prof. dr Gojko Joksimović Prof. dr Radovan Stojanović Asistenti: doc. dr Nikola Žarić

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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ć

  2. 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

  3. Uvod • Podjela programskih jezika. • Programski jezik C, uopšte. • Postupak pisanja programa uWindowsu. • Pojam algoritma. • Opšta struktura C programa. • Jednostavni primjeri programa.

  4. 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 ...

  5. 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

  6. 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).

  7. 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

  8. 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).

  9. 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

  10. 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

  11. 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”).

  12. 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.

  13. 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.

  14. 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.

  15. Programski jezik C

  16. 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

  17. 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

  18. 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

  19. 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.

  20. Algoritam opisan dijagramom toka 2 Opišite dijagram toka za algoritam koji dva zadana broja ispisuje u opadajućem poretku.

  21. 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.

  22. Postupak pisanja programa u C-u

  23. 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.

  24. 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

  25. 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.

  26. 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 }.

  27. 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 */

  28. Prvi program • Napisati program koji na standardnomizlazu štampa ”Dobar dan!”. #include <stdio.h> main() { printf(“Dobar dan!\n"); } • Izlaz iz programa: • Dobar dan!

  29. 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

  30. 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!!!*/

  31. Identifikatori • Identifikatori se sastoje iz slova, cifarai znaka _ pri čemu prvi karakter nijecifra. • Koriste se za imena promjenljivih, tipova,funkcija, itd.

  32. 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.

  33. Ključne riječi

  34. Osnovni tipovi podataka u C-u

  35. 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.

  36. 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.

  37. 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.

  38. 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;

  39. 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

  40. 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.

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

  42. 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.

  43. Konverzioni specifikatori

  44. 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.

  45. 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 ”

  46. 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.

  47. 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 -.

  48. Funkcija PRINTF() #include <stdio.h> main() { printf("Slova:\n%3c\n%5c\n", 'z' , 'Z'); } • Izlaz iz programa: Slova: z Z

  49. 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.

  50. 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

More Related