brzi tecaj c-aˇ - phy.pmf.unizg.hrtniksic/fi/materijali/old/lec1.pdf · brzi tecaj c-aˇ primjer...

37
Brzi te ˇ caj C-a Primjer ispisuje re ˇ cenicu "Dobro dosli na brzi tecaj C-a" na ekranu Programiranje se sastoji od nekoliko koraka - pisanje programa u tekstualnom editoru (joe, pico, nedit...) - prevo ¯ denje programa u strojni jezik - izvršavanje programa Osnove programiranja – p. 1/27

Upload: buikiet

Post on 10-Feb-2018

229 views

Category:

Documents


3 download

TRANSCRIPT

Brzi tecaj C-a

Primjer ispisuje recenicu "Dobro dosli na brzi tecaj C-a" naekranu

Programiranje se sastoji od nekoliko koraka

- pisanje programa u tekstualnom editoru (joe, pico,nedit...)

- prevodenje programa u strojni jezik

- izvršavanje programa

Osnove programiranja – p. 1/27

- program napisan u editoru treba snimiti u datoteku sekstenzijom .c

- alat koji program prevodi iz višeg programskog jezika ustrojni jezik zovemo prevodilac ili compiler

- postoji više razlicitih C compilera, u ovom kolegiju sekoristi GNU compiler

- osnovna naredba za prevodenje programa glasi

cc ime_programa.c

- ako je program ispravno napisan, compiler kreiraizvršnu datoteku pod imenom a.out

- program pokrecemo naredbom

./a.out

Osnove programiranja – p. 2/27

- ako želimo da izvršna verzija programa ima nekoodredeno ime, koristimo opciju -o pri prevodenju

cc program.c -o program

- prevodilac bi u ovom slucju morao kreirati izvršnudatoteku pod imenom program koju pokrecemo s

./program

- gcc compiler ima mnoštvo dodatnih opcija

- najbolji izvor informacija o compileru je manual kojipozivamo naredbom

man cc

Osnove programiranja – p. 3/27

Konstante, varijable i tipovi podataka

- varijable: "spremnici" u memoriji racunala → u njihsmještamo podatke koje koristimo u programu

- deklaracijom varijabli odredujemo tip

- inicijalizacijom varijabli pridružujemo odredenuvrijednost pomocu operatora pridruživanja (x=2)

- sve varijable u C-u moraju biti deklarirane

- razlika izmedu konstante i varijable: konstanti nemožemo mijenjati vrijednost nakon inicijalizacije

- osnovni tipovi podataka u C-u: char, int, float, double

Osnove programiranja – p. 4/27

- pravila za imenovanje varijabli i konstanti

Imena varijabli i konstanti... Primjer

ne mogu pocinjati brojem 2i

mogu sadržavati broj h2o

ne mogu sadržavati aritmeticke operatore g+c

ne mogu sadržavati interpunkcije #@X!!

mogu sadržavati ili pocinjati s _ mali_broj

ne mogu biti kljucna rijec C-a else

ne mogu sadržavati razmak mali broj

mogu sadržavati mala i velika slova XNaKvadrat

Osnove programiranja – p. 5/27

- prvi nacin definiranja konstante je koristeci kljucnu rijecconst

const int radijus = 5;

- vrijednost konstante više ne možemo mijenjati uprogramu

- drugi nacin definiranja konstante je koristeci #define

#define MAX 10

- kao i #include, naredba #define mora biti smještenaprije funkcije main()

- uobicajeno je (ali ne i obavezno) konstante definiranepomoc #define imenovati velikim slovima

Osnove programiranja – p. 6/27

Tip podataka char

- u varijablu tipa char možemo spremiti jedan znak izskupa od 256 znakova

- svaki znak na tipkovnici ima pridružen jedinstveninumericki kod → ASCII (American Standard Code forInformation Interchange)

- deklariranjem varijable rezerviramo prostor u memorijiracunala, ali joj još ne dajemo neku odredenu vrijednost

char variable_name;

- možemo deklarirati i više varijabli istovremeno

char a,b,c;

Osnove programiranja – p. 7/27

- inicijalizacijom varijabli prvi put pridjeljujemo nekuvrijednost

variable_name = ’a’;

- uocimo korištenje jednostrukih navodnika

- dvostruki navodnici su rezervirani za stringove kojecemo obraditi kasnije

- deklaraciju i inicijalizaciju možemo napraviti u istojnaredbi

char slovo = ’a’;

- varijabli tipa char možemo pridružiti i cijeli broj koji tadaoznacava ASCII kod varijable

Osnove programiranja – p. 8/27

Tip podataka int

- varijable tipa int predstavljaju cijele brojeve

- pridruživanje decimalnog broja varijabli tipa int rezultiraignoriranjem dijela broja iza decimalne tocke → varijablipridružujemo prvi cijeli broj koji je manji od danog broja

