B I T M A N B I v: T M A N

Hasonló dokumentumok
B I T M A N B I v: T M A N

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Adatbázis rendszerek Gy: Algoritmusok C-ben

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Programozás alapjai 3.Gy: C elágazások, ciklusok P R O

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Programozás alapjai 8.Gy: Program struktúra

Programozás alapjai 9.Gy: Struktúra 2.

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

C programozás. 1 óra Bevezetés

Vezérlési szerkezetek

10. gyakorlat Tömb, mint függvény argumentum

Programozás II. 2. Dr. Iványi Péter

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozás 1. Dr. Iványi Péter

C programozási nyelv Pointerek, tömbök, pointer aritmetika

A C programozási nyelv

Programozás alapjai. 5. előadás

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Java II. I A Java programozási nyelv alapelemei

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

S z á m í t ó g é p e s a l a p i s m e r e t e k

Mintavételes szabályozás mikrovezérlő segítségével

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

INFORMATIKA javítókulcs 2016

Programozás I gyakorlat. 10. Stringek, mutatók

Vezérlési szerkezetek. Szelekció Ciklusok

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

3 A C programozási nyelv szintaktikai egységei

A C# programozási nyelv alapjai

Programozás I gyakorlat

Programozás I. gyakorlat

A C programozási nyelv III. Pointerek és tömbök.

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás I. gyakorlat

A C programozási nyelv III. Pointerek és tömbök.

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

1. Alapok. Programozás II

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Informatika terméktervezőknek

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

BASH script programozás II. Vezérlési szerkezetek

Programozási segédlet

Felvételi tematika INFORMATIKA

Bevezetés a programozásba I.

8. gyakorlat Pointerek, dinamikus memóriakezelés

Karakter- és sztringkezelő függvények, matematikai függvények

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

1. Jelölje meg az összes igaz állítást a következők közül!

Algoritmizálás + kódolás C++ nyelven és Pascalban

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

7/8. gyakorlat Karaktertömbök és sztringkezelés

Programozás I gyakorlat

Készítette: Nagy Tibor István

A programozás alapjai előadás. A C nyelv típusai. Egész típusok. C típusok. Előjeles egészek kettes komplemens kódú ábrázolása

Programozás C és C++ -ban

1. Alapok. #!/bin/bash

Bevezetés a C++ programozási nyelvbe

Java II. I A Java programozási nyelv alapelemei

5. gyakorlat. Konstansok Tömbök Stringek

