brzi tecaj c-aˇ - phy.pmf.unizg.hrtniksic/fi/materijali/old/lec1.pdf · brzi tecaj c-aˇ primjer...
TRANSCRIPT
Brzi tecaj C-a
Primjer ispisuje recenicu "Dobro dosli na brzi tecaj C-a" naekranu
Programiranje se sastoji od nekoliko koraka
- pisanje programa u tekstualnom editoru (joe, pico,nedit...)
- prevodenje programa u strojni jezik
- izvršavanje programa
Osnove programiranja – p. 1/27
- program napisan u editoru treba snimiti u datoteku sekstenzijom .c
- alat koji program prevodi iz višeg programskog jezika ustrojni jezik zovemo prevodilac ili compiler
- postoji više razlicitih C compilera, u ovom kolegiju sekoristi GNU compiler
- osnovna naredba za prevodenje programa glasi
cc ime_programa.c
- ako je program ispravno napisan, compiler kreiraizvršnu datoteku pod imenom a.out
- program pokrecemo naredbom
./a.out
Osnove programiranja – p. 2/27
- ako želimo da izvršna verzija programa ima nekoodredeno ime, koristimo opciju -o pri prevodenju
cc program.c -o program
- prevodilac bi u ovom slucju morao kreirati izvršnudatoteku pod imenom program koju pokrecemo s
./program
- gcc compiler ima mnoštvo dodatnih opcija
- najbolji izvor informacija o compileru je manual kojipozivamo naredbom
man cc
Osnove programiranja – p. 3/27
Konstante, varijable i tipovi podataka
- varijable: "spremnici" u memoriji racunala → u njihsmještamo podatke koje koristimo u programu
- deklaracijom varijabli odredujemo tip
- inicijalizacijom varijabli pridružujemo odredenuvrijednost pomocu operatora pridruživanja (x=2)
- sve varijable u C-u moraju biti deklarirane
- razlika izmedu konstante i varijable: konstanti nemožemo mijenjati vrijednost nakon inicijalizacije
- osnovni tipovi podataka u C-u: char, int, float, double
Osnove programiranja – p. 4/27
- pravila za imenovanje varijabli i konstanti
Imena varijabli i konstanti... Primjer
ne mogu pocinjati brojem 2i
mogu sadržavati broj h2o
ne mogu sadržavati aritmeticke operatore g+c
ne mogu sadržavati interpunkcije #@X!!
mogu sadržavati ili pocinjati s _ mali_broj
ne mogu biti kljucna rijec C-a else
ne mogu sadržavati razmak mali broj
mogu sadržavati mala i velika slova XNaKvadrat
Osnove programiranja – p. 5/27
- prvi nacin definiranja konstante je koristeci kljucnu rijecconst
const int radijus = 5;
- vrijednost konstante više ne možemo mijenjati uprogramu
- drugi nacin definiranja konstante je koristeci #define
#define MAX 10
- kao i #include, naredba #define mora biti smještenaprije funkcije main()
- uobicajeno je (ali ne i obavezno) konstante definiranepomoc #define imenovati velikim slovima
Osnove programiranja – p. 6/27
Tip podataka char
- u varijablu tipa char možemo spremiti jedan znak izskupa od 256 znakova
- svaki znak na tipkovnici ima pridružen jedinstveninumericki kod → ASCII (American Standard Code forInformation Interchange)
- deklariranjem varijable rezerviramo prostor u memorijiracunala, ali joj još ne dajemo neku odredenu vrijednost
char variable_name;
- možemo deklarirati i više varijabli istovremeno
char a,b,c;
Osnove programiranja – p. 7/27
- inicijalizacijom varijabli prvi put pridjeljujemo nekuvrijednost
variable_name = ’a’;
- uocimo korištenje jednostrukih navodnika
- dvostruki navodnici su rezervirani za stringove kojecemo obraditi kasnije
- deklaraciju i inicijalizaciju možemo napraviti u istojnaredbi
char slovo = ’a’;
- varijabli tipa char možemo pridružiti i cijeli broj koji tadaoznacava ASCII kod varijable
Osnove programiranja – p. 8/27
Tip podataka int
- varijable tipa int predstavljaju cijele brojeve
- pridruživanje decimalnog broja varijabli tipa int rezultiraignoriranjem dijela broja iza decimalne tocke → varijablipridružujemo prvi cijeli broj koji je manji od danog broja
int b = 4.3; /* b = 4*/int b = 4.8; /* b = 4*/
- varijabli tipa int možemo pridružiti i znak → varijablaprima ASCII kod doticnog znaka
int b = ’A’; /*b = 65*/
- varijablu tipa int zauzima možemo deklarirati kao short(zauzima 2 byte-a u memoriji) i long (zauzima 4 byte-au memoriji)
Osnove programiranja – p. 9/27
- varijablu tipa int možemo deklarirati i kao unsigned(prima samo pozitivne vrijednosti) ili signed (prima ipozitivne i negativne vrijednosti)
- signed varijable → jedan bit je rezerviran za predznakbroja → unisgned varijabla može primiti veci rasponcijelih brojeva
- za vecinu compilera deklaracija
int a;
je ekvivalentna deklaraciji
signed long int a;
- pokušaji spremanja prevelikih cijelih brojeva u varijablutipa int rezultiraju greškama pri izvršenju programa
Osnove programiranja – p. 10/27
Raspon vrijednosti int varijabli:
Tip Min. Maks.
signed short int -32768 +32767
(215) (215 − 1)
unsigned short int 0 65535
(216 − 1)
signed long int -2147483648 2147483647
(231) (231 − 1 )
unsigned long int 0 4294967295
(232 − 1)
Osnove programiranja – p. 11/27
Tipovi podataka float i double
- koristimo ih za spremanje decimalnih brojeva
- kljucnom rijeci float deklariramo varijablu tipa float(zauzima 4 byte-a u memoriji)
float a;float b = 4.53;float c = 1.2e3;
- u zadnjem redu koristimo "scientific notation"
1.2e3 = 1.2 × 103
= 1200
- ovakav zapis je koristan kod jako velikih ili jako malihbrojeva
Osnove programiranja – p. 12/27
- kljucnom rijeci double deklariramo varijablu tipa double(zauzima 8 byte-ova u memoriji)
double a;double b = 8.21;double c = 1.e-15;
- raspon brojeva koje varijable tipa float i double moguprimiti, kao i greške zaokruživanja, ovise o compileru
- float varijable ≈ 10−38 − 10
38
- double varijable ≈ 10−308 − 10
308
- broj tocnih decimalnih mjesta je osjetno manji
Osnove programiranja – p. 13/27
sizeof operator
- koristimo ga da bi saznali koliko byte-ova u memorijizauzima varijable nekog odredenog tipa
- sljedeca naredba varijabli a pridružuje vrijednost 1 jerchar varijable zauzimaju 1 byte u memoriji racunala
int a = sizeof(char);
- kolicina memorije koju zauzimaju varijable tipa char,float i double
Tip podataka Kolicina memorije
char 1float 4
double 8
Osnove programiranja – p. 14/27
- kolicina memorije koju zauzimaju varijable tipa int
Tip podataka Kolicina memorije
signed short int 2unsigned short int 2
signed long int 4unsigned long int 4
- uocimo da upotreba signed i unsigned ne utjece nakolicinu memorije
- korištenjem kljucne rijeci unsigned memorijurezerviranu za predznak koristimo za sam broj, aliukupna kolicina memorije je nepromijenjena
Osnove programiranja – p. 15/27
Ispis podataka
- najjednostavnija metoda: printf
- da bi mogli koristiti naredbu printf moramo ukljucitiStandard Input and Output header file prije mainfunkcije
#include <stdio.h>
- primjer: ispis recenice "Dobro dosli na brzi tecaj C-a!"
printf("Dobro dosli na brzi tecaj C-a!");
- tekst koji želimo ispisati (string) mora biti unutardvostrukog navodnika
Osnove programiranja – p. 16/27
- kada želimo ispisati vrijednost neke varijable, unutarstringa moramo ukljuciti format varijable
- neki od cesto korištenih formata
format tip%d ili %i int
%c char%f float%lf double
- primjer ispisa varijable x tipa int
printf("Vrijednost varijable x: %d",x);
Osnove programiranja – p. 17/27
- istom naredbom možemo ispisati i više varijabli
- za svaku varijablu moramo ukljuciti format
- primjer ispisa varijable a tipa int, varijable b tipa float ivarijable c tipa double
printf("a=%d, b=%f, c=%lf",a,b,c);
- da bi ispis bio citljiviji ukljucujemo \n na kraju stringakoji uzrokuje prelazak u novi red
printf("a=%d, b=%f, c=%lf \n",a,b,c);
- \n spada u tzv. escape sequences
Osnove programiranja – p. 18/27
Cesto korištene escape sequence:
Escape seq. Opis
\n Novi redak. Postavlja kursor na pocetak sljedeceg retka
\t Vodoravni tab. Pomice kursor do sljedeceg tab stopa
\a Upozorenje. Sistemsko zvono.
\\ Backslash. Ispisuje kosu crtu u stringu.
\" Navodnik. Umece dvostruki navodnik u string
Osnove programiranja – p. 19/27
Unos podataka
- najjednostavnija metoda: scanf
- da bi mogli koristiti naredbu scanf moramo ukljucitiStandard Input and Output header file prije mainfunkcije
- primjer naredbe koja traži unos vrijednosti za varijablu atipa int
scanf("%d", &a);
- kao i u naredbi printf moramo zadati format unutardvostrukih navodnika, u ovom slucaju koristimo %d jerje varijabla tipa int
- ispred varijable u koju spremamo podatak mora stajatiznak & (objašnjenje slijedi kasnije)
Osnove programiranja – p. 20/27
Aritmeti cki operatori
- u C-u postoji 5 aritmetickih operatora
Ime operatora Simbol
množenje *
dijeljenje /
ostatak dijeljenja %
zbrajanje +
oduzimanje -
- množenje i dijeljenje se izvršava prije zbrajanja ioduzimanja
- redosljed izvodenja aritmetickih operacija možemopromijeniti korištenjem zagrada
Osnove programiranja – p. 21/27
- ako u izrazu imamo operande razlicitih tipova, operand"slabijeg" tipa se pretvara u "jaci tip" (implicitnakonverzija)
int → float → double
- rezultat operacije je takoder "jaceg" tipa
- operandi odredenog tipa daju rezultat istog tipa
Primjeri
1. 3+4=7
2. 3.0+4=7.0 (4 → 4.0)
3. 3/4=0 !!!!!
4. 3.0/4=0.75 (4→ 4.0)
Osnove programiranja – p. 22/27
- klasican problem: kako ispravno podijeliti dva cijelabroja?
27/10=2 i ostatak 7
- dijeljenje dva cijela broja koja nisu djeljiva u C-u dajenetocan razultat
27/10=2
- ostatak dijeljenje dobije se upotrebom operatora %
27%10=7
- rješenje problema u C-u je upotreba cast operatora →mijenja tipove varijabli (eksplicitna konverzija)
(float)3=3.0
Osnove programiranja – p. 23/27
- varijabla a tipa int → float: (float)a
- varijabla a tipa float → int: (int)a
- varijabla a tipa int → double: (double)a
- vratimo se na problem dijeljenja
Osnove programiranja – p. 24/27
Aritmeti cki operatori pridruživanja
- u C-u možemo kombinirati aritmeticke operatore soperatorom pridruživanja
Izraz Skracena varijanta
x = x*y x *= y
x = x/y x /= y
x = x%y x %= y
x = x+y x += y
x = x-y x -= y
- izraz s desne strane znaka jednakosti se uvijek izvršavaprvi
x *= y+z; ⇐⇒ x = x*(y+z);
Osnove programiranja – p. 25/27
- slijedi primjer za ilustraciju upotrebe aritmetickihoperatora
- program traži od korisnika troznamenkasti cijeli pozitivnibroj i zatim ispisuje pojedine znamenke broja, kao isumu znamenki
- pogledajmo npr. broj 253
253 = 2*100 + 5*10 +3
- pojedine znamenke1. 3 = 253%102. 5 = 25%10 = (253/10)%103. 2 = 2%10 = (25/10)%10
Osnove programiranja – p. 26/27