You are on page 1of 41

Uvod u programski jezik C

Izv.prof.dr.sc. Ivo Ipi


2004/2005

Literatura

Rajko Vulin: Od sada programiramo v C-u, Turbo C, kolska knjiga,


Zagreb
1991.
Rajko Vulin: "Zbirka rijeenih zadataka iz C-a", kolska knjiga,
Zagreb 1995
Kernighan B. W., Ritchie D. M., The C Programming Language,
Prentice
Hall, Inc., 1988.
Primjeri s predavanja, auditorne vjebe i ostali materijali iz kolegija
Programiranje sa FER-a http://www.fer.hr/index.php?kat=100323

Vjebe - bodovanje
ukupno se moe dobiti 250 bodova 100 na labosima, 150 na
pismenom ispitu
100/4 = 25 bodova na svakom ispitivanju na labosima
ukupno 12 tjedana, 4 bloka po 2 ucenje + 1 ispitivanje
uvjet za potpis = minimalno 9 od 12 prisutnosti na labosima
nadoknada nema, osim za studente koji iz OPRAVDANIH
RAZLOGA ne budu
mogao prisustvovati 1 ispitnoj vjebi
vjebe se mogu odraivati iskljuivo u vlastitim terminima

Sadraj

Varijable i tipovi podataka


Elementi programa
Struktura programa
Prevoenje i izvravanje programa