5. Gyakorlat. struct diak {

7. gyakorlat. Fájlkezelés IO haladó Függvények haladó

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Occam 1. Készítette: Szabó Éva

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programzás I gyakorlat

Megoldott programozási feladatok standard C-ben

BASH SCRIPT SHELL JEGYZETEK

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Apple Swift kurzus 3. gyakorlat

C programozási nyelv

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

1. Gyakorlat. Rövid elméleti összefoglaló. <tárolási osztály>típus <típus > változónév <= kezdőérték><, >;

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

A C programozási nyelv II. Utasítások. A függvény.

AWK programozás, minták, vezérlési szerkezetek

Óbudai Egyetem. C programozási nyelv

Webprogramozás szakkör

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Pénzügyi algoritmusok

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Átírás:

Műszaki informatika 3. Ea: CPA A C nyelvű Programozás Alapjai B I v: T 2014.02.15 M A N 1/155

2/155

Témakörök A C nyelv jellemzői A C nyelvű program szerkezete A C nyelv elemei Algoritmusok C nyelven Feladat ötletek Ellenőrző kérdések 3/155

A C nyelv története Dennis MacAlistair Ritchie és Brian Kernighan AT&T, Bell Laboratories, 1972 rendszerprogramozás, de magas szintű nyelven 1973: a UNIX átírása C-re 4/155

A C nyelv története 5/155

A C nyelv története 6/155

A C nyelv története Dennis MacAlistair Ritchie és Brian Kernighan AT&T, Bell Laboratories, 1972 rendszerprogramozás, de magas szintű nyelven 1973: a UNIX átírása C-re 1978: K&R C Kvázi szabvány Széleskörű használat után: 1983: szabvány előkészítése 1989: ANSI C (X3.159-1989) A továbbiakban "C nyelv" alatt mindig "ANSI C" értendő 7/155

A C nyelv jellemzői Általános célú Viszonylag alacsony szintű Alapobjektumok: karakterek, számok, címek Nincsenek összetett objektumokat kezelő utasítások Általában kicsi és hatékony célprogram Törekvés a hordozhatóságra Számos implementáció Széleskörű használat Gazdag függvénykönyvtár választék Magas szintű programnyelvek C nyelv olvasható assembly Gépi nyelvek (assembly) 8/155

Témakörök A C nyelv jellemzői A C nyelvű program szerkezete A C nyelv elemei Algoritmusok C nyelven Feladat ötletek Ellenőrző kérdések 9/155

A C nyelvű program szerkezete Egy C program egy vagy több modulból áll. A modulok valamelyikének tartalmaznia kell egy main nevű függvényt. Ez lesz a program belépési pontja, vagyis ez kezd el végrehajtódni. Modul: 10/155 Minden modul külön file. A modulok önállóan lefordíthatók, úgynevezett tárgykóddá. A tárgykódú modulokat az összeszerkesztő (linker) állítja össze egy programmá. (A linker általában egyben van a fordítóval, és kapcsolókkal szabályozható, hogy csak tárgykódot készítsen, vagy végezze el az összeszerkesztést is, vagy csak összeszerkesztést készítsen.)

Ismétlés # include <stdio.h> void main ( ) { printf ( Helló Világ! \n ); } Szövegszerkesztő (editor) 11/155 Fordítóprogram Könyvtári modul 1CF7 B00C 37DA 4107 FAC4 660D 00F1 300BD 1FF0 35BB 337DD 239C 410F 396A C44D 006A 410F 396D 5CF3 B00A 3CDA 4107 FAC4 660D 00F1 300BD CCD4 BAF0 337DD 239C 33F5 0B6A Tárgykódú modul A tárgykódú modulokhoz hozzávesszük a könyvtári modulokat A linker összeszerkeszti Linker 10011110 11000011 10101100 10111000 00101100 10010010 10010000 01111011 A végeredmény a futtatható (exe) program

A C nyelvű program szerkezete 2. Egy modulos program esetén is van dolga az összeszerkesztőnek, hiszen a modulunkban használt könyvtári függvények (a C nyelvhez adott előre megírt függvények, pl. printf()) egy vagy több tárgykódú modulban vannak elhelyezve. Egy modul tartalmazhat: 12/155 A fordítónak szóló utasításokat (pl. #include <stdio.h>) Deklarációkat, definíciókat (változó, típus, stb.) Függvényeket (pl. void main() { } ) Megjegyzéseket

A C nyelvű program szerkezete 3. A C program szokásos szerkezete: direktívák globális deklarációk és definíciók void main() { lokális deklarációk utasítások // Megjegyzés } A minimális (működő) C program: void main( ) 13/155 { }

Az első program # include <stdio.h> void main ( ) { printf ( Helló Világ! \n ); } Könyvtári modul hívás Sorvégjel Függvény Sortörés 14/155

A programkészítés menete # include <stdio.h> void main ( ) { printf ( Helló Világ! \n ); } Prg1.c Fordítóprogram 1FF0 35BB 337DD 239C 410F 396A C44D 006A stdio.h printf Prg1.obj Linker Szövegszerkesztő (editor) 15/155 410F 396D 5CF3 B00A 3CDA 4107 FAC4 660D stdio.h 10011110 11000011 10101100 10111000 00101100 10010010 10010000 01111011 Prg1.exe

Standard könyvtári modulok Alapszabály: C programban csak deklarált azonosítók használhatók! A standard függvények deklarációját standard könyvtári modulok (header fájlok) tartalmazzák. Az #include un. direktíva a forrásszövegbe beszúrja a megadott fájlt: A standard input-output függvények és konstansok deklarációinak beillesztése: #include <stdio.h> Matematikai függvények deklarációi: #include <math.h> Saját függvények deklarációi #include "fuggvenyeim.h" 16/155

Témakörök A C nyelv jellemzői A C nyelvű program szerkezete A C nyelv elemei Algoritmusok C nyelven Feladat ötletek Ellenőrző kérdések 17/155

A C nyelv elemei Szintaktikai egységek Változók, elemi adattípusok Egyszerű ki- és beviteli utasítások Operátorok Elágazás utasítások Ciklus utasítások Függvények Tömbök Mutatók 18/155

Szintaktikai egységek Azonosítók Betűk, számjegyek és _ (aláhúzás) Nem kezdődhet számjeggyel Maximális hossza függ a C nyelv verziótól, de minimum 8 karakter Nem lehet a nyelv kulcsszava Kis-nagybetű érzékeny! Case sensitive! Kulcsszavak Fenntartott szavak, kisbetűsek. 19/155

Szintaktikai egységek 2. Operátorok Egy- két- és három operandusú. Széles választék (Később részletezem!) Egyéb elválasztók Utasításvég: ; (pontosvessző) Blokkhatárok: { } Megjegyzés /* Karaktersorozat */ Nem skatulyázhatók egymásba! // Karaktersorozat 20/155

A C nyelv elemei Szintaktikai egységek Változók, elemi adattípusok Egyszerű ki- és beviteli utasítások Operátorok Elágazás utasítások Ciklus utasítások Függvények Tömbök Mutatók 21/155

Változó A programokban az adatok változók formájában jelennek meg változókban tároljuk az adatokat. A változó névvel ellátott tároló hely a számítógép memóriájában. A változó értéke ezen tároló hely pillanatnyi értéke. A változó jellemzői: Neve azonosító kell legyen Típusa memóriaméret Értéke memóriatartalom Címe tárbeli kezdőcím 22/155

Specialitások A karakter típus teljesen egyenértékű az egésszel, csak megjelenítésükben különböznek. (Lehet például két karaktert osztani egymással.) Nincs külön logikai típus. Az egészeket használja logikai értékként. A 0 értéket hamisnak tekinti, az ettől eltérő egész értéket igaznak. A relációk eredménye pedig 0 ha hamis, és 1 ha igaz. Nincs szöveges típus. A szövegek tárolására karakter tömböket használ. 23/155

Egész (integrális) típusok Típusnév char short(int) int long(int) Hossz 1 bájt 1 bájt (legalább) 2 bájt (legalább) 4 bájt Egész konstansok: Decimális: 123, -35 Oktális: 045 (tehát nullával kezdődik) Hexadecimális: 0x4A (tehát 0x-el kezdődik) 24/155

Egész (integrális) típusok 2. Megjegyzések: A nyelv csak azt írja elő, hogy short <= int és int <= long Mindegyik elé alkalmazható a signed (előjeles) - a char kivételével ez az alapértelmezés unsigned (előjel nélküli) Pl. short a; Értelmezési tartomány: -128.. 127 unsigned short a; Ért. tart: 0.. 255 A char előjelessége gépfüggő! 25/155

Lebegőpontos típusok Típusnév Pontosság Hossz float kis pontosságú 4 bájt double dupla pontosságú 8 bájt long double nagy pontosságú 16 bájt Valós konstansok: Tizedespontos alak: 12.34, 0.4534 Tudományos alak: 26/155 2.345e5, 0.56E-2 (azaz 234500.0, 0.0056) Alapértelmezés szerint duplapontosságú egy valós konstans, de elő lehet írni kispontosságot is a szám után tett f vagy F betűvel (45.6F).

Void A void egy speciális típus, ami két helyen használható: Mutatók típusaként megadva jelzi, hogy még nem ismert a típus. Függvények visszatérési értékének típusaként megadva jelzi, hogy nincs visszatérési érték. 27/155

Deklaráció (bevezetés, kihirdetés) A C nyelvben minden változót kötelező deklarálni! Szintaktikája: Változó: típus azonosító[,azonosító]; Pl. int a, b, c; unsigned int ertek=0; Tömb: típus azonosító[elemek száma]; Pl. int szamok[10]; Az indexelés 0-tól indul! 28/155 Deklarálás! Inicializálás!

Példa 1. Három szám összege # include <stdio.h> void main ( ) { } int a, b, c; int sum; a=1; b=2; c=3; sum =a+b+c; printf ("Összeg: a+b+c = %d\n", sum); Összeg: a+b+c = 6 stdio.h - könyvtári modul Benne: printf() függvény definíciója. Decimális egész formátum 29/155

Kiírás C nyelven (1.) Logikája: printf("helló VILÁG!"); "Szöveg konstans" Formátum printf("összeg: a+b+c = %d", sum); "Szöveg konstans" változó 30/155 elválasztó

Kiírás C nyelven (2.) Formátum printf("összeg: a+b+c = %d\n", sum); "Szöveg konstans" változó elválasztó Sortörés 31/155

Példa 2. Kör területe # include <stdio.h> void main ( ) { } float r, terulet; const float PI=3.14159; r=2.2; terulet = r*r*pi; Tizedes tört formátum: 6 helyen, 2 tizedessel printf ("Az r = %6.2f sugarú kör területe:%10.2f\n", r, terulet); Az r = 2.20 sugarú kör területe: 15.21 32/155

Példa 3. int char # include <stdio.h> void main ( ) { } char kar= A ; char egesz=55; printf ( Karakterek: %c és %c\n,kar, egesz); printf ( Egészek: %d és %d\n,kar, egesz); Karakterek: A és 7 Egészek: 65 és 55 Karakter formátum 33/155

Példa 4. - Túlcsordulás Tárolás 1 bájton, # include <stdio.h> ért. tart: 0.. 255 void main ( ) { unsigned char a, b, s; a=100; b=100; s = a+b; printf("a=%4d, b=%4d, s=%4d\n", a, b, s); a=200; b=200; s = a+b; printf("a=%4d, b=%4d, s=%4d\n", a, b, s); } a= 100, b= 100, c= 200 a= 200, b= 200, c= 144 34/155

Leolvasási sorrend 32 64 128 Kitérő 200 10 =? 2 200 100 50 25 12 6 3 1 0 35/155 0 0 0 1 0 0 1 1 200 10 =11001000 2 11001000 + 11001000 110010000 16 8 4 2 1 1 0 0 1 0 0 0 0 128+16 = 144

Elnevezett konstans deklarálása A C nyelvben nincs külön lehetőség elnevezett konstansok létrehozására. Lehet viszont használni egy olyan fordítónak szóló utasítást, amely hasonló szerepkört tölt be. #define VALAMI 45 Ennek hatására a fordító mindenhova, ahol a forrásprogramban ezután meglátja a VALAMI szót, behelyettesíti a 45-öt. 36/155

Típus deklaráció Új típusok létrehozására szolgál, szintaktikája: typedef típusleírás típusnév; Pl.: typedef int egesz; Létrejött egy egesz nevű új típus, ami teljesen azonos az int típussal. 37/155

A C nyelv elemei Szintaktikai egységek Változók, elemi adattípusok Egyszerű ki- és beviteli utasítások Operátorok Elágazás utasítások Ciklus utasítások Függvények Tömbök Mutatók 38/155

Egyszerű output printf( ) %[-] [n[.m]] [l] x formátum long v. double Balra igazít Helyek, tizedesek 39/155

Egyszerű output A formátum fajtái: c karakter d előjeles egész u előjelnélküli egész o oktális x hexadecimális f tizedes tört e exponenciális s sztring Csak előjel nélküli egészek esetén (unsigned) 40/155

Egyszerű output ESC karakterek: \n új sor \f lapdobás \r kocsi-vissza \t vízszintes tabulálás \v függőleges tabulálás \b backspace \ \ \\ \ \a alarm (cseng) \0 a 0 kódú karakter, ami nincs 41/155

Egyszerű input scanf ( ) A standard inputról végez formázott bevitelt Ugyanazok a formátum elírások, mint a printf-nél A scanf függvénynek a változó címét kell átadnunk, ahová tennie kell a beolvasott értéket a konverzió után a %d és a %f formátummal történ beolvasás esetén! 42/155

Példa 5. Egész, valós, szöveg beolvasás # include <stdio.h> void main ( ) { } int i; float x; char name [50]; scanf ("%d %f %s", &i, &x, name); printf("i=%d, x=%8.2f, name=%s\n", i, x, name); 14 3.5 BitMan i=14, x= 3.50, name: BitMan 43/155

Példa 6. Kör sugara # include <stdio.h> void main ( ) { float r, terulet; const float PI=3.14159; printf("kérem a kör sugarát: "); scanf ("%f", &r); terulet = r*r*pi; printf ("Az r= %6.2f sugarú kör területe:%10.2f \n", r, terulet); } Kérem a kör sugarát: 3.6 Az r= 3.60 sugarú kör területe: 40.72 44/155

Haladó input-output c = getchar(); putchar(c); gets(str); puts(str); Beolvas egy karaktert (c); Kiír egy karaktert Beolvas egy sztringet (str); Előtte deklaráció: char str[20]; Kiír egy sztringet 45/155

A C nyelv elemei Szintaktikai egységek Változók, elemi adattípusok Egyszerű ki- és beviteli utasítások Operátorok Elágazás utasítások Ciklus utasítások Függvények Tömbök Mutatók 46/155

A C nyelv operátorai Aritmetikai operátorok: 47/155 + összeadás - kivonás * szorzás / osztás % modulo = maradék ++ inkrementálás -- dekrementálás Pl. Int a=9, b=2, c, d; c= a/b; d=a%b; Csak egész jellegű változók esetén! a/b= 4 a%b= 1

++, -- operátorok a = a+1 a++ vagy ++a a = a -1 a-- vagy -- a A műveleti sorrend miatt van különbség a kétféle írásmód között: Pl.1: Pl.2: a = 10; a = 10; b = ++a; b = a++; b b= = 11 lesz b b= =10 lesz a a= =11 lesz a a= =11 lesz 48/155

Relációs operátorok < kisebb <= kisebb v. egyenlő > nagyobb >= nagyobb v. egyenlő!= nem egyenlő == egyenlő 49/155

Logikai operátorok &&! AND OR NOT Alt Gr + W Pl.: # include <stdio.h> void main (){ int a=2, b=10, c; if (a<5 && b>5) c=3; else c=8; printf ("Eredmeny: %d \n", c); } Eredmény= 3 50/155

Specialitások a = 2, b = 10, c=a+b; x - = 10; x = x 10; a = b = c*2; # include <stdio.h> void main (){ int a=2, b=10, c=(a<b?a:b); printf ("Eredmény= %d \n", c); } void main(){ 9 / 4 = 2 float a,b; a=9.99; b=4.55; printf("%d / %d = %d\n", (int) a, (int) b, (int) a / (int) b); } 51/155 Eredmény= 2

Specialitások 2. A C nyelv az egészeket használja logikai értékként. A 0 értéket hamisnak tekinti, az ettől eltérő egész értéket igaznak. Pl.: a=1&&3; a=1 a=0&&3; a=0 a=0 3; a=1 a=!5; a=0 A relációk eredménye 0 ha hamis, és 1 ha igaz. Pl.: x=3>1; x=1 x=3<1; x=0 52/155

A C nyelv elemei Szintaktikai egységek Változók, elemi adattípusok Egyszerű ki- és beviteli utasítások Operátorok Elágazás utasítások Ciklus utasítások Függvények Tömbök Mutatók 53/155

Az elágazás utasítások A döntési pontokban végrehajtott utasítások: A döntés kimenetelétől függően a folyamat vagy az egyik, vagy a másik irányban folytatódik. A döntési pont egy feltételt (logikai kifejezés) tartalmaz, melynek igaz vagy hamis eredménye alapján ágaztatjuk el a folyamatot. Feltételes művelet: if utasítás Kétágú elágazás: if else szerkezet Többágú elágazás: switch case szerkezet 54/155

Az if utasítás Egyágú elágazás, a program feltételes elágaztatására szolgál. if (kifejezés) utasítás; vagy: if (kifejezés) { utasítások; } Pl.: Ha a kisebb mint b, felcseréljük a tartalmukat: if (a < b) { t = a; a = b; b = t; } 55/155

Az if else szerkezet if (kifejezés) { igaz ág utasításai; } else { hamis ág utasításai; } Pl.: if (a < b) { x = a; } else { x = b; } Ugyanez feltételes kifejezéssel: x = (a < b? a : b); 56/155

If példa #include <stdio.h> void main() { int a1, a2, a3; printf("kérem az első számot: "); scanf("%d", &a1); printf("kérem a második számot: "); scanf("%d", &a2); printf("kérem a harmadik számot: "); scanf("%d", &a3); 57/155

If példa (folyt) if (a1 > a2 && a1 > a3) } 58/155 else { } printf("a legnagyobb: %d\n", a1); if (a2 > a3) printf("a legnagyobb: %d\n", a2); else printf("a legnagyobb: %d\n", a3); Kérem az első számot: 8 Kérem az első számot: 13 Kérem az első számot: 5 A legnagyobb: 13

A switch case szerkezet # include <stdio.h> void main (){ char k; k = getchar( ); switch(k) { } 59/155 case 'A': printf("alma"); break; case 'B': printf("banán"); break; case 'C': printf("citrom"); break; default : printf ("Érvénytelen parancs!"); } Beolvas 1 karaktert Nem kötelező! Kilép az utasításból C Citrom

A C nyelv elemei Szintaktikai egységek Változók, elemi adattípusok Egyszerű ki- és beviteli utasítások Operátorok Elágazás utasítások Ciklus utasítások Függvények Tömbök Mutatók 60/155

Ciklusszervezés Egy vagy több művelet ismétlését nevezzük ciklusnak. Az ismétlődés addig tart, amíg ezt valamilyen feltétel teljesülése meg nem állítja. Három ciklusképző utasítás van a C-ben: while elöltesztelő for taxatív (számláló) do while hátultesztelő 61/155

while ciklus: while (kifejezés) { ciklusmag } Amíg (a kifejezés igaz) { végrehajtja a ciklusmag utasításait } 62/155

while példa 1. #include <stdio.h> void main ( ){ int a, sum; a=1, sum=0; while (a<=10) { sum=sum+a; a++; } printf ("Az összeg 1-től 10-ig: %d", sum); } Az összeg 1-től 10-ig: 55 63/155

while példa 2. #include <stdio.h> void main ( ) { int a, sum; a=10, sum=0; while (a) { sum=sum+a; a --; } Amíg A értéke nem nulla printf ("Az összeg 1-től 10-ig: %d", sum); } Az összeg 1-től 10-ig: 55 64/155

for ciklus: for (1.kifejezés; 2.kifejezés; 3.kifejezés) { ciklus törzs } int i, s; for (i=1, s=0; i<=10; i++) { s=s+i; } for (i=1, s=0; i<=10; s=s+i,i++){ } for (i=1, s=0; i<=10; s=s+i,i++); 65/155

for példa 1. #include <stdio.h> void main ( ){ int i, s; s = 0; for (i=1; i<=10; i++) { s=s+i; } printf ("Az összeg 1-től 10-ig: %d", s); } Az összeg 1-től 10-ig: 55 66/155

for példa 2. #include <stdio.h> void main ( ){ int i, s; for (i=1, s=0; i<=10; s=s+i,i++); printf ("Az összeg 1-töl 10-ig: %d", s); } Az összeg 1-től 10-ig: 55 67/155

for példa 3. #include <stdio.h> 68/155 void main() { int szam, j; long szorzat; printf( A program egy megadott szám faktoriálisát számolja ki.\n ); } printf( Kérek egy számot: ); scanf( %d, &szam); szorzat = 1; for (j=1; j<=szam; j++) szorzat *= j; printf( %d!=%ld\n, szam, szorzat);

do - while ciklus Mivel hátul tesztelő ciklus, egyszer mindenképpen lefut! do { ciklus törzs } while (kifejezés); 69/155

do while példa #include <stdio.h> void main ( ){ int tipp, szam, kesz; szam=57; kesz=1; do { printf("kérem a tippet: "); scanf ("%d", &tipp); } if (tipp < szam) printf ("A tipp kisebb a számtól!\n"); if (tipp == szam) {kesz=0; printf ("Eltaláltad!");} if (tipp > szam) printf ("A tipp nagyobb a számtól!\n"); } while (kesz); 70/155 Kérem a tippet: 49 A tipp kisebb a számtól! Kérem a tippet: 63 A tipp nagyobb a számtól! Kérem a tippet: 57 Eltaláltad!

do while példa v2. #include <stdio.h> #include <stdlib.h> #include <time.h> int main ( ){ Véletlen szám: 0.. 32767 között int tipp, szam, kesz=1; srand(time(null)); szam=rand(); szam=rand()/327; do { printf("kérem a tippet: "); scanf ("%d", &tipp); if (tipp < szam) printf ("A tipp kisebb a számtól!\n"); if (tipp == szam) {kesz=0; printf ("Eltaláltad!");} if (tipp > szam) printf ("A tipp nagyobb a számtól!\n"); } while (kesz); return 0; } 71/155

A C nyelv elemei Szintaktikai egységek Változók, elemi adattípusok Egyszerű ki- és beviteli utasítások Operátorok Elágazás utasítások Ciklus utasítások Függvények Tömbök Mutatók 72/155

Függvények Jellegzetességek a C nyelvben: A függvények és eljárások szintaktikája nem különbözik, azaz csak függvények léteznek, a void visszatérési érték típussal jelezzük, ha nem akarunk visszaadni értéket. Nem lehet definiálni függvényt egy másik függvény belsejében. Bármelyik függvény meghívhatja bármelyik függvényt, még saját magát is (rekurzív hívás), vagy akár a main függvényt is. A program belépési pontja a main függvény. Visszatérési érték és paraméter nem lehet tömb, struktúra, union, lehet viszont ezekre mutató mutató. 73/155

Függvények 2. Szintaktika: típus fgvnev(paraméterek) { utasítások; return visszatérő_érték; } Pl.: double dszhterulet(double x, double y) { return x*y/2; } 74/155

Függvények 3. Paraméterátadás: Csak értékszerinti paraméterátadás létezik, tehát paraméterek csak akkor tudnak eredményt visszaadni, ha mutatót használunk (referencia típus nincs). Szintaktikája: 75/155 típus név(típus param1, típus param2, ) Nem lehetséges az azonos típusú paraméterek összevonása, mint más nyelvekben: típus név(típus param1, param2) //hibás!! A paraméter nélküli függvények esetén is ki kell tenni a zárójeleket: típus név()

Függvények 4. A függvény meghívása: A void függvények csak önálló utasításként hívhatók meg. Az egyéb visszatérési értékű függvények meghívhatók önálló utasításként is, és kifejezés belsejében is. Szintaktikája: 76/155 fgvnev(kif1, kif2, ); Ahol kif1, kif2, stb. kifejezések az aktuális paraméterek. Mivel az aktuális paraméterek értékei adódnak át rendre a formális paramétereknek (param1=kif1, param2=kif2, ), ezért ezek típusa olyan kell legyen, hogy az értékátadás megtörténhessen (automatikus típuskonverziók!).

Függvények 5. (példa) # include <stdio.h> double dszhterulet(double x, double y) { return x*y/2; } void main (){ int a=3, b=5; double t; t= dszhterulet(a,b); } printf ("Terület = %6.2f\n", t); Terület = 7.50 Formális paraméterek Aktuális paraméterek 77/155

Függvények 6. (példa) Készítsen egy függvényt, amely kap egy egész számot és visszaadja a szám faktoriálisát. long fakt(int a) { long szorzat; int j; for (j=1; j<=a; j++) szorzat *= j; return szorzat; } 78/155

Függvények 7. (példa) Készítsen egy függvényt, amely három oldalhosszúságról megállapítja, alkothatnak-e háromszöget! int alkothate(double a, double b, double c) { if (a+b<=c a+c<=b b+c<=a) return 0; return 1; } 79/155

Függvények 8. (példa) Készítsen egy függvényt, amely kiír egy egész számot! Olyan függvény, amely nem ad vissza paramétert (eljárás), ezért visszatérő értéke: void. #include<stdio.h> void kiir(int a); int main() { kiir(10); } void kiir(int x) { printf( %d,x); } 80/155 //Deklarálás //A függvény hívása //Definiálás

Néhány hasznos függvény int abs(int x); long labs(long x); doube fabs(double x); double floor(double x); double ceil(double x); double pow(double x, double y); x y double sqrt(double x); x abszolút értéke Lefelé kerekít egészre Fölfelé kerekít egészre x négyzetgyöke Egy hasznos konstans: PI <math.h> M_PI 81/155

A C nyelv elemei Szintaktikai egységek Változók, elemi adattípusok Egyszerű ki- és beviteli utasítások Operátorok Elágazás utasítások Ciklus utasítások Függvények Tömbök Mutatók 82/155

Tömbök A tömb: Azonos tulajdonságú elemek halmaza. Statikus: meg kell adni az elemek számát. Tömbelemek típusa: Elemi (egyszerű) tíusok, Összetett, A felhasználó által deklarált. Tömb definiálása: int A [10]; 83/155 Típus Azonosító Elemszám A tömb indexe: 0-tól elemszám-1-ig megy A[0] A[9]

Tömbök 2. A tömb bármely elemére a tömb nevével, és az index megadásával hivatkozhatunk. Az index tetszőleges egész jellegű: (fixpontos) kifejezés! int tomb [10]; egydimenziós tömb: vektor. Kétdimenziós tömb: int tomb[10][20]; A kétdimenziós tömb a mátrix, az első méret a sorok (10), a második az oszlopok (20) száma. Több (n) dimenziós tömb általános definíciója: típus név [dim1] [dim2] [dimn]; 84/155

Tömbök 3. Mivel a változók definiálásakor helyfoglalás történik, a tömbindexek mindegyikének fordítási időben ismertnek kell lenni!!! Bármilyen tömb esetében az elemek folyamatosan helyezkednek el a memóriában. Kétdimenziós tömbök esetében az első sor elemei után következnek a második sor elemei, stb. int t [2] [3]; // Ennek a tömbnek 6 eleme van: 2*3 85/155 t [0] [0] t [0] [1] t [0] [2] t [1] [0] t [1] [1] t[1] [2] A fordító csak akkor ellenőrzi, hogy átléptük-e a maximális indexet, ha konstansként adtuk meg, futtatás közben nincs ellenőrzés!

Tömbök 4. Deklarálás: int tomb [10 ] = { 1,2,3,4,5,6,7,8,9,10 }; vagy: int tomb [ ] = { 1,2,3,4,5,6,7,8,9,10 }; int tomb [2] [5] = { 1,2,3,4,5,6,7,8,9,10 }; Itt a mátrix első sorában az elemek: 1 2 3 4 5 A második sorában pedig: 6 7 8 9 10 int tomb[ ] [4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} }; int tomb[ ] [4] = {1,2,3,4,5,6,7,8,9,10,11,12 }; 86/155

Tömb példa 1. #include <stdio.h> #define meret 5 main() { double tomb[meret]; double atlag = 0; int i; for (i=0; i<meret; i++) { printf("\n tomb[%d] = ", i); scanf("%lf", &tomb[i]); atlag += tomb[i]; } 87/155

Tömb példa 1. (folyt.) } atlag = atlag/meret; printf("\n Az átlag: %lf\n\n", atlag); for (i=0; i<meret; i++) printf("%d. elem \t %lf \t eltérés: %lf\n", i, tomb[i], atlag-tomb[i]); 88/155

