poprzedni temat | w górę | następny temat

Operator ?:, instrukcje break, continue, case, do-while i funkcje

Operator trójargumentowy ?:

Operator trójargumentowy o składni

wyrazenie_logiczne ? wyrazenie_1 : wyrazenie_2

tworzy wyrażenie, którego wartość zależy od wyrazenie_logiczne. Jeśli jest ono prawdziwe, wartością całego wyrażenia jest wyrazenie_1. W przeciwnym razie wartością całego wyrażenia jest wyrazenie_2. Tylko jedno z dwóch ostatnich wyrażeń jest obliczane — tylko to, którego wartość jest brana jako wartość całego wyrażenia.

W poniższym przykładzie zmienna x przyjmie wartość 10:

x = x > x+1 ? 1 : 10;

Instrukcje breakcontinue

Porównaj poniższe fragmenty kodu:

// Przykład 1
int i;
for(i = 0; i<10; ++i){
  if( i == 5)
    continue;
  printf("%d\n", i);
}

// Przykład 2
int i;
for(i = 0; i<10; ++i){
  if( i == 5)
    break;
  printf("%d\n", i);
}

Instrukcja case

switch(wyrazenie) {
  case stala1:  instrukcje;
                break;
  case stala2:  instrukcje;
                break;
  default:      instrukcje;
}

Napisz program, który wczytuje dwie liczby całkowite i działa w zależności od wartości pierwszej liczby:

Zadania

  1. Napisz program, który wczyta dwie liczby i wypisze maksimum ich wartości bezwzględnych.

  2. Napisz program, który wczyta dwie liczby i wypisze wartość bezwzględną ich maksimum.

  3. Napisz program, który wczyta liczbę dodatnią n i wypisze, na którym miejscu (licząc od prawej) znajduje się najbardziej znacząca jedynka w zapisie binarnym liczby n — inaczej: długość zapisu binarnego liczby n. Na przykład:

    ./a.out
    7
    3 // bo 111
    
    ./a.out
    8
    4 // bo 1000
    
  4. Napisz program, który wczyta liczbę dodatnią n i wypisze część całkowitą z pierwiastka kwadratowego z n. Nie możesz użyć funkcji z biblioteki matematycznej.

Pętla do-while

do {
  instrukcje;
} while(warunek);

Zasada działania:

  1. Wykonaj instrukcje wewnątrz pętli;
  2. Oblicz warunek;
  3. Jeśli warunek jest spełniony, skocz do początku pętli (pkt 1);
  4. W przeciwnym razie opuść pętlę.

Przykład:

int i = 100;
do {
  printf("%d\n", i);
  i+=1;
} while(i < 10);

// porównaj z:
int i = 100;
while(i < 10){
  printf("%d\n", i);
  i+=1;
}

Funkcje

Funkcja to fragment kodu, który można wielokrotnie wykorzystać poprzez jej wywołanie — już to robiliśmy z funkcjami z biblioteki standardowej.

Definicja funkcji:

typ_zwracany nazwa_funkcji(lista parametrow){
  instrukcje;
  return wartosc_zwracana;
}

Nagłówek powyżej zdefiniowanej funkcji to typ_zwracany nazwa_funkcji(lista parametrów). Wypisanie samego nagłówka funkcji bez podania jej definicji (ciała funkcji) to jej deklaracja.

Przykłady funkcji:

int suma(int a, int b){
  return a+b;
}

int maximum(int a, int b){
  if(a>b){
    return a;
  } else {
    return b;
  }
}

int maximum_inaczej_napisane(int a, int b){
  if(a>b)
    return a;
  return b;
}

int maximum_jeszcze_inaczej(int a, int b){
  return a>b?a:b;
}

int rok_przestepny(unsigned int rok){
  if(rok < 1582)
    return rok % 4 == 0;
  if(rok % 4 == 0){
    if(rok % 100 == 0){
      return rok%400 == 0;
    } else {
      return 1;
    }
  }
  return 0;
}

Uwagi:

Zadania

  1. Napisz funkcję, która dla podanego parametru n typu int zwróci silnię z n.

  2. Napisz funkcję, która przyjmuje dwe wartości zmiennoprzecinkowe:

    • długość podstawy trójkąta,
    • wysokość trójkąta.

    Funkcja ma zwrócić pole trójkąta.

  3. Napisz funkcję, która przyjmuje 3 wymiary prostopadłościanu (wartości zmiennoprzecinkowe) i zwraca jego pole powierzchni.

poprzedni temat | w górę | następny temat