tanszek:oktatas:szamitastechnika:blokkok_-_ciklusok
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| tanszek:oktatas:szamitastechnika:blokkok_-_ciklusok [2023/11/28 19:46] – knehez | tanszek:oktatas:szamitastechnika:blokkok_-_ciklusok [2026/11/03 19:16] (current) – knehez | ||
|---|---|---|---|
| Line 15: | Line 15: | ||
| Megoldás: az //a// és //b// változók nem léteznek a második blokkban. | Megoldás: az //a// és //b// változók nem léteznek a második blokkban. | ||
| + | |||
| + | ---- | ||
| **Feladat 2:** Figyeljük meg, hogyan kezeli a **C** nyelv a blokkokat. Két kapcsos zárójel közötti utasításokat 1 blokknak kell tekinteni. Mi lesz a kimenete a következő kódnak és miért? | **Feladat 2:** Figyeljük meg, hogyan kezeli a **C** nyelv a blokkokat. Két kapcsos zárójel közötti utasításokat 1 blokknak kell tekinteni. Mi lesz a kimenete a következő kódnak és miért? | ||
| Line 31: | Line 33: | ||
| </ | </ | ||
| - | Megoldás: hiába azonosak a változónevek | + | Megoldás: hiába azonosak a változónevek |
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 3:** Miért nem növekszik az x minden ciklusban? | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main() { | ||
| + | for (int i = 0; i < 3; i++) { | ||
| + | int x = 0; | ||
| + | x++; | ||
| + | printf(" | ||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: mert a ciklusban int x = 0; mindig újra inicializálja. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 4:** Milyen sorrendben írja ki a számokat? | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main() { | ||
| + | int x = 1; | ||
| + | { | ||
| + | x = 2; | ||
| + | { | ||
| + | int x = 3; | ||
| + | printf(" | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: 3, 2, 2 | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 5:** Miért kapunk hibás eredményt? | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main() { | ||
| + | int n = 5; | ||
| + | { | ||
| + | int n = n + 1; | ||
| + | printf(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: undefined behavior (nem definiált viselkedés). A C szabályai szerint az új változó inicializálása előtt még nem létezik, tehát a //n// a jobb oldalon még nem a külső //n//-t, hanem az éppen most definiálás alatt álló (még nem inicializált) //n//-t jelenti | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 6:** Mi lesz a két kiírt szám és miért? | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main() { | ||
| + | int a = 5; | ||
| + | int b = 10; | ||
| + | { | ||
| + | int b = a + 1; | ||
| + | printf(" | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: 6, 10 | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 7:** Miért változik meg az a értéke, pedig a módosítás egy belső blokkban történt? | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main() { | ||
| + | int a = 5; | ||
| + | { | ||
| + | int *p = &a; | ||
| + | *p = 10; | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: a pointer //p// közvetlenül a memóriába ír. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 8:** Melyik sor melyik x-re hivatkozik? | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int x = 100; | ||
| + | |||
| + | int main() { | ||
| + | int x = 10; | ||
| + | { | ||
| + | extern int x; | ||
| + | printf(" | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: extern int x; a globális változóra vonatkozik | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Ciklusok a C nyelvben ==== | ||
| + | |||
| + | A ciklus segítségével egy utasítást vagy egy egész blokkot többször is végrehajthatunk. Az ismételt részt **ciklusmagnak** nevezzük. A C nyelvben három ciklusutasítás van: '' | ||
| + | |||
| + | **Feladat 1:** Milyen számokat ír ki a program? Figyeljük meg, mikor vizsgálja meg a feltételt, és mikor növeli az //i// értékét. | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main(void) | ||
| + | { | ||
| + | for (int i = 1; i <= 4; i++) { | ||
| + | printf(" | ||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: a kimenet '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 2:** A programnak az 1-től 5-ig terjedő egész számok összegét kellene kiszámítania. Miért csak 10-et ír ki? Javítsuk ki a ciklust egyetlen jel hozzáadásával! | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main(void) | ||
| + | { | ||
| + | int osszeg = 0; | ||
| + | |||
| + | for (int i = 1; i < 5; i++) { | ||
| + | osszeg += i; | ||
| + | } | ||
| + | printf(" | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: az '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 3:** Egy tartályban 12 liter víz van. Minden lépésben 3 litert engedünk ki belőle. Milyen értékeket ír ki a program? Megjelenik-e a 0 is? | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main(void) | ||
| + | { | ||
| + | int liter = 12; | ||
| + | |||
| + | while (liter > 0) { | ||
| + | printf(" | ||
| + | liter -= 3; | ||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: a kimenet '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 4:** Mindkét ciklus ugyanazt a feltételt vizsgálja, és az //n// értéke végig 0. Melyik szöveg jelenik meg a képernyőn? | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main(void) | ||
| + | { | ||
| + | int n = 0; | ||
| + | |||
| + | while (n > 0) { | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | do { | ||
| + | printf(" | ||
| + | } while (n > 0); | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: csak a '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 5:** A programnak addig kellene növelnie a hőmérsékletet, | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main(void) | ||
| + | { | ||
| + | int homerseklet = 20; | ||
| + | |||
| + | while (homerseklet < 25) | ||
| + | printf(" | ||
| + | homerseklet++; | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: kapcsos zárójelek nélkül csak a közvetlenül következő utasítás tartozik a ciklushoz. A behúzás megtévesztő: | ||
| + | |||
| + | <sxh c> | ||
| + | while (homerseklet < 25) { | ||
| + | printf(" | ||
| + | homerseklet++; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 6:** Három mérési ponton két-két mérést végzünk. Hányszor fut le a '' | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main(void) | ||
| + | { | ||
| + | for (int pont = 1; pont <= 3; pont++) { | ||
| + | for (int meres = 1; meres <= 2; meres++) { | ||
| + | printf(" | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: a mérés azonosítóját kiíró '' | ||
| + | |||
| + | < | ||
| + | P1/M1 P1/M2 | ||
| + | P2/M1 P2/M2 | ||
| + | P3/M1 P3/M2 | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 7:** Az alábbi programban mit ír ki a ciklus, és mi lesz az //i// értéke a ciklus után? | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main(void) | ||
| + | { | ||
| + | int i; | ||
| + | |||
| + | for (i = 1; i <= 10; i++) { | ||
| + | if (i == 4) { | ||
| + | break; | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | printf(" | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: az első sorban '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat 8:** Mi változik, ha a '' | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | int main(void) | ||
| + | { | ||
| + | for (int i = 1; i <= 6; i++) { | ||
| + | if (i == 4) { | ||
| + | continue; | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Megoldás: a kimenet '' | ||
tanszek/oktatas/szamitastechnika/blokkok_-_ciklusok.1701200787.txt.gz · Last modified: by knehez