Tömb példa 1. Futtatás tomb[0] = 12 tomb[1] = 25 tomb[2] = 65 tomb[3] = 43 tomb[4] = 32 Az átlag: 35.400000 0. elem 12.00000 eltérés: 23.400000 1. elem 25.00000 eltérés: 10.400000 2. elem 65.00000 eltérés: -29.600000 3. elem 43.00000 eltérés: -7.600000 4. elem 32.00000 eltérés: 3.400000 89/155

Tömb példa 2. #include <stdio.h> N, és N elemű A[ ] tömb main() { beolvasása, elemek int A[20]; kiíratása int i, n; printf("\nelemek száma? (max 20!) = "); scanf("%d", &n); for (i=0; i<n; i++){ printf("\n Elem[%d] = ", i); scanf("%d", &A[i]); } for (i=0; i<n; i++) printf("%d. elem \t %d \t \n", i, A[i]); } 90/155

Karaktertömbök, sztringek Mivel szöveges adattípus nincs, ezért a szövegeket karakter tömbökben tárolhatjuk. Azt, hogy a tömb meddig van feltöltve azt egy végére berakott nulla kódú karakter jelzi ( \0 ). Azok a függvények, amelyek karaktertömbökön végeznek műveleteket, a záró karakterből tudják meddig tart a szöveg. char str0[4] = { 'a','b','c','d' }; 91/155 Ez nem sztring, csak egy karakteres tömb, mert nincs záró 0! printf( A szöveg: %s\n, str0); Ha a záró karaktert nem adjuk meg a printf függvény egészen addig írja ki a memória tartalmát, amíg egy záró karaktert nem talál.

