Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilErik Vlček
1
25/04/20151 Znakový typ (1) Používán pro reprezentaci konečné uspořá- dané množiny znaků, které umí: –vstupní zařízení akceptovat –výstupní zařízení publikovat Konstanty znakového typu se zapisují jako znaky uzavřené mezi apostrofy –např. ’*’, ’A’, ’B’, ’c’ atd. Pro zápis hodnot znakového typu je také možné použít řídící posloupnost: –uvozena symbolem \ podobně jako v řetězco- vém literálu:
2
25/04/20152 Znakový typ (2) ’\n’ přechod na nový řádek ’\t’ horizontální tabulátor ’\\’ zpětné lomítko ’\’’ apostrof ’\xhh’ kde hh označuje číslo v šestnáctkové soustavě požadovaného znaku ’\ooo’ kde ooo označuje číslo v osmičkové soustavě požadovaného znaku Patří mezi integrální datové typy Jeho hodnoty jsou celá čísla a mohou se po- užít ve výrazech jako celočíselné operandy
3
25/04/20153 Znakový typ (3) Jazyk C rozlišuje tři druhy znakového typu: –prostý – char –se znaménkem – signed char –bez znaménka – unsigned char Každý z těchto typů zaujímá stejné množ- ství paměti (1 B sizeof(char) = 1 ), ale může reprezentovat různé hodnoty Interpretace prostého znakového typu (se znaménkem nebo bez znaménka) je závislá na konkrétní implementaci
4
25/04/20154 Znakový typ (4) Hlavičkový soubor limits.h definuje pojmenované konstanty udávající rozsahy jednotlivých druhů znakového typu: JménoHodnotaVýznam SCHAR_MIN –128 Minimální hodnota pro signed char SCHAR_MAX 127 Maximální hodnota pro signed char UCHAR_MAX 255 Maximální hodnota pro unsigned char CHAR_MIN –128 Min. hodnota pro char CHAR_MAX 127 Max. hodnota pro char
5
25/04/20155 Znakový typ (5) Na dvojice hodnot znakového typu lze apliko- vat relační operátory ( ==, !=, =, > ) Musí splňovat následující požadavky: –podmnožina dekadických číslic ’0’ až ’9’ musí být numericky uspořádaná a souvislá –podmnožina velkých písmen ’A’ až ’Z’ a pod- množina malých písmen ’a’ až ’z’ musí být abecedně uspořádané (nemusí být souvislé)
6
25/04/20156 Znakový typ (6) Číselné hodnoty znakových konstant jsou od- vozeny z odpovídající kódové tabulky, např. rozšířené množiny ASCII (American Standard Code for Information Interchange): –platí: X < Y pro X ’A’ ; ’Z’ Y ’a’ ; ’z’ neplatí tedy např. ’a’ < ’Z’ –jestliže rozšířená část ASCII obsahuje znaky ná- rodní abecedy, tak jejich množina není souvislá ani uspořádaná
7
25/04/20157 Znakový typ (7) Poznámky: –desítková číslice jako konstanta znakového ty- pu nepředstavuje svou numerickou hodnotu. Tuto hodnotu můžeme vypočítat pomocí: c – ’0’, kde c ’0’ ; ’9’ –pro zobrazení (načtení) hodnoty znakového typu prostřednictvím funkce printf ( scanf ) je možné použít specifikaci %c –funkce printf (při použití formátovací znač- ky %c ) zobrazuje znak po převodu na unsigned char
8
25/04/20158 Funkce getchar Deklarována v: stdio.h Prototyp: int getchar(void); Funkce: –načte znak ze standardního vstupu Vrácená hodnota: –v případě bezchybného načtení vrací načtený znak jako hodnotu typu int –v případě chyby nebo dosažení konce souboru vstupních dat vrací hodnotu EOF (-1) –vrácená hodnota by měla být přiřazována do proměnné typu int (nikoliv char )
9
25/04/20159 Funkce putchar Deklarována v: stdio.h Prototyp: int putchar(int c); Funkce: –zobrazí znak specifikovaný parametrem c na standardní výstup Vrácená hodnota: –v případě bezchybného výstupu vrací stejný znak, který byl vypsaný –v případě chyby vrací hodnotu EOF (-1)
10
25/04/201510 Výčtový typ (1) Představuje množinu celočíselných hodnot reprezentovaných identifikátory Použité identifikátory se nazývají výčtové konstanty Definice výčtového typu: enum jmTypu {id 1, id 2, …, id n }; Příklad: enum den {po, ut, st, ct, pa, so, ne};
11
25/04/201511 Výčtový typ (2) Poznámka: –žádný identifikátor se nesmí vyskytovat v sez- namu prvků více než u jednoho výčtového typu Na základě definovaného výčtového typu je možné následně definovat proměnné: enum jmTypu p 1, p 2, …, p n ; kde p 1, p 2, …, p n označují identifikátory proměnných typu jmTypu Příklad: enum den d1, d2; definuje proměnné d1 a d2 typu den
12
25/04/201512 Výčtový typ (3) Definici výčtového typu a odpovídajících proměnných lze spojit do jednoho zápisu Příklad: enum barva {cervena, zelena, modra} zaklBarva; Výčtový typ patří mezi integrální typy jeho hodnoty lze používat jako celočíselné operandy (je možné na ně aplikovat stejné operátory)
13
25/04/201513 Výčtový typ (4) Celočíselné hodnoty výčtového typu jsou dány pořadím jednotlivých identifikátorů v definici typu (není-li uvedeno jinak): –první identifikátor má hodnotu 0 –hodnoty dalších identifikátorů se zvyšují po jedné Jazyk C také dovoluje konkrétní hodnotě výčtového typu přiřadit libovolné celé číslo
14
25/04/201514 Výčtový typ (5) Příklad: enum cisla {nula, jedna,dve,tri, deset = 10, jedenact, dvanact, trinact, dvacet = deset + 10}; Jednotlivé hodnoty výčtového typu pak mají následující celočíselné hodnoty: nula jedna dve 0 1 2 tri deset jedenact 3 10 11 dvanact trinact dvacet 12 13 20
15
25/04/201515 Příkaz switch (1) Slouží k vícenásobnému větvení Testuje, zda (řídící) výraz odpovídá jed- nomu z několika konstantních výrazů Řídící výraz musí být integrálního typu Jednotlivé konstantní výrazy jsou uvozeny klíčovým slovem case a musí být vzájem- ně odlišné, tj. stejný konstantní výraz nesmí být v rámci jednoho příkazu switch po- užitý vícekrát)
16
25/04/201516 Příkaz switch (2) Obecný tvar: switch (výraz) { case konst_výraz 1 : příkazy 1 case konst_výraz 2 : příkazy 2 case konst_výraz n : příkazy n default: příkazy n+1 } Nepovinná část
17
25/04/201517 Příkaz switch (3) Funkce: –vyhodnotí se řídící výraz –je-li hodnota řídícího výrazu ( výraz ) rovna konst_výraz i ( i = 1, 2, …, n ) za klíčo- vým slovem case, pak se začnou provádět příkazy i –není-li hodnota řídícího výrazu rovna žádnému z konst_výraz i a je-li použito klíčové slovo default, pak se prove- dou příkazy n+1 není-li použito klíčové slovo default, pak se po- kračuje příkazem následujícím bezprostředně za příkazem switch
18
25/04/201518 Příkaz switch (4) Předá-li se řízení na příkazy i ( i = 1, 2, …, n ), pak se provádějí postupně všechny příkazy j ( j = i, i+1, …, n ( n+1 )) Provádění pokračuje tak dlouho, dokud se: –nedosáhne konce příkazu switch –nepřejde ven z příkazu switch prostřednict- vím příkazu break, return nebo goto
19
25/04/201519 Příkaz switch (5) Poznámka: –je-li zapotřebí, aby se pro více různých hodnot řídícího výrazu provedly stejné příkazy, je možné zapsat více klíčových slov case následovaných různými konstantními výrazy –jako oddělovač (mezi konstantním výrazem a klíčovým slovem case ) se používá symbol :
20
25/04/201520 Reálné typy (1) Zahrnují konečnou podmnožinu těch reálných čísel, která jsou zobrazitelná v paměti počítače (v jistém rozsahu a s jistou přesností) Hodnoty reálných typů jsou v paměti zobraze- ny jako čísla v pohyblivé desetinné čárce, tj. jako dvojice čísel (a, b), kde: –a je mantisa –b je exponent
21
25/04/201521 Reálné typy (2) V jazyce C se zapisují s desetinnou tečkou nebo ve tvaru aEb (tento zápis odpovídá matematickému zápisu a.10 b ) Je-li alespoň jeden z operandů reálného ty- pu (druhý může být typu celočíselného), dává aplikace operátorů +, –, *, / výsledek reálného typu Hodnoty reálných typů je možné porovná- vat pomocí relačních operátorů
22
25/04/201522 Reálné typy (3) V jazyce C je možné pracovat se třemi růz- nými reálnými typy: –float reálné číslo s jednoduchou přesností –double reálné číslo s dvojitou přesností –long double Jazyk C nepředepisuje, jaké velikosti mají být pro jednotlivé reálné typy použity
23
25/04/201523 Reálné typy (4) Musí platit: –hodnoty typu float jsou podmnožinou hodnot typu double –hodnoty typu double jsou podmnožinou hod- not typu long double Hlavičkový soubor float.h definuje poj- menované konstanty dokumentující charak- teristiku jednotlivých reálných typů
24
25/04/201524 Reálné typy (5) Označení těchto konstant má následující tvar: –začíná zápisem specifikujícím reálný typ: FLT_ pro typ float DBL_ pro typ double LDBL_ pro typ long double –pokračuje zápisem udávajícím konkrétní charak- teristiku, např.: EPSILON minimální x > 0.0 takové, že 1.0+x != 1.0 MIN minimální normalizované kladné číslo MAX maximální reprezentovatelné konečné číslo
25
25/04/201525 Reálné typy (6) Pro běžnou reprezentaci reálných čísel danou standardem ANSI/IEEE 754 – 1985 platí (uvedené hodnoty jsou zaokrouhlené): FLT_EPSILON FLT_MIN FLT_MAX DBL_EPSILON DBL_MIN DBL_MAX LDBL_EPSILON LDBL_MIN LDBL_MAX 1.19209290E–007 1.17549435E–038 3.40282347E+038 2.2204460492503131E–016 2.2250738585072014E–308 1.7976931348623157E+308 1.0842021724855044E–019 3.3621031431120935E–4932 1.1897314953572318E+4932 4 B 8 B 12 B
26
25/04/201526 Poznámka – vstup/výstup (1) Při zobrazování hodnot reálných typů pomocí funkce printf se používá: –pro hodnoty typu float nebo double specifi- kátor f, e, E, g nebo G –pro hodnoty typu long double modifikátor délky L následovaný příslušným specifikátorem ( f, e, E, g nebo G ) Lf, Le, LE, Lg nebo LG
27
25/04/201527 Poznámka – vstup/výstup (2) Pro načítání hodnot reálných typů pomocí funkce scanf se používá: –pro hodnoty typu float operace f, e, g –pro hodnoty typu double modifikátor velikosti l následovaný operací f, e, g ( lf, le, lg ) –pro hodnoty typu long double modifikátor velikosti L následovaný operací f, e, g ( Lf, Le, Lg )
28
25/04/201528 Knihovní funkce (1) Hlavičkový soubor math.h poskytuje konstanty (typu double ): M_E hodnota e (Eulerova čísla) M_LOG2E hodnota log 2 e M_LOG10E hodnota log e M_LN2 hodnota ln 2 M_LN10 hodnota ln 10 M_PI hodnota M_PI_2 hodnota /2 M_PI_4 hodnota /4 M_1_PI hodnota 1/
29
25/04/201529 Knihovní funkce (2) M_2_PI hodnota 2/ M_2_SQRTPI hodnota 2/ 1/2 M_SQRT2 hodnota 2 1/2 M_SQRT1_2 hodnota 1/2 1/2 –funkce, např.: goniometrické (argument musí být vždy v radiánech): –double sin(double x); sin x –double cos(double x); cos x –double tan(double x); tg x cyklometrické (výsledek je vždy v radiánech): –double asin(double x); arcsin x –double acos(double x); arccos x –double atan(double x); arctg x
30
25/04/201530 Knihovní funkce (3) hyperbolické: –double sinh(double x); sinh x –double cosh(double x); cosh x –double tanh(double x); tgh x hyperbolometrické: –double asinh(double x); arcsinh x –double acosh(double x); arccosh x –double atanh(double x); arctgh x logaritmické: –double log(double x); ln x –double log10(double x); log x –double logb(double x); log 2 x
31
25/04/201531 Knihovní funkce (4) další: –double exp(double x); e x –double fabs(double x); |x| –double sqrt(double x); x 1/2 –double cbrt(double x); x 1/3 –double pow(double x, double y); x y –double ceil(double x); nejmenší celočíselná hodnota, která není menší než x –double floor(double x); největší celočíselná hodnota, která není větší než x –double fmod(double x, double y); zbytek po dělení čísla x číslem y –double rint(double x); zaokrouhlení čísla x
32
25/04/201532 Knihovní funkce (5) Poznámky: –jestliže při použití výše uvedených funkcí dojde k chybě, tak se nastaví hodnota proměnné errno na hodnotu různou od nuly –hodnota errno rovna: EDOM značí, že argument funkce je mimo její definiční obor ERANGE značí, že výsledek je příliš velký nebo příliš malý, tj. nelze jej reprezentovat typem, který funkce vrací –konstanty EDOM a ERANGE jsou definovány v hlavičkovém souboru errno.h
33
25/04/201533 Knihovní funkce (6) –pokud je zapotřebí testovat hodnotu errno, pak by před voláním funkce měla být proměnná errno nastavena na hodnotu 0
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.