Prvi program
#include <stdio.h>
void main()
poetak funkcije
{
printf(Dobar dan \n ");
}
kraj funkcije

naredba predprocesoru

glavna funkcija

funkcija za ispis

Elementi C-programa
definicija 2
varijable x i y

funkcija za itanje
sa ulaza

funkcija za ispis

poziv knjiznice stdio.h


#include <stdio.h>
void main() {
float x, y, rez;
scanf("%f %f ", &x, &y);
printf("%f %f \n", x, y);
/* odredi najveci broj */
if ( x > y ) {
rez = x;
} else {
rez = y;
}
printf("%f \n", rez);
}

glavna funkcija

Varijable
svi podaci moraju imati imena i tip
tip podataka je oznaka prevodiocu koliko
memorijskog prostora je potrebno za zapis
vrijednosti neke varijable
npr. deklaracija varijable a kao cijeli broj
int a znai da je prevodioc rezervirao 4
bajta memorije za zapis varijable

Varijable

Openito: promjenljiv podatak (lat.variabilis-promjenljiv)


U programiranju: podatak smjeten u memoriji raunala, poznate
veliine, koji se moe mijenjati i kojemu je dodijeljeno ime
Simboliki se prikazuje pravokutnikom uz koji stoji ime

Smjetaj u memoriji raunala

...

...

Osnovni tipovi podataka u C-u


char
int
float
double

znakovni tip ili mali cijeli broj


cjelobrojni tip
realni tip
realni tip u dvostrukoj preciznosti

Zapis decimalnih brojeva


normirani nain zapisa brojeva

P
31

mantis a < 1

KARAKTERISTIKA
EKSPONENT

30
msb

22 21
lsb msb

MANTISA
0
lsb

Zapis decimalnih brojeva

IEEE standard
jednostruka preciznost 32 bita
dvostruka preciznost 64 bita
decimalna toka iza prve jedinice
k-1
eksponent pomaknut za 2 -1 za k-bitni eksponent
63

62

p
0=+
1=-

52

k
11 bitni eksponent
s pomakom 1023

51

m
52 bitna mantisa

Struktura programa u C-u

naredbe pretprocesora
deklaracija tipova podataka
deklaracija varijabli
prototipovi funkcija deklaracija tipova
funkcija i varijabli koje se unose u funkciju
definicija funkcija

Struktura programa u C-u


programi su organizirani u funkcije
oblik funkcije:
tip_funkcije ime_funkcije(varijable)
{
lokalne varijable
naredbe
}

Struktura programa u C-u


svaki program mora sadravati barem
jednu funkciju main (glavna)
main glavni program unutar kojega se
mogu pozivati ostale funkcije

Elementi jezika C
kljune rijei programskog jezika C sadre
definicje tipova podataka i naredbe programskog
jezika:
auto
break
case
char
const
continue
default
do

double
else
enum
extern
float
for
goto
if

int
long
register
return
short
signed
sizeof
static

struct
switch
typedef
union
unsigned
void
volatile
while

Operatori
*/%
+< <= >= >
== !=
&
|
&&
||
?: (right->left)
= += -= (right->left)

Primjer funkcije
1:
2:
3:
4:
5:
6:
7:

/* Funkcija zbroji_dva_broja zbraja dva cijela broja i vraa zbroj*/


int zbroji_dva_broja( int x, int y )
{
int result;
result = x + y;
return result;
}

Instukcije programa
instrukcije za aritmetike i logike
operacije
instrukcije za odreivanje toka programa
instrukcije za ponavljanje dijelova
programa
instrukcije za ulaz i izlaz podataka

Instrukcije za aritmetike i
logike operacije
operator pridruivanja =
operator jednakost == nejednakost !=
aritmetiki operatori:
*
/
%

+-

Instrukcije za odreivanje
toka programa
Normalan programski slijed:
instrukcija_1

instrukcija_1

instrukcija_2

instrukcija_2

instrukcija_3
...

instrukcija_3

Kontrolna instrukcija if
- jednostrana selekcija
Pseudokd
ako je logiki_izraz tada
naredbe
U C-u
if (logiki_izraz){
niz instrukcija
}

logiki_izraz
D
niz naredbi

Kontrolna instrukcija if
- dvostrana selekcija
Pseudokd
ako je logiki_izraz tada
niz_naredbi_1
inae
niz_naredbi_2
U C-u
if (logiki_izraz){
niz_naredbi_1
} else {
niz_naredbi_2
}

logiki_izraz

niz naredbi_1

niz naredbi_2

Instrukcije za ponavljanje
dijelova programa
petlje
kontrolne varijable za izvoenje iteracija
(unaprijed zadan)
logiki izrazi (ispitivanje uvjeta), koji
odreuju broj iteracija

Instrukcije za ulaz i izlaz


podataka
itanje ulaznih podataka (standardni ulaz,
datoteka)
ispis podataka ( zaslon, datoteka,
tampa, ...)
funkcije u C-u

Primjer
program ispisuje tablicu za pretvaranje stupnjeva u fahrenheitima u celsijuse prema formuli
C = (5/9)( F-32)
ispis programa:
0.0 -17.8
20.0 -6.7
40.0 4.4
60.0 15.6
80.0 26.7
100.0 37.8
120.0 48.9
140.0 60.0
160.0 71.1
180.0 82.2
200.0 93.3
220.0 104.4
240.0 115.6
260.0 126.7
280.0 137.8
300.0 148.9

Primjer
#include <stdio.h>
main ()
Deklaracija varijabli
{
i njihovih tipova
float cel, faren;
int donji, gornji, korak;
donji = 0;
gornji = 300;
korak = 20;
faren = donji;
while (faren <= gornji)
{
petlja while
cel = (5.0/9.0)*(faren-32.0);
printf("%5.1f%8.1f\n",faren,cel);
faren = faren+20;
}
}

Petlja while
while(logiki_izraz)
{
naredba_1;
naredba_2;
.
.
.
}
naredbe unutar zagrada e se izvravati sve dok je
logiki_izraz istinit (logiki_izraz > 0)

Naredbe za ponavljanja
while petlja
while (faren <= gornji)
{
cel = (5.0/9.0)*(faren-32.0);
printf("%5.1f%8.1f\n",faren,cel);
faren = faren+20;
}

for petlja
for (faren=0; faren<= 300; faren=faren+20)
printf("%5.1f%8.1f\n",faren,(5.0/9.0)*(faren-32.0));

Naredbe za ponavljanja
for petlja
for(izraz_1;izraz_2;izraz_3)
{
naredba_1;
naredba_2:

.
.
.
}

while petlja
while (uvjet)
{
naredba_1;
naredba_2:

.
.
.
}

izraz_1 inicijalizacija brojaa


izraz_2 uvjet brojaa
izraz_3 inkrement/dekrement

Primjer
#include <stdio.h>
#define DONJI 0
#define GORNJI 300
#define KORAK 20
main ()
{
float faren;
printf(" F\t C\n");
for (faren=DONJI; faren<= GORNJI; faren=faren+KORAK)
printf("%5.1f\t%8.1f\n",faren,(5.0/9.0)*(faren-32.0));
}

Funcija za ispis
printf(const char *format [, argument]... )
printf(Dobar dan \n ");
printf("%f \n", rez);
printf("%5.1f\t%8.1f\n",faren,(5.0/9.0)*(fare
n-32.0));

Ispis programa
F
C
0.0 -17.8
20.0 -6.7
40.0 4.4
60.0 15.6
80.0 26.7
100.0 37.8
120.0 48.9
140.0 60.0
160.0 71.1
180.0 82.2
200.0 93.3
220.0 104.4
240.0 115.6
260.0 126.7
280.0 137.8
300.0 148.9

Primjer rjeenja kvadratne


jednadbe
ax2+bx+c=0
diskriminanta D=b2-4ac
rjeenja ovise od D
D>0
D=0
D<0

x1=
-b-D
x2= 2a

-b+D
2a

Struktogram
unesi vrijednosti a,b,c
izraunaj D = b2 4ac
D>0 ?
da

ne
da

D=0 ?

ne

f ima realne razliite


korijene

f ima dvostruki f nema realne


realni korijen korijene

kraj programa

#include <stdio.h>
#include <math.h>
main()
{
float a, b, c; /* parametri jednadzbe */
float dis;
/* diskriminanta
*/
/* inicijalizacija i citanje parametara */
printf("a=");
scanf("%f", &a);
printf("b=");
scanf("%f", &b);
printf("c=");
scanf("%f", &c);
/*

izracun diskriminante

*/

dis= b*b-4*a*c;
/*

izracun korijena

*/

if (dis == 0)
/* dvostruki korijen
*/
printf(" rjesenje - dvostruki korijen = %f\n", -b/(2.0*a));
else if (dis>0){
/* realni razliciti korijeni
*/
printf("1. korijen = %f\n", (sqrt(dis)-b)/(2.0*a));
printf("2. korijen = %f\n", (-sqrt(dis)-b)/(2.0*a));
}
else
/* nema realnih korijena

*/

printf("f nema realnih korijena\n");


}

Funcija za unos podataka


scanf(const char *format [,argument]... );

scanf("%f", &a);
varijabla a tipa float
operator &
&a = adresa varijable a

PRIMJER
#include <stdio.h>
void main() {
float x, y, rez;
scanf("%f %f ", &x, &y);
printf("%f %f \n", x, y);
/* odredi najvei broj */
if ( x > y ) {
rez = x;
} else {
rez = y;
}
printf("%f \n", rez);
}

Prevoenje programa
programe napisane u nekom
programskom jeziku je potrebno prevesti u
strojni kod
interpreter
prevodioc (compiler)

Prevoenje programa
Z :=A + B;

MVT 1024
ADD 1025
MVF 1026

1110011001100000
1100011000001100
0111100001111001

Prevoenje programa

Prevodioc (Compiler)

You might also like