Karaktertömbök, sztringek 2. Ha nem aposztrófokat, hanem idézőjeleket használunk, akkor a fordító megpróbál sztringet létrehozni, azaz a záró 0 értéket elhelyezni az utolsó karakter után: char str1[4] = "abcd"; nem tud, ezért ez nem sztring! char str2[5] = "abcd"; elfér a záró 0, ezért ez sztring! char str3[ ] = "abcd"; elfér a záró 0, ezért ez sztring! char * str4[ ] = "abcd"; Így is megadható a sztring! 92/155

Sztring példa #include <stdio.h> typedef char str[21]; main(){ } int i; 93/155 str A[10]; strcpy(a[0], "BitMan"); strcpy(a[1], "SuperMan"); strcpy(a[2], "BatMan"); for (i=0; i<3; i++) puts(a[i]); BitMan SuperMan BatMan str max. 20 karakter hosszú sztring típus A 10 elemű str típusú sztring tömb strcpy értékadás sztringnek puts sztring kiírása

Sztring példa 2. #include <stdio.h> typedef char nev[20]; main(){ int i=0, kesz=1, n; nev benev, A[10]; gets sztring beolvasása strlen sztring hossza do { printf("kérem a nevet: "); gets(benev); if (strlen(benev)) { strcpy(a[i], benev); i++; } else kesz=0; } while (kesz); n=i; for (i=0; i<n; i++) puts(a[i]); } Feladat: Nevek beolvasása üres Enter lenyomásáig. 94/155

