Tartalmi kivonat
Programozás 1. Dr. Iványi Péter 1 C nyelv • B.W Kernighan és DM Ritchie, 1978 – The C Programming language 2 C nyelv • Amerikai Szabványügy Hivatal (ANSI), 1983 – X3J11 bizottság a C nyelv szabványosítására • 1989, ANSI X3.159-1989 a végleges szabvány – – – – Az addigi programok lefordíthatóak legyenek A C forráskód hordozható legyen Nem hordozható, rendszerfüggő részek C nyelv „szellemisége" 3 C nyelv 4 C nyelv „szellemisége” • Kernigan és Ritchie „A C nyelv azt a filozófiát követi, hogy a programozó tudja mit csinál, csak explicit módon fogalmazza meg mit akar.” • Kicsi, de egyszerű nyelv • Egy dolgot csak egyféle képpen lehessen végrehajtani 5 C++ • Bjarne Stroustrup, Bell Laboratórium – Első implementáció, 1983 • Ötletek: – – – – Simula67: osztályok, származtatott osztályok Algol68: operátor kiterjesztés Ada: templétek Egyéb • Minden C program
lefordítható C++ -ban, de nem biztos hogy ugyanaz a tárgykód lesz. 6 C nyelv • ISO 9899:1999 melyet C99-es szabványnak is nevezünk – – – – – – – Változók bárhol definiálhatók Új adattípusok, pl. long long int, boolean, complex Változó hosszúságú tömbök Egy soros megjegyzés bevezetése Új könyvtári függvények Makrók javítása Bizonyos értelemben szigorúbb is lett 7 C nyelv jellemzői • Alacsony szintű nyelv • Típusok – Karakterek, egész és lebegőpontos számok különböző formái – Származtatott típusok – Mutatók, címaritmetika • Tartalmazza a struktúrális programozás vezérlőszerkezeteit 8 C nyelv jellemzői • • • • Függvények visszatérési értéke, valamelyik típus Bármely függvény rekurzíven hívható Függvénydefiníciók nem ágyazhatók egymásba Explicit memória kezelés, nincs „garbage collection” • Adatbevitel és kivitel nem a nyelv része hanem standard könyvtár
tartalmazza • A programot le kell fordítani!!! 9 Alapismeretek • Egy program készítése, mely kinyomtatja: Hello World! 10 Hello World 1. #include <stdio.h> void main() { printf(”Hello World! ”); } 11 Fordítás programozó szövegszerkesztő forrás modul hello.c 12 Fordítás • Előfeldolgozó program – Elvégzi a szöveghelyettesítéseket – Kifejti a makrókat forrás modul forrás könyvtár előfeldolgozó program hello (belső reprezentáció) előfeldolgozó forrás 13 Fordítás • Fordító (compiler) – Elemzi a magas szintű nyelv utasításait (gépfüggetlen) – Kódot generál (függ a processzor utasításaitól) előfeldolgozó forrás fordító tárgy kód hello.o 14 Fordítás • Összefűző-szerkesztő program – Feloldja a kereszthivatkozásokat hello.o libc.lib libc.dll . tárgy kód modul könyvtár összefűzőszerkesztő program futtatható program hello.exe 15 C program •
Bármennyi SPACE karakter vagy üres sor lehet a programban • A C program függvényekből és változókból áll • A függvény utasításokat tartalmaz • main függvény speciális a program futása mindig itt kezdődik!!! • Minden programban kell legyen main függvény 16 Üres program main() { } • Nem csinál semmit és csak az alap utasításokat lehet használni. • Kapcsos zárójelek közé kell tenni egy utasításblokkot. 17 Argumentumok • Függvények közötti kommunikáció – a hívó függvény adatokat ad át a hívott függvénynek • Adatok – argumentumok • A függvény neve után zárójelek között szerepel • Nincs argumentum ha üres, például main() 18 Függvénykönyvtár • Fordítóprogramot értesítjük, hogy mely függvényekre lesz szükségünk: #include <stdio.h> stdio.h A file definiálja az egyes bemeneti és kimeneti függvényeket. .h kiterjesztés (head=fej), fejléc vagy header file 19
Utasítások • A függvény utasításait a kapcsos zárójelek közé kell tenni. Például: printf(”Hello World! ”); A függvényt a nevével és az azt követő argumentum listával kell meghívni. – printf : függvény neve – ”Hello World! ” : argumentum • Pontosvesszővel zárjuk az utasításokat, függvényhívásokat !!! 20 Szöveg • Karakterlánc, szöveg, sztring, string – Idézőjelek közötti karakterek – Állandó, konstans – Nem módosítható közvetlenül • Speciális karakter: – : új sor „karakter”, egy sort emel • printf csak azt nyomtatja amit megadtunk 21 Hello World 2. #include <stdio.h> void main() { printf(”Hello”); printf(”World!”); printf(” ”); } 22 Mejegyzések, leírások /* ide kerül a megjegyzés */ • Bármi tehető a két jel közé. • C++ megjegyzés: // – Csak egy sornyi megjegyzés – Ha lehet ne használjuk még, majd ha C++ -t tanulunk 23 Hello World 3. #include
<stdio.h> void main() { /* kiiratás / printf(”Hello”); printf(”World!”); printf(” ”); } 24 Változók • Adat: Valamely tény vagy fogalom olyan egyezményesen ábrázolt alakja, amely alkalmas arra, hogy emberek vagy automatikus eszközök továbbítsák, értelmezzék vagy feldolgozzák. • Információ: Az adat jelentése. • Típus: értelmezési tartomány. 25 Adattípusok • A memória byte-okra oszlik. • A memóriabeli „objektumok” egy vagy több byteot foglalnak el. • Minden byte 8 bitből áll. • Az értékeket a bitek mintája határozza meg. • A bit minta értelmezése függ az adat típusától. 26 Adattípusok Definíció char int float double Byte 1 2 4 8 Értelmezés Karakter Egész szám Valós szám, egyszeres pontosság Valós szám, kétszeres pontosság 27 Változók • MINDEN változó típusát definiálni kell és nem lehet menet közben változtatni!!! • típus név ; • Név: – Karakterek –
Számok – Aláhúzás karakter, • Kis- és nagybetű különböző!!! • Blokk elején, kapcsos zárójel után áll!!! 28 Változók példa void main() { int a; int b, c; a = 1; b = 3; c = a+b; } 29 Beszédes változó nevek void main() { int ho, nap; float testsuly; double fizetes; . } 30 Nem használható nevek asm, auto, break, case, catch, char, class, const, continue, default, do, double, else, enum, extern, float, for, goto, if, inline, int, long, register, return, short, signed, sizeof, static, struct, void, volatile, while, . 31 Rossz példa void main() { int a; a = 1; int b, c; b = 3; c = a+b; } 32 Utasítás blokk void main() { int a; a = 1; { int b, c; b = 3; c = a+b; } } 33 Értékadás • Változók értékének beállítása: – a = 1; • Pontosvesszővel zárjuk le • Lehet többet is felsorolni: – a = b = 1; 34 Minösítő szimbólumok • short: „rövid” • long: „hosszú” • unsigned: „előjel nélküli”
• Például: • long double : 10 byte-ban van reprezentálva 35 Típusok • • • • • • • • • char signed char unsigned char int long int short int unsigned int unsigned long int 36 Értelmezése tartományok, 32 bit típus char unsigned char int unsigned int long int unsigned long float double long double alsó határ -128 0 -32 768 0 -2 147 483 648 0 3.4E - 38 1.7E - 308 1.2E - 4932 felső határ +127 255 32 767 65 535 2 147 483 647 4 294 967 295 3.4E + 38 1.7E + 308 1.2E + 4932 37 Változó típusa • A változó típusának mindig azt a legkisebb típust választjuk, amelyik az adott feladatot problémamentesen megoldja. int ev = 2008; float testsuly=71.1; double fizetes = 40500.5; 38 Konstansok • • • • • • Karakter: ’a’ Egész szám: 231, -123 Oktális: 034 Hexadecimális: 0x1f Long: 134L Lebegőpontos: 0.34, -034, 15e-2 – Egész vagy tört rész elhagyható, de csak az egyik – pont vagy e,E elhagyható de csak az egyik
• Sztring: ”szoveg” 39 Ellenőrzés • Mi a különbség? 7 ’7’ ”7” 40 Ellenőrzés, melyik helyes -236 Helyes -5000 Helyes 0.0567e-7 Helyes 5,67 Hibás 1/3 Hibás 3,456.83 Hibás 0. Helyes .15 Helyes 41 Kiíratás még egyszer printf(<formátum>, [argumentumok]); • formátum: egy szöveg, formátum karakterekkel • A formátum karakterek helyére az argumentumok értékét írja ki • Formátum karakterek száma = argumentumok száma !!! • Formátum karakter típusa » argument típusa • Argumentumokat vesszővel választjuk el. 42 Formátum karakterek formátum karakter %d %x %o %f %lf %c %s típus integer hexadecimális szám oktális szám float double karakter sztring 43 Mezőszélesség • %nd : n számjegy szélességben írja ki az egész számot – %6d 123 • %+d : előjelet mindig jelezze • %x.yf : hány egész és hány tizedes jegyet írjon ki – x : teljes szélesség – y : tizedesek száma
– %8.2 123.45 44 Adattípusok kiíratása 1. #include <stdio.h> void main() { int a; int b, c; a = 1; b = 3; c = a+b; printf(”Két szám összege: %d + %d = %d ”, a, b, c); } 45 Adattípusok kiíratása 2. #include <stdio.h> void main() { int a; int b; a = 1; b = 3; printf(”Két szám összege: %d + %d = %d ”, a, b, a+b); } 46 Adattípusok kiíratása 3. #include <stdio.h> void main() { printf(”Értékek: %d %lf %s ”, 11, 23.45, ”hello”); } 47 Speciális karakterek Alakja ’”’ ’\’ ’ ’ ’ ’ ’ ’ ’’ ’ ’ ’10’ ’x1f’ Jelentése idézőjel backslash új sor „carriage return” tabulátor visszatörlés nullás karakter oktális szám hexadecimális szám 48 Példa 1. Hogyan nyomtassuk ki: > Nevem ”Peter” > Hello #include <stdio.h> void main() { printf(”Nevem ”Peter” Hello”); } 49 Példa 2. Hogyan nyomtassuk ki: > c:WindowsWin32 > #include <stdio.h> void
main() { printf(”c:\Windows\Win32 ”); } 50 Beolvasás scanf(<formátum>, [változók címei]); • A bemenetről karaktereket olvas be és a formátumban megadott specifikáció szerint értelmezi azokat, majd az eredményt eltárolja a változókban. • Például: scanf(”%f”, &szam); 51 Változók címe • A beolvasott értékeket a változókban akarjuk tárolni, így a változó címét kell megadni. • A változó címét a változó neve elé írt & karakter segítségével tudjuk előállítani. 52 Példa int x, y, z; scanf("%d,%d,%d", &x, &y, &z); Beolvasás: 2,3,4 <ENTER> 53 Kezdjék átolvasni a fejezeteket • Kernighan-Ritchie: A C programozási nyelv – 1.1 – 13 Alfejezetek – 3. Fejezet • Benkő Tiborné: Programozzunk C nyelven! – 3.1 – 32 Alfejezetek – 3.5 Alfejezet 54 Ellenőrző kérdések • • • • • • • • • • • Mit jelent a változók deklarálása ? Mit
ad meg a változó típusa ? Mire ügyeljünk a C nyelvben használt változók elnevezésénél ? Miért nem lehet változónévként használni az alábbi szavakat: break, void. Milyen konstansokat használhatunk a C nyelvben ? Hogyan lehet ezeket deklarálni? Miben különbözik a w és a "w" konstans ? Az A betű (nagy A) kódja 65. Azonosak-e az alábbi konstansok: 65, A, 0101, 0x41 Írja fel az alábbi számokat lebegőpontos konstansként: 0,157 -1 56000 65,897 Milyen típusú konstansokat használunk a C nyelvben ? Írjon fel mindegyikre egyegy példát. Az alábbi felsorolásban melyek karakter konstansok: a, b, "c", 89, "89", 8 Mi a stringliterál ? Írjon fel egy példát. 55 Ellenőrző kérdések • • • • • • Mire szolgál a formátumstring a printf és a scanf függvényeknél ? Az argumentumlistában szerepelhetnek-e konstansok ? Mi a hatása a printf függvény formátum-stringjében elhelyezett escape szekvenciának ?
Adjon meg három escape szekvenciát, melyet a printf utasítás formátumstringjében gyakran használhatunk. A printf függvény hívásának általános formája. Mi történik, ha a scanf utasításban az argumentumlista elemeinél a változónevek elé nem tesszük ki a & operátort ? 56