You are on page 1of 25

Uvod u programski jezik C

Krunoslav Žubrinić

Ožujak
j 2012.
Creative Commons
† slobodno smijete:
„ dijeliti — umnožavati,
avati distribuirati i javnosti priopćavati djelo
„ remiksirati — prerađivati djelo
† pod slijedećim uvjetima:
„ iimenovanje. j . Morate
M t priznati
i ti i označiti autorstvo
t t dj djela
l na
način kako je specificirao autor ili davatelj licence (ali ne
način koji bi sugerirao da Vi ili Vaše korištenje njegova djela
imate njegovu izravnu podršku).
„ nekomercijalno.. Ovo djelo ne smijete koristiti u
komercijalne svrhe.
„ dijeli pod istim uvjetima.. Ako ovo djelo izmijenite,
preoblikujete
blik j t ili stvarate
t t kkoriste
i t ći ga, preradu
d možete t
distribuirati samo pod licencom koja je ista ili slična ovoj.

U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog
djela. Najbolji način da to učinite je linkom na ovu internetsku stranicu.
Od svakog od gornjih uvjeta moguće je odstupiti, ako dobijete dopuštenje nositelja autorskog prava.
Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava.

Tekst licence preuzet je s http://creativecommons.org/.


Računalni p
program
g
† Program
g jje skup
p naredaba čijim
j
se izvršenjem obavlja željeni posao
„ Naredba je temeljni element programa
„ Algoritam je uputa kako riješiti neki problem
† Obično se sastoji od niza koraka
1. Zagrij vodu
2. Stavi vrećicu čaja
j
3. Ostavi stajati 5 minuta
4. Posluži
† Da li je ovaj algoritam dovoljno detaljan za
računalo
2011/12. Programiranje 2 3
Opis
p algoritma
g
Početak
† Algoritam
g se može opisati
p na
različite načine: Unesi duljinu
stranice kvadrata
„ Blok dijagramom
„ Pseudokodom NE
duljina>0

DA

Početak
opseg=4*duljina
Unesi duljinu stranice kvadrata 
i d lji i k d
Duljina <=0:
Vrati se na unos duljine stranice Prikaži na zaslonu
izračunati opseg
Duljina > 0:
Izračunaj opseg=4*duljina
Kraj
Prikaži izračunati opseg
Kraj2011/12. Programiranje 2 4
Programski
g jjezik C
† Jeda
Jedan od najvažnijih
aj a j p programskih
og a s je
jezika
au
povijesti komercijalne računalne industrije.
„ Jezik vrlo niske razine
razine, programi napisani u
njemu vrlo su bliski načinu rada hardvera.
„ Koristi
K i ti se kkada
d jje klj
ključna
č brzina
b i iizvođenja
đ j i/ili
prenosivost (igre, mobilni uređaji,...)
„ Jezik opće namjene, što znači da se u njemu
može napraviti apsolutno sve
† operacijski sustavi, namjenski programi,
upravljački driveri, igre, aplikacije na mobilnim
t l f i
telefonima,...
2011/12. Uvod u programski jezik C 5
Obiteljsko
j stablo C-
C -a
JavaScript

† Zbogg čegag ime C? C++


C
Objective-C
† Jer je prije njega bio B! Java

† Pod
P d utjecajem
tj j C
C-a razvijeni
ij i
su brojni drugi programski
j i i
jezici
† Mnogig od njihj su naslijedili
j PHP

njegovu sintaksu:
† C++
C++, Java
Java, JavaScript
JavaScript, C#
C#, C#
PHP, Objective-C,…

2011/12. Programiranje 2 6
Izrada izvršnog
gCp
programa
g