Sztringkezelő függvények #include <stdio.h> main(){ int d; char str1[ ]="retek", str2[ ]="alma"; d= strcmp(str1, str2); printf ("Eredmény = %d \n", d); } strcmp ABC sorrend str1 < str2 d= -1 str1 = str2 d= 0 str1 > str2 d= 1 Eredmény = 1 95/155

Sztringkezelő függvények 2. #include <stdio.h> main(){ char str1[ ]="alma", str2[ ]="mag"; strcat(str1, str2); printf ("Eredmény = %s \n", str1); } strcat str2 hozzáfűzése str1-hez Eredmény = almamag 96/155

Sztringkezelő függvények 3. #include <stdio.h> main(){ int d=0; char *k, *m; char str1[ ]="almahej", str2[ ]="he"; k=&str1[0]; m= strstr(str1, str2); if (m==null) printf ("Eredmeny = NULL"); else { } } 97/155 d=m-k; printf ("Eredmeny = %d \n", d); Mutatók: következő fejezet! strstr str2 keresése str1-ben. m: a megtalált pozíció mutatója, vagy NULL Eredmény = 4

Sztringkezelés #include <stdio.h> void megfordit(char * s){ char * p=s; while(*p++); for(p-=2;p>s;p--,s++){char c=*p;*p=*s;*s=c;} } main(){ char s[ ]="almamag"; megfordit(s); puts(s); } 98/155 Feladat: Sztring tartalmának megfordítása. Mutatók: következő fejezet! gamamla

A C nyelv elemei Szintaktikai egységek Változók, elemi adattípusok Egyszerű ki- és beviteli utasítások Operátorok Elágazás utasítások Ciklus utasítások Függvények Tömbök Mutatók 99/155

Mutatók A mutató olyan változó, amely értéke egy memóriacím. Léteznek operátorok, amelyekkel a mutató által mutatott memóriaterületen levő adatot lehet elérni. A mutatónak ugyanolyan fontos adata a típusa, mint egy közönséges változónak. A mutató típusa a mutatott terület típusát jelenti. Mutató deklarációja: típus *változónév; Pl.: int *m; 100/155

