[C] Co wypisze ten program?

kordi1221
Użytkownik
Użytkownik
Posty: 102
Rejestracja: 4 gru 2012, o 11:36
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 77 razy

[C] Co wypisze ten program?

Post autor: kordi1221 »

Co wypisze ten program w każdym printf? Proszę o wytłumaczenie dlaczego akurat tak.

Kod: Zaznacz cały

int main(){
int a=1,b=2,c=3;
float x=-1.0,y=2.0,z=3.0;
char *s="napis";
float t[10]={0,1,2};
printf("
1)=%d",(a++)+(++b<<2));
printf("
2)=%d",(++a==b)==(c++==c--));
printf("
3)=%f",x+y+z*y);
printf("
4)=%s",s+2);
printf("
5)=%f",t[2]+=t[1]);
printf("
6)=%d",(a+b!=c)||(a!=c));
return 0;
}
Ostatnio zmieniony 10 sty 2013, o 19:35 przez Afish, łącznie zmieniany 1 raz.
Powód: Taguj nazwy tematów
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[C] Co wypisze ten program?

Post autor: witekkq »

Kod: Zaznacz cały

1)=13
2)=1
3)=7.000000
4)=pis
5)=3.000000
6)=1
Gdyż printf wypisuje na ekran instrukcje zgodnie z napisanym programem
kordi1221
Użytkownik
Użytkownik
Posty: 102
Rejestracja: 4 gru 2012, o 11:36
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 77 razy

[C] Co wypisze ten program?

Post autor: kordi1221 »

Mógłby ktoś wytłumaczyć to: (a++)+(++b<<2))
?
Ostatnio zmieniony 10 sty 2013, o 19:36 przez Afish, łącznie zmieniany 1 raz.
Powód: Brak tagów.
royas
Użytkownik
Użytkownik
Posty: 363
Rejestracja: 24 sie 2012, o 09:27
Płeć: Mężczyzna
Lokalizacja: Cieszyn
Pomógł: 80 razy

[C] Co wypisze ten program?

Post autor: royas »

(a++)+(++b<<2))
Po kolei, najpierw mamy:
a=1;b=2
obliczamy wyrażenie:
(a++) postinkrementacja czyli wartość tego wyrażenia to dalej \(\displaystyle{ 1}\)
++b preinkrementacja co daje \(\displaystyle{ 2+1=3}\)
3<<2przesunięcie bitów o dwa miejsca w lewo, efekt jak mnożenie przez 4: \(\displaystyle{ 3*4=12}\)
I + czyli \(\displaystyle{ 1+2=13}\) i efekty takie że \(\displaystyle{ a=2, b=3}\)
ODPOWIEDZ