Pętle w języku C

0

Witam
Mam problem ze zrozumieniem działania 2 pętli

a)
int a=4, b=4*a;
while(a=b)
b-=a;

Pętla wykona się raz
b=0

b) int b=5, a=4;
while(a=b>0)
b-=a;

Pętla wykona się 5 razy
b=4
b=3
b=2
b=1
b=0

Czy może mi ktoś wytłumaczyć działanie tych obu pętli , skąd biorą się takie wyniki ? Z góry dziękuję za szybką odpowiedź .

2

a=b wpisz w a wartość b
Co do pytania b) to nie prawda, również 1 raz. - źle spojrzałem należy czytać jako while(a=(b>0))

0

Wykładowca twierdził niby że 5 razy :) , z takimi wartościami jak ja wypisałem

nie wiem czy widać ale tam jest minus w ostatniej linijce
int b=5, a=4;
while(a=b>0)
b - = a;

2
int a=4, b=4*a;

przypisujesz: a:=4, b:=16

while(a=b)

w każdym kroku przypisujesz do a wartość b mówisz "wykonuj iterację dopóki warunek a=b jest prawdziwy (różny od zera), czyli właściwie mogłoby być while(b)

b-=a;

po pierwszej iteracji od b odejmujesz a. 16-16=0, więc drugiej iteracji nie będzie, bo warunek (a=b) nie jest prawdziwy (przypisujesz do a wartość b czyli 0, co "nie jest prawdziwe", false)

int b=5, a=4;

tego nie trzeba tłumaczyć

while(a=b>0)

w każdym kroku przypisujesz do a wartość b>0 czyli true, które jest rzutowane na int czyli 1. mówisz "wykonuj iterację dopóki warunek a=b>0 (czyli b>0) jest prawdziwy (różny od zera)

b-=a;

W każdej iteracji odejmujesz od b 1
Kolejne iteracje zmieniają tak wartości a i b:

a=1, b=4
a=1, b=3
a=1, b=2
a=1, b=1
a=1, b=0
#include <stdio.h>

void pierwsza(void)
{
	int a=4, b=4*a;
	printf("%s: przed petla: a=%d, b=%d\n", __func__, a, b);
	while(a=b)
	{
		b-=a;
		printf("%s: w petli: a=%d, b=%d\n", __func__, a, b);
	}
	printf("%s: po petli: a=%d, b=%d\n", __func__, a, b);
}

void druga(void)
{
	int b=5, a=4;
	printf("%s: przed petla: a=%d, b=%d\n", __func__, a, b);
	while(a=b>0)
	{
		b-=a;
		printf("%s: w petli: a=%d, b=%d\n", __func__, a, b);
	}	
	printf("%s: po petli: a=%d, b=%d\n", __func__, a, b);
}

int main(void)
{
	pierwsza();
	druga();
	return 0;
}
pierwsza: przed petla: a=4, b=16
pierwsza: w petli: a=16, b=0
pierwsza: po petli: a=0, b=0
druga: przed petla: a=4, b=5
druga: w petli: a=1, b=4
druga: w petli: a=1, b=3
druga: w petli: a=1, b=2
druga: w petli: a=1, b=1
druga: w petli: a=1, b=0
druga: po petli: a=0, b=0
0

Bardzo dziękuję za pomoc
Pozdrawiam :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1