Mutatók 2. Értékadás mutatónak: Egy meglévő területünk címét adjuk értékül a mutatónak: int a; //definiálunk egy változót (lefoglalódik neki egy memóriaterület, de értéke még nincs!) int *m; //definiálunk egy mutatót (lefoglalódik neki egy memóriaterület, értéke még nincs, azaz nem mutat sehova!) m=&a; //értéket adunk a mutatónak, értéke az a címe lesz ( & címképző operátor) 101/155

Mutatók 3. Hivatkozás a mutatott területre: A mutatott területre a mutató segítségével is tudunk hivatkozni. Erre szolgál az indirekciós operátor. Pl.: int a = 10; int *m; m=&a; printf( Az a változó értéke: %d, *m); *m=*m+1; printf( Az a változó értéke: %d, a); 102/155 Az a változó értéke: 10 Az a változó értéke: 11

Mutatók 4. Hivatkozás a mutatott területre: Nagyon veszélyes hibát eredményezhet, ha olyan mutató esetén használjuk az indirekciós operátort, amely még nem kapott értéket, azaz nem mutat sehová. A lenti két utasítással egy véletlenszerű memóriaterület tartalmát írtuk át. int *m; *m=34; 103/155

Mutatók 5. Mutató-matek: A mutatókhoz hozzá lehet adni egy egész számot, vagy ki lehet vonni egy egész számot belőle. Pl.: int a[10]; int *b; int c; b=&a[0]; c=*b; c=*(b+4); b=b+2; c=*b; b most az a[0]-ra mutat c változó a[0] értékét veszi fel c változó a[4] értékét veszi fel b most az a[2]-re mutat c változó a[2] értékét veszi fel 104/155

Témakörök A C nyelv jellemzői A C nyelvű program szerkezete A C nyelv elemei Algoritmusok C nyelven Feladat ötletek Ellenőrző kérdések 105/155

Algoritmusok C nyelven Összegzés Megszámlálás Kiválasztás Kiválasztásos rendezés 106/155

Összegzés Be kell olvasni N-darab számot, és meg kell határozni a beolvasott számsorozat összegét. Megoldás: Egy változó értékét beállítjuk 0-ra (kinullázzuk) Ciklus segítségével végigmegyünk a sorozat elemein, és a kinullázott változóhoz rendre hozzáadjuk a sorozat aktuális elemét. Az eredmény az eredetileg kinullázott változó aktuális értéke. 107/155

Összegzés #include <stdio.h> main() { int A[20]; int i, n; printf("\nelemek száma? (max 20!) = "); scanf("%d", &n); for (i=0; i<n; i++){ printf("\n Elem[%d] = ", i); scanf("%d", &A[i]); } int s=0; for (i=0; i<n; i++) s=s+a[i]; printf("\n Az elemek összege = %d", s); } 108/155

Algoritmusok C nyelven Összegzés Megszámlálás Kiválasztás Kiválasztásos rendezés 109/155

Megszámlálás Feladat: Adott egy tömb, határozzuk meg, hogy egy adott feltételnek hány elem felel meg. Megoldás: Kinullázok egy változót. Ciklus segítségével végigmegyek a tömb elemein. Megvizsgálom őket, és ha a tömbelem a feltételnek megfelel, a kinullázott változóhoz hozzáadok egyet. Az eredmény az eredetileg kinullázott változó aktuális értéke. Konkrét feladat: Határozzuk meg, hogy az N-elemű A tömb elemei közül hánynak az értéke kisebb mint 25. Az eredményt írassuk ki. 110/155

Megszámlálás #include <stdio.h> main() { int A[20]; int i, n; printf("\nelemek száma? (max 20!) = "); scanf("%d", &n); for (i=0; i<n; i++){ printf("\n Elem[%d] = ", i); scanf("%d", &A[i]); } int db=0; for (i=0; i<n; i++) if (A[i] < 25) db=db+1; printf("\n A megfelelő (< 25) elemek száma = %d", db); } 111/155

Algoritmusok C nyelven Összegzés Megszámlálás Kiválasztás Kiválasztásos rendezés 112/155

Kiválasztás (min, max keresés) Feladat: Adott egy tömb, határozzuk meg a legkisebb (legnagyobb) elemét. 113/155 Megoldás: Egy változóba (MIN) berakom a tömb első elemének az értékét. Ezután a 2. elemtől kezdve egy ciklussal végignézem a tömb elemeit, és ha a vizsgált elem kisebb a MINértékénél, akkor berakom az értékét a MIN-változóba. Így a MIN-értéke az addig megvizsgált elemek közül mindig a legkisebbet tartalmazza. Eredmény: a MIN változó értéke. Konkrét feladat: Adott egy N-elemű A-tömb. Határozzuk meg a legkisebb elemét.

Kiválasztás #include <stdio.h> main() { int A[20]; int i, n; printf("\nelemek száma? (max 20!) = "); scanf("%d", &n); for (i=0; i<n; i++){ printf("\n Elem[%d] = ", i); scanf("%d", &A[i]); } int min=a[0]; for (i=1; i<n; i++) if (A[i] < min) min=a[i]; printf("\n A megfelelő (legkisebb) elem = %d", min); } 114/155

Algoritmusok C nyelven Összegzés Megszámlálás Kiválasztás Kiválasztásos rendezés 115/155

Kiválasztásos rendezés Feladat: Adott egy tömb, rendezzük az elemeit növekvő (vagy csökkenő) sorrendbe. Módszer: Keressük ki a legkisebb elemet, és tegyük azt a tömb első helyére. Lépjünk egy hellyel odébb (második elem), és keressük ki a maradék elemek közül a legkisebbet. Tegyük ezt a második helyre. Lépjünk eggyel odébb, 116/155

Kiválasztásos rendezés #include <stdio.h> main() { int A[20]; int i, n, j, c; printf("\nelemek száma? (max 20!) = "); scanf("%d", &n); for (i=0; i<n; i++){ printf("\n Elem[%d] = ", i); scanf("%d", &A[i]); } for (i=0; i<n-1; i++) for (j=i+1; j<n; j++) if (A[j] < A[i]) {c = A[i]; A[i]= A[j]; A[j]= c;} for (i=0; i<n; i++) printf("%d. elem \t %d \t \n", i, A[i]); } 117/155

118/155 Gratulálok! Ön átvette a tananyagot!

Témakörök A C nyelv jellemzői A C nyelvű program szerkezete A C nyelv elemei Algoritmusok C nyelven Feladat ötletek Ellenőrző kérdések 119/155

Feladat ötletek Olvassa be N-értékét, és határozza meg 0 és N között a számok összegét. Olvassa be N és M-értékét, és határozza meg N és M között a számok összegét. Olvasson be N egész számot egy tömbbe, és határozza meg a páros számok darabszámát. Olvasson be N egész számot egy tömbbe, és határozza meg, hány szám esik 10 és 20 közé. Olvasson be N egész számot egy tömbbe, számítsa ki, és helyezze el a számok 20%-át egy másik tömbbe. 120/155

Feladat ötletek Olvasson be N egész számot egy tömbbe, és írja ki beolvasási sorrendben, és fordított sorrendben (visszafelé) is a számokat. Olvasson be N egész számot egy tömbbe, és olvasson be külön egy egész számot. Határozza meg, és írassa ki az egész számtól legkevésbé eltérő tömbelemet. Olvasson be két egyforma elemszámú egész tömbbe számokat, és írassa ki rendre az elempárok szorzatát. (1.elem*1.elem, ) 121/155

