Lekce 3 - Proměnné a typový systém v Céčku
Z minulé lekce, Instalace NetBeans a kompilátoru C, již umíme pracovat s NetBeans IDE a vytvořit konzolovou aplikaci.
Dnes se v tutoriálu podíváme na tzv. typový systém, ukážeme si základní datové typy a práci s proměnnými. Výsledkem budou 3 jednoduché programy včetně kalkulačky.
Proměnné
Než začneme řešit datové typy, pojďme se shodnout na tom, co je to
proměnná (programátoři mi teď jistě odpustí zbytečné vysvětlování).
Určitě znáte z matematiky proměnnou (např. x
), do které jsme
si mohli uložit nějakou hodnotu, nejčastěji číslo. Proměnná je v
informatice naprosto to samé, je to místo v paměti počítače, kam si
můžeme uložit nějaká data (jméno uživatele, aktuální čas nebo
databázi článků). Toto místo má podle typu proměnné také vyhrazenou
určitou velikost, kterou proměnná nesmí přesáhnout (např. číslo nesmí
být větší než 32 000).
Proměnná má vždy nějaký datový typ, může to být číslo, znak, text a podobně. Záleží na tom, k čemu ji chceme používat. Většinou musíme před prací s proměnnou tuto proměnnou nejdříve tzv. deklarovat, čili říci jazyku jak se bude jmenovat a jakého datového typu bude (jaký v ní bude obsah). Jazyk ji v paměti založí a teprve potom s ní můžeme pracovat. Podle datového typu proměnné si ji jazyk dokáže z paměti načíst, modifikovat, případně ji v paměti založit. O každém datovém typu jazyk ví, kolik v paměti zabírá místa a jak s tímto kusem paměti pracovat.
Typový systém
Existují dva základní typové systémy: statický a dynamický:
- Dynamický typový systém nás plně odstiňuje od toho, že proměnná má vůbec nějaký datový typ. Ona ho samozřejmě vnitřně má, ale jazyk to nedává najevo. Dynamické typování jde mnohdy tak daleko, že proměnné nemusíme ani deklarovat. Jakmile do nějaké proměnné něco uložíme a jazyk zjistí, že nebyla nikdy deklarována, sám ji založí. Do té samé proměnné můžeme ukládat text, potom strukturu uživatele a potom desetinné číslo. Jazyk se s tím sám popere a vnitřně automaticky mění datový typ. V těchto jazycích jde vývoj rychleji díky menšímu množství kódu. Zástupci jsou např. PHP nebo Ruby.
- Statický typový systém naopak striktně vyžaduje definovat typ proměnné a tento typ je dále neměnný. Jakmile proměnnou jednou deklarujeme, není možné její datový typ změnit. Jakmile se do čísla pokusíme uložit strukturu uživatel, dostaneme vynadáno.
Céčko je staticky typovaný jazyk, všechny proměnné musíme nejprve deklarovat s jejich datovým typem. Nevýhodou je, že díky deklaracím je zdrojový kód poněkud objemnější a vývoj pomalejší. Obrovskou výhodou však je, že nám kompilátor před spuštěním zkontroluje, zda všechny datové typy sedí. Dynamické typování sice vypadá jako výhodné, ale zdrojový kód není možné automaticky kontrolovat a když někde očekáváme objekt uživatel a přijde nám tam místo toho desetinné číslo, odhalí se chyba až za běhu a interpret program shodí. Naopak céčko nám nedovolí program ani zkompilovat a na chybu nás upozorní (to je další výhoda kompilace).
Pojďme si nyní něco naprogramovat, ať si nabyté znalosti trochu osvojíme, s teorií budeme pokračovat až příště. Řekněme si nyní tři základní datové typy:
- Celá čísla:
int
- Desetinná čísla:
float
- Znak (písmeno, text se naučíme později):
char
Program vypisující proměnnou
Zkusíme si nadeklarovat celočíselnou proměnnou a, dosadit do ní číslo
56
a její obsah vypsat do konzole. Založte si nový projekt a
pojmenujte ho Vypis
(i ke všem dalším příkladům si vždy
založte nový projekt). Kód samozřejmě píšeme jako minule do těla funkce
main()
, čili ji zde již nebudu opisovat.
{C_CONSOLE}
int a;
a = 8;
printf("%d", a);
{/C_CONSOLE}
První příkaz nám nadeklaruje novou proměnnou a
datového
typu int
, proměnná tedy bude sloužit pro ukládání celých
čísel. Druhý příkaz provádí přiřazení hodnoty do proměnné, slouží
k tomu operátor "rovná se". Poslední příkaz je nám známý, vypíše do
konzole obsah proměnné a
. Všimněte si %d
v
uvozovkách, tím definujeme jaký typ proměnné to má vypsat, %d
označuje celá čísla (jako decimal).
Konzolová aplikace
8
Pro desetinnou proměnnou by kód vypadal takto:
{C_CONSOLE}
float a;
a = 56.6F;
printf("%f", a);
{/C_CONSOLE}
Je to téměř stejné jako s celočíselnou, ovšem za hodnoty
float
píšeme ještě znak F
. Jako desetinný
oddělovač používáme tečku a změníme %d
na %f
(jako float
), abychom řekli počítači, že chceme vypisovat
desetinné číslo.
Program zdvojnásobovač
Minulý program byl poněkud nudný, zkusme nějak reagovat na vstup od uživatele.
Z konzole jsme ještě nezkoušeli nic načítat. Slouží k tomu funkce
scanf()
, která uživateli umožní zadat do konzole řádku textu
a nám do naší proměnné uloží zadanou hodnotu. Abychom si to zkusili,
založíme si nový projekt s názvem Zdvojnasobovac
. Nyní se
přesuňme k samotnému kódu programu a do funkce main()
píšeme:
{C_CONSOLE}
int a;
printf("Zadejte číslo k zdvojnásobení: ");
scanf("%d", &a);
a = a * 2;
printf("%d", a);
{/C_CONSOLE}
To už je trochu zábavnější Zdvojnásobovač si vyžádá na vstupu číslo a to poté
zdvojnásobí a vypíše. První řádek je jasný, deklaruje proměnnou
a
typu celé číslo. V céčku bychom všechny proměnné měli
definovat na začátku.
Konzolová aplikace
Zadejte číslo k zdvojnásobení: 1024
2048
Do a
se přiřadila hodnota z funkce scanf()
z
konzole, tedy to, co uživatel zadal. Znak &
si vysvětlíme
později, prozatím se spokojíme s tím, že ho funkce scanf()
vyžaduje, aby hodnotu mohla uložit do nějaké proměnné. Opět jsme využili
sekvenci %d
, čímž říkáme, že vstup se má načíst jako
celé číslo. Jen tak mimochodem, znak bychom načetli nebo vypsali pomocí
sekvence %c
(jako char
).
Jednoduchá kalkulačka
Ještě jsme nepracovali s desetinnými čísly, zkusme si napsat slibovanou kalkulačku. Bude velmi jednoduchá, na vstup přijdou dvě čísla, program poté vypíše výsledky pro sčítání, odčítání, násobení a dělení.
{C_CONSOLE}
float a;
float b;
float soucet;
float rozdil;
float soucin;
float podil;
printf("Vítejte v kalkulačce \n");
printf("Zadejte první číslo: \n");
scanf("%f", &a);
printf("Zadejte druhé číslo: \n");
scanf("%f", &b);
soucet = a + b;
rozdil = a - b;
soucin = a * b;
podil = a / b;
printf("Součet: %f \n", soucet);
printf("Rozdíl: %f \n", rozdil);
printf("Součin: %f \n", soucin);
printf("Podíl: %f \n", podil);
{/C_CONSOLE}
Konzolová aplikace
Vítejte v kalkulačce
Zadejte první číslo:
5
Zadejte druhé číslo:
7
Součet: 12.000000
Rozdíl: -2.000000
Součin: 35.000000
Podíl: 0.714286
Vidíme, že v C můžeme použít nám známé aritmetické operace
(+
, -
, \
, *
,
/
). C navíc definuje další operaci (%
), která
značí zbytek po celočíselným dělení. Všimněte si, že místo
%c
nebo %d
používáme %f
. To značí,
že chceme použít float
neboli desetinná čísla. Pokud by vás
zajímaly všechny znaky, které můžete použít, najdete vysvětlení v dokumentaci.
Všechny programy máte samozřejmě opět v příloze, zkoušejte si
vytvářet nějaké podobné, znalosti již k tomu máte
V následujícím cvičení, Řešené úlohy k 1.-3. lekci Céčka, si procvičíme nabyté zkušenosti z předchozích lekcí.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkamiStaženo 2411x (105.2 kB)