Proměnné
V programování hojně využíváme proměnné. Každá proměnná má:
- Název (např. x)
- Datový typ (např. int)
- Hodnotu (např. 0)
- Adresu v paměti, na které je uložená (např. 0x000201c0)
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ň:
- celé číslo = int
- desetinné číslo = float
- znak = char
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:
- malé celé číslo = short (velikost 2 B = 16 bitů)
- velké celé číslo = long (velikost 8 B = 64 bitů)
- prázdný datový typ = void
- desetinné číslo float (velikost 4 B = 32 bitů), přesnost 6 číslic
- desetinné číslo double (velikost 8 B = 64 bitů), přesnost 15 číslic
- dlouhé desetinné číslo Long Double (velikost 16 B = 128 bitů), přesnost 19
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:
- boolean (logická hodnota pravda nebo nepravda, anglicky true nebo false)
- nahrazujeme proměnnou typu int a hodnotou 0 (nepravda, false), resp. 1 (pravda, true)
- string (řetězec, několik znaků pohromadě)
- nahrazujeme polem znaků char s[10]
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í
float nebo double
Každá proměnná má:
- název
- datový typ
- hodnotu
- adresu v paměti, na které je hodnota proměnné uložená
char
zkratka anglického character = znak
%f
například v kódu výpis float podil = 3.042; bude realizován printf("%f", podil);
int
od slova integer = celé číslo
%d
například v kódu výpis celého čísla i: printf("%d", i);
%c
například výpis znaku char znak='A'; bude realizován printf("%c", znak);
int 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.