Programozás alapjai gyakorlat 2. gyakorlat C alapok
2016-2017 Bordé Sándor 2 Forráskód, fordító, futtatható állomány Először megírjuk a programunk kódját (forráskód) Egyszerű szövegszerkesztőben vagy fejlesztőkörnyezettel Fordítjuk Futtatjuk az elkészült állományt Linuxon a beépített C fordító a gcc, használata gcc program.c A futtatható állományt a.out néven hozza létre.
2016-2017 Bordé Sándor 3 Feladat - f0001 Írjunk egy olyan C programot, ami lefordul, de nem csinál semmit! Fordítsuk le default módon -o kapcsolóval
2016-2017 Bordé Sándor 4 Feladat - f0002 Írjunk egy olyan programot, ami lefordul, és kiírja, hogy Hello Világ!! Figyeljünk a helyes tabulálásra!
2016-2017 Bordé Sándor 5 Feladat - f0003 Fordítsuk le a -Wall kapcsolóval! Mit látunk? Javítsuk ki a hibákat!
2016-2017 Bordé Sándor 6 Feladat - f0003 int kell a main() elé return 0; kell a végére (utolsó } elé) #include <stdio.h> kell a legelejére (később bővebben)
2016-2017 Bordé Sándor 7 Utasítás, kifejezés, szekvencia Kifejezés egy adat értékének reprezentációja, önmagában nem végrehajtható. Lehet egy érték (szám, konstans) értékeken végrehajtott műveletek pl. main() { 3+5 } Utasítás végrehajtható művelet, sor végén ; Szekvencia utasítások egymásutánja
2016-2017 Bordé Sándor 8 Típusok int egész szám, egy szó hosszú (32 bit) char egy bájtos egész szám float lebegőpontos szám (egy szó hosszú, valós) double dupla hosszúságú lebegőpontos szám void nem tárol semmit, pl. függvénynél jelöli, hogy nincs visszatérési érték Logikai és szöveges nincs
2016-2017 Bordé Sándor 9 Feladat egyszerű kiíratás - f0004 Írasd ki a képernyőre a 'X' betűt! Írasd ki a képernyőre a 2015 egész számot! Írasd ki a képernyőre a 3.1415 valós számot! Írd ki a képernyőre a Szoveg kiiratasa szöveget! Mindegyik adat egy-egy új sorban jelenjen meg, de egy printf-et használjunk!
2016-2017 Bordé Sándor 10 Változók létrehozása Deklaráció megmondjuk a programnak, hogy egy adott programkomponensre milyen néven hivatkozunk. Ez szükséges, mielőtt hivatkoznánk rá Definíció egy azonosítóhoz értéket rendelünk Változó esetén deklaráláskor csak létrehozzuk, definíció esetén pedig egyből értéket is adunk neki
2016-2017 Bordé Sándor 11 Értékadás Mikor egy változónak megmondjuk, milyen értéket tároljon Többszörös értékadás is lehetséges Többféle számrendszer Tízes: int i = 25; Nyolcas: int i = 031; Tizenhatos: int i = 0x19; Karakter esetén ' ' kell használni Nem az mást jelent
2016-2017 Bordé Sándor 12 Fontos megjegyzés C-ben a blokk elején vannak a deklarációk, minden más utána Inicializálás kezdeti értékadás Az értékadás is egy művelet, kifejezés, tehát van értéke (később látunk erre még példát)
2016-2017 Bordé Sándor 13 Műveletek Alapvető matematikai műveletek + - * / Valós számoknál (float, double) szokott módon működik Egész számoknál az osztás maradékos osztás / egészrész % maradék Műveleteknél a char is számként működik (ld. későbbi órán)
2016-2017 Bordé Sándor 14 Feladat - f0005 Hozz létre egy valós változót és inicializáld a π -re (2 tizedesjegy pontossággal)! Hozz létre egy karakter tároló változót és inicializáld az 'A' betűre! Deklarálj két egész számot és értékadással adj nekik értéket! Írasd ki a képernyőre ezt a három adatot, illetve ezen kívül a két egész szám összegét és szorzatát is!
2016-2017 Bordé Sándor 15 IO (bemenet, kimenet) Vannak bizonyos funkciók, amiket nagyon gyakran használni kell, ezért már előre megírták őket és mi használhatjuk. Ezeket a függvényeket külön fájlokban érhetjük el, ha használni akarjuk őket, akkor be kell illeszteni Bemeneti-kimeneti funkciókra szolgáló függvények #include <stdio.h>
2016-2017 Bordé Sándor 16 Egyszerű típusok kiíratása, beolvasása Kiíratás printf() függvény legalább egy paramétert vár, a kiírandó szöveget Ebben a szövegben elhelyezhetünk formátum karaktereket, ezek % [betű] alakúak Alap formátum karakterek (összes lásd később vagy itt) %d decimális egész számok %f decimális valós számok %c karakter %s szöveg
2016-2017 Bordé Sándor 17 Egyszerű típusok kiíratása, beolvasása Beolvasás scanf() függvény legalább két paramétert vár Első helyen a formátum karaktert/karaktereket Második helyen a memóriaterületet, ahova eltároljuk a beolvasott értéket Egy változó memóriaterületét a & operátorral kaphatjuk meg
2016-2017 Bordé Sándor 18 Feladat - f0006 Olvass be két egész számot egy-egy változóba! Cseréld meg az értéküket! Írd ki csere után az egyes változók értékeit!
2016-2017 Bordé Sándor 19 Egyszerű típusok kiíratása, beolvasása Lehet egyszerre több értéket is beolvasni scanf( %c %d %c, &k1, &e, &k2);
2016-2017 Bordé Sándor 20 Feladat - f0007 Olvass be egy egész és egy valós számot, illetve egy karaktert, ezután írasd ki őket a képernyőre! Mi történik, ha nem helyes típusú bemenetet írunk?
2016-2017 Bordé Sándor 21 Feladat - f0009 Írj programot, ami beolvas három valós számot! Ezeket kiírja külön sorba Mindegyik 15 karakteren jelenik meg Ebből 8 tizedesjegy legyen
2016-2017 Bordé Sándor 22 Túlcsordulás Minden adattípus fix méretű területen tárolódik a memóriában Emiatt az értékkészlet is véges (felfele és lefele is) Ha egy művelet értékkészleten túli eredményt adna, túlcsordul Kimegy az egyik végén és visszajön a másikon Undefined behavior
2016-2017 Bordé Sándor 23 Feladat - f0010 Írj egy olyan programot, ami két egész számmal végez olyan műveletet, aminek az eredménye alul/túl fog csordulni. Írasd ki az eredményt!
2016-2017 Bordé Sándor 24 Függvények A program egy részfunkcióját (részalgoritmusát) hajtja végre Deklaráció Mit kér a függvény, hogy hívják és mit ad vissza? Definíció Mit csinál a függvény? Függvényhívás Hajtsd végre ezekkel az értékekkel! Deklaráció és definíció szerepelhet külön helyen a kódban Függvény első hívásakor már kell lenni deklarációnak!
2016-2017 Bordé Sándor 25 Függvények <típus> név( [paraméter], [ ] ); int negyzet(int x); <típus> név([paraméter], [ ]) { törzs (utasítások sorozata) } int negyzet(int x) { return x*x; } név([paraméterek]); negyzet(2);
2016-2017 Bordé Sándor 26 Függvények Bármennyi paramétert megadhatunk a függvénynek deklarációkor Híváskor viszont pontosan annyi paramétert kell adni, amennyit az vár
2016-2017 Bordé Sándor 27 Feladat - f0011 Írj egy e nevű függvényt, aminek nincs paramétere, visszatérési értéke valós típusú. A függvény csak annyit csinál, hogy visszaadja az e szám értékét négy tizedesjegy pontossággal (2.7182). A főprogramod hívja meg ezt a függvényt és írasd ki a képernyőre!
2016-2017 Bordé Sándor 28 Feladat - f0012 Írj egy add nevű függvényt, ami paraméterben két egész számot vár Visszatérési értéke egész Összeadja a két paraméterben kapott számot és visszatér ezzel az értékkel A főprogramod kérjen be két egész számot, hívja meg ezekkel a add függvényt és írja ki az eredményt!
2016-2017 Bordé Sándor 29 Feladat - f0013 Írd meg az előző (f0012) programot úgy, hogy a main() előbb legyen a kódban, mint a sum függvény deklarációja (törzse)! Hogy tudod ezt megoldani?
2016-2017 Bordé Sándor 30 Blokkok C-ben a blokkokat { } jelekkel adjuk meg Hol láttunk ilyet eddig? Kód tagolására, illetve bizonyos struktúrák megadására használjuk Hatókör egy blokkban létrehozott változó csak abban a blokkban érvényes és blokkon belül egyedinek kell lenni
2016-2017 Bordé Sándor 31 Lokális, globális változók Globális blokkon kívül deklarált, bárhonnan látható Lokális blokkon belül deklarált, csak ott látszik Egy blokkban a névnek egyedinek kell lenni Felsőbb szintű blokkban deklarált változót elfedhetünk az aktuális blokkban deklarált, ugyan olyan nevű változóval Pl. gyak03/1-anyag/globals.c
2016-2017 Bordé Sándor 32 Feladat - f0014 Próbáld ki, fordul-e a globals.c program, ha a main függvényben megpróbálod felhasználni a lokalis változót! Mi történik, ha a globalist csak a függvény után deklaráljuk?
2016-2017 Bordé Sándor 33 Header és forrás fájlok Gyakran előfordul, hogy mások által megírt függvényeket szeretnénk felhasználni a programunkban Ehhez nekünk nincs szükségünk a függvények forráskódjára, elegendő A függvény lefordított gépi kódja A függvény fejléce, hogy az én programom ismerje A függvény fejléceket teszik a header fájlokba (.h kiterjesztés)
2016-2017 Bordé Sándor 34 Header és forrás fájlok Használatkor meg kell mondani a programomnak, hogy milyen függvényeket ismerjen A header fájl beillesztésével tehetem meg #include, majd utána a header fájl neve A C saját header fájljait <> közé tesszük Egyéb headerfájlokat közé Később bővebben előkerül
2016-2017 Bordé Sándor 35 Feladat - f0017 A huto.c és a huto.h kódok segítségével írj egy olyan programot, ami befejezi az alábbi viccet: Hogyan teszel be egy elefántot a hűtőbe???? Kinyitod a hűtőajtót, beteszed az elefántot, majd becsukod a hűtőajtót. És hogyan teszel be egy zsiráfot a hűtőbe?...
2016-2017 Bordé Sándor 36 Feladat - f0017 A kész kódokhoz ne nyúlj, csak a megjelölt függvényeket fejezd be! Hogy megtudd, jól dolgoztál-e, fordítsd és futtasd a programodat!
2016-2017 Bordé Sándor 37 Házi feladat Kötelező: /pub/programozasalapjai/gyakorlat/gyak02/hazi-feladatok Gyakorlás: /pub/programozasalapjai/gyakorlat/gyak02/gyakorlo-feladatok Órai feladatokat újra átnézni