WYRAŻENIA WARUNKOWE

1.if … else (jeśli)  

Konstrukcja: 
/////////////////////////////////////////////////  

if(warunek){ 
     Blok instrukcji 
} 

/////////////////////////////////////////////////  

if(warunek){ 
      Blok instrukcji } else{
     Blok instrukcji

}
 

/////////////////////////////////////////////////

if(warunek){
     Blok instrukcji
}
else if(warunek){
     Blok instrukcji

}
else{
     Blok instrukcji
}

Warunek
jest to wyrażenie, które może być prawdziwe, wtedy wykonują się instrukcje po if lub fałszywy. Wtedy program opuszcza blok instrukcji po if i „idzie” dalej lub wykonuje się bloki instrukcji po else.
Teraz trochę o samym warunku. Warunek może być pojedynczy (x<5) lub złożony (x<5 && x>0). Warunki łączymy w jeden na tej samej zasadzie jak w matematyce, czyli mam do dyspozycji: nawiasy() oraz działania, jak alternatywę, koniunkcję i równość (zapis w C: == ), różność (zapis w C: != ) i negację (zapis w C: ! ). Wiem, że znasz lepsze spędzenie wieczorów niż z matematyką, więc mam tu drobną podpowiedź: :)

alternatywa / suma / „lub” / OR (zapis w C: || )
OR
0
1
0
0
1
1
1
1
Koniunkcja / iloczyn / „i” / AND (zapis w C: && ) 
AND
0
1
0
0
0
1
0
1

W C za warunek może robić również sama liczba lub adres(w sumie to też liczba), czyli np.:
 
if(1){
     printf(„Warunek zawsze prawdziwy ”);
}

/////////////////////////////////////////////////

if(5) printf(„Tak też może być”);
// Blok instrukcji który ma tylko jedną instrukcję nie musi mieć klamer


/////////////////////////////////////////////////
 
int x=12;
if(x) printf(„Warunek również prawdziwy”);

/////////////////////////////////////////////////
 
int x=0;
if(x) printf(„Warunek ZAWSZE nie spełniony”);

/////////////////////////////////////////////////

int *p=NULL; // wskaźnik ale o tym później
if(!p) printf(„TEN WARUNEK SIĘ WYKONA”);

/////////////////////////////////////////////////

!!! Uwaga praktyczna !!!

int x=5;
if(x=0) printf(„Warunek ZAWSZE nie spełniony”);
else printf(„%d”,x);// na ekran konsola wyświetli 0, dlaczego?

Podpowiedź: (=) != (==).

Jeśli chcemy by wyrażenie zawsze było prawdziwe możemy wpisać: true lub 1, jeśli ma być zawsze fałszywe false lub 0.

Trzeba zwrócić jeszcze uwagę na to, jak te warunki są sprawdzane. Chodzi o to, że (1 && 0) to nie zawsze to samo co (0 && 1), choć wynik daje taki sam.

Sprawdzamy pierwszy warunek i jeśli mam koniunkcje (&&), a ten warunek daje 1 (true) to sprawdzamy drugi warunek, natomiast jeśli ten pierwszy warunek daje nam 0 (false), to drugi warunek już nie jest sprawdzany, bo wiadomo że całość da 0. Dzieje się tak ponieważ wystarczy jedno 0 aby koniunkcja dała 0. Natomiast jeśli mamy alternatywę (||) dzieje się odwrotnie wystarczy jedna 1 i reszta warunków jest już nie sprawdzana, bo wynik i tak będzie 1.

Niby to takie nic, ale jednak bardzo się przydaje, ponieważ jak pierwszy warunek daje 0 to ten drugi może być już nie sprawdzalny i mamy błąd pamięci. A tak unikamy takiej sytuacji i wszystko działa jak powinno. Później będziemy z tego często korzystać.


2. switch … case (rozbudowany if)

Konstrukcja:

/////////////////////////////////////////////////

switch (wyrażenie){
     case wartosc1: { // wykona się jeśli wartosc1 == wyrażenie
          Blok instrukcji
      }
      case wartosc2: { // wykona się jeśli wartosc2 == wyrażenie
          Blok instrukcji
      }
      default:{ // wykona się jeśli nic się nie spełni wyżej
          Blok instrukcji;
      }
}

/////////////////////////////////////////////////

jeśli [wartosc1 == wyrażenie] to wykona się pierwszy case, ALEi reszta też się wykona do samego dołu, czyli również z default. Aby tego uniknąć należy dać instrukcję break na końcu bloku instrukcji, wtedy program przerwie wykonywanie switch i „pójdzie” dalej.


np.:

int x=3;

switch(x){
     case 1: printf(„nie wykona się ”);
     case 3: printf(„wykona się ”);
     case 5: {
             printf(„też się wykona ”);
             break;
     }
     case 14: printf(„już się nie wykona ”);
}




Brak komentarzy:

Prześlij komentarz