C JEZIK - Učenje i Vježbanje

  • Upload
    joe

  • View
    278

  • Download
    0

Embed Size (px)

DESCRIPTION

c jezik

Citation preview

C JEZIKSTRUKTURA PROGRAMA nain pisanja programa, svaki program u C-u sastavljen je od niza funkcija. Glavna i jedina obavezna funkcija u programu je funkcija main (). U C-u ne postoje ugraene funkcije ve se one moraju pozvati iz biblioteke funkcija koja se isporuuje s prevoditeljem. Dovoljno je pozvati odreenu biblioteku na poetku programa i onda se mogu upotrebljavati funkcije u njoj.PRETPOCERSKE NAREDBE pozivaju biblioteke funkcija koje se upotrebljavaju u programima.#naredba parametristdio.h funkcija za ulaz i izlaz podatakamath.h matematike funkcijestring.h funkcije za rad sa znakovnim varijablama#incude - najea pretprocesorska naredba i pie se prije main () funkcije.Funkcija za ispis printf()SINTAKSA printf()printf ("niz znakova koji se treba ispisati na ekranu")Prije funkcije printf () treba pozvati biblioteku stdio.h jer ona sadri funkcije za ulaz i izlaz (ispis) podataka.PROGRAMI U CSastoje se od niza meusobno povezanih funkcija. U svakom programu je obavezna jedna funkcija funkcija main () koja oznaava mjesto gdje poinje izvravanje programa. Poetak i kraj funkcije se oznaava vitiastim zagradama. Nakon svake naredbe mora biti znak ; koji oznaava kraj jedne i poetak druge naredbe.PRIMJER:#include main (){printf ("Hello world");}Nakon to se u programu upie izvorni kod, program se prevodi u raunalu razumljiv jezik kompilira se. Ako postoje greke program prevoditelj e na to upozoriti i traiti ispravke. Izvorni kod ima nastavak .c (C jezik) ili .cpp (za C++), a nastaju jo dvije verzije programa - .obj (oblik u kojemu se izvorni kod povezuje s koritenim bibliotekama) i .exe (izvrni kod).ZNAKOVNE KONSTANTEZa kontrolu ispisa, poinju znakom \, a slovo nakon \ kontrolira ispis. Neke od konstanti su:\b pomak za jedno mjesto udesno\r povratak na poetak reda\f nova stranica\n novi red\v vertikalni tabulator\t horizotalni tabulatorPRIMJER:Ispis radnih dana u tjednu, a svaki dan ide u novi red.#include main (){printf ("ponedjeljak \nutorak \nsrijeda \ncetvrtak \npetak");}ISPIS VRIJEDNOSTIPODACI U C-u: cjelobrojni (int) realni (float) realni dvostruke preciznosti (double) znakovni (char) tip podataka koji ne sadri vrijednost (void)Osim navedenih ima i sloenih tipova podataka kao: polja, strukture, polja strukture, unije i polja bitova. Mogu se definirati i vlastiti tipovi podataka.Tip podataka, veliina u bitovima i opseg brojeva koji obuhvaaju.Tip podatkaVeliina u bitovimaOpseg

char8-128 do 127

signed char8-128 do127

unsigned char80 do 255

short int16-32768 do 32767

unsigned int160 do 65535

int16-32768 do 32767

long32-2147483648 do 2147483647

unsigned long320 do 4294967295

float323,4x10-38do 3,4x1038

double641,7x10-308do 1,7x10308

long double803,4x10-4932do 1,1 x104932

SINTAKSA ISPISA PODATAKA:printf ("lista formata", lista varijabli);OZNAKE FORMATA ZA ISPIS:%c ispis jednog znaka%d ispis cijelog broja %f ispis realnog broja%lf ispis realnog broja tipa double%s ispis niza znakova%e ispis realnog broja u E-notacijiPRIMJER:printf ("%d %d", 3, 2)ispisuje 2 i 3printf ("%d, %d", 3, 2)ispisuje 2 i 3 ali odvaja zarezomIzgled ispisa se kontrolira unutar navodnika " ", a u listi varijabli dolazi samo popis varijabli.PRIMJER:printf ("\n rezultat izraza je %d+%d je %d", 3, 2, 3+2);-na ekranu se ispisuje rezultat izraza 3+2 je 5ARITMETIKI OPERATORIOperacijaOperator

