User Tools

Site Tools


tanszek:oktatas:szamitastechnika:blokkok_-_ciklusok

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tanszek:oktatas:szamitastechnika:blokkok_-_ciklusok [2023/11/28 19:46] kneheztanszek:oktatas:szamitastechnika:blokkok_-_ciklusok [2025/10/29 07:45] (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:
 </sxh> </sxh>
  
-Megoldás: hiába azonosak a változónevek (na C nyelv a blokkon belül egyedileg kezeli, így a külső //n// más értket fog tartalmazni.+Megoldás: hiába azonosak a változónevek //n//, a C nyelv a blokkon belül egyedileg kezeli, így a külső //n// más értéket fog tartalmazni. 
 + 
 +---- 
 + 
 +**Feladat 3:** Miért nem növekszik az x minden ciklusban? 
 + 
 +<sxh c> 
 +#include <stdio.h> 
 +int main() { 
 +    for (int i = 0; i < 3; i++) { 
 +        int x = 0; 
 +        x++; 
 +        printf("%d ", x); 
 +    } 
 +    return 0; 
 +
 +</sxh> 
 + 
 +Megoldás: mert a ciklusban int x = 0; mindig újra inicializálja. 
 + 
 +---- 
 + 
 +**Feladat 4:** Milyen sorrendben írja ki a számokat? 
 + 
 +<sxh c> 
 +#include <stdio.h> 
 +int main() { 
 +    int x = 1; 
 +    { 
 +        x = 2; 
 +        { 
 +            int x = 3; 
 +            printf("%d ", x); 
 +        } 
 +        printf("%d ", x); 
 +    } 
 +    printf("%d\n", x); 
 +
 +</sxh> 
 + 
 +Megoldás: 3, 2, 2 
 + 
 +---- 
 + 
 +**Feladat 5:** Miért kapunk hibás eredményt? 
 + 
 +<sxh c> 
 +#include <stdio.h> 
 +int main() { 
 +    int n = 5; 
 +    { 
 +        int n = n + 1; 
 +        printf("%d\n", n); 
 +    } 
 +
 +</sxh> 
 + 
 +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 <stdio.h> 
 +int main() { 
 +    int a = 5; 
 +    int b = 10; 
 +    { 
 +        int b = a + 1; 
 +        printf("%d ", b); 
 +    } 
 +    printf("%d\n", b); 
 +
 +</sxh> 
 + 
 +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 <stdio.h> 
 +int main() { 
 +    int a = 5; 
 +    { 
 +        int *p = &a; 
 +        *p = 10; 
 +    } 
 +    printf("%d\n", a); 
 +
 +</sxh> 
 + 
 +Megoldás: a pointer //p// közvetlenül a memóriába ír. 
 + 
 +---- 
 + 
 +**Feladat 8:** Melyik sor melyik x-re hivatkozik? 
 + 
 +<sxh c> 
 +#include <stdio.h> 
 +int x = 100; 
 + 
 +int main() { 
 +    int x = 10; 
 +    { 
 +        extern int x; 
 +        printf("%d ", x); 
 +    } 
 +    printf("%d\n", x); 
 +
 +</sxh> 
 + 
 +Megoldás: extern int x; a globális változóra vonatkozik 
tanszek/oktatas/szamitastechnika/blokkok_-_ciklusok.1701200787.txt.gz · Last modified: 2023/11/28 19:46 by knehez