Programiranje u C

Download Report

Transcript Programiranje u C

PROGRAMIRANJE U C-U
Teorija
STRUKTURA PROGRAMA NAPISANOG U C-U
 Prije
početka programa potrebno je
pretprocesorskom naredbom #include< ime
biblioteke> najaviti biblioteke funkcija koje
će se u programu koristiti.
Funkcija printf(), scanf() nalazi se u biblioteci
funkcija stdio.h – biblioteka za ulaz i izlaz
podataka.
 Program u C-u sastoji se od niza povezanih
funkcija od kojih je jedina obavezna funkcija
main() koja označava mjesto gdje počinje
izvršavanje programa
ISPIS TEKSTA NA ZASLON
 Prva
C funkcija s kojom ćemo se detaljnije
upoznati je funkcija za ispis.
C
koristi nekoliko funkcija za ispis. Konkretno,
za ispis teksta na zaslon najčešće koristimo
funkciju za formatirani ispis printf();
 Opći
oblik (sintaksa) je:
printf("tekst koji želimo ispisati na
zaslon");
PRIMJER 1:


printf("Ovo je veliki trenutak! Pisem svoj prvi
program!");
Program bi izgledao:
#include<stdio.h>
main(){
printf("Ovo je veliki trenutak! Pisem svoj prvi
program!");
}
ISPIS VRIJEDNOSTI

Za ispis vrijednosti također se koristi funkcija printf(), samo
malo drugačijeg oblika.

Kod ispisa vrijednosti, osim primjene funkcije za ispis,
potrebno je definirati format ispisa.

Formatom se definira način ispisa vrijednosti, a usko je vezan
uz tipove podataka.
ISPIS VRIJEDNOSTI
Format
%c
Značenje
%d
oznaka formata za ispis jednog
znaka
ispis cijelog broja
%f
ispis realnog broja
%lf
ispis realnog broja tipa double
%s
ispis niza znakova
%e
ispis realnog broja u E-notaciji
ZNAKOVNE KONSTANTE ZA KONTROLU
ISPISA
 Znakovne
konstante sastoje se od dva
znaka. Prvi znak je \, a drugi slovo koje
kontrolira ispis.
 Neke konstante koje se češće koriste su:
\b – pomak za jedno mjesto
udesno
\r – povratak na početak reda
\f – nova stranica
\n –novi red
\v – vertikalni tabulator
\t – horizontalni tabulator
VARIJABLE I KONSTANTE
 Izrada
programa od nas traži i rad s različitim
podacima.
 Podaci
u programu mogu biti:

varijable ili

konstante
 Varijable
su podaci čije se vrijednosti tijekom
izvođenja mijenjaju, a konstantama su podaci čije se
vrijednosti tijekom izvođenja ne mogu promijeniti.
TIPOVI PODATAKA

Da bi naši programi davali što točnije rezultate i pri tom
optimalno koristili memoriju, podatke osim po vrsti
(varijable i konstante) moramo podijeliti i po tipu.

C razlikuje pet osnovnih tipova podataka:
int(cijeli broj),
 char (znak),
 float (realan broj),
 double (realan broj dvostruke preciznosti) i
 void (tip podatka koji ne sadrži vrijednost.

ARITMETIČKI OPERATORI
 Aritmetički
operatori koriste se kada program treba
izračunati rezultate osnovnih matematičkih funkcija.
C poznaje pet aritmetičkih operatora:
Operacija
zbrajanje
oduzimanje
množenje
dijeljenje
Modulo
(ostatak cjelobrojnog dijeljenja)
Operator
+
*
/
%
FUNKCIJE ZA UNOS PODATAKA
 Za
unos podataka koriste se funkcije za unos.
Najčešće korištena funkcija je funkcija za
formatirani unos, scanf();
 Opći
oblik (sintaksa) funkcije scanf je:
scanf("lista_formata",lista_varijabli);
FUNKCIJE ZA UNOS PODATAKA

Kao i kod funkcije za ispis u listu formata upisujemo oznake
formata za tip varijabli. One su jednake onima koje se koriste u
ispisu.

U listi varijabli navodi se popis imena varijabli istim
redoslijedom kao u popisu formata. Varijable navedene u listi
varijabli međusobno se odvajaju zarezom.

Budući da se u C-u vrijednosti prenose preko adrese, ispred
imena svake varijable treba dodati i operator za dodjeljivanje
adrese, & (adresni operator)
FUNKCIJE ZA UNOS PODATAKA
Važno:
 Obratite pažnju na način na koji se odvajaju formati u
listi formata (na primjer, zarezom: "%d, %d, %f").
Na isti način korisnik treba odvajati vrijednosti
prilikom unosa.

Primjer :
printf("Upisite dva cijela broja odvojena razmakom: ");
scanf("%d %d",&a, &b);
DEKLARACIJA (NAJAVA) VARIJABLI



U svakom programu C traži najavu varijabli koje će se koristiti
u programu. Varijable najčešće najavljujemo na početku
programa, no nije pravilo. Bitno ih je najaviti prije njihovog
prvog korištenja!
Opći oblik najave varijabli:
tip_podataka lista varijabli navedenog tipa;
Najavom varijable u memoriji se za nju zauzme
mjesto. Zbog toga je vrlo važno najavljivati samo one
varijable koje će se u programu stvarno i koristiti.
DEKLARACIJA (NAJAVA) VARIJABLI



Zbog preglednosti kôda, većina varijabli najčešće se
najavljuje na samom početku programa.
Mjesto na kojem je varijabla najavljena utječe na
njezino područje djelovanja. Ako je varijabla najavljena
izvan svih funkcija ona je dostupna svim funkcijama i
kažemo da je globalna.
Lokalne varijable najavljuju se unutar funkcije ili
bloka naredbi u kojem se koriste. Izvan područja u
kojem su najavljene nisu dostupne. U programu može
biti više lokalnih varijabli istog imena.
KOMENTAR U PROGRAMU

Dio programa između znakova /*i */naziva se komentar.

Komentari služe programeru za lakše snalaženje u programu.

Programeri najčešće komentiraju bitne dijelove programa kako
bi im kasniji zahvati na programu bili jednostavniji.

Prilikom prevođenja programa komentari se preskaču.
DEFINICIJA KONSTANTI

Konstante su vrijednosti koje se zadaju jednom i ne mijenjaju
se tijekom izvođenja programa.
Razlikujemo cjelobrojne, realne i znakovne konstante.

Prije korištenja konstanti potrebno ih je definirati zadavanjem
imena i vrijednosti. Možemo ih definirati predprocesorskom
naredbom #define

Opći oblik (sintaksa) je:
#define ime_konstante vrijednost
npr.
# define pi 3,14159
NAREDBA PRIDRUŽIVANJA

Naredbom pridruživanja se varijablama pridružuju
ili mijenjaju vrijednosti!

Operator pridruživanja u programskom jeziku C je =.

Njegova uloga je vrijednost izraza s desne strane pridružiti
varijabli na lijevoj strani.

Operator pridruživanja ima najniži prioritet izvršavanja. To
znači da će se najprije izračunati vrijednost izraza s desne
strane i tek onda rezultat pridružiti varijabli na lijevoj
strani.

Opći oblik naredbe za pridruživanje vrijednosti je:
varijabla=izraz;
MATEMATIČKE FUNKCIJE

Matematičke funkcije nisu sastavni dio C-a, već dolaze
u bibliotekama.

Biblioteka u kojoj se nalazi najveći broj standardnih
matematičkih funkcija je math.h. One postaju
dostupne uključivanjem te biblioteke naredbom
#include<>.

Neke od standardnih matematičkih funkcija prikazane
su u sljedećoj tablici:
F-ja u C-u
Tip argumenta
Tip rezultata
Matematička f-ja
abs(x)
int
int
Apsolutna vrijednost
labs(x)
longint
longint
acos(x)
double(-1do 1)
double(0 do )
acosl(x)
long double
long double
asin(x)*
double(-1do 1)
double
atan(x)*
double
double
sin(x)*
double
double
cos(x)*
double
double(-1 do 1)
tan(x)*
double
double
exp(x)*
double
double
eksponencijalna
funkcije
math.h
log(x)*
double
double
prirodni algoritam(ln)
math.h
log10(x)*
double
double
logaritam s bazom 10
math.h
sqrt(x)*
double
double
Drugi korijen
pozitivnog broja
math.h
pow(x,y)
double
double
Računa vrijednost x
math.h
Standardna
biblioteka
stdlib.h
math.h
Trigonometrijske
funkcije
math.h
GRANANJE U PROGRAMU

Tijekom pisanja programa često ćete imati potrebu određene
naredbe izvršiti ovisno o tome je li ili nije ispunjen određeni
uvjet.

Postoje naredbe za jednostruko i naredbe za
višestruko grananje.
RELACIJSKI OPERATORI
Operacija
Operator
manje od
veće od
jednako
manje ili jednako
<
>
==
<=
veće ili jednako
>=
različito
!=
JEDNOSTRUKO GRANANJE

Jednostruko grananje koristi se u slučajevima u
kojima je naredbu ili blok naredbi potrebno izvršiti
jedino ako je dani uvjet ispunjen - kada je vrijednost
zadanog relacijskog ili aritmetičkog izraza različita od
nule.

Za jednostruko grananje koristi se naredba if.

Opći oblik (sintaksa) naredbe je:
if (uvjet) naredba;

Uvjet može biti relacijski ili aritmetički izraz. Naredba unutar if će
se izvršiti jedino ako je uvjet različit od nule. Ako je uvjet jednak nuli,
PRIMJER:

Program ispisuje vrijednost drugog korijena pozitivnog realnog
broja.
#include<stdio.h>
#include<math.h>
main(){
float x;
printf("Upisite pozitivan realan broj: ");
scanf("%f",&x);
if (x>=0){
printf ("Vrijednost drugog korijena broja %.2f je
%.2f",x,sqrt(x));
}
LOGIČKI OPERATORI
• U slučajevima u kojima je potrebno zadovoljiti
uvjete oblika: (uvjet1 i uvjet2) ili (uvjet1 ili
uvjet2) koriste se logičke funkcije i logički
operatori.
Operacija
Operator
logička negacija (NOT)
!
logički i (AND)
&&
logički ili (OR)
||
PRIMJER – IF NAREDBA
 Rastavljanje
na znamenke i ispis rezultata samo ako
korisnik upiše troznamenkasti broj.
#include<stdio.h>
#include<math.h>
main() {
int a,prva,druga,treca;
printf("Unesite troznamenkasti broj: ");
scanf("%d",&a);
if (a>99 && a<1000) {
prva=a/100;
druga=a/10%10;
treca=a%10;
printf("znamenke unesenog broja su %d, %d,
%d",prva,druga,treca);
}
}
VIŠESTRUKO GRANANJE

U praksi se vrlo rijetko programi granaju samo u jednom
smjeru. Najčešće su u pitanju dva ili više smjerova.
VIŠESTRUKO GRANANJE - IF-ELSE
NAREDBA


Opći oblik (sintaksa) je :
if (uvjet)
naredba_1;
else
naredba_2;
Naredba radi na sljedeći način:


Ako je uvjet ispunjen izvršava se naredba_1 i program se
nastavlja prvom naredbom iza if-else naredbe.
Ako uvjet nije ispunjen izvršava se naredba_2 i program se
nastavlja sljedećom naredbom.
VIŠESTRUKO GRANANJE - IF-ELSE
NAREDBA

Grafički prikazano to izgleda ovako:
PRIMJER - IF-ELSE NAREDBA

Rastavljanje na znamenke i ispis rezultata samo ako korisnik
upiše troznamenkasti broj.

#include<stdio.h>
#include<math.h>
main(){
int a,prva,druga,treca;
printf("Unesite troznamenkasti broj: ");
scanf("%d",&a);
if (a>99 && a<1000) {
prva=a/100;
druga=a/10%10;
treca=a%10;
printf("znamenke unesenog broja su %d, %d, %d", prva,
druga, treca);
}
else
printf("Niste upisali troznamenkasti broj");
}
SWITCH-CASE NAREDBA


Zadaci koji u sebi sadrže različite izbornike u praksi se ne rješavaju
pomoću if-elseif naredbe. Postoji naredba prilagođena ovakvim
problemima - switch-case naredba.
Njezina sintaksa izgleda ovako:
switch (izraz){
case konstanta_1: blok naredbi_1;
break;
case konstanta_2: blok naredbi_2;
break;
...
case konstanta_n-1: blok naredbi_n-1;
break;
default: blok naredbi_n;
break;
}
SWITCH-CASE NAREDBA

Naredba switch-case izvršava se na sljedeći način:
 Računa se vrijednost izraza unutar zagrade
 Dobivena vrijednost uspoređuje se sa nizom konstanti
(konstanta_1 do konstanta_n-1).
 Ako je vrijednost jednaka jednoj od konstanti, izvršava se
blok naredbi pridružen toj konstanti
 Ako dobivena vrijednost nije jednaka niti jednoj od
navedenih konstanti, izvršit će se blok naredbi pridružen
opciji default.
 Izvršavanje bloka naredbi prekida se naredbom break. Ako
se blok naredbi u case ne završi s break, nastavlja se
izvršavati blok naredbi sljedećeg case.
 Opcija default može se i izostaviti ukoliko za njom ne
postoji potreba!
PRIMJER - SWITCH - CASE NAREDBA
#include<stdio.h>
main() {
int x,y,rez,izbor;
printf("Upisite dva cijela broja: ");
scanf("%d %d",&x, &y);
printf("Zelite li izracunati:\n1) zbroj\n2) razliku\n3)
umnozak\n4) kvocijent\nunesenih brojeva?");
printf("\nUpisite broj za izbor: ");
scanf("%d",&izbor);
switch(izbor) {
case 1: rez=x+y; break;
case 2: rez=x-y; break;
case 3: rez=x*y; break;
case 4: rez=x/y; break;
default: printf("Kriva operacija!");break;
}
if (izbor>0&&izbor<5){
printf("Trazeni rezultat je %d",rez);
}
}
UVJETNI OPERATOR

Nednostavniji oblici if-else naredbe mogu se zamijeniti
uvjetnim operatorom (?).

Sintaksa uvjetnog operatora:
(uvjet) ? naredba_1 : naredba_2;

Kad izvršavanje programa dođe do uvjetnog operatora događa
se sljedeće:
Izračuna se vrijednost uvjeta.
 Ako je izračunata vrijednost različita od nule izvršit će se
naredba_1.
 Ako je izračunata vrijednost jednaka nuli izvršava se naredba_2.

PRIMJER – UVJETNI OPERATOR

Linija kôda:
(a%2==0) ? printf("Broj je paran") : printf("Broj je
neparan);
ispituje je li ostatak pri dijeljenju vrijednosti varijable
a sa brojem 2 jednak nuli. Ako je, ispisuje na zaslon
tekst "Broj je paran", a ako nije, ispisuje tekst "Broj je
neparan".
OPERATORI INKREMENT I DEKREMENT


Operator inkrement (++)
 je operator koji vrijednost varijable uvećava za
jedan. Može se pisati ispred ili iza imena
varijable. To znači da umjesto izraza a=a+1
možemo pisati a++ ili ++a.
Operator dekrement (--)
 je operator koji vrijednost varijable umanjuje
za jedan. Kao i inkrement može se pisati
ispred ili iza imena varijable: a-- ili --a.
PRIMJERI:






Ako je vrijednost varijable a= 5, nakon naredbe a++; njezina će
vrijednost biti 6.
U ovom je slučaju svejedno jesu li operatori inkrement i dekrement
ispred ili iza imena varijable. Ali, ako se koriste u aritmetičkim
izrazima, tada to nije svejedno.
U izrazu b=++a, vrijednost varijable a najprije će se uvećati i tako
uvećana pridružiti varijabli b. Ako je vrijednost varijable a prije
izraza bila 5, nakon izraza vrijednost varijabli a i b biti će 6.
U izrazu b=a++, vrijednost varijable a (neka to bude 5) najprije će se
pridružiti varijabli b (znači, b=5), a nakon toga će se uvećati za jedan
(a=6).
Znači, nakon izraza b=a++, vrijednost varijable a će biti 6, dok će
vrijednost varijable b biti 5.
Isto se događa i s operatorom dekrement.
FOR PETLJA


Naredba for najčešće se koristi u programima u kojima
je broj ponavljanja unaprijed poznat.
Opći oblik (sintaksa) naredbe for je:
for (inicijalizacija; uvjet; promjena vrijednosti){
naredba (blok naredbi) za ponavljanje;
}
Inicijalizacija je postupak postavljanja varijable koja
kontrolira ponavljanje na početnu vrijednost
 Ponavljanje će se nastavljati sve dok je ispunjen uvjet
ponavljanja
 Promjena vrijednosti je dio u kojem se definira način
promjene stanja kontrolne varijable

GRAFIČKI PRIKAZ:
KAKO SE IZVRŠAVA NAREDBA FOR?

Vrijednost kontrolne varijable se (inicijalizacijom) postavi
na početnu vrijednost

Provjerava se istinitost uvjeta.

Ako je rezultat različit od nule, izvršava se naredba (blok
naredbi) unutar for naredbe.

Ako je rezultat jednak nuli, ponavljanje se prekida i program
nastavlja s izvršavanjem prvom naredbom iza naredbe for.

Vrijednost kontrolne varijable se mijenja na način na koji
je zadana promjena vrijednosti.

Povratak na korak broj 2
PRIMJER - FOR PETLJA

Naredbom:
for (i=1;i<=5;i++){
printf("Danas je lijep suncan dan!\n");
}
na zaslon će se pet puta ispisati tekst "Danas je
lijep suncan dan!" (svaki puta u novom redu zbog
znakovne konstante \n)
WHILE PETLJA

Kada broj ponavljanja nije unaprijed poznat, već ovisi o
uvjetu i kad se uvjet treba provjeriti na početku bloka naredbi
koristi se while naredba oblika:
inicijalizacija
while (uvjet){
naredba (blok naredbi);
}

Naredbe unutar while ponavljaju se sve dok je uvjet različit od
nule. Prilikom primjene while petlje potrebno je voditi računa
o tome da se izbjegne beskonačna petlja
GRAFIČKI PRIKAZ:
PRIMJER - WHILE

Program ispisuje sve dvoznamenkaste parne brojeve.
#include<stdio.h>
main() {
int i=10;
while (i<100) {
printf("%d, ",i);
i+=2;
}
}
PETLJA DO - WHILE


Do-while naredba koristi se u slučajevima u kojima se
uvjet o kojem ovisi ponavljanje provjerrava tek na
kraju bloka naredbi.
Opći oblik do-while naredbe:
inicijalizacija;
do {
blok naredbi;
}while (uvjet);
GRAFIČKI PRIKAZ:
PRIMJER – DO -WHILE

Program ispisuje sve dvoznamenkaste parne brojeve.
#include<stdio.h>
main() {
int i=10;
do {
printf("%d, ",i);
i+=2;
} while (i<100)
}