int b = 4.3; /* b = 4*/int b = 4.8; /* b = 4*/

- varijabli tipa int možemo pridružiti i znak → varijablaprima ASCII kod doticnog znaka

int b = ’A’; /*b = 65*/

- varijablu tipa int zauzima možemo deklarirati kao short(zauzima 2 byte-a u memoriji) i long (zauzima 4 byte-au memoriji)

Osnove programiranja – p. 9/27

- varijablu tipa int možemo deklarirati i kao unsigned(prima samo pozitivne vrijednosti) ili signed (prima ipozitivne i negativne vrijednosti)

- signed varijable → jedan bit je rezerviran za predznakbroja → unisgned varijabla može primiti veci rasponcijelih brojeva

- za vecinu compilera deklaracija

int a;

je ekvivalentna deklaraciji

signed long int a;

- pokušaji spremanja prevelikih cijelih brojeva u varijablutipa int rezultiraju greškama pri izvršenju programa

Osnove programiranja – p. 10/27

Raspon vrijednosti int varijabli:

Tip Min. Maks.

signed short int -32768 +32767

(215) (215 − 1)

unsigned short int 0 65535

(216 − 1)

signed long int -2147483648 2147483647

(231) (231 − 1 )

unsigned long int 0 4294967295

(232 − 1)

Osnove programiranja – p. 11/27

Tipovi podataka float i double

- koristimo ih za spremanje decimalnih brojeva

- kljucnom rijeci float deklariramo varijablu tipa float(zauzima 4 byte-a u memoriji)

float a;float b = 4.53;float c = 1.2e3;

- u zadnjem redu koristimo "scientific notation"

1.2e3 = 1.2 × 103

= 1200

- ovakav zapis je koristan kod jako velikih ili jako malihbrojeva

Osnove programiranja – p. 12/27

- kljucnom rijeci double deklariramo varijablu tipa double(zauzima 8 byte-ova u memoriji)

double a;double b = 8.21;double c = 1.e-15;

- raspon brojeva koje varijable tipa float i double moguprimiti, kao i greške zaokruživanja, ovise o compileru

- float varijable ≈ 10−38 − 10

38

- double varijable ≈ 10−308 − 10

308

- broj tocnih decimalnih mjesta je osjetno manji

Osnove programiranja – p. 13/27

sizeof operator

- koristimo ga da bi saznali koliko byte-ova u memorijizauzima varijable nekog odredenog tipa

- sljedeca naredba varijabli a pridružuje vrijednost 1 jerchar varijable zauzimaju 1 byte u memoriji racunala

int a = sizeof(char);

- kolicina memorije koju zauzimaju varijable tipa char,float i double

Tip podataka Kolicina memorije

char 1float 4

double 8

Osnove programiranja – p. 14/27

- kolicina memorije koju zauzimaju varijable tipa int

Tip podataka Kolicina memorije

signed short int 2unsigned short int 2

signed long int 4unsigned long int 4

- uocimo da upotreba signed i unsigned ne utjece nakolicinu memorije

- korištenjem kljucne rijeci unsigned memorijurezerviranu za predznak koristimo za sam broj, aliukupna kolicina memorije je nepromijenjena

Osnove programiranja – p. 15/27

Ispis podataka

- najjednostavnija metoda: printf

- da bi mogli koristiti naredbu printf moramo ukljucitiStandard Input and Output header file prije mainfunkcije

#include <stdio.h>

- primjer: ispis recenice "Dobro dosli na brzi tecaj C-a!"

printf("Dobro dosli na brzi tecaj C-a!");

- tekst koji želimo ispisati (string) mora biti unutardvostrukog navodnika

Osnove programiranja – p. 16/27

- kada želimo ispisati vrijednost neke varijable, unutarstringa moramo ukljuciti format varijable

- neki od cesto korištenih formata

format tip%d ili %i int

%c char%f float%lf double

- primjer ispisa varijable x tipa int

printf("Vrijednost varijable x: %d",x);

Osnove programiranja – p. 17/27

- istom naredbom možemo ispisati i više varijabli

- za svaku varijablu moramo ukljuciti format

- primjer ispisa varijable a tipa int, varijable b tipa float ivarijable c tipa double

printf("a=%d, b=%f, c=%lf",a,b,c);

- da bi ispis bio citljiviji ukljucujemo \n na kraju stringakoji uzrokuje prelazak u novi red

printf("a=%d, b=%f, c=%lf \n",a,b,c);

- \n spada u tzv. escape sequences

Osnove programiranja – p. 18/27

Cesto korištene escape sequence:

Escape seq. Opis

\n Novi redak. Postavlja kursor na pocetak sljedeceg retka

\t Vodoravni tab. Pomice kursor do sljedeceg tab stopa

