Většina lidí si myslí, že programování zahrnuje složité algoritmy. Ve skutečnosti to není pravda. Většinou jde o jednoduchá rozhodnutí. V C tato rozhodnutí závisí na jedné věci: na booleovských výrazech.
Už jste je viděli v příkazech if a while. Toto jsou semafory vašeho programu. Zelená – jdeme, červená – stop.
Vezměme si tento jednoduchý příklad.
Program požádá o číslo. Zkontroluje, zda je číslo menší než nula. Pokud ano, program zobrazí zprávu. Pokud ne? Umlčet.
Část (b < 0) je booleovský výraz. C to vyhodnotí. True znamená, že se provede další řádek. Nepravda znamená přeskočit tento řádek. Jen.
Ale co se stane, když je potřeba jemnější logika?
Zpracování nulových a kladných hodnot
Jediná kontrola výše ponechává mezeru. Co když uživatel zadá nulu? Nebo kladné celé číslo? Program je bude ignorovat.
Zde je trochu složitější struktura.
Nyní máte logiku pro záporné, nulové a kladné hodnoty. Sekce else if a else řeší zbývající případy. Toto je stále základní úroveň, ale pokrývá všechny možnosti.
Obtížné podmínky a časté chyby
Skutečná logika je zřídka jednoduchá. Někdy potřebujete dvě podmínky, aby byly pravdivé současně.
Zvažte tento řádek:
Přečtěte si to jako anglický text. Pokud je x rovno y A j je větší než k, nastavte z na 1. V opačném případě nastavte q na 10.
Pozor na operátory.
C používá == ke kontrole rovnosti. K přiřazení hodnoty používá jediné =.
Jedná se o klasickou past. Pokud napíšete if (x = y), nekontrolujete, zda jsou stejné. Přiřadíte y k x a poté zkontrolujete, zda výsledek není nulový. Vaše logika je narušena. Pro srovnání vždy používejte dvojitou rovnost.
Symbol && představuje logickou operaci AND. Obě části musí být pravdivé.
Úplná sada logických operátorů
Nemusíte se je učit nazpaměť, ale měli byste vědět, jak vypadají. Jsou všude v C kódu.
- Rovnost :
== - Nerovnost :
!= - Méně : "<".
- Více :
> - Men nebo rovno :
<= - Větší nebo rovno :
>= - Já :
&& - NEBO :
|| - NE :
!
Proč je to důležité pro běžné uživatele?
Looping logika v C: while, do-while a pro konstrukce
Cykly while můžete používat stejně snadno jako jednoduché příkazy if. Podívejme se na jednoduchý příklad:
Tento kód opakuje tyto dva řádky, dokud a nebude větší nebo rovno b. Struktura je extrémně jednoduchá. C také poskytuje konstrukci do-while, která zajišťuje, že se blok kódu provede alespoň jednou před testováním podmínky. Zde je úryvek demonstrující základní ověření vstupu:
Jak cyklus for zjednodušuje iteraci
Smyčka for je v podstatě zkratka pro smyčku while. Pokud máte kód takto:
Můžete jej zkomprimovat do jediného for výrazu:
Cyklus while se skládá ze tří samostatných částí: inicializace (x=1 ), testování (x<10 ) a inkrementace (x++ ). Smyčka for je sbalí do jednoho řádku. Nejste však omezeni na používání jednoduchých proměnných. Podívejte se na složitější scénář:
Můžete to přepsat pomocí smyčky for :
Vypadá přeplněně. Je to matoucí. Ale funguje to. Operátor čárky vám umožňuje zřetězit více výrazů v inicializačních a inkrementálních částech smyčky for. Čárku však nemůžete vložit do části testu stavu.
Mnoho programátorů v jazyce C rádo sbalí logiku do jednoho řádku. Jiní tvrdí, že to ničí čitelnost. Neexistuje jednotný konsenzus. Musíte se jen rozhodnout, zda je pro vás důležitější stručnost nebo srozumitelnost.
Nebezpečí použití = místo == v booleovských výrazech
Dvojité znaménko rovná se == je zdrojem běžných chyb v jazyce C. Vývojáři často omylem zapisují jediné znaménko rovná se =. Kompilátor přijímá obě možnosti, ale chování je radikálně odlišné.
V C se booleovské výrazy vyhodnocují jako celá čísla. Nula znamená Nepravda. Každé nenulové celé číslo je True. To znamená, že můžete legálně psát:
Ale co se stane, když napíšete jestli (a=b)?
To není srovnání. Toto je zadání. Příkaz if (a=b) přiřadí hodnotu b proměnné a a poté otestuje výslednou hodnotu a, aby zjistil, zda je logická pravda. Pokud se a stane nulou, podmínka je považována za False. Pokud se stane jinou hodnotou, podmínka je považována za Pravdou.
Během této akce se změní hodnota proměnné a. To je zřídka to, co chcete, když chcete porovnávat hodnoty. I když tato schopnost přiřazování v rámci podmínky může být v určitých kontextech užitečná, je pastí pro nepozorné. Buďte opatrní při používání = a ==. Jeden překlep vše změní.



