Feladat ötletek Olvasson be két egyforma elemszámú egész tömbbe számokat. Rendezze az első tömböt növekvő, a másodikat csökkenő sorrendbe, aztán írassa ki mindkét tömb elemeit. Pistike csigát gyűjt. Készítsen olyan programot, melyben beolvassa egy tömbbe az összegyűjtött csigák súlyát, meghatározza, és kiírja a csigák átlagsúlyát, valamint a legkönnyebb és legnehezebb csiga súlyát. 122/155

123/155

Feladatosz ötletosz Los denevérosz példosz: Beolvasszosz denevérosz névosz tömbosz. Beolvasszosz denevérosz repülosz dzsípíesszosz koordinátosz mászik tömbosz. Programosz alkotosz: 124/155 Számítosz távolszágosz függvényosz (denevérosz repülosz légvonalosz!) Kiírosz denevérosz névosz, repülosz távolszágosz. Kiírosz statisztikosz: Átlagosz távolszágosz, Minimálosz távolszágosz lusztaszágosz névosz, Maximálosz távolszágosz rekorderosz névosz, Endosz programosz. Lajosz Bélosz x,y 0,0 x,y

Műszaki informatika Ellenőrző kérdések 125/155

Ellenőrző kérdések 1. 1. Melyik szimbólumot használjuk a kommenthez? A: <!-- B: // C: # D:!! 2. Melyik kulcsszóval illesztjük be a könyvtári modulokat? A: #read <fájl> B: #get <fájl> C: #include <fájl> D: #pre <fájl> 126/155

Ellenőrző kérdések 2. 3. Melyik szimbólummal jelezzük a blokkhatárokat? A: [utasítások ] B: (utasítások ) C: <utasítások > D: {utasítások } 4. Melyik könyvtári modulban van a printf() függvény? A: stdlib.h B: stdio.h C: stdlib.c D: stdio.c 127/155

Ellenőrző kérdések 3. 5. Melyik a kakukktojás? A: > B: < C: >= D: = 6. Melyik szimbólummal kell mutatót deklarálni? A: & B: @ C: * D: $ 7. Hány bájton tárolódik a Pistike sztring? 8. Melyik ciklus utasítás nem használható a C nyelvben? A: For B: While C: Do while D: Repeat until 128/155

Ellenőrző kérdések 4. 9. Melyik nem C típus? A: float B: real C: int D: boolean 10. Melyik operátort használjuk összehasonlításra? A: := B: = C: equal D: == 11. Mennyi a!(1 &&!(0 1)) kifejezés értéke? 12. Hányszor fut le garantáltan a do while ciklus? A: 0 B: 1 C: Végtelenszer D: Feltételtől függ 129/155

Ellenőrző kérdések 5. 13. Mennyi lesz x-értéke a ciklusból kilépve? for(x=0; x<10; x++) { } x= 14. Melyik függvény hívás helyes? A: fgv; B: fgv x,y; C: fgv(); D: int fgv(); 15. Melyik a helyes tömb deklaráció? A: int tomb[10]; B: int tomb; C: int tomb{10}; D: int tomb(10); 16. Egy 15 elemű tömb esetén mennyi az utolsó elem indexe? 130/155

Ellenőrző kérdések 6. 17. Változó deklarációhoz melyik könyvtári modult 131/155 kell használni? A: stdio.h B: math.h C: stdlib.h D: Egyiket sem 18. Melyik kifejezés egyenértékű a!(a < b) kifejezéssel? A: a < b B: a = b C: a > b D: a>= b 19. Mennyi lesz az értéke az a változónak az alábbi programrészlet végrehajtása után? int a, b = 0; a=++b; a*=b++; a=

Ellenőrző kérdések 7. 20. A C nyelvű programban milyen szimbólumok jelzik az alábbiakat? A: Utasítások vége B: Blokkhatárok C: Megjegyzések D: Tömb elemszám E: Kiírási formátum F: ESC karakter 21. Melyik szimbólum képzi egy változó címét? A: & B: @ C: * D: $ 132/155

Ellenőrző kérdések 8. 22. Mennyi lesz az értéke az A és a B változónak A= B= 133/155 az alábbi programrészlet végrehajtása után? A=2; B=++A; 23. Melyik nem lehet változó azonosítója az alábbiak közül? A: Double D: szamok G: Pici%Maci B: #inc E: ertek H: 97_es_adatok C: ide-oda F: do I: Bony&Clide

Ellenőrző kérdések 9. 24. Az int *jack; utasítás A: deklarálja, hogy jack int típusú változó. B: deklarálja, hogy jack int típusú mutató. C: definiálja, hogy jack int típusú változó. D: definiálja, hogy jack int típusú mutató. 25. Melyik utasítást kell alkalmazni egy egész szám kiírására? A: printf ("Eredmény: %e\n", eredm); B: printf ("Eredmény: %d\n", eredm); C: printf ("Eredmény: %f\n", eredm); D: printf ("Eredmény: %c\n", eredm); 134/155

Ellenőrző kérdések 10. 26. Mennyi legyen az a változó értéke, hogy a ciklus 5-ször fusson le? a= ; while (a) { sum=sum+a; a --; } 27. Jelölje meg a szintaktikailag helyes utasításokat! A: for (i=1; i<=10; i++) { s=s+i; } B: for (i:=1, i<=10, i++) { s=s+i; } C: for (i=1, s=0; i<=10; s=s+i,i++); D: for (i=1; s=0; i<=10; s=s+i;i++){ } 135/155