Zbrajanje+

Oduzimanje-

Mnoenje*

Dijeljenje/

Ostatak cjelobrojnog dijeljenjaNa primjer 7%2=1 jer je 7 podijeljeno s 2 jednako 3, a ostatak je jedan.%

Vii prioritet imaju operatori %, * i /, a nii + i -

Funkcija main po definiciji vraa vrijednost, ako ne vraaju vrijednost onda su tipa void pa moemo napisati na poetku void main() ili int main(void) pa prije zadnje vitiaste zagrade return (0);

UITAVANJE PODATAKAPodatke u programu dijelimo na:varijable podaci ije se vrijednosti mijenjaju tijekom izvoenja programakonstante podaci ije se vrijednosti ne mogu mijenjati

IDENTIFIKATORIVarijable, konstane i funkcije dodijeljujemo imena identifikatore. Sastoje se od niza alfanumerikih znakova, od kojih prvi znak mora biti slovo ili donja crta (_), identifikatori se razlikuju ako sadre prva 32 znaka razliita i ne smije se koristit kljune rijei C jezika.Razlikuju se mala i velika slova, A i a su dvije razliite varijable.Kljune rijei su identifikatori koji imaju tono odreeno znaenje. Svaka od njih odreuje to i kako se moe napraviti u programu zajedno s ostalim sintaksom, piu se malim slovima. To su: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizof, static, struct, switch, typedef, union, unsigned, void, volatile, while...KONSTANTE Konstante su vrijednosti koje se zadaju jedanput i ne mijenjaju tijekom izvoenja programa. S obzirom na tipove podataka razlikuju se cjelobrojne, realne i znakovne konstante.Cjelobrojne cijeli brojeviRealne realni brojevi s predznakom ili bez njega, decimalna toka odvaja cjelobrojni dio od decimalnog. Moe se zapisati u eksponencijalnom obliku. Prvi dio je realna broj, zatim slovo E ili e i iza njega cijeli broj. Npr. broj 0.02 se moe zapisati kao 2E-2.Znakovne konstante zadaju se unutar jednostrukih navodnika, literala ' '. Uglavnom se sastoje od jednog znaka npr. 'Z', ako se upotrebljavaju u aritmetikim izrazima upotrebljavaju se njihove numerike vrijednosti prema ANSII kodu znakova. Ako ima vie znakova onda govorimo o konstantama niza znakova, a sastoji se od niza znakova unutar dvostrukih navodnika, npr. "konstanta".SINTAKSA DEFINIRANJA KONSTANTI (koriste se pretpocesorka naredba #define)#define ime_konstante vrijednost_konstante#define pi 3.141592654DEKLARACIJA VARIJABLIPrije nego se krenu koristiti varijable treba najaviti u programu, mogu se deklarirati izvan svih funkcija, na poetku funkcije ili na poetku bloka naredbi. Zadaju se tip i ime varijable.SINTAKSA deklariranja varijabli:tip_podataka lista_varijabli;Tip_podataka je jedan od osnovnih ili korisniki definiranih tipova podataka, a lista_varijabli niz imena varijabli (odvojenih zarezom) koje e tijekom izvravanja programa sadravati vrijednost zadanog tipa podataka. Kada se deklarira varijabla rezervira se odreen memorijski prostor ovisno o tipu varijabl (2 bajta za broj tipa int, 4 za float...).

FUNKCIJA ZA UITAVANJEZa uitavanje podataka s tipkovnice postoji nekoliko funkcija, a najee se koristi funkcija za formatirani unos podataka scanf().SINTAKSA scanf()scanf("lista_formata", lista_varijabli);U listu formata (kao i kod printf()) se upisuje oznaka formata za tip varijabli, a u listu varijabla popis imena varijabli istim redoslijedom kao i u popisu formata. Varijable navedene u listi meusobno se odvajaju zarezom. Budui da se u C-u njihove vrijednosti prenose s pomou adrese, ispred imena svake varijable treba dodati i adresni operato & (operator za dodijeljivanje adresa).Oznake formata tipa varijabli jednake su onima koje se upotrebljavaju u ispisu, ali mora se paziti kako se odvajaju u listi formata, jer to odreuje nain unosa podataka pri izvoenju programa. Ako su oznake formata odvojene zarezom, i vrijednosti varijabli se prilikom unoenja podataka odvajaju zarezom. Ako nema zareza, vrijednosti se odvajaju razmakom.PRIMJER:scanf("%d, %f", &a, &b); trai upis dva broja, jedan cijeli (%d) i jedan realni (%f) te ih mora odvojiti zarezom prilikom upisivanjaZadatak: Program koji rauna a+b, (a+b)/a, (a+b)*a, ( (a+b)/a ) + ( (a+b)/a ) za bilo koja dva realna broja.#include int a, b;void main(){printf("\n Unesi bilo koja dva realna broja: ");scanf("%d, %d", &a, &b);printf("\n%d", a+b);printf("\n%d", (a+b)/a));printf("\n%d", (a+b)*a));printf("\n%d", a+b));printf("\n%d", ( (a+b)/a) + ( (a+b)*a) );}NAREDBA PRIDRUIVANJANaredbom pridruivanja varijablama se zadaju ili mijenjaju vrijednosti. Operator pridruivanja je =. Njegova uloga je da vrijednost izraza s desne strane pridrui varijabli na lijevoj strani. Operator pridruivanja ima najnii prioritet izvravanja.SINTAKSA naredbe pridruivanjavarijabla=izraz;Zadatak: Program koji rauna a+b, (a+b)/a, (a+b)*a, ( (a+b)/a ) + ( (a+b)/a ) za bilo koja dva realna broja.#include int a, b, c, d, e;void main(){printf("Upisi bilo koja dva broja: ");scanf("%d, %d", &a, &b);c=a+bd=c/ae=c*aprintf("%d", c);printf("%d", d);printf("%d", e);printf("%d", d+e);}VARIJABLE:Varijable mogu biti: globalne i lokalne. Globalne se deklariraju izvan svih funkcija i mogu se rabiti u cijelom programu. Lokalne se deklariraju na poetku funkcije ili kao argumenti funkcije i dostupne su samo u toj funkciji (ili bloku naredbi). Izvan lokalne funkcije ili bloka naredbi lokalne varijable ne postoje. Imena lokalnih varijabli u razliitim funkcijama (blokovima) mogu biti iste. Blok naredbi je niz naredbi grupiranih u jednu logiku cjelinu, poetak bloka se oznaava s {, a kraj sa }.Definicijom globalne varijable automatski joj se dodijeljuje poetna vrijednost 0, dok lokalne varijable ne sadre poetnu vrijednost i moraju se inicijalizirati posebnom naredbom tijekom deklaracije ili nakon nje (ali prije prvog koritenja). Poetne vrijednosti varijablama se dodjeljuje naredbom pridruivanja.Npr. int a =5, deklarirana je cjelobrojna varijabla a i pridruena joj je poetna vrijednost 5. Isti efekt se postie ako se varijabla a deklarira (int a;) prije, a naknadno joj se dodijeli poetna vrijednost (a=5).

PRIDRUIVANJE U KOMBINACIJI S ARITMETIKIM OPERATORIMAOperator pridruivanja moe se nai u kombinaciji s aritmetikim operatorima. Redoslijed izvravanja operacija je s desna na lijevo pa se moe napisati skraeni oblik pisanja aritmetikih izraza.Primjeri:a+=2a=a+2a-3=3a=a-3a/=10a=a/10 a%=5a=a%5a*=4+ba=a*(4+b)Kad je ovako zapisano sve nakon jednako je u zagradi u odnosu na prvi a. x* = (y+z)+3 --> x=x * ( (y+z)+3) )a+=b+13a=a+b+13