\a Upozorenje. Sistemsko zvono.

\\ Backslash. Ispisuje kosu crtu u stringu.

\" Navodnik. Umece dvostruki navodnik u string

Osnove programiranja – p. 19/27

Unos podataka

- najjednostavnija metoda: scanf

- da bi mogli koristiti naredbu scanf moramo ukljucitiStandard Input and Output header file prije mainfunkcije

- primjer naredbe koja traži unos vrijednosti za varijablu atipa int

scanf("%d", &a);

- kao i u naredbi printf moramo zadati format unutardvostrukih navodnika, u ovom slucaju koristimo %d jerje varijabla tipa int

- ispred varijable u koju spremamo podatak mora stajatiznak & (objašnjenje slijedi kasnije)

Osnove programiranja – p. 20/27

Aritmeti cki operatori

- u C-u postoji 5 aritmetickih operatora

Ime operatora Simbol

množenje *

dijeljenje /

ostatak dijeljenja %

zbrajanje +

oduzimanje -

- množenje i dijeljenje se izvršava prije zbrajanja ioduzimanja

- redosljed izvodenja aritmetickih operacija možemopromijeniti korištenjem zagrada

Osnove programiranja – p. 21/27

- ako u izrazu imamo operande razlicitih tipova, operand"slabijeg" tipa se pretvara u "jaci tip" (implicitnakonverzija)

int → float → double

- rezultat operacije je takoder "jaceg" tipa

- operandi odredenog tipa daju rezultat istog tipa

Primjeri

1. 3+4=7

2. 3.0+4=7.0 (4 → 4.0)

3. 3/4=0 !!!!!

4. 3.0/4=0.75 (4→ 4.0)

Osnove programiranja – p. 22/27

- klasican problem: kako ispravno podijeliti dva cijelabroja?

27/10=2 i ostatak 7

- dijeljenje dva cijela broja koja nisu djeljiva u C-u dajenetocan razultat

27/10=2

- ostatak dijeljenje dobije se upotrebom operatora %

27%10=7

- rješenje problema u C-u je upotreba cast operatora →mijenja tipove varijabli (eksplicitna konverzija)

(float)3=3.0

Osnove programiranja – p. 23/27

- varijabla a tipa int → float: (float)a

- varijabla a tipa float → int: (int)a

- varijabla a tipa int → double: (double)a

- vratimo se na problem dijeljenja

Osnove programiranja – p. 24/27

Aritmeti cki operatori pridruživanja

- u C-u možemo kombinirati aritmeticke operatore soperatorom pridruživanja

Izraz Skracena varijanta

x = x*y x *= y

x = x/y x /= y

x = x%y x %= y

x = x+y x += y

x = x-y x -= y

- izraz s desne strane znaka jednakosti se uvijek izvršavaprvi

x *= y+z; ⇐⇒ x = x*(y+z);

Osnove programiranja – p. 25/27

- slijedi primjer za ilustraciju upotrebe aritmetickihoperatora

- program traži od korisnika troznamenkasti cijeli pozitivnibroj i zatim ispisuje pojedine znamenke broja, kao isumu znamenki

- pogledajmo npr. broj 253

253 = 2*100 + 5*10 +3

- pojedine znamenke1. 3 = 253%102. 5 = 25%10 = (253/10)%103. 2 = 2%10 = (25/10)%10

Osnove programiranja – p. 26/27

Varijable:

- broj: —

- a: —

- b: —

- c: —

- suma:—

Osnove programiranja – p. 27/27

Varijable:

- broj: 253

- a: —

- b: —

- c: —

- suma:—

Osnove programiranja – p. 27/27

Varijable:

- broj: 253

- a: —

- b: —

- c: —

- suma: 0

Osnove programiranja – p. 27/27

Varijable:

- broj: 253

- a: —

- b: —

- c: 3

- suma: 0

Osnove programiranja – p. 27/27

Varijable:

- broj: 253

- a: —

- b: —

- c: 3

- suma: 3

Osnove programiranja – p. 27/27

Varijable:

- broj: 25

- a: —

- b: —

- c: 3

- suma: 3

Osnove programiranja – p. 27/27

Varijable:

- broj: 25

- a: —

- b: 5

- c: 3

- suma: 3

Osnove programiranja – p. 27/27

Varijable:

- broj: 25

- a: —

- b: 5

- c: 3

- suma: 8

Osnove programiranja – p. 27/27

Varijable:

- broj: 2

- a: —

- b: 5

- c: 3

- suma: 8

Osnove programiranja – p. 27/27

Varijable:

- broj: 2

- a: 2

- b: 5

- c: 3

- suma: 8

Osnove programiranja – p. 27/27

Varijable:

- broj: 2

- a: 2

- b: 5

- c: 3

- suma: 10

Osnove programiranja – p. 27/27