Upload
hien
View
52
Download
1
Embed Size (px)
DESCRIPTION
Primjena računala ak.god. 2013/2014. Pomorski fakultet u Splitu Nastavnici: dr.sc. Anita Gudelj mag.ing. Mirko Čorić. PROGRAMSKI JEZIK C. Primjer C programa. Primjer jednostavnog C programa: #include void main() { /* moj prvi program u C jeziku*/ - PowerPoint PPT Presentation
Citation preview
1
Primjena računalaak.god. 2013/2014
Pomorski fakultet u Splitu
Nastavnici:
dr.sc. Anita Gudelj
mag.ing. Mirko Čorić
2
PROGRAMSKI JEZIK
C
3
Primjer C programa• Primjer jednostavnog C programa:
#include <stdio.h>void main()
{ /* moj prvi program u C jeziku*/
int a,b;a=3;b=4;printf(“Zbroj brojeva %d i %d je %d\n”,a,b,a+b);
}• Program je uveden kako bi se prikazali neki od sintaksnih
elemenata sa sljedećih slajdovaZADATAK: Testirati program.
4
Od pisanja do izvršavanja programa• Unos izvornog programa (source code)Unos izvornog programa (source code)
– ASCII uređivač teksta (editor)• Prevođenje izvornog programa u relokatibilni program
– Poziv prevoditelja (compiler)– Otkrivanje pravopisnih pogrešaka (sintax errors)– Ispravci izvornog koda i ponovno prevodenje
• Poziv povezivača (link)Poziv povezivača (link)– Pogreške koje otkriva povezivač
• Izvođenje izvršnog programaIzvođenje izvršnog programa– Zadavanje potrebnih ulaznih podataka– Provjera programa na osnovi test podataka– Pogreške koje se otkrivaju prilikom izvršenja (run time– errors)– Logičke pogreške
5
Struktura C programa• C program se sastoji od
– imenovanih blokova koji se nazivaju funkcije • u C programu mora postojati glavna (main)
funkcija koja predstavlja mjesto gdje počinje izvršenje programa – “Glavni” program = funkcija main() (fiksno
ime)
• Pravilo pisanja funkcije main:
int int main() main() void void main() main() {{ iliili {{ Blok naredbi Blok naredbiBlok naredbi Blok naredbi
return return 00; ; }} }}
6
Opća struktura C programa
• Tijelo funkcije (blok naredbi) se sastoji od naredbinaredbi unutar vitičastih zagradavitičastih zagrada
• Osnovni opis bloka:– Blok započinje znakom { , a završava znakom }
– Blok obuhvaća (sadrži) deklaracije/definicije, naredbe i neimenovane blokove
– Svaka definicija/deklaracija i naredba mora završavati znakom ; ;
– Blok ne završava znakom ;; tj. iza znaka } ne piše se ;
7
Primjer
/* moj prvi program u C jeziku*//* moj prvi program u C jeziku*/
#include#include < <stdio.hstdio.h>> /*/*UUkljukljuccuje datotekuje datotekuu zaglavlja zaglavlja stdio.h */ stdio.h */ voidvoid main main{{ /* Pocetak bloka *//* Pocetak bloka */ int a,b;int a,b;
a=3;a=3;b=4;b=4;printf(“Zbroj brojeva %d i %d je %d\printf(“Zbroj brojeva %d i %d je %d\
n”,a,b,a+b);n”,a,b,a+b); /*funkcija za ispis na monitor*//*funkcija za ispis na monitor*/
/* kraj bloka*//* kraj bloka*/
}}
Da bismo mogli koristiti funkcije iz Da bismo mogli koristiti funkcije iz standardne biblioteke zadustandardne biblioteke zadužženeeneza ulaz i izlaz podataka program za ulaz i izlaz podataka program zapozapoččinjemo naredbominjemo naredbom
KOMENTAR
Direktiva predprocesoru
Glavna funkcija
Tijelo funkcije
8
KOMENTARI
• Sa znakovima /* otvara se prostor za komentar, a sa znakovima */ se zatvara
• U C++ -u koristi se, za kraće komentare u istoj programskoj liniji, još i dvostruka kosa crta
• c = a + b ; /* c je zbroj od a i b */
• c = a + b ; // c++ je zbroj od a i b
9
Opća pravila pisanja C programa• C je jezik slobodnog formata
– mjesto početka naredbe u retku je proizvoljno– svaka izvršna naredba mora završavati znakom ;
• Dopušteno je stavljanje više naredbi u istom retkuPr: int i,n; printf("Unesite n: "); scanf("%d", &n);int i,n; printf("Unesite n: "); scanf("%d", &n);
• C C pravi razlikupravi razliku izme izmeđđu velikih i malih slovau velikih i malih slova• Ključne riječi se pišu malim slovima. Npr:
mainprintfdo
10
Vježba 2
11
Opća struktura C programa-ponavljanje-
12
Osnovni elementi jezika C
• Skup znakova• Identifikatori• Ključne riječi• Osnovni tipovi podataka
13
Skup znakova
• Programski jezik C koristi sljedeći skup znakova:– velika i mala slova engleske abecede A-Z i a-z
_– znamenke 0-9 – specijalne znakove:
+ - * / = % & #! ? ^ " ’ ~ \ |< > ( ) [ ] { }: ; . , _ (bjelina)
14
Identifikatori
• Identifikatori su imena koja pridružujemo različitim elementima programa – varijablama, poljima i funkcijama.
• Pravila za pisanje identifikatora:– Sastoje se od slova i brojeva (znamenki),
s tim da prvi znak mora biti slovo– Velika i mala slova se razlikuju– Znak (donja crta) smatra se slovom– Duljina identifikatora je proizvoljna
15
Ključne riječi
16
VARIJABLE, TIPOVI PODATAKA
17
VARIJABLE• VARIJABLA je simboličko ime za memorijsku VARIJABLA je simboličko ime za memorijsku
lokaciju u kojoj se podaci mogu pohraniti lokaciju u kojoj se podaci mogu pohraniti i i naknadno pozivati naknadno pozivati i kojemu je dodijeljeno ime– Općenito: promjenljiv podatak
• Identifikator varijabla (Identifikator varijabla (ime varijableime varijable)) je imenovani je imenovani dio memorijedio memorije
TIP PODATKATIP PODATKA određuje način korištenja varijableodređuje način korištenja varijable
18
Varijable
• Simbolički se prikazuje pravokutnikom uz koji stoji ime
• Smještaj u memoriji računala
x y
x y... ...
19
Pravila ze kreiranje valjanih imena Pravila ze kreiranje valjanih imena varijablivarijabli
• Identifikator varijableIdentifikator varijable
• Primjeri– salary // valjani identifikator– salary2 // valjani identifikator – 2salary // nevaljani identifikator (započinje
znamenkom)– _salary // valjani identifikator – Salary // valjani identifikator, ali se razlikuje od
salary– plaća // nevaljani identifikator (u imenu se koristi znak
'ć')
20
IDENTIFIKATOR: primjeriIDENTIFIKATOR: primjeri
KeKelllyFamilylyFamily KvocijentKvocijentKEKELLLYFamilyLYFamily PostotakPostotakKeKelllyFAMILYlyFAMILY Ime_i_PrezimeIme_i_Prezime
OK.OK.
aandnd switchswitch
coutcout ..FILE..FILE
*
A-1 007A-1 007
Polje 2Polje 2 Varaždin Varaždin
21
TABELA OSNOVNIH TIPOVA PODATAKA
TIP PODATKATIP PODATKA TOČNOSTTOČNOSTMEMORIJSKI MEMORIJSKI PROSTORPROSTOR U U BAJTOVIMABAJTOVIMA
KLJUČNA RIJEČKLJUČNA RIJEČ
znak (CHARACTER)znak (CHARACTER) 1 char
cijeli broj (INTEGER)cijeli broj (INTEGER) 2( ili 4) int
realni broj s pomičnom realni broj s pomičnom decimalnom točkomdecimalnom točkom
(FLOATING POINT)(FLOATING POINT)7 decimalnih znamenki 4 float
realni broj dvostruke realni broj dvostruke točnostitočnosti
(DOUBLE )(DOUBLE )
15 decimalnih znamenki
8 double
22
TABELA DODATNIH TIPOVA BROJEVA
TIP PODATKATIP PODATKA RASPON RASPON VRIJEDNOSTIVRIJEDNOSTI TOČNOSTTOČNOST
MEMORIJSKI MEMORIJSKI PROSTOR U PROSTOR U BAJTOVIMABAJTOVIMA
KLJUČNE RIJEČIKLJUČNE RIJEČI
kratki cijeli broj (SHORT INTEGER)
od –128 do 127 1 (ili 2) short int
dugi cijeli broj (LONG INTEGER)
od –2147483648 do 2147483647
4 long int
realni broj maksimalane točnosti
(LONG DOUBLE )
od ± 3.4 · 10-4932 do ± 1.1 · 104932
18 decimalnih znamenki
10 long double
23
VARIJABLE...• Varijable koje definira korisnik moraju biti deklarirane prije Varijable koje definira korisnik moraju biti deklarirane prije
nego će se koristiti u programunego će se koristiti u programu
• Osnovni format deklariranja varijabli jetip podatka ime_var1, ime_var2, ... ;
– TIP PODATKATIP PODATKA određuje način uporabe varijableodređuje način uporabe varijable•tip podataka jedan od četiri osnovna tipa podataka: integer, character, float ili double
•Vrijednost varijabli ovisi o njenom tipu podatkaVrijednost varijabli ovisi o njenom tipu podatka•PrimjericePrimjerice, , cjelobrojna (cjelobrojna (integerinteger)) varijabla može varijabla može poprimiti samo cjelobrojne vrijednostipoprimiti samo cjelobrojne vrijednosti ( (prpr., 2, 100, -12)., 2, 100, -12)
DEKLARIRATI VARIJABLU ZNAČI JEDNOZNAČNO ODREDITI NJEZIN TIP
int a, b, c;
24
Deklaracija i inicijalizacija
int i;Deklaracija varijable ii (najavili za korištenje, odnosno zauzeli prostor u memoriji)
Ne znamo što se trenutno nalazi upisano u toj varijabli jer to zavisi od prethodnog stanja u memoriji
int i;i=0;
Nakon deklaracije negdje u programu moramo postaviti neku početnu vrijednost. Ovo se naziva inicijalizacija.
int i=0;Programeri često rade deklaraciju i inicijalizaciju zajedno
Ovo se naziva definicijom varijable.
int c, i=7,b=0; Deklaracije i definicije se mogu kombinirati.
25
• Operator pridruživanja (=)• Varijabli pridružuje vrijednost Varijabli pridružuje vrijednost
• Primjer:Primjer:int sum; int sum;
sum = 500 + 15;sum = 500 + 15;
• Program deklarira varijablu Program deklarira varijablu sumsum kao tip INTEGER kao tip INTEGER
(int)(int)• U C-u vU C-u varijabli arijabli sumsum se pridružuje se pridružuje
vrijednost 500+15vrijednost 500+15 koristeći operator koristeći operator pridruživanjapridruživanja
Što znači naredba ? k=k+1;
1
k 5 6
DEKLARACIJA I PRIDRUŽIVANJE
ISTOint sum = 500 + 15;
26
• Primjer deklaracije Primjer deklaracije integerinteger varijable varijable cijeli_broj cijeli_broj ::
intint cijeli_broj; cijeli_broj;cijeli_broj = cijeli_broj = 123;123;
• Primjer deklaracije float varijable realni_broj : floatfloat realni_broj;realni_broj;realni_broj= realni_broj= 123.4567; 123.4567;
• Primjer deklariranja double varijable tocniji_realni_br : doubledouble tocniji_realni_brtocniji_realni_br;
tocniji_realni_brtocniji_realni_br ==1234567.12345678E-81234567.12345678E-8;
• Primjer deklariranja znakovne varijable Primjer deklariranja znakovne varijable slovoslovo : charchar slovo;slovo;slovo = slovo = 'A'A';';
Primjeri
27
Domaći rad1. Koje od navedenih deklaracija varijabli su valjane?
int a,b,c;int n = -100;long m = 2, p = 4;int2k;double x = 2 * m;float y = y * 2;double d = 0.67;float _f = 0.52;char c = '$';
2. Koji od navedenih identifikatora su valjani?identifierseven_11_gross-incomegross$income2by2average_weight_of_a_large_pizzavariable
prosječna_vrijednost3. Deklarirajte varijable za sljedeće entitete:
Broj godina osobe.Plaća zaposlenika.Broj riječi u riječniku.Slovo abecede.
28
Funkcija printf
29
Što će ispisati sljedeći programi?Što će ispisati sljedeći programi?Kako će ispisati?Kako će ispisati?
#include#include <stdio.h> <stdio.h>
voidvoid main()main()
{{ printfprintf("Naredbe se završavaju točka-zarezom.");("Naredbe se završavaju točka-zarezom.");
printfprintf("Izvršavanje programa počinje prvom ("Izvršavanje programa počinje prvom naredbom funkcije main().\n"); naredbom funkcije main().\n");
}}
30
Funkcija printf
• Funkcija printf se može javiti u dva oblika. Prvi je jednostavniji:
printf(“neki tekst u navodnicima sa specijalnim znakovima printf(“neki tekst u navodnicima sa specijalnim znakovima \n\n””););
• Drugi oblik je znatno značajniji:– printf(“%d %d %e tekst %c\n”,in,60,fl,ch);
Poruka bi bila odštampana na ekranu u datom obliku.
Funkcija printf u ovom obliku opet štampa string koji joj je prvi argument‚ ali ono što je iza % mijenja se redom sa argumentima koji slijede. Tako se umjesto %d štampa varijabla in i to kao cjelobrojna (%d znači štampaj kao cjelobrojnu varijablu).
Znak za novi red koji je čest sastavni elemenat naredbe printf.
31
FunkcijaFunkcija printfprintf• Poziv funkcije printf izgleda:printf ("printf ("opis_formataopis_formata",varijabla,varijabla,...); ",varijabla,varijabla,...);
• PrimjerPrimjer
printf("Rezultat je %d", 5);printf("Rezultat je %d", 5);
• Opis_formata može sadržavat tekst koji će se Opis_formata može sadržavat tekst koji će se ispisatiispisati
• Ukoliko prikazujete vrijednost jedne ili više varijabli, Ukoliko prikazujete vrijednost jedne ili više varijabli, potrebno je na odgovarajuće mjesto upisati opis potrebno je na odgovarajuće mjesto upisati opis formata pretvorbe za svaku varijablu formata pretvorbe za svaku varijablu Sastoji se od oznake postotka (%) iza kojeg slijedi slovo Sastoji se od oznake postotka (%) iza kojeg slijedi slovo
slovo opisuje tip podatka koji se upotrebljavaslovo opisuje tip podatka koji se upotrebljava
• Očekuje se da broj argumenta nakon stringa u naredbi Očekuje se da broj argumenta nakon stringa u naredbi printfprintf bude jednak broju “%” unutar stringabude jednak broju “%” unutar stringa
32
Funkcija printf
• Formati ispisa imaju sljedeće značenje (navodimo samo Formati ispisa imaju sljedeće značenje (navodimo samo neke važnije):neke važnije):– %d cijeli brojevi– %f realni brojevi– %c znak– %bd cijeli broj sa b znamenki– %a.bf realni broj sa a pozicija i b decimalnih mjesta,
podrazumjeva se a>b– %e eksponencijalni zapis– %x heksadecimalni zapis– %o oktalni zapis...
Jedan ili više opisa formata je smješteno između Jedan ili više opisa formata je smješteno između dvostrukih navodnikadvostrukih navodnika
33
Modifikatori za formatiranje ispisaSpecijalni znakovi:
\n prelazak u novi red
\t horizontalni tabulator
\v vertikalni tabulator
\b pomak za mjesto unazad (backspace)
\r postavljanje kursora na početak linije
\f nova stranica
\a zvučni signal
\\ kosa crta ulijevo
\” dvostruki navodnik
34
Slijed naredbi
#include <stdio.h>
void main()
{
int zbroj;
zbroj = 500 + 15;
printf("Zbroj 500 i 15 iznosi %d\n", zbroj);
}
Sljedeći program ispisuje zbroj brojeva 500 i 15.
35
Sljedeći program ispisuje dvije cjelobrojne vrijednosti
razdvojene horizontalnim tabulatorom : \t
#include#include <stdio.h> <stdio.h>voidvoid main() main(){{ intint broj1, broj2; broj1, broj2;broj1 = 10;broj1 = 10;broj2 = 15;broj2 = 15;
printfprintf("%d\t%d\n", broj1,broj2);("%d\t%d\n", broj1,broj2);}}
36
Primjer programa koji pokazuje uporabu svih tipova podataka i formatiranje ispisa realnih brojeva:
##includeinclude <stdio.h> <stdio.h>main()main(){{
intint broj=10; broj=10;floatfloat novac=342.75; novac=342.75;charchar slovo='A'; slovo='A';doubledouble pi=3.14159265359; pi=3.14159265359;printf("printf("VrijednostVrijednost brojabroja jeje %d.\n", %d.\n",brojbroj););printf("printf("Kolicina novaca jeKolicina novaca je %.2f Kn.\n", %.2f Kn.\n", novacnovac ); );printf("printf("OvoOvo je je slovo slovo %c.\n", slovo );%c.\n", slovo );printf("printf("MatematickaMatematicka konstantakonstanta pi pi nana jedanaest decimalajedanaest decimala iznosiiznosi %.11f.\n", pi ); %.11f.\n", pi );
}}
37
KONVERZIJA TIPA PODATKA #include#include <stdio.h> <stdio.h>
voidvoid main() main()
{{ intint broj1 = 7 broj1 = 7,, broj2 = 2; broj2 = 2;
ffloatloat kvocijent = 0; kvocijent = 0;
kvocijent = broj1 / broj2;kvocijent = broj1 / broj2;
printf("%d dijeljeno s %d je printf("%d dijeljeno s %d je %%f\f\n",broj1,broj2,kvocijent );n",broj1,broj2,kvocijent );
}}
Ispis programa:7 dijeljeno s 2 je 3.000000
38
ZADATAK
• Zadano je Z=‘#’, X=-14.57889 i Y= 99.
• U programu treba ispisati vrijednosti X i Y, na slijedeći način:
– X će biti ispisan na 2 decimalna mjesta, zatim se ispisuje tabulator (\t), te znak Z, jedan razmak pa ASCII vrijednost znaka Z; nakon toga ide novi red, a zatim ispis broja Y dekatski, oktalno i heksadecimalno.
39
#include <stdio.h>void main(){ int Y=99; float X=-14.57889; char Z=’#’;
printf(“Ispis rezultata: \n”); printf(“ %.2f \t %c %d \n %d %o %x \n”, X,Z,Z,Y,Y,Y);
}
40
Brzi test 1
• Koja su od ovih imena pravilni nazivi varijabli
_a37 4aB a4b a 37 int int37 a&32
Navedite tipove podataka i ključne riječi
Navedite formate ispisa
Navesti primjer ispisa cjelobrojne varijable a.
41
UNOS PODATAKA S TIPKOVNICE u C
• Funkcija Funkcija scanfscanf• služi učitavanju podataka sa standardnog služi učitavanju podataka sa standardnog
ulaza za vrijeme ulaza za vrijeme izvođenjaizvođenja programa (na programa (na konzoli) konzoli)
• Opća forma:Opća forma:
scanf(“kontrolni_string”,&arg_1,&arg_2, ...,&arscanf(“kontrolni_string”,&arg_1,&arg_2, ...,&arg_n);g_n);
• gdje je kontrolni string konstantni znakovni niz gdje je kontrolni string konstantni znakovni niz koji sadrži informacije o vrijednostima koje se koji sadrži informacije o vrijednostima koje se učitavaju u argumente arg 1,. . . ,arg n (%d, učitavaju u argumente arg 1,. . . ,arg n (%d, %f, %c)%f, %c)
42
UNOS PODATAKA S TIPKOVNICE u C
#include <stdio.h>
void main() // program s primjerom unosa s tipkovnice
{ int broj;
printf("Unesite broj:");
scanf("%d", &broj);
printf("Broj koji ste unijeli je %d.\n", broj);
}
43
KonstanteKonstante
1. Konstante koje započinju s 0 (nula) interpretiraju se kao oktalne
2. Konstante koje započinju s 0x interpretiraju se kao heksadecimalne
3. Simboličke konstante
44
Simboličke konstante
• umjestoumjesto float Opseg = 2. * r * 3.14159265359;float Opseg = 2. * r * 3.14159265359;
• float Povrsina = r * r * 3.14159265359;float Povrsina = r * r * 3.14159265359;• double Oplosje = 4. * r * r * 3.14159265359;double Oplosje = 4. * r * r * 3.14159265359;• može se pisatimože se pisati
const double Pi = 3.14159265359;const double Pi = 3.14159265359;• iliili• #define Pi = 3.14159265359;#define Pi = 3.14159265359;• i ondai onda• float Opseg = 2. * r * Pi;float Opseg = 2. * r * Pi;• float Povrsina = r * r * Pi;float Povrsina = r * r * Pi;• double Oplosje = 4. * r * r * Pi;double Oplosje = 4. * r * r * Pi;
45
Napiši program kojim ćeš izračunati opseg i površinu kruga za proizvoljno zadani radijus.
• ALGORITAM:
Definiranje konstante PIDefiniranje varijable rRačunanje opsega i površineIspis dobivenih rezultata
46
#include<stdio.h>void main(){
const float PI=3.14;int r=10;float P=r*r*PI;float O=2*r*PI;printf("Opseg je %f\n",O);printf("Povrsina je %f\n",P);
}
47
Rješenje primjera u C-u/* Aritmeticka Sredina*/#include <stdio.h>void main () { int i, j, k; float sredina; printf(“Unesi tri broja\n”);scanf("%d,%d,%d", &i,&j,&k); sredina = (i + j + k) / 3.; printf ("Aritmeticka sredina brojeva %d, %d i" " %d iznosi %f", i, j, k, sredina);printf(“\ndek %d,okt %o, heksa %x\n”,i,i,i);}
Način prekida znakovnog niza i
nastavak u novom retku
48
Za domaći:
• Korištenjem scanf učitajte dekadsku vrijednost s tipkovnice u integer varijablu broj_ucenika, a potom je ispišite pomoću printf u dekadaskom, oktalnom i heksadekadskom obliku.
• Korištenjem scanf učitajte vrijednost float varijable cijena_tel_imp , a potom je ispišite pomoću printf na dva decimalna mjesta.
• Korištenjem scanf učitajte jedan znak s tipkovnice u varijablu operator, a potom ga ispišite. Preskočite razmake , tabulatore i oznake novog reda, prije upisa.
Dodatak:
• Funkcija scanf(),printf(),”Cast” operatori
49
Funkcija scanf()
- Omogućava formatirani unos podataka.
scanf(“kontrolni string”,&arg1,&arg2,…);
- Kontrolni string određuje format unosa podataka-Oznake formata (npr:%d,%f,%c itd) određuju koji će se tip podatka unositi s tastature, te taj podatak pridružuju argumentima.
Pr. int a;
scanf(“%d”,&a);
Dakle, unosimo cijeli broj i spremamo ga u varijablu a.
-Prazno mjesto(space),\n,\t omogućuju preskakanje praznina ulaznog niza.
Pr. char a,b;
scanf(“ %c %c”,&a,&b);
-U kontrolnom stringu se mogu pojaviti i drugi znakovi.
-Njima moraju odgovarati identični znakovi na ulazu.
Pr. float a;
int j;
scanf(“%f,%d”,&a,&j);
Tada ulaz mora biti u obliku: npr. 1.456,8
Pr. scanf(“%d/%d/%d”,&dan,&mjesec,&godina);
Funkcija printf()
- Omogućava formatirani ispis podataka.
printf(“kontrolni string”, arg1,arg2,…);
Pr. printf(“ Nekakva poruka bez argumenata”);
Pr. Int i=5;
printf(“Vrijednost varijable i je %d”,i);
Pr. printf(“%2d”,i); varijabla “i” će prilikom ispisa na ekranu zauzeti minimalno 2 pozicije
Pr. float var = 123.3456;
printf(“%.2f”,var); broj se ispisuje s 2 decimale
printf(“%8.3f”,var); broj se ispisuje s 3 decimale, a zauzima najmanje 8 pozicija prilikom ispisa
“Cast” operatori
-Tip rezultata aritmetičkih izraza gdje su operandi istog tipa, odgovara tipu operanada.
Pr. int j = 2;
int i = 7;
float rez;
rez = i / j;
Rezultat izraza “i / j” je “int” tipa, dakle broj 3.
- U izrazima ćemo često imati imati operande različitog tipa. U tom slučaju se konverzija odvija prema višem tipu podataka.
Pr. int x;
float y;
double z;
rez =x * y - z; rez je tipa “double”
Pr. int i = 5;
double d = 2.85;
d = i; cjelobrojna vrijednost varijable “i” se najprije pretvori u odgovarajuću realnu vrijednost i onda se pridruži varijabli “d”.
i = d; varijabli “i” se pridruži cjelobrojna vrijednost varijable d,tj.odbaci se decimalni dio.
Eksplicitna pretvorba: (tip_podatka) operand; operand može
biti varijabla ili aritmetički izraz.
Pr. rez = (float) (i / j); Rezultat izraza (i / j) je sam po sebi “int” tipa (jer su oba operanda u izrazu “int” tipa).
Naredbom (float)(i / j) se taj rezultat tipa “int” pretvara u tip “float” (3 3.000000).
Nadalje: rez = (float) i / j; “cast” operator je primjenjen samo na varijablu “i” koja je sada pretvorena u “float” tip podatka.
Rezultat cijelog izraza “(float)i / j” je tipa float zbog konverzije tj. pretvorbe prema višem tipu podatka.
58
2. OPERATORI
2.1. Operatori pridruživanja
2.2. Aritmetički operatori
2.3. Relacijski i logički operatori
AritmetičkiAritmetičkioperatorioperatori
*
UUnarni operatorinarni operatori OOperatorperatorii koji djeluju na jednom koji djeluju na jednom
operanduoperandu
predznacipredznaci+X+X unarni plusunarni plus -X -X unarni minusunarni minus
inkremeninkrementiranjetiranje X++X++ uvećaj nakonuvećaj nakon++X++X uvećaj prijeuvećaj prije
dekremendekrementiranjetiranjeX--X-- umanji nakonumanji nakon--X--X umanji prijeumanji prije
*
OperatorOperatorii inkrementiranja/dekrementiranjainkrementiranja/dekrementiranja
*
• Operator Operator inkrementiranjainkrementiranja ++ povećava ++ povećava
vrijednost varijable za 1vrijednost varijable za 1• Izraz Izraz x++;x++; je ekvivalentan izrazu je ekvivalentan izrazu
x=x+1;x=x+1;
• Operator Operator dekrementiranjadekrementiranja -- smanjuje -- smanjuje
vrijednost varijable za 1vrijednost varijable za 1• Izraz Izraz x--;x--; je ekvivalentno izrazu je ekvivalentno izrazu x=x-x=x-
1;1;
Prefiks i postfiks notacijePrefiks i postfiks notacije
x++ ili ++x x++ ili ++x
x-- ili --xx-- ili --x
*
Operatore inkrementiranja/dekrementiranja moguće Operatore inkrementiranja/dekrementiranja moguće je pisati ispred i iza varijable:je pisati ispred i iza varijable:
U U prefiksprefiks notaciji (++x, --x) varijabla će biti notaciji (++x, --x) varijabla će biti promijenjena prije no što će njena vrijednost biti promijenjena prije no što će njena vrijednost biti iskorištena u složenom izrazuiskorištena u složenom izrazu
U postfiks notaciji (x++, x--) varijabla će biti promijenjena nakon što će njena vrijednost biti iskorištena u složenom izrazu
Prefix oblik:Prefix oblik:
... i ji = 2; 2 ?j = ++i; 3 3
... i ji = 2; 2 ?j = --i; 1 1
Postfix oblik: Postfix oblik:
...... ii jj
i = 2;i = 2; 22 ??
j = i++;j = i++; 33 22
...... ii jji = 2;i = 2; 22 ??j = i--;j = i--; 11 22
Prefiks i postfiks notacijePrefiks i postfiks notacije
*
Što će se ispisati:Što će se ispisati:#include <stdio.h>#include <stdio.h>void main()void main(){int i=5;{int i=5;
printf("%d\n",-i);printf("%d\n",-i);printf("%d\n",--i);printf("%d\n",--i);printf("%d\n",i++);printf("%d\n",i++);printf("%d",i);printf("%d",i);
}}
Ako su početne vrijednosti cjelobrojnih Ako su početne vrijednosti cjelobrojnih varijabli zadane kao: varijabli zadane kao: int i=1, j=2, k=7;
kolike će biti vrijednosti nakon izvršavanja kolike će biti vrijednosti nakon izvršavanja sljedećih naredbi.sljedećih naredbi.
i+=j;
j=i++; k*=i;
BBinarni operatoriinarni operatori
zbrajanjezbrajanje X + YX + Y oduzimanjeoduzimanje X - YX - Y množenjemnoženje X * YX * Y dijeljenjedijeljenje X / YX / Y modulomodulo X % YX % Y
Binarni su oni operatori koji se upotrebljavaju u Binarni su oni operatori koji se upotrebljavaju u kombinaciji s kombinaciji s dva operandadva operanda
Operacija modulo (%) djeluje na cjelobrojnim operandima i Operacija modulo (%) djeluje na cjelobrojnim operandima i kao rezultat daje ostatak pri cjelobrojnom dijeljenju operanadakao rezultat daje ostatak pri cjelobrojnom dijeljenju operanada
int a, b;int a, b;a = a = 99; b = ; b = 22;;
Izraz Rezultat
a + b 11
a - b 7
a * b 18
a / b 4
-a/b -4
a % b 1
Primjer
float a, b;float a, b;
a = 12.5; b = 2.;a = 12.5; b = 2.;
Izraz Rezultat
a + b 14.5
a - b 10.5
a * b 25.0
a / b 6.25
a % b pogreška
Prioritet osnovnih aritmetiPrioritet osnovnih aritmetiččkih kih operatoraoperatora
1. 1. ** / / % %
2. 2. ++ - - Ako u izrazu ima više operatora jednakog prioriteta,
izračunavaju se slijeva nadesno Npr:
2 + 3 / 2 * 4 – 5 * 6 % 82 + 3 / 2 * 4 – 5 * 6 % 8
2 +2 + 1 1 * 4* 4 – – 30 30 % 8% 8
22 + + 4 4 –– 66
6 6 – – 66
00
Zadatak 1:Zadatak 1: Treba izračunati zbroj, razliku, Treba izračunati zbroj, razliku, umnožak, kvocijent i ostatak dva cijela brojeva. umnožak, kvocijent i ostatak dva cijela brojeva. Ispis neka bude oblika:Ispis neka bude oblika:
Unesi prvi broj:Unesi prvi broj:UUnesi drugi broj: nesi drugi broj: .... + .... = ........ + .... = ........ - .... = ........ - .... = ........ * .... = ........ * .... = ........ / .... = ........ / .... = ........ .... %%.... = ........ = ....
Zadatak 2: Zadatak 2: Potrebno je izračunati srednju Potrebno je izračunati srednju vrijednost po volji izabrana četiri cijela broja. Ispis vrijednost po volji izabrana četiri cijela broja. Ispis neka bude oblika:neka bude oblika:
Unesi cetiri cijela broja:Unesi cetiri cijela broja:
Srednja vrijednost brojeva Srednja vrijednost brojeva
...., ...., .... i .... je ........., ...., .... i .... je .....
Operator dodjele tipaOperator dodjele tipa
Deklaracija i definicija varijabli:Deklaracija i definicija varijabli:int Brojnik = 1;int Brojnik = 1; int Nazivnik = 3;int Nazivnik = 3;
Želimo podijeliti dvije cjelobrojne varijable, a Želimo podijeliti dvije cjelobrojne varijable, a da rezultat bude realni broj:da rezultat bude realni broj:
Ovo je OK:Ovo je OK:float TocniKvocijent = (float)Brojnik / (float)Nazivnik;float TocniKvocijent = (float)Brojnik / (float)Nazivnik;
I ovo:I ovo: float TocniKvocijent = float(Brojnik) / float(Nazivnik);float TocniKvocijent = float(Brojnik) / float(Nazivnik);
Ali ovo nije:Ali ovo nije:float Krivo = Brojnik / Nazivnik; float Krivo = Brojnik / Nazivnik; // ispisuje nulu!!!// ispisuje nulu!!!
*
Zadatak : Zadatak : Što će se ispisatiŠto će se ispisati##include <stdio.h>include <stdio.h>void main()void main()
{{int a = 10;int a = 10;float b=10.;
printf("a/3 = %d \n", a/3);
printf("b/3 = %f \n",b/3);
float c=a/3;
printf("c = %f \n", c);
c = (float)a/3; //primjena operatora dodjele tipa (float)
printf("c = %f \n", c);
c=b*a;
printf("c = %f \n", c);
}}
SkraSkraćena notacijaćena notacija
U programiranju su česte operacije tipa: U programiranju su česte operacije tipa: a=a+b;a=a+b; Za operacije ovog tipa u C-u Za operacije ovog tipa u C-u susu uveden uvedenee skraćen skraćenee
notacijnotacijee::a+=b;a+=b; a-=b;a-=b; a*=b;a*=b; a a/=b;/=b; a%=b;a%=b;koje koje znače redom:znače redom:a=a+b;a=a+b; a=a-b; a=a*b;a=a-b; a=a*b; a=a a=a/b;/b; a=a%b;a=a%b;
Već ste (ja se nadam) uočili znak Već ste (ja se nadam) uočili znak ;; koji stoji na kraju koji stoji na kraju svake od naredbi i znači kraj naredbesvake od naredbi i znači kraj naredbe
2.3. Relacijski i 2.3. Relacijski i logički operatori logički operatori
*
Logički tipovi podatakaLogički tipovi podataka
boolbool ImamLiMnogoNovaca =FALSE; ImamLiMnogoNovaca =FALSE;boolbool JeLiVamDosadno = TRUE; JeLiVamDosadno = TRUE;
TRUE = 1; TRUE = 1; FALSE = 0;FALSE = 0;
George BoolGeorge Bool (1815-1864), (1815-1864), engleski matematičar, engleski matematičar,
utemeljitelj logičke algebreutemeljitelj logičke algebre
*
Relacijski operatoriRelacijski operatori
*
Tvore atomne sudoveTvore atomne sudoveOperatorOperator ZnačenjeZnačenje Logički izrazLogički izraz RezultatRezultat
==== jednakojednako 1=1= =1=1 1 (Istina)1 (Istina)
!=!= različitorazličito 2!=2+22!=2+2 1 (Istina)1 (Istina)
>> većeveće 5>65>6 0 (Laž)0 (Laž)
>=>= veće ili jednakoveće ili jednako 6>=66>=6 1 (Istina)1 (Istina)
<< manjemanje 7<107<10 1 (Istina)1 (Istina)
<=<= manje ili jednakomanje ili jednako 7<=67<=6 00 (Laž)(Laž)
Znakovi su valjani operandi jer su predstavljeni numeričkim kodovima
Primjer: (prema ASCII kodu) 'A' < 'F' // daje 1 (slično kao i 65 < 70)
Aritmetičke operacije imaju veći prioritet od logičkih.
Jednostavni logički izraziJednostavni logički izrazi
a = = ba = = boperand 1operand 1(subjekt)(subjekt)
operand 2operand 2(objekt)(objekt)
relacijarelacija(odnos)(odnos)
sudsud(tvrdnja)(tvrdnja)
*
Logički operatoriLogički operatori
*
Složeniji logički izrazi formiraju se Složeniji logički izrazi formiraju se pomoću logičkih operatorapomoću logičkih operatora
Operandi logičkih operatora su logički izraziOperandi logičkih operatora su logički izrazi
Vrijednost složenog logičkog izraza bit će 0 (laž) Vrijednost složenog logičkog izraza bit će 0 (laž) ili 1 (istina)ili 1 (istina)
OperatorOperator NazivNaziv PrimjerPrimjer
! x! x negacija (negacija (notnot)) !(5 == 5)!(5 == 5) // // dajedaje 0 0
x && yx && y konjunkcija (konjunkcija (and - and - logičko ’logičko ’ii’)’)5 < 6 && 6 < 5 < 6 && 6 < 77 // // dajedaje 11
x || yx || y disjunkcija (disjunkcija (or - or - logičko ‘logičko ‘iliili’)’) 5 < 6 || 6 < 55 < 6 || 6 < 5 // // dajedaje 1 1
PrimjerPrimjer
Kolike su vrijednosti varijabli k, k1 Kolike su vrijednosti varijabli k, k1 nakon što se izvrši sljedeći blok naredbinakon što se izvrši sljedeći blok naredbi
int k, k1,a=3;k=!(a==8);k1=(a+=3)>=8 || !0;
PrimjerPrimjer
// Ispitivanje istinitosti// Ispitivanje istinitosti
#include <stdio.h>#include <stdio.h>void main() void main() {{int x, t1, t2, test;int x, t1, t2, test;scanf("%d", &x);scanf("%d", &x);t1 = (x - x/3*3) t1 = (x - x/3*3) ==== 0; 0;t2 = t2 = ((xx % % 7) 7) ==== 0; 0;test = t1 || t2;test = t1 || t2;printf("x = %d test = %d\n",printf("x = %d test = %d\n", x,test)x,test);;
} }
Napisati program koji će utvrditi za učitani cijeli broj x je li dijeljiv i sa 3 i sa 4
definiraj cijele brojeve x, t1, t2, test učitaj (x) postavi t1 na rezultat ispitivanja djeljivosti x sa 3 postavi t2 na rezultat ispitivanja djeljivosti x sa 4 test = t1 i t2 ispiši (x, test) kraj
Primjer – rješenje u C-u
#include <stdio.h >#include <stdio.h >void main () void main () {{
int x, t1, t2, test;int x, t1, t2, test;scanf(“%d”, &x);scanf(“%d”, &x);t1 = (xt1 = (x%%3) == 0;3) == 0;t2 = (x%t2 = (x%44) == 0;) == 0;
testtest== t1 t1 &&&& t2; t2;printf(“x= %d printf(“x= %d t1=%d t2=%d t1=%d t2=%d test = %d\n”, x,test = %d\n”, x,t1,t2,t1,t2, test); test);}}
Složeni logički izraziSloženi logički izrazi
(a < b) && (c = = d) || (e > f)(a < b) && (c = = d) || (e > f)jednostavnijednostavnilog. izraz 1log. izraz 1
ssudud (tvrdnja)(tvrdnja)
jednostavnijednostavnilog. izraz 2log. izraz 2 jednostavnijednostavni
log. izraz 3log. izraz 3
llogičkiogički operator 1operator 1
*
llogičkiogički operator operator 22
Koja je vrijednost logičkog izraza ako cjelobrojne varijable Koja je vrijednost logičkog izraza ako cjelobrojne varijable imaju slijedeće vrijednosti a=b=1, c=d=2,imaju slijedeće vrijednosti a=b=1, c=d=2, ee = =4, f=3:4, f=3:
(a < b) && (c = = d) || (e > f)(a < b) && (c = = d) || (e > f)
00 11 11
00 11
11
&&&&
||||
ako je a ako je b (a b) je
točno (1) točno (1) točno (1)
točno (1) pogrešno (0) točno (1)
pogrešno (0) točno (1) točno (1)
pogrešno (0) pogrešno (0) pogrešno (0)
* * *
‘‘ili’ tablicaili’ tablica
*
ako je a ako je b (a& & b) je
točno (1) točno (1) točno (1)
točno (1) pogrešno (0) pogrešno (0)
pogrešno (0) točno (1) pogrešno (0)
pogrešno (0) pogrešno (0) pogrešno (0)
‘‘i’ tablicai’ tablica
Prioriteti ispitivanjaPrioriteti ispitivanja
(1) jednostavni logički izrazi(1) jednostavni logički izrazi
(2) negacije(2) negacije
(3) zagrade(3) zagrade
(4) konjunkcija(4) konjunkcija
(5) disjunkcija(5) disjunkcija
*
Zarez: operator razdvajanjaZarez: operator razdvajanja
i = 10, i + 5; i = 10, i + 5; // // rezultat: i=15rezultat: i=15
Koristi se za Koristi se za razdvajanje izrazarazdvajanje izraza u u naredbama.naredbama.
*
Operatori obnavljajućeg Operatori obnavljajućeg pridruživanjapridruživanja
Sastoje se od Sastoje se od operatoraoperatora i i znaka znaka jednakosti. jednakosti. Omogućavaju Omogućavaju kraći zapis kraći zapis naredbi:naredbi:
= += -= *= /= %== += -= *= /= %=
*
Primjeri s aritmetičkim Primjeri s aritmetičkim operatorima:operatorima:
int a;
a = 20;
a += 5;
a -= 5;
a *= 5;
a /= 5;
a %= 5
a = 20a = 20
a = a = a+a+55 a=25 a=25
a = a = a -5 a -5 a = 20a = 20
a = a = a * 5 a * 5 a = 100a = 100
a = a = a / 5 a / 5 a = 20a = 20
a =a = a%5 a%5 a =a = 0 0
*
Ekvivalentni Ekvivalentni izraziizrazi
Zadatak:Zadatak: Što će se ispisati: Što će se ispisati:
#include <stdio.h>#include <stdio.h>void main()void main(){{
int n = 10;n+=5; printf("n = %d \n", n);n-=20; printf("n = %d \n", n);n*=-2; printf("n = %d \n", n);n%=3; printf("n = %d \n", n);
}}
Dodatak:Dodatak:
Operatori po prioritetima (hijerarhija):Operatori po prioritetima (hijerarhija):
Operatori po prioritetimaOperatori po prioritetima
Unarni opUnarni op - - ! ! ++ ++ -- --
Aritm opAritm op ** / / % %
++ - -
Relacijski opRelacijski op < < <= <= > > >= >=
= == = != !=
Logičko ANDLogičko AND &&&&
Logičko ORLogičko OR ||||
op pridruživanjaop pridruživanja = += -= *= /= %== += -= *= /= %=
c = a*b + d/e;c = a*b + d/e;
c = (a*(b+d)) /e;c = (a*(b+d)) /e;
t < i +1; t < i +1; t < ( i+1 ); t < ( i+1 );
5*2 >= 10; 5*2 >= 10; (5*2) >= 10; (5*2) >= 10;
1 != 7 = = 0; 1 != 7 = = 0; (1 != 7) = = 0; (1 != 7) = = 0;
1 && !0 || 1 1 && !0 || 1 rezultat je1. rezultat je1.
1 && !(0 || 1)1 && !(0 || 1) rezultat je 0. rezultat je 0.
93
3. Kontrola toka program
94
3. Kontrola toka program
3.1. IF3.1. IF
3.2. IF-ELSE3.2. IF-ELSE
3.3. SWITCH3.3. SWITCH
95
NAREDBA if
Osnovni opći oblik ove naredbe Osnovni opći oblik ove naredbe je : je :
if( logički_if( logički_iizraz )zraz )
{{ blok_naredbi blok_naredbi ; ;}
ILIILIif( logički_if( logički_iizraz )zraz ) naredbnaredba ;a ;
96
NAREDBA if
Primjer:
if ( uspjeh >= 60 ) printf(“Student je prošao. \n “);
U C U C jezikujeziku
97
Pogledajmo slijedeći program koji utvrđuje je li
znak unesen s tipkovnice u rasponu od A do Z. #include <stdio.h>
void main()
{
char slovo;
printf("Unesite znak : ");
scanf(" %c", &slovo );
if( slovo >= 'A' )
if( slovo <= 'Z' ) printf("\nZnak je izmedju A i Z\n") ;
}
98
2. Način – uporaba logičkog operatora
#include <stdio.h>void main() { char slovo; printf("Unesite znak : "); scanf(" %c", &slovo ); if(slovo >= 'A‘ && slovo <='Z') printf("\nZnak je izmedju A i Z\n") ;
else printf("\nZnak nije izmedju A i Z\n") ;
}
9999
ASCII tablicaASCII tablica
100
Zapamtite !!!
• Korištenje praznog mjesta (ispred %c) u naredbi scanf (" %c", &slovo ); omogućava ignoriranje TAB, SPACE BAR i ENTER tipke ako prethodno nije unesen neki znak.
101
NAREDBE if - else dvostrana selekcija
Opći oblik ovih naredbi je : Opći oblik ovih naredbi je :
ifif( logički_( logički_iizraz )zraz )
{{blok_naredbi1blok_naredbi1;};}
elseelse
{{ blok_naredbi2 blok_naredbi2;};}
else omogućava da se izvrši naredba
kada je uvjet neistinit (jednak nuli)
102
NAREDBA if – elsedvostrana selekcija
Primjer:
if ( uspjeh >= 60 ) { printf(“Student je prošao. \n “); }
else { printf("\t Student je pao ispit.\n");}
103
Koju vrijednost poprimaju varijable a, b, c nakon izvršenog bloka naredbi?
void main() {
int a=3, b=10,c=15;if (!(a >b)){c=a++;b=b-a;}else b=--c; }
104
Primjer: Napisati program koji učitava dva cijela broja i, ako su oba parna ispisuje njihovusumu; inače treba ispisati umnožak
#include <stdio.h>#include <stdio.h>void main() void main() {{ int int prvi_brojprvi_broj, , drugi_brojdrugi_broj;; printf(”Unesite prvi broj: ” ) ;printf(”Unesite prvi broj: ” ) ; scanf(”%d”,&prviscanf(”%d”,&prvi__broj);broj); printf(”Unesite printf(”Unesite drugidrugi broj: ” ) ; broj: ” ) ; scanf(”%d”,&scanf(”%d”,&drugi_drugi_broj);broj); if((if((pprvirvi__broj%2 == 0)&& (drugibroj%2 == 0)&& (drugi__broj%2 == 0))broj%2 == 0)) printf(”%d\n”,prviprintf(”%d\n”,prvi__broj + drugibroj + drugi__broj) ;broj) ; elseelse printf(”%d\n”,prviprintf(”%d\n”,prvi__broj broj ** drugi drugi__broj) ;broj) ;}}
105
// unijeti troznamenkasti broj i ispitati da li je suma znamenki jednaka umnosku
početak
pročitaj a
ne a > 99 i a<1000 da
broj nije u s = a/100 intervalu d = (a - s*100)/10 [100,999] j = a-(s*100 +d*10) s+d+j == s*d*j da ne - ispiši rez - kraj
106
// unijeti troznamenkasti broj i ispitati da li je suma znamenki jednaka umnosku#include<stdio.h>void main(){
int a, s, d, j;printf("Unesite troznamenkasti broj: ");scanf("%d",&a);
if (a<1000 && a>99) { /* Da li je broj u intervalu [100, 999]*/
s = a/100; // stotice d = (a - s*100)/10; // desetice j = a - (s*100 + d*10); // jedinice printf("Broju %d suma znamenki ",a);
if (s+d+j == s*d*j) // Da li je suma = umnozak?
printf("jest jednaka "); else printf( "nije jednaka ");
printf("umnosku njegovih znamenki. \n"); }else printf("Broj nije u intervalu [100,999]!\n");
}
107
BLOKOVI if - else NAREDBI if if --else else naredbnaredbee mogu se nadovezivati mogu se nadovezivati
if( logički_if( logički_iizraz1 )zraz1 )
blok_naredbi1blok_naredbi1
else if( logički_else if( logički_iizraz2 )zraz2 )
blok_naredbi2blok_naredbi2
else if( logički_else if( logički_iizraz3 ) zraz3 )
blok_naredbi3blok_naredbi3
else if( logički_else if( logički_iizraz4 )zraz4 )
blok_naredbi4blok_naredbi4..
………………… …………………
else else
zadnji_blok_naredbizadnji_blok_naredbi
108
ZADATAK
Napisati program koji omogućava unos visine (u cm) i težine (kg) za neku osobu i ispisuje jednu od sljedećih poruka: prelagan, normalan, ili pretežak, primjenom kriterija:
prelagan: težina < visina / 2.5 normalan: visina/ 2.5 <= težina <=
visina/2.3 pretežak: visina / 2.3 < težina
109
#include <stdio.h>
void main()
{int tezina, visina;
printf("Unesite tezinu (kg) i visinu(cm)\n");
scanf("%d,%d%",&tezina,&visina);
if (tezina <visina/2.5)
printf(" prelagan \n");
else if (visina/2.5 <=tezina && tezina<=visina/2.3)
printf(" normalan \n");
else
printf(" pretezak \n");
}
110
Sljedeći program ispituje da li je i korisnik upisao broj između 1 i 10.
111
#include <stdio.h>void main(){ int broj;
printf("Unesite broj izmedju 1 i 10 : ");scanf("%d",&broj); if( broj < 1)
{ printf("\n\t Pogresno!!!\n\t Broj %d je manji od 1.\n",broj);
}
else if( broj > 10 )
{ printf("\n\tPogresno!!!\n\t Broj %d je veci od 10.\
n",broj);
}
else { printf("\n\t\tBravo !!!\n\t Broj %d je veci od 0 i manji
od 11 \n", broj); }
}
112
Sljedeći program radi kao jednostavni kalkulator:
113
#include <stdio.h>void main() { int nije_operator =0; char a_operator; float broj1, broj2, rezultat; printf("Unesite dva broja i operator\n"); printf(" broj1 operator broj2\n"); scanf("%f%c%f ", &broj1, &a_operator, &broj2);
if (a_operator == '*') rezultat = broj1 * broj2; else if (a_operator == '/') rezultat = broj1 / broj2; else if(a_operator == '+') rezultat = broj1 + broj2; else if(a_operator == '-') rezultat = broj1 - broj2; else nije_operator = 1;
if( nije_operator) printf("Nedozvoljeni operator.\n");
else printf("%f %c %f iznosi %f .\n", broj1, a_operator, broj2, rezultat ); }
114
if naredba i uvjetni operator ?• Sljedeće dvije naredbe su ekvivalentne:1) max = a>b ? a : b2) if(a>b) max=a; else max=b;• Opći oblik je: logički_izraz ? izraz1 : izraz2
• Ako je Ako je logički_izrazlogički_izraz istinit (TRUE) tj. različit od istinit (TRUE) tj. različit od nule , izvršava se izraz1, a ako je neistinit (FALSE) nule , izvršava se izraz1, a ako je neistinit (FALSE) , tj. nula, tada se izvršava izraz2 , tj. nula, tada se izvršava izraz2
115
if naredba i uvjetni operator ?• Što ispisuje slijedeći isječak koda te koje će Što ispisuje slijedeći isječak koda te koje će
vrijednosti varijable poprimiti nakon što se taj vrijednosti varijable poprimiti nakon što se taj kod izvrši?kod izvrši?
int a = 1, b = 2, c = 3, d = 4;int a = 1, b = 2, c = 3, d = 4;
printf("%d\n%d", ++a, ((d/=8) ? c-- : b--));printf("%d\n%d", ++a, ((d/=8) ? c-- : b--));
• PridruPridružživanje ima manji prioritet od dijeljenja, pa izrazivanje ima manji prioritet od dijeljenja, pa izraz d/=8d/=8 odgovaraodgovara izrazuizrazu dd = ( = (d/8d/8))
• PPrvo se a dijeli s rvo se a dijeli s 88, a zatim se rezultat ponovno posprema u, a zatim se rezultat ponovno posprema u varijablu varijablu dd
d/8d/8 = 4/ 8 = 0= 4/ 8 = 0 nova vrijednost varijable nova vrijednost varijable dd iznosi iznosi nulanula
• Vrijednost 0 Vrijednost 0 = FALSE= FALSE , pa se evaluira IZRAZ2 , pa se evaluira IZRAZ2= b--= b--
116
Uvjetna naredba – kratki oblik• Treba unijeti cijeli broj različit od 0 pa ispisati apsolutnu
vrijednost broja. Ispis neka bude oblika: Upisi broj:Apsolutna vrijednost je....
#include<stdio.h>#include<stdio.h>
void main()void main()
{ int a;{ int a;
printf("Upisi broj:");printf("Upisi broj:");
scanf("%d",&a);scanf("%d",&a);
(a==0) ? printf(“ ERROr \n”) :(a==0) ? printf(“ ERROr \n”) :
(a<0)(a<0) ?? printf("Apsolutna vrijednost je %d \n",-a)printf("Apsolutna vrijednost je %d \n",-a) :: printf("Apsolutna vrijednost je %d\n ",a);printf("Apsolutna vrijednost je %d\n ",a);
}}
117
#include <stdio.h>
void main()
{
int broj;
printf("Ispisat cu da li ste unijeli nulu,pozitivan ili negativan broj!\n");
printf("Unesite broj : ");
scanf("%d", &broj );(broj==0) ? printf("nula\n") : ((broj>0) ? printf("pozitivan\n") : printf("negativan\n "));
}
118
Sljedeći program koristi Sljedeći program koristi ifif naredbu s naredbu s logičkim logičkim operatorom ILI (||)operatorom ILI (||) da ocijeni je li korisnikov upis da ocijeni je li korisnikov upis
uu rasponu između 1 i 10.rasponu između 1 i 10. #include#include <stdio.h> <stdio.h>voidvoid main()main() {{ intint broj; broj; printfprintf("Unesite broj izmedju 1 i 10 :("Unesite broj izmedju 1 i 10 :\n\n "); "); scanfscanf("%d", &broj);("%d", &broj); ifif (broj(broj < 1< 1 |||| brojbroj > 10> 10) )
{{printfprintf("\n\t\tPogresno!!!\n\t Broj %d nije ("\n\t\tPogresno!!!\n\t Broj %d nije između 1 i 10.\n", broj);između 1 i 10.\n", broj); } }
elseelse { { printfprintf("\n\t\tBravo !!!\n\t Broj %d je ("\n\t\tBravo !!!\n\t Broj %d je veci od 0 i manji od 11 \n", broj); }veci od 0 i manji od 11 \n", broj); }
}}
119
Koju vrijednost poprimaju varijable a i b nakon izvršenog bloka naredbi?
#include <stdio.h>void main() {int a=3, b=0;if (a +=b){a+=1;b=a+1;}printf("a=%4d\n b=%d\n",a,b);}
120
NAREDBA switch Naredba Naredba switchswitch je bolji način pisanja programa kada je bolji način pisanja programa kada
se pojavljuje više naredbi se pojavljuje više naredbi elseelse if if Opći oblikOpći oblik
switch ( cjelobrojni_izraz )switch ( cjelobrojni_izraz ){{ case vrijednost1: case vrijednost1:
blok_naredbi1blok_naredbi1break;break;
case vrijednost2:case vrijednost2: blok_naredbi2blok_naredbi2
break;break;case vrijednost3: case vrijednost3:
blok_naredbi3blok_naredbi3break; break;
..……
........default: default:
blok_naredbiblok_naredbi}}
121
ZAPAMTI!!!
• Ključna riječ break mora biti uključena na kraju svake alternative, osim zadnje
• Ključna riječ default označava alternativu koja će biti izabrana ako nijedna od prethodnih ne odgovara vrijednosti izraza, a može biti i ispuštena
• Desna zagrada na kraju označava kraj izbora alternativa
122
Pravila za switch naredbu
Vrijednosti 'case' moraju biti cjelobrojne ili znakovne konstante
Poredak 'case' izraza nije važan
‘Default’ se može smjestiti bili gdje unutar switch bloka (uobičajeno je na kraju)
Ne smiju se koristiti izrazi kao vrijednosti 'case'
123
Kolika je vrijednost varijable a nakon što se izvrši sljedeći blok naredbi #include <stdio.h>#include <stdio.h>void main() void main() {{ int a=int a=3333;;
switch(a%4)switch(a%4){{ case 1: a+=2;break;case 1: a+=2;break; case 2: a-=3;break;case 2: a-=3;break; default:a+=4;default:a+=4;}}printf("\na=%d\n",a);printf("\na=%d\n",a);
}}
124
#include <stdio.h>void main () { int broj; printf("Unesite brojcanu vrijednost: \n"); scanf("%d",&broj); switch (broj) { case 1:
printf("Jedan\n"); break; case 2:
printf("Dva\n"); break; case 3:
printf("Tri\n"); break; default:
printf("Unijeli ste pogresnu vrijednost\n"); break; }}
Učitati s tipkovnice brojčanu vrijednost od 1 do 3 i ispisati tu vrijednost slovima
125
Napiši program koji će za brojeve 1,2,3,4 ništa ispisati, a ako je broj jednak 5 ispisati će 5, ako je nešto drugo ispisat će Pogrešan unos.
Početak
Unos broja
Ispitivanje broja
Broj je od 1-4
Broj:5
Pogrešan unos
Kraj
#include<stdio.h>void main(){ int x; printf("upiši broj"); scanf("%d",&x); switch(x) { case 1: case 2: case 3: case 4: {
printf("broj je 1-4\n");break;
} case 5:
{ printf("broj je 5\n"); break;
} default:
printf("Broj van granica\n");
}}
126
Napiši program koristeći switch case naredbu kojim ćeš upisati 2 broja po želji i operator po želji +-*/ te ovisno o izboru operatora izbaciti rješenje. Početak
Unos broja1Unos broja2
Ispiši omjer
Kraj
Ispitivanje operatora
Ispiši umnožak Ispiši razliku
Ispiši zbroj
Funkcija za omjer
Funkcija za zbroj
Funkcija za umnozak
Funkcija za razliku
/
* -
+
127
// kalkulator#include <stdio.h>#include <stdio.h>void main()void main(){{ charchar oper; oper; //operator//operator floatfloat broj1, broj2, rezultat; broj1, broj2, rezultat;printf("Unesite dva broja i operator \n");printf("Unesite dva broja i operator \n");scanf("%f%c%f", &broj1, &oper, &broj2);scanf("%f%c%f", &broj1, &oper, &broj2);switchswitch (oper) (oper){{ case '+':case '+':
rezultat = broj1 + broj2;rezultat = broj1 + broj2;printf("%f %c %f iznosi %f.\n", printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat );broj1,oper,broj2,rezultat );breakbreak;;
case'-':case'-':rezultat = broj1 - broj2;rezultat = broj1 - broj2;printf("%f %c %f iznosi %f.\n", printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat );broj1,oper,broj2,rezultat );breakbreak;;
case '/':case '/':rezultat = broj1 / broj2;rezultat = broj1 / broj2;printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat); printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat); break;break;
case '*':case '*':rezultat = broj1 * broj2;rezultat = broj1 * broj2;
printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat ); printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat ); break;break;
default:default:printf("Nedozvoljeni operator.\n");}printf("Nedozvoljeni operator.\n");} } }
128
Za domaći rad:1. Napišite C program koji omogućava korisniku
da upiše 5 brojeva između 1 i 100. Program treba izračunati prosječnu vrijednost unesenih brojeva , te odrediti koji su brojevi manji od 54 i koliko je takvih brojeva.
2. Napišite program koji ispituje (pomoću modul operatora %) da li je upisani broj paran ili neparan.
3. Proširite ZADATAK 2 za provjeru parnosti, tako da za parne i neparne brojeve dodatno ispitate djeljivost s 3, a za parne brojeve i djeljivost s 4.
Dodatak:
• Kontrola toka programa:
129
KONTROLA TOKA PROGRAMA
• JEDNOSTRUKO UVJETNO GRANANJE (IF)
if (uvjet) opći oblik naredbe za jednostruko grananje
{
blok naredbi;
}-ako je uvjet ispunjen(tj.istinit), izvršava se blok naredbi.
-u protivnom se blok naredbi preskače.
-blok naredbi se može sastojati od 1 ili više naredbi.
Pr. int a;
scanf(“%d”,&a);
if (a>10)
{
a=a+3;
}
printf(“%d”,a);
Pr.int a;scanf(“%d”,&a);if (a%2 = = 0){
printf(“Unijeli ste paran broj”);}if (a%2 != 0){
printf(“Unijeli ste neparan broj”);}- uvjet može biti bilo koji logički ili aritmetički izraz.
• VIŠESTRUKA UVJETNA GRANANJA (IF)if (uvjet1) opći oblik
{
blok naredbi1;
}
else
{
blok naredbi2;
}
-Ako je uvjet1 ispunjen izvršava se blok naredbi1 i preskače blok naredbi2, u protivnom se preskače blok naredbi1 i izvršava bloknaredbi2.
if (uvjet1)
{
blok naredbi1;
}
else if(uvjet2)
{
blok naredbi2;
}
…
else if(Uvjet7)
{
blok naredbi7;
}
else
{
blok naredbi8;
}
Ispitivanje niza uvjeta.
-Dakle, ako je bilo koji uvjet ispunjen izvršit će se blok naredbi pridružen tom uvjetu, a svi ostali blokovi naredbi će biti preskočeni
-Broj uvjeta nije ograničen.
Pr.
int a;
scanf(“%d”,&a);
if(a%2==0)
{
printf(“Broj %d je paran”,a);
}
else
{
printf(“Broj %d je neparan”,a);
}
• VIŠESTRUKA UVJETNA GRANANJA (SWITCH-CASE)Omogućava izbor jednog između više mogućih putova daljnjeg izvođenja
programa, što ovisi o vrijednosti varijable tj. izraza.
switch(izraz)
{
case konstanta1:
blok naredbi1;
break;
case konstanta2:
blok naredbi2;
break;
….
case konstanta9:
blok naredbi9;
break;
default:
blok naredbi10;
break;
}
-Prvo se izračuna vrijednost izraza,a zatim se rezultat izraza usporedi s konstantama. Ako je rezultat izraza jednak nekoj od konstanti, tada se izvršava blok naredbi pridružen toj konstanti.Ako rezultat ne odgovara ni jednoj od konstanti, izvršava se blok naredbi pridružen opciji default.-Izvršavanje bloka naredbi neke konstante se prekida naredbom break ili zagradom } koja označava kraj switch – case strukture.
• Switch-case ispituje jednakost rezultata izraza i konstante, dok kod if-a izraz moze biti bilo sto.
• Dvije konstante u case ne mogu imati istu vrijednost.• Ako blok naredbi u case ne završava s break, nastavlja se izvršavati
blok naredbi idućeg case-a. Naredbe se izvršavaju sve dok se ne naiđe na break.
int i;
scanf(“%d”,&i);
switch(i)
{
case 1:
printf(“Izabrali ste broj 1”);
break;
case 2:
printf(“Izabrali ste broj 2”);
break;
default:
printf(“Pogrešan izbor”);
break;
}
int i;
scanf(“%d”,&i);
switch(i)
{
case 1:
case 2:
case 3:
blok naredbi 1;
break;
case 4:
case 5:
blok naredbi 2;
break;
default:
printf(“Niste unijeli niti jedan od ovih brojeva”);
break;
}
PROGRAMSKE PETLJE
PETLJE 141
PROGRAMSKE PETLJEPROGRAMSKE PETLJE
1.1. Petlja s eksplicitnim brojačemPetlja s eksplicitnim brojačem: : forfor
2.2. S izlazom na vrhuS izlazom na vrhu: : whilewhile
3.3. S izlazom na dnuS izlazom na dnu: do_: do_whilewhile
Petlje omogućuju ponavljanje izvođenja Petlje omogućuju ponavljanje izvođenja jedne ili više linija programskog kodajedne ili više linija programskog koda
PETLJE 142
nene
4.1. Petlja s eksplicitnim brojačem4.1. Petlja s eksplicitnim brojačem: : forfor
formatfor for ((inicijalizacijainicijalizacija; uvjet; izraz_prirasta); uvjet; izraz_prirasta) // blok_naredbi // blok_naredbi
koristi se za ponavljanje izraza unutar petlje točno koristi se za ponavljanje izraza unutar petlje točno određeni broj putaodređeni broj puta
inicijalizacija kontrolne varijable
blok naredbi
promjena vrijednosti kontrolne varijable
promjena vrijednosti kontrolne varijable
uvjet
prekidprekidponavljanjaponavljanja
dada
PETLJE 143
Primjer jednostavne for petlje
Primjer#include <stdio.h>int brojac;main(){ /* Program broji do 20 i ispisuje brojeve */ for (brojac = 1; brojac <= 20; brojac ++) printf("\n%d", brojac );}
brojac = 1
ispis
brojac = brojac + 1
brojac <= 20
prekidprekidponavljanjaponavljanja
dada
nene
PETLJE 144
• Što će ispisati sljedeća petlja?void main() void main()
{{
for (int i=1; i<5; i++); printf('' %d\n'',i);for (int i=1; i<5; i++); printf('' %d\n'',i);
}}
PETLJE 145
#include <stdio.h>#include <stdio.h>void void main()main(){{
int i,n, suma=0;int i,n, suma=0;printf("\n Unesi jedan pozitivni cijeli broj:");printf("\n Unesi jedan pozitivni cijeli broj:");
scanf("%d",&n);scanf("%d",&n);for( i = 1; i <= n; i++ )for( i = 1; i <= n; i++ )
{suma += i;}{suma += i;} printf("\n printf("\n Zbroj brojeva od 1 doZbroj brojeva od 1 do %d %d iznosiiznosi %d.\n",n,%d.\n",n,
suma)suma);;printf("\n printf("\n ProsjekProsjek brojeva od 1 do brojeva od 1 do %d %d iznosiiznosi %%.2f.2f.\n",n,.\n",n,
(float) (float) sumasuma/n/n));;}}
PRIMJER:PRIMJER: Program ispisuje sumu prvi Program ispisuje sumu prvi nn prirodnih prirodnih brojeva.brojeva.
PETLJE 146
#include <stdio.h>#include <stdio.h>void void main()main(){{
int i,n, int i,n, broj,broj,suma=0;suma=0;printf("\n Unesi jedan pozitivni cijeli broj:");printf("\n Unesi jedan pozitivni cijeli broj:");
scanf("%d",&n);scanf("%d",&n);for( i = 1; i <= n; i++ )for( i = 1; i <= n; i++ )
{{scanf(“%d”,&broj) ;scanf(“%d”,&broj) ;if (broj<1 || broj>100) scanf(“%d”,&broj);if (broj<1 || broj>100) scanf(“%d”,&broj);suma += suma += brojbroj;};} printf("\n printf("\n Zbroj brojeva iznosiZbroj brojeva iznosi %d.\n",%d.\n", suma)suma);;printf("\n printf("\n ProsjekProsjek brojeva iznosi brojeva iznosi %%.2f.2f.\n",.\n", (float) (float) sumasuma/n/n));;}}
PRIMJER:PRIMJER: Program ispisuje sumu prvi Program ispisuje sumu prvi nn prirodnih prirodnih brojeva.brojeva.
PETLJE 147
PRIMJER:PRIMJER: Ovaj program računa faktorijelu unesenog Ovaj program računa faktorijelu unesenog broja n. Faktorijel je umnožak svih brojeva od 1 do n:broja n. Faktorijel je umnožak svih brojeva od 1 do n:
n! =1 · 2 · 3 · 4 · ... · ( n – 2 ) · ( n – 1 ) · nn! =1 · 2 · 3 · 4 · ... · ( n – 2 ) · ( n – 1 ) · n
• Rješenje s programskom petljom s poznatim brojem ponavljanja
• Pseudokoduuččitaj (n)itaj (n)fakt:=1fakt:=1za i=1 do nza i=1 do n
fakt:=fakt*ifakt:=fakt*i
ispiši (n,faktispiši (n,fakt)
PETLJE 148
Program za izračunavanje N faktorijelarješenje u C-u
#include <stdio.h>#include <stdio.h>voidvoid main()main(){{
int i=2, n;int i=2, n;intint fak=1; fak=1;printf(" Unesi prirodan broj : "); printf(" Unesi prirodan broj : "); // manji od 170 !?// manji od 170 !?scanf("%d",scanf("%d", &n);&n);
for (i;i<=n; i++)for (i;i<=n; i++){fak *=i ;}{fak *=i ;}
printf("\n\n printf("\n\n Faktorijela od %d je %Faktorijela od %d je %dd.\.\n",n,fak);n",n,fak);}}
PETLJE 149
PRIMJER: PRIMJER: ISPIS ZNAKOVAISPIS ZNAKOVA
#include<stdio.h>
int main()
{
char slovo;
for( slovo = 'A'; slovo <= 'Z'; slovo++ ) { printf("%c ", slovo);} return 0;
}
PETLJE 150
• U C++ i deklaracija varijabli može se izvesti u samoj petlji. U našem primjeru to bi izgledalo ovako:
#include <stdio.h>main(){ int zbroj = 0;
for(int brojac = 1; brojac <= 10; zbroj += brojac, brojac++ );
printf("Zbroj = %d\n", zbroj );return 0;}
PETLJE 151
Ugniježđena Ugniježđena ForFor petlja petlja
##includeinclude < <stdiostdio..hh>>mainmain()(){ {
int i,j;int i,j;for(i=1;i<10;i++)for(i=1;i<10;i++)
{{for(j=1;j<10;j++)for(j=1;j<10;j++)
printf("%3d",i*j);printf("%3d",i*j);printf("\n");printf("\n");
}}}}
PETLJE 152
4.2. Petlja s izlazom na vrhu4.2. Petlja s izlazom na vrhu: : whilewhile
uvjetuvjet
formatwhile (uvjet_izvođenja) naredba;
Blok naredbi
PrekidPrekidponavljanjaponavljanja
dada
nene
iliwhile (uvjet_izvođenja) { blok_naredbi; }
NNaredba aredba ćće se izvre se izvrššavati sve dok izraz ima avati sve dok izraz ima vrijednost istinevrijednost istine (razli(različčit od nule)it od nule)
PETLJE 153
wwhilehile petlja petlja
a != 0
a = 5 primjerint a = 5;int b;while (a != 0){ printf("\n Unesi cijeli broj b:"); scanf("%d",&b); a = a - b; }
a = a -b
učitaj:b (a = 0)(a = 0)
PrekidPrekidponavljanjaponavljanja
dada
nene
PETLJE 154
wwhilehile petlja petlja
• Kolika je vrijednost varijable a i b Kolika je vrijednost varijable a i b nakon izvršenog blok naredbi?nakon izvršenog blok naredbi?
void main()void main(){{int a=25,b=0,c=4;int a=25,b=0,c=4;while (a>b)while (a>b){{ a-=c;a-=c;
b++;b++;}}printf("\n a=%d\tb=%d,,,\n",a,b);printf("\n a=%d\tb=%d,,,\n",a,b);
}}
PETLJE 155
Primjer programa s petljom while
#include <stdio.h>void main(){
int brojac = 0; while( brojac <= 10 )
{ printf("%d\n",brojac); ++brojac; } }
PETLJE 156
Primjer: Primjer: Suma svih parnih brojeva od 1 do n.Suma svih parnih brojeva od 1 do n.
/*/*Suma svih parnih brojeva od 1 do n*/Suma svih parnih brojeva od 1 do n*/#include#include <stdio.h> <stdio.h>voidvoid main()main(){{
int int n, in, i , suma=0, suma=0; ; i=1;i=1;
printf("\n Unesite vrijednost za n!");printf("\n Unesite vrijednost za n!");scanf("%d", &n);scanf("%d", &n);
while( while( ii <= <= nn ) ) { { if( i%2==0 )if( i%2==0 )
suma+=i;suma+=i; ii++; } ++; } printf("\n printf("\n Suma svih parnih brojeva od 1 do %d iznosiSuma svih parnih brojeva od 1 do %d iznosi %d\ %d\
nn", n,", n, suma);suma); }}
PETLJE 157
Primjer: izraPrimjer: izraččunati prosjek nepoznatog broja unati prosjek nepoznatog broja pozitivnihpozitivnih cijelih brojeva (brojevi se ucijelih brojeva (brojevi se uččitavaju dok se itavaju dok se ne unese 0ne unese 0))..
#include <stdio.h>#include <stdio.h>void main () void main () {{ int suma, broj, n;int suma, broj, n;
suma=0; n=0;suma=0; n=0;printf(“Unesi broj”);printf(“Unesi broj”);scanf(“d%”,&broj);scanf(“d%”,&broj); /* inicijalno /* inicijalno sstanje */tanje */while (broj!=0)while (broj!=0) {{ if (broj>0) if (broj>0)
{{ suma +=broj;suma +=broj; ++n;++n; }}
scanf(“d%”,&broj); scanf(“d%”,&broj); /* sva ostala /* sva ostala ččitanja */itanja */
}}if (n>0) printf(“Prosjek = %f\n”, float suma/n);if (n>0) printf(“Prosjek = %f\n”, float suma/n);}}
PETLJE 158
4.3. Petlja s izlazom na dnu4.3. Petlja s izlazom na dnu: : do_whiledo_while
formatdo{ blok_naredbi;} while (uvjet_izvođenja);
PrekidPrekidponavljanjaponavljanja
uvjetuvjet
Blok naredbi
dada
neneNNaredba aredba ćće se izvre se izvrššavati avati
sve dok sve dok uvjetuvjet ima ima vrijednost istinevrijednost istine
ZaZa razliku od razliku od whilewhile petlje petlje vrijednost vrijednost uvjetauvjeta se se kontrolira na krajukontrolira na kraju prolaza prolaza kroz petljukroz petlju
PETLJE 159
do_whiledo_while petlja petlja
a != 0
primjerint a = 5;int b;do{ printf("\n Unesi cijeli broj b:"); scanf("%d",&b); a = a - b; }while (a != 0);
a = a -b
učitaj:b
(a = 0)(a = 0)
prekidprekidponavljanjaponavljanja
dada
nene
PETLJE 160
Primjer
• Sljedeći program ispisuje broj, koji unese korisnik, od kraja. To čini koristeći ostatak dijeljenja ( % operator ) da bi krajnje desnu znamenku upisao u varijablu d_znamenka.
• Početni broj se zatim dijeli sa 10, i operacija se ponavlja dok broj ne postane jednak 0.
PETLJE 161
#include <stdio.h>void main(){ int broj, d_znamenka; printf("Unesite broj koji će se ispisati od kraja.\n");
scanf("%d", &broj); do
{ d_znamenka = broj % 10;
printf("%d", d_znamenka); broj = broj / 10; }
while( broj != 0 ); printf("\n"); }
PETLJE 162
Uz pomoć do while petlje ispisati brojeve veće od 500 i manjih 700 koji su djeljivi sa 17. Ispisati koliko ima takvih brojeva. #include <stdio.h>void main(){int n,i; n=500; i=0; do {n++; if(n%17==0) {i++; printf(" %d-ti broj je %d \n",i,n); }} while(n<700);printf("\n Ukupno je takvih brojeva %d\n", i); }
PETLJE 163
BBeskonačna peljaeskonačna pelja
• Ukoliko je u stukturi petlje uvjet za ponavljanje petlje uvijek istinit, dobije se beskonačna pelja
for(int brojac = 1;;brojac++ ); for(int brojac = 1;;brojac++ );
for(int brojac = 1; brojac <= 10; );for(int brojac = 1; brojac <= 10; );
for(int brojac = 1; brojac <= 10; for(int brojac = 1; brojac <= 10; brojac--,brojac++ );brojac--,brojac++ );
PETLJE 164
5. Kontrola toka programa Kontrola toka programa Skokovi u programuSkokovi u programu
• Naredba BreakNaredba Break• Naredba ContinueNaredba Continue• Naredba GoToNaredba GoTo
PETLJE 165
Naredbe skokaNaredbe skoka
• Bezuvjetni skok• Uvjetni skok
– Pomoću ovih naredbi se može eksplicitno zadati da se izvršenje programa nastavi naredbom koja je označena nekim imenom
PETLJE 166
Prijevremeni prekid ponavljanja: break
Primjerint a;do { printf("Unesi broj"); scanf ("%d",&a); if (a==5)
break; //prekida petlju printf("\n%d",a);}while (a!=0);
Učitaj: a
ispis: a
a= =5
a!=0
prijevremenprijevremenii
prekidprekidponavljanjaponavljanja
ddaa
ddaa
nnee
nnee
regularniregularniprekidprekid
ponavljanjaponavljanja
Rezultat izvođenja1.primjer: 2.primjer:a=2 a=2a=2 a=2a=3 a=5a=3 <prijevremenia=0 prekid><regularni prekid>
*
ZadatakProgram opetovano učitava varijablu a.
Regularni prekid petlje: (a==0). Prijevremeni prekid petlje: (a= =5).
PETLJE 167
Program koristi Program koristi breakbreak naredbu u naredbu u beskonačnoj pelji, koja ispisuje sve brojeve beskonačnoj pelji, koja ispisuje sve brojeve od 0 do 10 i prekida se kad se unese broj 5od 0 do 10 i prekida se kad se unese broj 5
#include <stdio.h>void main(){ int brojac = 0; while( brojac <= 10 ) {
printf("%d\n", brojac); if( brojac==5) break;
++brojac; }}
PETLJE 168
Skok na kraj petlje: continue
Primjerint a;do { printf("Unesi broj a "); scanf ("%d",&a); if (a<=0)
continue; //preskok ispisa printf("\n%d",a);}while (a<=100);
Učitaj: a
ispis: a
a<=0
a<=100
dada
dada
nene
prekidprekidponavljanjaponavljanja
Rezultat izvođenja1.primjer: 2.primjer:a=2 <unos> a=2 <unos>a=2 <ispis> a=2 <ispis>a=0 <unos> a=5 <unos><preskok ispisa> a=5 <ispis>a=101 <unos> a=101 <unos>a=101 <ispis> a=101 <ispis><prekid> <prekid>
ZadatakProgram opetovano učitava varijablu a. Prekid
ponavljanja: (a>100). Preskok akcije:a negativno ili nula.
nene
PETLJE 169
Ako želimo da se u našem programu ispišu svi brojevi od 0 do 10 osim broja 5, tada ćemo while
petlju modificirati na slijedeći način:
##includeinclude <stdio.h> <stdio.h>
voidvoid main() main()
{ {
int brojac = -1;int brojac = -1;
while( brojac < 10)while( brojac < 10)
{ ++brojac;{ ++brojac;
if( brojac==5) if( brojac==5) continue;continue;
printf("%d\n", brojac); }printf("%d\n", brojac); }
}}
PETLJE 170
Naredba goto
• Naredba goto omogućava bezuvjetni skok na neku drugu naredbu unutar iste funkcije
•
• Opći oblik je:
goto oznaka_programske_linije;
• NIJE POŽELJNO KORISITITI
PETLJE 171
Razmatrat ćemo slučaj kada korisnik upisuje neku vrijednost, a onda se provjerava pripada li ona zadanom rasponu, npr. između 1 i 100
Sve dok uvjet nije zadovoljen unos i provjera se ponavlja
PETLJE 172
#include <stdio.h> void main() {
int broj; {
unos: printf("Unesite broj izmedju 1 i 100\n\n"); scanf("%d", &broj ); if( (broj <1) (broj>100))
{ printf("Broj je izvan zadanog raspona\n\
n"); goto unos;
} printf("Broj je %d\n", broj ); }}
PETLJE 173
Program provjerava je li znak kojeg upisuje korisnik između A-Z. #include#include <stdio.h> <stdio.h> voidvoid main() main(){{ charchar znak; znak;
intint uvjet = 0; uvjet = 0;whilewhile(!uvjet)(!uvjet)
{{ printf("Unesite znak A-Z\n");printf("Unesite znak A-Z\n");
scanf(" %c", &znak);scanf(" %c", &znak); ifif((znak >= 'A') && (znak <='Z'))((znak >= 'A') && (znak <='Z'))
uvjet = 1;uvjet = 1; elseelse
printf("Znak je izvan dozvoljenog printf("Znak je izvan dozvoljenog raspona\n");raspona\n");
}} printf("Upisani znak je %c\n", znak);printf("Upisani znak je %c\n", znak);} }
PETLJE 174
Izračunavanje broja dana; obično rješenjeIzračunavanje broja dana; obično rješenje
#include<iostream.h>
int main () {
int Sij,Velj,Ozu,Tra,Svi,Lip; int Srp,Kol,Ruj,Lis,Stu,Pro,DD,MM,GG,i;
Sij=Ozu=Svi=Srp=Kol=Lis=Pro=31; Tra=Lip=Ruj=Stu=30;
do{
int Velj=28;
cout<<“unesi godinu(GG): “;cin>> GG;cout<<“ unesi mjesec(MM): “;cin>> MM;cout<<“ unesi dan(DD): “;cin>> DD;cout<<endl;
if (GG%4)==0Velj=29;
int Suma=0;
deklaracija
početak
inicijalizacija
ponavljanje
veljača!
učitavanje
prestupnagodina
suma dana!
PETLJE 175
Izračunavanje broja dana; switch-rješenjeIzračunavanje broja dana; switch-rješenje
include<iostream.h>int main {
//deklaracija mjeseci//inicijalizacija mjesecido {
//učitavanje datuma//prestupna godinaint Suma=0;switch (MM) {
case 12:Suma=Suma+Stu;
case 11:Suma=Suma+Lis;
case 10:Suma=Suma+Ruj;
case 9:Suma=Suma+Kol;
case 8:Suma=Suma+Srp;
case 7:Suma=Suma+Lip;
case 6:Suma=Suma+Svi;
case 5:Suma=Suma+Tra;
PETLJE 176
Rješenje br. 2Rješenje br. 2
case 4:Suma=Suma+Ozu;
case 3:Suma=Suma+Velj;
case 2:Suma=Suma+Sij;
case 1:Suma=Suma+DD;
}//ispis//indikacija kraja
} while (i==1);return 0;
}
PETLJE 177
1.1. Definirati varijable (brojac, x, broj poz., Definirati varijable (brojac, x, broj poz., broj neg., broj nula.)broj neg., broj nula.)
2.2. Upisati elementeUpisati elemente
3.3. Ispitati elemente pomoću IF naredbeIspitati elemente pomoću IF naredbe
4.4. Prebrojati broj pozitivnih, negativnih i Prebrojati broj pozitivnih, negativnih i broj nulabroj nula
5.5. Ispisati rezultateIspisati rezultate
Algoritam
Zadajte 10 brojeva. Izračunate i ispiši Zadajte 10 brojeva. Izračunate i ispiši broj pozitivnih brojeva, broj negativnih broj pozitivnih brojeva, broj negativnih brojeva i broj pojavljivanja nulebrojeva i broj pojavljivanja nule..
PETLJE 178
#include <stdio.h> void main(){int brojac;int x, brpoz=0, brneg=0, brnula=0;for (brojac=1; brojac<=10; brojac++){
printf ("Upisi brojeve :\n");scanf(“ %d\n ",&x);if(x>0)
brpoz=brpoz+1;else if(x<0)
brneg=brneg+1;else
brnula=brnula+1;}printf("Broj pozitivnih je %d,Broj negativnih je %d, Broj nula je %d\n",
brpoz, brneg, brnula);}
PETLJE 179
#include <stdio.h>void main() { int min,redni,broj, n,i; printf(" Upišite broj n:\n"); scanf("%d",&n); printf(" \n Upišite broj :\n"); scanf("%d",&broj); min=broj; redni=1;
for (i=2;i<=n;i++) { printf(" Upišite broj :\n"); scanf("%d",&broj);
if (broj<min) { min=broj; redni=i;} }
printf("\nNajmanji broj je %d\n",min); printf("to je %d broj po redu\n",redni);}
Unijeti n brojeva i ispisati najmanji broj, kao i njegov redni Unijeti n brojeva i ispisati najmanji broj, kao i njegov redni broj.broj.
Dodatak:
• Kontrola toka programa pomoću programskih petlji:
180
• PROGRAMSKE PETLJE-Omogućavaju višestruka uvjetna ponavljanja blokova
naredbi.
-Programske petlje s ispitivanjem uvjeta na početku (for,while)
-Programske petlje s ispitivanjem uvjeta na kraju(do-while)
• FOR PETLJAfor(izraz1; izraz2; izraz3)
{
blok naredbi;
}-Izvršavanje petlje teče u koracima:
1.Postavi kontrolnu varijablu petlje na početnu vrijednost (izraz1)
2.Ispitaj da li je uvjet ponavljanja bloka naredbi petlje zadovoljen (izraz2):
NE: završi petlju;
DA: izvrši blok naredbi;
: dodijeli kontrolnoj varijabli novu vrijednost (izraz3);
: idi na 2 korak;
-izraz1 – poč. stanje.
-izraz2 – uvjet koji mora biti zadovoljen za ponavljanje bloka naredbi.
-izraz3 – izraz koji mijenja vrijednost kontrolne varijable petlje.
Ispis brojeva od 1 do 10 pomoću for petlje
int main()
{
int i;
for (i=1; i<=10; i++)
{
printf(“%d”,i);
}
}
• WHILE PETLJAwhile(uvjet)
{
blok naredbi;
}
-Blok naredbi u petlji se ponavlja sve dok je uvjet istinit (true), odnosno različit od nule. Kad uvjet postane lažan (false), odnosno jednak nuli, blok naredbi se neće izvršiti.
-Uvjet ponavljanja petlje se ispituje na početku petlje. To znači da blok naredbi ne mora biti izvršen niti jednom.
-I for i while petlja pripadaju istoj skupini petlji, što znači da se svaka for petlja može zamijeniti programskom petljom while.
Vrijedi i obrat.
For petlja
for(izraz1;izraz2;izraz3)
{
blok naredbi;
}
Istovjetna je while petlji
izraz1;
while(izraz2)
{
blok naredbi;
izraz3;
}
Ispis brojeva od 1 do 10 pomoću while petlje
int main()
{
int i=1;
while(i<=10)
{
printf(“%d”,i);
i++; //ako uklonimo ovu naredbu dobijemo beskonačnu petlju
}
}
• DO WHILE PETLJAdo
{
blok naredbi;
} while(uvjet);-Izvršavanje petlje teče u koracima:
1.Izvrši blok naredbi.
2.Ispitaj da li je uvjet ponavljanja bloka naredbi petlje zadovoljen :
NE: završi petlju.
DA: idi na korak 1.
-Blok naredbi se mora izvršiti barem jednom.