OPERATORI INKREMENT I DEKREMENTInkrement (++) uveaj za jedanDekrement (--) umanji za jedanMogu se pisati ispred (prefix) ili iza varijable (postfix).Primjer:x=x+1; isto je to i x++; ili ++x;Ako se operator ++ ili -- nalazi ispred varijable, tada se vrijednost varijable prvo povea (smanji), a zatim uvea (smanjena) vrijednost rabi u izrazu.Ako je operator ++ ili -- iza varijable, tada se u izrazu uzima trenutana vrijednost varijable, a nakon izraunavanja uvea (smanji) vrijednost varijable.Npr.x=2y=++x1. x=x+1x=3, y=3Prije pa se rauna odmah y=32. y=xy=x++1. y=xy=2, x=3Poslije pa ostaje y=22. x=x+1Inkrement i dekrement ne mogu se primjeniti na aritmetike izraze niti na konstante. Pogreno je (x+y)++ ili 1.234--.

STANDARDNE MATEMATIKE FUNKCIJEStandardne matematike funkcije uglavnom su spremljene u biblioteku funkcija math.h (include ). Primjer matematikih funkcija:funkcija u C-utip argumentatip rezultatamatematika funkcijabiblioteka

abs(x)intint|x|stdlib.h

labs(x)long intlong int|x|math.h