C datoteka
d t t k sadržid ži izvorni
i i IIzvornii kkodd se prevodi
di IIzvršni
š i kkodd ((.exe
C programski kod pomoću programa datoteka na MS Win)
razumljiv čovjeku. prevoditelja (compiler). razumljiv je računalu,
Programski kod možete Prevoditelj pronalazi i može se izvesti na
pisati u bilo kojem prijavljuje greške, a kada određenom OSu.
pprogramu
g za unos teksta. jje sve u redu stvara Sam izvršni kod jje niz
izvršni kod. binarnih znamenki.
2011/12. Uvod u programski jezik C 7
Izrada izvršnog
gpprograma:
g Dev
Dev--C++

1 2
3

4
5

2011/12. Uvod u programski jezik C 8


A ako se dogodi
g g
greška?

2011/12. Programiranje 2 9
Opseg
p g kvadrata v01
Početak

#include <stdio.h> Unesi duljinu


stranice kvadrata
a
int main()
{ opseg=4*a

int str; Prikaži na zaslonu


izračunati opseg
printf("Unesite duljinu stranice:");
Kraj
scanf("%d", &str);
( )
printf("Opseg kvadrata je %d.\n", str*4);
system ( pause );
system ("pause");
return 0;
}
2011/12. Uvod u programski jezik C kvadrat.c
C je jako mali jezik i većina funkcionalnosti se
izvodi pomoću vanjskih biblioteka.
Anatomija
j Cp
programa
g #include naredba programu kaže koju
vanjsku biblioteku (header) treba pogledati za
traženu funkcionalnost.
stdio.h sadrži opis funkcija za ulazno-izlazne
operacije
#include <stdio.h>
int main() Main funkcija je početna funkcija programa.

{
Tijelo funkkcije je omeđeeno vitičastim zagradama

Rezervira se memorijski prostor za pohranu 1 cijelog broja.


int str; Ispis
p fiksnogg
teksta na zaslon
printf("Unesite duljinu stranice:");
Unos cijelog broja. Operator & daje adresu
scanf("%d", &str);
( ) na kojoj je varijabla str smještena.

printf("Opseg kvadrata je %d.\n", str*4);
Ispis teksta i izračunate
system ("pause");
system ( pause ); vrijednosti
ij d ti ((množenje
ž j
unesenog cijelog broja sa
return 0; Pauza u izvođenju programa (kako 4) na zaslonu. Broj se
bismo vidjeli rezultat izvođenja). ispisuje na poziciji %d
} Main funkcija vraća cijeli broj pozivatelju (operacijskom sustavu).
0 znači da se program uspješno izvršio.
2011/12. Uvod u programski jezik C 11
Opseg
p gippovršina p
pravokutnika
† Izmijenite
j program
p g za izračun opsega
p g
kvadrata tako da omogući izračun i ispis
površine i opsega pravokutnika Početak

Unesi duljine
stranica
pravokutnika a i b

opseg=2*a+2*b

površina=a*b
Aritmetički operatori koji će vam (možda) trebati:

Zbrajanje     c=a+b Prikaži na zaslonu


Oduzimanje c=a‐b izračunati opseg i
površinu
Množenje c=a*b
Dijeljenje c=a/b
Kraj
Modulo (ostatak dijeljenja) c=a%b
2011/12. Uvod u programski jezik C 12
Duljina
j hipotenuze
p
† Podijelimo
j p
pravokutnik na 2 jjednaka trokuta
† Kako ćemo izračunati duljinu hipotenuze?
c
c = a +b
2 2
a

† Matematičke funkcije
j su definirane u datoteci
zaglavlja math.h #include <math.h>
„ Vađenje korijena: sqrt(broj)
„ Potenciranje: pow(baza, potencija)
„ Apsolutna vrijednost: fabs(broj)…
fabs(broj)
2011/12. Uvod u programski jezik C 13
Duljina
j hipotenuze
p Početak

Unesi duljinu
#include <stdio.h> stranica
pravokutnika a i b
#include <math.h>
int main(){
int a, b; c = a2 + b2
float c;
printf("Unesite duljine stranica a i b: "); Prikaži na zaslonu
izračunatu duljinu
scanf("%d %d", &a, &b); hipotenuze

c = sqrt(a*a + b*b);
Kraj
printf("Duljina hipotenuze je %.2f\n", c);
system ("pause");
return 0;
}
2011/12. Uvod u programski jezik C hipotenuza.c
Anatomija
j Cp
programa
g
math.h sadrži opis matematičkih
funkcija (sqrt, pow, fabs, log, log10,…

Rezultat ne mora biti cijeli broj!


#include <stdio.h> Matematičke funkcijej definirane u math.h
rade s realnim brojevima (float i double)
#include <math.h>
int main(){
int a, b;
sqrt(izraz )
funkcija koja float c;
vadi korijen
izraza unutar printf("Unesite duljine stranica a i b: ");
zagrada
scanf("%d %d", &a, &b);
c = sqrt(a*a + b*b);
printf("Duljina hipotenuze je %.2f\n", c);
system ("pause");
return 0;
%.2f ispisuje realni broj (s decimalama),
} Ne zaboravite točku-zarez na kraju svakog retka
zaokružen na 2 decimale.
Ako napišemo samo %f, ispisati će realni
2011/12. Uvod u programski jezik C broj na defaultnih 6 decimala. 15
Osnovni tipovi
p p
podataka
Tip
pppodatka Uobičajeni
j raspon
p vrijednosti
j

char 0 → 255 ASCII kodovi znakova


int −2.147.483.648 → +2.147.483.647
fl t
float 1×10
1 10−37
37 → 1
1×10
1037
double 1×10−308 → 1×10308

Cijeli brojevi u intervalu od cca Sve trenutno


S t t poznate t fizičke
fi ičk veličine
liči iizražene
ž
minus do plus dvije milijarde. u metrima:
Npr.
p brojj stanovnika neke • od promjera neutrona (2*10-23)
države (ali ne i čitavog svijeta!) • do promjera vidljivog svemira (1*1026)

Ako trebamo iskazati brojeve


2011/12.
od 10-37 ili2veće od 1037
manjeProgramiranje 16
Kvadratna jjednadžba v0.1
† Kvadratna jednadžba je izraz Početak

ax 2 + bx + c = 0; a ≠ 0
Unesi koeficijente
jednadžbe:
jed ad be a, b i c

† Za slučaj kada je diskriminanta


(izraz b2‐4ac) veća od 0 ima 2
− b − b 2 − 4ac
rješenja: x1 i x2 x1 =
2a
− b + b 2 − 4ac
x2 =
† Napišite C program koji će 2a
izračunati i ispisati rješenja
kvadratne jjednadžbe za Prikaži na zaslonu

navedeni slučaj izračunate x1 i x2

Kraj

2011/12. Programiranje 2 17
Kvadratna jjednadžba
† Ako netko unese nulu na mjesto prvog
koeficijenta to više nije kvadratna jednadžba
† Naš program se za takav slučaj ponaša drugačije
† Koristimo programsku strukturu grananje
Ako je izraz u zagradama iza if istinit (bilo koji izraz koji
može biti istina ili laž), izvršava se ovaj blok instrukcija. PAZI!
… a==00 uspoređuje
đ j vrijednost
ij d t a s nulom
l
if (a == 0) { a=0 pridružuje nulu varijabli a

// riješi linearnu jednadžbu
return 1;
Osnovni operatori koje se mogu 
} koristiti kod if instrukcije
… inače se izvršava
else
l { bl k iinstrukcija
blok t k ij iiza else
l a<0 da li je a
d li j manje
j od 0 d
// riješi kvadratnu jednadžbu a>0 da li je a veće od 0
a<=0 da li je a manje ili jednako 0
return 0
a>=0 da li je a veće ili jednako 0
} a==0 da li je a jednako 0
2011/12. Uvod u programski jezik C 18
a!=0 da li je a različito od 0
Što ako imamo više uvjeta?
j

‰ Unose se 3 cijela
broja
broja.
if ‰ Koji od njih je
medijan (središnji
else if po veličini)?

else

2011/12. Programiranje 2 19
Što ako imamo više uvjeta?
j
† Instrukcije
j ggrananja
j se mogu
g
ulančavati i međusobno ugnježđivati
Ako je c veći od max, medijan=max, a obrada završava s
ovom instrukcijom.

Inače, ako c NIJE veći od max, ali je c manji od min,
if (c > max)
( ) medijan=min,
j , a obrada završava s ovom instrukcijom.
j

med = max; Ako niti jedan od prethodnih if-else uvjeta


nije istinit, to znači da c ima središnju
else if (c < min)
( ) vrijednost pa je medijan=c
vrijednost, medijan=c, a izvodi se
samo instrukcija unutar ovog else bloka.
med = min;
else
Ako iza instrukcije grananja slijedi samo jedna
med = c; instrukcija, vitičaste zagrade ne treba pisati
Isto pravilo vrijedi i za instrukcije petlje (for,
… while,…)
hil )

2011/12. Uvod u programski jezik C medijan.c


Kvadratna jjednadžba v0.2
† Doradite p
program
g za izračun
kvadratne jednadžbe tako da
podržava slučaj kada je
unesen kvadratni koeficijent a −c
jednak nuli x =
b

„ Ako je a==0 jednadžba je x1 =


− b − b 2 − 4ac
linearna 2a
−c − b + b 2 − 4ac
b +c =0
bx x =
b
x2 =
2a

2011/12. Uvod u programski jezik C 21


int a, b, c;
Rezultat bez decimala? float x;
x = (‐1*c) / b;

† Sve ste dobro upisali


p ali
dobivate rezultat bez decimala?

3/6 = 0.5
† Problem je što program ne pokazuje
ispravno
p znamenke iza decimalne točke
† Rješenje je pretvorba cjelobrojnog
podatka u realni
„ Dovoljno je pretvoriti barem 1 broj u izrazu
x = (‐1.*c) / b; ili x = (‐1*(float)c) / b;
2011/12. Uvod u programski jezik C 22
Aritmetička sredina

#include <stdio.h>
int main() {
int  i  a  suma=0;
int  i, a, suma=0;
float asred;
for (i=0;i<10;i=i+1){
( ){
printf("Unesite broj: ");
scanf("%d", &a);
suma=suma+a;
}
printf("Aritmeticka
printf( Aritmeticka sredina je %.2f.
sredina je % 2f ", (float)suma/i);
 (float)suma/i);
return 0;
}

2011/12. Uvod u programski jezik C aritmeticka.c


Anatomija
j Cp
programa
g
† Korištena p
programska
g struktura se naziva p
petlja
j
Varijabli suma moramo postaviti početnu vrijednost prije prvog
korištenja
#include <stdio.h>
int main() { for petlja omogućuje da se instrukcije izvrše više
int  i, a, suma=0; puta.

float asred; Na početku varijabla i = 0


for (i=0;i<10;i=i+1){ Provjerava se da li je i<10
printf("Unesite broj: ");
p ( j ) Ako uvjet j nije
j zadovoljen,
j ppetlja
j se nastavljaj izvoditi.
Izvršavaju se instrukcije unutar bloka omeđenog
scanf("%d", &a); vitičastim zagradama.
suma=suma+a; Nakon što se izvrše, vrijednost varijable i se povećava
} za 1

printf("Aritmeticka sredina je %.2f.", (float)suma/i);
return 0;
} %.2f ispisuje realan broj s 2 decimale
2011/12. Uvod u programski jezik C 24
Faktorijeli
j
† Napišite
p Cp program
g za izračun
Početak

faktorijela
Unesi broj N do
kojeg se žele
izračunati
faktorijeli

† Na početku unesite broj i=0

faktorijela koje želite


računati i<=N
NE

„ 0!=1;
0! 1 1!
1!=1;
1 2!
2!=2*1!;
2*1! 3!
3!=3*2!
3*2! DA

NE
„ Općenito: n!=n*(n-1)! i<2

DA
fakt=1 fakt=fakt*i

Prikaži izračunatu
vrijednost
faktorijela na
zaslonu
l

i=i+1 Kraj

Za jako velike brojeve, cjelobrojni int
j j , j j tip podatka nije dovoljan jer je raspon 
p p j j j j p
32 
brojeva tog tipa na PC platformi 2 od ‐2147483647 do 2147483647.
Za izračun faktorijela brojeva većih od 12 pokušajte koristiti tip double koji 
2011/12. Uvod u programski jezik C 25
može pohraniti broj duljine do 308 znamenaka (format ispisa je %lf)

You might also like