Kezdőoldal » Számítástechnika » Programozás » C nyelven tanulok, valaki...

C nyelven tanulok, valaki segítene a for ciklussal? Miért ugyanazt kapom végeredményül? Nem úgy kellene működnie, hogy az első verzió 5-től, a második 6-tól írja ki 21-ig a számokat?

Figyelt kérdés

#include <stdio.h>


int main()

{

int i;

for(i=5;i<=21;i++)

printf("%d\n", i);

return 0;

}


----------------------

#include <stdio.h>


int main()

{

int i;

for(i=5;i<=21;++i)

printf("%d\n", i);

return 0;

}


Előre is köszönöm a választ!


2017. szept. 2. 20:54
 1/10 anonim ***** válasza:
Miből gondolod, hogy úgy kéne működnie?
2017. szept. 2. 20:56
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:
Van egy "i" egészem, első verzióban poszt inkremens, másodikban pre inkremens van, ezért gondolom. Gondolom rosszul, de hol a logikai bukfenc?
2017. szept. 2. 20:58
 3/10 anonim ***** válasza:
0%
Nem értem. 5-től 21-ig számol a ciklusok. Miért ugrasz ki returnal? 6-nál így megáll.
2017. szept. 2. 21:36
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:
100%
A léptető utasítás csak azután fut először, hogy a ciklus lefutott a kezdőértékre. Először kiírja az 5-öt, aztán lefut az egyikben az i++,, a másikban a ++i. A preinkremens operátor nem azt jelenti, hogy hamarabb kerül sor a futtatásra, sőt ebben a helyzetben egyáltalán semmilyen különbség nincs a kettő között.
2017. szept. 2. 22:00
Hasznos számodra ez a válasz?
 5/10 anonim ***** válasza:
100%

#3: Mért ugorna ki? Az nem abban a blokkban van, csak a kérdező nem formázta meg a kódot:

int main()

{

    int i;

    for(i=5;i<=21;i++)

        printf("%d\n", i);

    return 0;

}


Amúgy a kérdésre a válasz, tökmindegy, hogy az i változót hgoy inkrementálod, ez csak a kifejezés értékénél számít, de az pedig nincs használva. A for 3. "paramétere" mindig a ciklusmag után hajtódik végre.


Az inkrementálás sorrendje pl ilyen esetegben számít:

int a = i++;

int b = ++i;

2017. szept. 2. 22:03
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:

tudod postfix inkrementálás esetében létrejön egy temporális(ideiglenes) érték amit vagy hozzá rendelsz egy változóhoz vagy nem és ez után pedig automatikusan meg is szűnik létezni.

int y = 5;

y++; létrejön az ideiglenes érték amit nem rendelünk hozzá semmihez majd y értékét megnöveljük eggyel, y most 6

int x = y++; itt pedig hozzárendeljük x hez ezért x 6 lesz y pedig 7

2017. szept. 2. 22:21
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:
67%

Gondoltam, hogy a prefix/postfix zavar be. Az csak akkor számít, ha fel is használod a kifejezés értékét:


a = 5

b = a++; // a = 6, b = 5

b = ++a; // a = 6, b = 6


Mivel te az i++ és a ++i kifejezések értékét nem használod fel, teljesen mindegy, hogy melyik van oda írva. A ciklusmag így is, úgy is a for() után fut csak le, amikor i értéke már növelve van, és mindegy, hogy post- vagy prefix operátorral növeled.

2017. szept. 2. 23:24
Hasznos számodra ez a válasz?
 8/10 tabaki ***** válasza:

#include <stdio.h>


int main()

{

int i, j;

for( i = 5; i <= 21; j = i++) printf("%d\n", j);

printf("\n");

for(i = 5; i <= 21; j = ++i) printf("%d\n", j);

return 0;

}

2017. szept. 3. 00:10
Hasznos számodra ez a válasz?
 9/10 sharkxxx ***** válasza:
100%

Ha ezt a "for" ciklust felírjuk "while" ciklussal, akkor látszik, hogy a "++i" egy külön utasítás, ami mindig a ciklusmag után hajtódik végre.


#include <stdio.h>

int main()

{

    int i;

    i = 5;

    while (i <= 21) {

        printf("%d\n", i);

        ++i; // Ez a ciklusmag után hajtódik végre.

    }

    return 0;

}

2017. szept. 3. 00:24
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

sharkxxx válasza is jól magyarázza, de én is megpróbálom

amit elvileg már tudsz:

Az i++ elmenti a régi értéket megnöveli, majd a mentet értéket adja vissza.

A ++i megnöveli az értéket, majd az új értéket adja vissza.

-----------------------------------------------_

A for ciklus nem "lineáris lefutású" 1,2,3,4-nek indexelem a ciklus részeit.

for (1,2,3){4}

De ez ilyen sorrendben fut le:

1,

loop:

ha(2)4

3

PL:

1,

2,

4,

3,

1,

2

Ha csak egyszer fut le

2017. szept. 3. 12:08
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!