sqrt(x)doubledouble

pow(x,y)xy

sin(x)trig. funkcije

sinl(x)

cos(x)

tan(x)

asin(x)

acos(x)

atan(x)

exp(x)ex

log(x)ln(x)

log10(x)log(x)

Primjer:c=sqrt(pow(a,2)+pow(b,2));

PRETVORBA TIPOVA PODATAKAMogue su dvije vrste pretvorbe podataka: automatska ili implicitna zadana ili eksplicitnaPravila za pretvorbu sastavni su dio programskog jezika C i orijentirana su prema viem tipu podatka (onomu koji zauzima vie memorije).Pravila za automatsko pretvaranje tipova podataka:1. Ako su svi operandi tipa int, tada je i rezultat tipa int.2. Svi podaci char i short pretvaraju se u int.3. Ako u izrazu postoji operand tipa double, tada se svi podaci pretvaraju u double i rezultat je tipa double.4. Ako u izrazu postoji operand tipa long, tada se svi podaci pretvaraju u long i rezultat je tipa long.5. Ako je bilo koji od operanada u izrazu deklariran kao unsigned, svi ostali operandi pretvaraju se u unsigned i rezultat je tipa unsigned.Uporaba operatora pridruivanja pokree automatsko pretvaranje podataka. Npr. ako je i cjelobrojna varijabla (int), a j realna (float), izrazom j=i cjelobrojna varijabla i pretvara se u realnu, a zatim pridruuje varijabli j. Ako je i=j varijabli i e se pridruiti cjelobrojna vrijednost varijable j dobivene odbacivanjem decimalnog dijela.Mogue je zaobii automatsku pretvorbu i zadati je eksplicitno. Takva pretvorba ima vii prioritet. Koristi se cast operator. Opi oblik izraza za ekplicitnu pretvorbu je:(tip podataka) operand; (zagrade su oznake cast operatora)Npr.i = (int) (d+1.234);vrijednost varijable ili aritmetikog izraza na desnoj strani najprije e f = (float) ( (int) d + 1);se prevoriti u zadani tip, a tek onda pridruiti varijabli s lijeve strane.

MODIFIKATORIModifikatori poblie odreuju nain zapisa u memoriji raunala. Mijenja se opseg podataka, piu se ispred odreenog tipa podataka, a mogu biti modifikatori signed (s predznakom), unsigned (bez predznaka), long i short.Npr.Pretpostavljena vrijednost integera je signed. Integer je unutar skupa -32768 i 32767. Primjer 127 i -127 (-127 prikazujemo kao dvojni komplement broja 127)0000000011111111 = 1271111111100000001 = -127bit za predznak

GRANANJE U PROGRAMURelacijski operatoriOperatorZnaenjePrimjer

>vei od5>4

>=vei od ili jednak5>=x