Proměnné

V programování hojně využíváme proměnné. Každá proměnná má:

Proměnnou je v programovacím jazyce C nejprve potřeba deklarovat. To provedeme tak, že napíšeme datový typ proměnné a následně její název, například:

int i;

Zde jsme provedli deklaraci proměnné i jakožto celého čísla (integer).

Po deklaraci nemá ještě proměnná žádnou hodnotu (nesmíme počítat s tím, že její hodnota automaticky bude nulová – teoreticky může být jakákoliv podle toho, co dříve na nyní nově přidělené adrese v paměti bylo uloženo). Pro použití je potřeba provést inicializaci. Tu můžeme udělat například:

i = 0;

Nebo tím, že na adresu této proměnné načteme hodnotu z klávesnice:

scanf("%d", &i);

Datové typy

Proměnná v programovacím jazyce C může mít různé datové typy. Z těch nejčastějších jmenujme alespoň:

Při definici proměnné určíme její datový typ, v závislosti na datovém typu se alokuje (přidělí) část paměti velikostí odpovídající konkrétnímu datovému typu. Například int má velikost 4 B (32 bitů), char 1 B (8 bitů).

Z pokročilejších datových typů jmenujme:

Naopak je několik datových typů, které v programovacím jazyce C vůbec nemáme, a tak se s nepřítomností datových typů musíme vypořádat jinak:

Zkusíme si nejprve příklad pro použití datového typu long:

void main(){
  long fakt = 1;
  for (int i = 2; i < 20; i++){
    printf("%ld ", fakt);
    fakt *= i;
  }
}

V příkladu výše by nám použití prostého int nestačilo, poslední dvě čísla totiž přesahují jeho hranice 232 = 4.294.967.296 (-1), a proto jsme použili velké celé číslo long.

Datový typ float budeme potřebovat například pro zaznamenání výsledku operace dělení (podíl dvou čísel):

void main(){
  int x, y;
  float podil;
  printf("Zadejte dvě čísla: ");
  scanf("%d %d", &x, &y);
  podil = (float) x / y;
  printf("%d děleno %d se rovná %0.2f\n", x, y, podil);
}

Zde nejprve načteme dvě celá čísla do proměnných x a y. Jejich podíl spočítáme tak, že vydělíme proměnnou x proměnnou y. Závorka (float) před jednou z proměnných je tzv. přetypování, které je zde nutné, protože programovací jazyk C by nám automaticky uložil podíl dvou celých čísel také jako celé číslo. Tím, že z jedné z proměnných pomocí přetypování uděláme float, je již výsledek správného datového typu float.

Poslední příklad si zkusíme s náhražkou datového typu boolean, který v C neexistuje:

void main(){  
  int x, y; 
  int shoda;
  
  printf("Zadejte dvě čísla: ");
  scanf("%d %d", &x, &y);
  shoda = (x == y);
  
  if (shoda){
      printf("Zadaná čísla se shodují.\n");
  }
  else{
      printf("Zadaná čísla se neshodují.\n");
  }
}

Zde nejprve načítáme dvě celá čísla do proměnných x a y. Následně inicializujeme proměnnou shoda výsledkem operace porovnání x a y. Je-li hodnota x stejná s hodnotou y, výraz (x == y) vrátí pravda (v C vrátí hodnotu 1); je-li hodnota x odlišná od hodnoty y, výraz (x == y) vrátí nepravda (v C vrátí hodnotu 0).

V následné selekci již jen vypíšeme výsledek. Povšimněte si, že v podmínce postačuje mít pouze proměnnou shoda, kde máme z předchozího příkazu uloženou jedničku (pravda), v tom případě jdeme kladnou větví (vypíšeme, že zadaná čísla se shodují) nebo nulu (nepravda), v tom případě jdeme zápornou větví (za slovem else) (vypíšeme, že zadaná čísla se neshodují).

Můžete si poslechnout kapitolu ve formě podcastu zde:

Podkladem pro podcast byla tato stránka a video https://www.youtube.com/watch?v=aIQk1O08zpg

Praktické procvičování

//doplňte kód, aby vypsal "AHoJ"

printf();

//doplňte kód, aby vypsal obsah proměnné cislo

int cislo = 27;

printf("", cislo);

//doplňte kód, aby vypsal obsah proměnné pi

float pi = 3.1415926535;

printf("", pi);

Drill

//napiš deklaraci proměnné a datového typu celé číslo



//napiš deklaraci proměnné x datového typu celé číslo



//napiš deklaraci proměnné i datového typu celé číslo



//napiš deklaraci proměnné b datového typu celé číslo a inicializuj jí na hodnotu 0



//napiš deklaraci proměnné x datového typu celé číslo a inicializuj jí na hodnotu 5



//napiš deklaraci proměnné i datového typu celé číslo a inicializuj jí na hodnotu -2



//napiš deklaraci proměnné f datového typu desetinné číslo



//napiš deklaraci proměnné n datového typu desetinné číslo



//napiš deklaraci proměnné pi datového typu desetinné číslo a inicializuj jí na hodnotu 3.14



//napiš deklaraci proměnné em datového typu desetinné číslo a inicializuj jí na hodnotu -0.2



//napiš deklaraci proměnné c datového typu znak



//napiš deklaraci proměnné z datového typu znak



//napiš deklaraci proměnné pis datového typu znak a inicializuj jí na hodnotu 'A'



//napiš deklaraci proměnné pos datového typu znak a inicializuj jí na hodnotu 'Z'

Procvičování

datový typ, který umožňuje uložit desetinné číslo

float nebo double

čtyři vlastnosti proměnné

Každá proměnná má:

  1. název
  2. datový typ
  3. hodnotu
  4. adresu v paměti, na které je hodnota proměnné uložená
datový typ pro uložení znaku

char

zkratka anglického character = znak

zástupný znak pro desetinné číslo

%f

například v kódu výpis float podil = 3.042; bude realizován printf("%f", podil);

datový typ pro uložení celého čísla

int

od slova integer = celé číslo

zástupný znak pro celé číslo

%d

například v kódu výpis celého čísla i: printf("%d", i);

zástupný znak pro výpis znaku

%c

například výpis znaku char znak='A'; bude realizován printf("%c", znak);

deklarujte proměnnou cislo jako celé číslo

int cislo;

inicializujte proměnnou cislo

cislo = 0;

(předpokládáme, že deklarace int cislo; již proběhla)

Příklady proměnných

Zde vždy záleží na konkrétním zadání, resp. konkrétním algoritmu, ale můžeme si ukázat nějaké příklady:

Algoritmus průměr známek:

  • proměnná znamky (pole int)
  • proměnná prumer (float)

Algoritmus platba QR kódu:

  • proměnná cislo_uctu (pole char)
  • proměnná castka (float)

Algoritmus obsah kruhu:

  • proměnná prumer (float)
  • proměnná obsah (float)

Práci s proměnnými si můžete procvičit zde.

Video