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

Next revision
Previous revision
tanszek:oktatas:szamitastechnika:blokkok_-_ciklusok [2022/09/05 21:26] – létrehozva superusertanszek:oktatas:szamitastechnika:blokkok_-_ciklusok [2025/10/29 07:45] (current) knehez
Line 13: Line 13:
 } }
 </sxh> </sxh>
 +
 +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 28: Line 32:
 } }
 </sxh> </sxh>
 +
 +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.1662413195.txt.gz · Last modified: 2022/09/05 21:26 by superuser