Řízení toku programu
Řízení toku programu
Který příkaz zajistí větvení programu do dvou směrů?
if ( podmínka ) {příkazy1};else {příkazy2};
příkazy1 jsou provedeny, pokud je zadaná podmínka splněna,
v případe nesplnění podmínky jsou provedeny příkazy2.
Jaké operátory lze použít v podmínkách?
Všechny, ale využívají se hlavně relační a logické.
Jak se zapisuje podmíněný výraz?
promenna=(podminka)?vyraz1: vyraz2;
Vyhodnotí se podminka v kulatých závorkách a jesliže platí, do promenne se dá hodnota vyrazu1.
Jestliže neplatí, do promenne se dá hodnota vyrazu2.
float a,b,c;
printf("Zadej dve cisla: ");
scanf("%f %f",&a,&b);
c=(a>b)?a:b;
printf("Vetsi je %f\n",c);
Podmíněný výraz lze nahradit podmíněným příkazem:
if(a>b)c=a;else c=b;
Proměnnou c můžeme ušetřit a podmíněný výraz přímo zapsat do funkce printf:
float a,b;
printf("Zadej dve cisla: ");
scanf("%f %f",&a,&b);
printf("Vetsi je %.2f\n",(a>b)?a:b);
Používá se místo příkazu if, např. za příkazem return ve funkci.
float maximum(float a,float b){
return (a>b)?a:b;
}
Funkce vrátí větší hodnotu z obou parametrů.
Jak se zapisuje zkrácený (neúplný) a úplný podmíněný příkaz?
if ( podmínka ) {příkazy1}; //neúplný
Jestliže podmínka neplatí, pokračuje se za příkazem if.
if ( podmínka ) {příkazy1};else {příkazy2}; // úplný
Jestliže podmínka neplatí, provedou se příkazy za else.
Jaké znáte příkazy cyklu?
S pevným počtem opakování (for)
S podmínkou na začátku (while)
S podmínkopu na konci (do-while)
Uveďte zápis příkazu for!
for(inicializace;test podmínky;změna hodnoty řídící proměnné cyklu) { příkazy; }
inicializace – zadání počáteční hodnoty proměnné
test podmínky - testuje řídící proměnnou na koncovou hodnotu
změna hodnoty řídící proměnné cyklu – mění hodnotu řídící proměnné s požadovaným krokem
Tento příkaz je vhodný pro zadaný počet opakování příkazu nebo příkazů.
// Vypisuje hodnoty i
#include <stdio.h>
main() {
int i;
for(i=10;i<20;i+=2){
printf("%d ",i);
}
}
Co je to řídicí proměnná cyklu?
Je to proměnná, uvedená v hlavičce cyklu, která řídí průběh cyklu.
Může být typu int, float, char, double.
K čemu slouží inicializace?
K nastavení počáteční hodnoty řídící proměnné.
K čemu slouží test podmínky?
K určení, zda se příkazy cyklu budou opakovat, nebo zda se vykonávání cyklu ukončí.
K čemu slouží změna řídicí proměnné cyklu a jak ji lze provést?
Změna řídící proměnné je nutná, aby jednou podmínka přestala platit.
Doporučuje se provádět ji pouze v hlavičce cyklu.
Jaké hodnoty může nabýt řídicí proměnná cyklu?
Může nabýt hodnoty typu int, float, char, double
K čemu slouží příkazy break a continue?
break – strukturovaný skok, zajistí vyskočení z cyklu a pokračování za cyklem
continue – zajišťuje přechod na další iteraci. Přeskočí následující příkazy v těle cyklu, ale cyklus neopouští
Co se stane, je-li některá část hlavičky cyklu for vynechána?
Použije se hodnota, která je do proměnné uložená.
i=10;
for(;i<20;i+=2)printf("%d ",i);
for(i=10;;i+=2){
if(i>=20) break;
printf("%d ",i);
}
for(i=10;i<20;){
printf("%d ",i);
i+=2;
}
i=10;
for(;;){
if(i>=20) break;
i+=2;
printf("%d ",i);
}
Jaký je rozsah platnosti proměnné, deklarované v hlavičce cyklu?
Definice v místě použití (v C++)
V jazyce C platí, že definice proměnných musí být uvedené na začátku bloku, tedy bezprostředně za levou složenou závorkou. Jazyk C++ toto omezení ruší a proměnnou můžeme definovat kdekoliv. Následující ukázka by byla chybně v jazyce C, ale správně v C++:
void main()
{
printf("ahoj");
int x = 10; // definice proměnné
printf("x=%d", x);
}
for(int i=10;i<20;i+=2)printf("%d ",i);
Proměnnou můžeme deklarovat i v hlavičce cyklu, a potom je lokální v rámci cyklu.
Uveďte zápis příkazu while!
while (podmínka){prikazy;}
Nejdříve se vyhodnotí podmínka
Pokud je splněna, provedou se příkazy a podmínka se vyhodnocuje znovu.
Cyklus končí v okamžiku, kdy podmínka není splněna.
Příkazy nemusí být provedeny ani jednou.
Často používaná je i varianta s obráceně postavenou podmínkou.
Uveďte zápis příkazu do-while!
do{prikazy;}while(podminka);
U tohoto typu cyklu se nejprve provedou příkazy a teprve poté se vyhodnotí podmínka
Je-li podmínka splněna, provádí se znovu příkazy
Cyklus končí v případe, že podmínka není splněna.
Příkazy se v každém případe provedou vždy alespoň jednou.
Často používaná je i varianta s obráceně postavenou podmínkou.
Tento cyklus je vhodný, když rozhodujeme o jeho ukončení podle hodnoty, načtené od uživatele.
K čemu slouží příkaz switch a uveďte jeho zápis!
Přepínač (switch)
Přepínač slouží k rozdělení posloupnosti příkazů na části, následné vybrání a provedení některé, či některých z nich.
Přepínač slouží k větvení výpočtů podle hodnoty celočíselného výrazu.
switch ( <výraz> ) {
case <konstanta 1> : <příkaz1>
case <konstanta 2> : <příkaz2>
default : <příkaz>
}
Příklad
scanf("%f %f",&a,&b);
scanf("%c",&c);
switch(c){
case '+':printf("%f",a+b);break;
case '-':printf("%f",a-b);break;
case '*':printf("%f",a*b);break;
case '/':printf("%f",a/b);break;
default: printf("špatný operátor");
}
Je-li proměnná, podle které provádíme výběr (selektor) typu char, konstantu za case uvádíme v apostrofech.
Je-li typu int, neuvádí se v apostrofech.
Jak lze využít příkaz goto ?
Příkaz goto lze ve spojení s tzv. návěštím využít k vytvoření cyklu.
Je to ale nestrukturovaný a nedoporučovaný příkaz.
int i=0;
cyk: if(i>10)goto ven;
printf("%d ",i);
i++;
goto cyk;
ven:getch();