Ellenőrző kérdések 11. 28. Tegye megfelelő sorrendbe a C program sorait! A: main() B: } C: direktívák D: { E: utasítások 29. A C nyelvben a short típus 256 féle egész értéket vehet fel. Milyen tartományban használható az a változó az alábbi deklarációk esetén: A: short a; B: unsigned short a; 136/155

Ellenőrző kérdések 12. 30. Kövesse az alábbi programrészlet működését, 137/155 írja le az egyes lépésekben a változók kiírt értékét! int x=0, y=1, z=x+y; while (z<=5) { if (x<5) {z=x+z; x++;} else {z=y+z; y++;} printf ("\nx= %d y= %d z=%d",x,y,z); } 1. kiírás: 2. kiírás: 3. kiírás: 4. kiírás: 5. kiírás: x y z

Ellenőrző kérdések 13. 31. Igaz vagy Hamis az állítás? A C nyelvben a CHAR típus lehet karakter és egész típus is. A számítógép közvetlenül a C nyelvű utasításokat hajtja végre. 138/155 A C nyelvben az and operátort &&-al jelöljük. A float, a double és a short lebegőpontos adattípusok a C nyelvben. A C programozási nyelv kis-nagybetű érzékeny. A %d dupla pontosságú lebegőpontos formátum. A while(12) printf("*"); utasítás végtelen ciklust eredményez. Az a= ++b--; utasítás nem hibás, de semmi értelme!

Ellenőrző kérdések 14. 32. Melyik függvény deklaráció helyes? A: int funct(); B: int funct(int x) {return x=x+1;} C: void funct(int) { printf( "Hello")}; D: void funct(x) { printf( "Hello"); }; 33. Mit ír ki az alábbi programrészlet? int x=1, y, z=(x=28, y=x+3); printf("%d", z); z= 34. Mennyi lesz b értéke? int a = 19, b = 13; 139/155 if (b = a) b = 9; b=

Ellenőrző kérdések 15. 35. Mit ír ki az alábbi programrészlet? int a = 0; if (a = 0) printf("0"); else printf("nem 0"); A: 0 B: nem 0 36. Mit ír ki az alábbi programrészlet? printf("%d", 2<3); A: 2<3 B: 0 C: 1 D: Hibás utasítás! 37. Helyes-e az alábbi változódefiníció? int double=1; A: Igen B: Nem 38. Mennyi 14 % 3 értéke? 140/155

Ellenőrző kérdések 16. 39. Mit ír ki a következő program részlet? int x=0; switch(x) { case 1: printf("egy" ); case 0: printf("nulla" ); case 2: printf("kettő" ); } A: Egy B: Nulla C: Kettő D: NullaKettő 40. Mit ír ki az alábbi programrészlet? int a; printf("%d", a); A: 0 B: a C: Véletlen értéket 141/155

Ellenőrző kérdések 17. 41. Van különbség az a=b++; és az a=++b; 142/155 kifejezések között? A: Nincs B: Az a-ra nézve igen, a b-re nézve nem. C: A b-re nézve igen, az a-ra nézve nem. D: Igen, mindkét változóra nézve. 42. Mennyi lesz az értéke az i változónak az alábbi programrészlet végrehajtása után? i = 1; i *= 5; i += 3; i=

Ellenőrző kérdések 18. 43. Melyik kifejezés helyes a 143/155 ha i nem nulla feltétel megfogalmazására? A: if (i =!0) B: if (i == 0) C: if (i!= 0) D: if (i NOT= 0) 44. Helyes az if( a > 0 ) then b= 5; utasítás? A: Nem B: Igen 45. Mennyi lesz az értéke a b változónak az alábbi programrészlet végrehajtása után? a, b = 1; if (a = 1) b = 3; if (a = 2) b = 5; b=

Ellenőrző kérdések 19. 46. Mit ír ki az alábbi programrészlet? int a=2, b=6, c=2; if (a < b < c) printf("növekvő"); else printf("csökkenő"); A: Növekvő B: Csökkenő C: Hibaüzenetet, az (a < b < c) kifejezés hibás! 47. Mi az eredménye az alábbi programrészletnek? int a, b = 1; a=a++ + ++b; a*=b++; A: a=6, b=2; B: a=8, b=3; C: a=10, b=3; D: Hibaüzenetet, az a=a++ + ++b; utasítás hibás! 144/155

Ellenőrző kérdések 20. 48. Mi az eredménye az alábbi kódrészletnek? int a = 7, b = 5, c = 3; c += ++a - b++; printf("%d", c); c= 49. Mennyi lesz b értéke? int a = 19, b = 13; if (b == a) b = 9; b= 50. Mennyi lesz b értéke? int a = 19, b = 13; 145/155 if (b = a) b += a; b=

Ellenőrző kérdések 21. 51. Javítsa ki a hibákat az alábbi programban! #include <stdio.h> #DEFINE MAXELEM 10 int main(void) { int ertekek[maxelem]; int min; int i; 146/155 52. Írja le, hogy mit csinál a kijavított program! for (i = 0; i < MAXELEM;) scanf("%d",&ertekek[i++]); min = ertekek(0); For (i=1; i<maxelem; i++) if ertekek[i] < min then min = ertekek[i]; printf('min értéke: %d\n', min); return 0 }

Ellenőrző kérdések 22. 53. Javítsa ki a hibákat az alábbi programban! 147/155 #include <stdio.h> main() { int max. int i; int ertekek[10]; for (i=0; i<10; i++) scanf('%d',ertekek+i); max = ertekek(0); for (i=l i<10; i++) if (ertekek[i] > max) max = ertekek[i]; } 54. Írja le, hogy mit csinál a kijavított program!

Ellenőrző kérdések 23. 55. Javítsa ki a hibákat az alábbi programban! } 148/155 #include <stdio.h> main () { int darab = 10; int ertekek(10); Double atlag; for (i = 0; i < 10;) ertekek[i++] = 3*i+1; atlag = 0; for (i=0; i<10; i++) atlag += ertekek[i]; atlag = atlag / darab; printf('átlag értéke: %d\n',atlag); 56. Írja le, hogy mit csinál a kijavított program!

Ellenőrző kérdések 24. 57. Mi lesz a t tömb tartalma az alábbi utasítások végrehajtása után? int j,k; int t[7]; for (j=0; j<7; j++) t[j] = j; k = 6; for (j=0; j < k; j++,k--) t[j] = t[k]; t= 58. Hányszor fut le az 57. kérdésben szereplő ciklusutasítás magja? A: háromszor B: négyszer C: ötször D: hatszor 149/155

Ellenőrző kérdések 25. 59. Írja át az alábbi ciklusutasítást a while utasítás használatával: 150/155 for ( j=0, k=6; j < k; ) t[j++] = t[k--]; 60. Mennyi lesz z értéke az alábbi programrészlet végrehajtása után? int z=1; int i; for (i = 1; i < 5; i++) z += i; z= 61. Helyes az állítás? A balérték csak értékadó operátor bal oldalán állhat. A: Igen B: Nem

Ellenőrző kérdések 26. 62. Az alábbi programrészletet a fordító hibátlannak találja, de hibásan fut. Mi a hiba? int i; double tomb[10]; for (i=0; i <= 10; ) tomb[i++] = 0; 63. Írja át az alábbi kifejezést if utasítás használatával: i = j < 0? j : j; 64. Írja át az alábbi ciklusutasítást a while utasítás használatával: for (j=0; j < 10; j++ ) t[j] = j; 151/155

Ellenőrző kérdések 27. 65. Mennyi lesz z értéke az alábbi programrészlet végrehajtása után? int z=1; int i; for (i = 1; i < 8; i += 2) z *= i; z= 66. Írja be a megadott kockákba az alábbi programrészlet hatására kiírt szöveget! int tomb[10]; int j = 3; tomb[j] = 7.3; printf ("\ntomb[%d]=%d\n",j,tomb[j]); 152/155

Ellenőrző kérdések 28. 67. Kövesse az alábbi programrészlet működését, 153/155 írja le az egyes lépésekben a változók kiírt értékét! int x=0, y=1, z=x+y; while (z<=5) { } if (z%2!=0) {z=y+z; y++;} else {z=x+z; x++;} printf ("\nx= %d y= %d z=%d",x,y,z); 1. kiírás: 2. kiírás: 3. kiírás: 4. kiírás: 5. kiírás: x y z

Felhasznált irodalom Knuth, D.E: A számítógép-programozás művészete 1-3, Műszaki Könyvkiadó, Budapest, 1987-88. Brian W. Kernighan Dennis M. Ritchie: A C programozási nyelv, Műszaki Könyvkiadó, 1988 Wirth, N: Algoritmusok + Adatstruktúrák = Programok, Műszaki Könyvkiadó, Budapest, 1982 Benkő László Benkő Tiborné Tóth Bertalan: Programozzunk C nyelven, Computerbooks, 2008 Elek Tibor: A C programozási nyelv, elektronikus jegyzet Ficsor Lajos: Bevezetés a C programozási nyelvbe, elektronikus jegyzet 154/155

VÉGE V É G E 155/155