Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Programování v jazyce C++
Operátory, řídicí struktury, pointery
2
Přiřazení Např. n = 123; Obecně: l-hodnota = výraz;
Přiřazení je výrazem. Příkazem se stává po přidání středníku. Návratovou hodnotou je přiřazovaná hodnota. Lze použít i vícenásobné přiřazení: x = z = y = 5;
3
Aritmetické operátory
Unární operátory +, -, Binární operátory +, -, *, %, / – může být celočíselné i klasické, Speciální unární operátory, ++, --, preinkrement / postinkrement (dekrement).
4
Logické operátory Není typ bool Unární: Binární:
! – negace Binární: && – konjunkce || – disjunkce Zkrácené vyhodnocování.
5
Relační operátory Řeší vztah mezi dvěma výrazy.
Výsledkem je logická hodnota. Binární: == – rovnost !=, >, <, >=, <= – nerovnost
6
Bitové operátory Pracují s operandy na úrovni bitů. Unární: Binární:
~ – bitová negace. Binární: & – bitový součin, | – bitový součet, ^ – nonekvivalence (XOR), <<, >> – bitový posun.
7
Další operátory () – závorky
+=, /=, %=, >>=, &=, ... – přiřazovací operátory a += b a = a + b, (typ) – přetypování, sizeof – velikost vyhrazené paměti, , – operátor čárky, ?: – podmíněný výraz.
8
Priorita operátorů Zdroj: Pavel Herout – Učebnice jazyka C
9
Větvení programu příkaz if syntaxe:
if (podmínka) příkaz; if (podmínka) příkaz1 else příkaz2; jsou-li příkazy if do sebe, váže se else vždy k nejbližšímu if. příkaz musí být vždy ukončen středníkem, zatímco blok nesmí.
10
Příklady použití if (a >= ’a’ && a <= ’z’)
if (a == 1) x if (a = 1) if (a) <=> if (a != 0) if (!a) <=> if (a == 0) if ((c = getchar()) >= ’A’) x if (c = getchar() >= ’A’)
11
Přepínač slouží k větvení programu více než dvěma směry,
příkaz switch, nelze psát prostý výčet hodnot, rozhodovaný výraz nemusí být int, každá větev je ukončena break, je podporována větev default, příkazy v každé větvi není třeba uzavírat do {}.
12
Použití přepínače switch (getchar()) { case ’a’: case ’b’: case ’c’: putchar (’1’); break; case ’d’: case ’e’: putchar (’3’); break; default: putchar (’4’); break; }
13
Dobré rady do života ;-)
raději než deset příkazů if s jednou rozhodovací proměnnou použijte jeden switch, jak se bude chovat přepínač bez příkazů break? default nemusí být na konci, ale pište ho tam, píšete-li příkazy pod sebe, odsazujte, příkaz break za poslední větví není nutný, ale píše se tam z konvence, pozor, break má i jinou funkci!!
14
while cyklus syntaxe: např.: testuje podmínku před průchodem cyklem,
while (podmínka) příkaz; např.: while (getchar() == ’ ’) i++; testuje podmínku před průchodem cyklem, nedokážeme říci, kolikrát proběhne, tělo cyklu může být i prázdné.
15
do – while cyklus syntaxe: např.: do příkaz while (podmínka);
do i++; while (getchar() == ’ ’);
16
for cyklus syntaxe: např. jednotlivé části lze vynechat, středníky ne!
for(inicializace;podmínka;iterace) příkaz; např. for (i = 1; i < 10; i++) ... jednotlivé části lze vynechat, středníky ne! v jednotlivých částech lze použít více příkazů, ty je pak nutné spojovat operátorem čárka, v rámci iterace může být proměnná měněna libovolným způsobem.
17
Sémantika for cyklu Mějme tento for cyklus:
for (i=1; i<10; i++) c += i; Lze jej nahradit tímto while cyklem: i = 1; while (i<10) { i++; }
18
Dobré rady do života ;-)
definovat řídící proměnnou v inicializační části cyklu lze pouze v jazyce C++, používejte pouze jednu řídící proměnnou, její hodnotu neměňte v těle, častá chyba – středník navíc: for (i = 1; i < 2; i++); x = x + i; lze použít i nekonečný cyklus: for ( ; ; )
19
Předčasné ukončení cyklu
běh cyklu můžeme ukončit i dříve, k tomu nám slouží dva příkazy: break – zcela ukončí běh cyklu, continue – ukončí aktuální průběh cyklu a pokračuje následujícím během téhož cyklu.
20
Pointery deklarace v C: datový typ svázaný s jiným typem,
int *p_a; datový typ svázaný s jiným typem, hodnotou pointeru je adresa, pointery lze nazývat dynamickými proměnnými, na jednom řádku lze definovat statické i dynamické proměnné stejného typu, * je dereferenční operátor, & je referenční operátor, nulový pointer označujeme NULL,
21
Operace s pointery I. int a, b, *p_a, *p_b; printf(”%d”, p_a);
*p_a = a; p_a = a;
22
Operace s pointery I. int a, b, *p_a, *p_b; printf(”%d”, p_a);
*p_a = a; p_a = a;
23
Operace s pointery II. int a, b, *p_a, *p_b; p_a = &a; &a = p_a;
int i, *p_i = &i; int i, *p_i; p_i = &i;
24
Operace s pointery II. int a, b, *p_a, *p_b; p_a = &a; &a = p_a;
int i, *p_i = &i; int i, *p_i; p_i = &i;
25
Operace s pointery II. int a, b, *p_a, *p_b; p_a = &a; &a = p_a;
int i, *p_i = &i; int i, *p_i; p_i = &i;
26
Operace s pointery II. int a, b, *p_a, *p_b; p_a = &a; &a = p_a;
int i, *p_i = &i; int i, *p_i; p_i = &i;
27
Zásady při práci s pointery
nikdy nepřiřazujeme adresu hodnotě a naopak, je slušné označovat pointery prefixem ’p_’, je třeba dát pozor, kdy použít operátor *, kdy operátor & a kdy identifikátor bez operátoru, je-li třeba používejte přetypování pointerů (int *), chcete-li funkci předat nějakou adresu, používejte právě pointery – simuluje se jimi předávání odkazem.
28
Statické pole deklarace v C:
int pole[10] = {1, 2, 3}; int pole[10]; int pole[] = {1, 2, 3}; int pole[]; velikost pole musí být známa v době překladu, statické protože jeho adresa je konstantní.
29
Přístup k jednotlivým položkám
položky jsou číslovány od nuly, maximální položka má tedy index N–1, kde N je velikost pole, sáhneme-li vedle, pod UNIXem program havaruje, Windows to mohou ustát, odkaz na n-tou položku: pole[n-1] , pole v C je pointer - ukazuje na první položku, na tu se lze též odkázat řetězcem *pole.
30
Pointerová aritmetika
pole je homogenní struktura, položky jsou uloženy bezprostředně za sebou, na první (s indexem 0) položku se můžeme odkázat pomocí *pole, n-tá položka je umístěna o právě n pozic dále, díky tomu se lze na něho odkázat takto: *(pole + n) (!= *pole + n) stejně lze provádět i rozdíl pointeru a čísla, porovnání pointerů a rozdíl pointerů.
31
Pointer jako parametr funkce
chceme-li, aby funkce změnila hodnotu proměnné, musíme parametry předat odkazem, jazyk C předávání odkazem nepodporuje, funkce tedy musí mít parametr pointer na daný typ, předáváme-li této funkci statickou proměnnou, musíme ji předat s operátorem &, příkladem takovéto funkce je scanf.
32
Preprocesor jazyka C je součástí překladače,
spouští se před vlastním překladem, zpracovává zdrojový text, vypustí kometáře, provádí záměnu textů, výstupem je opět textový soubor, nekontroluje syntaktickou správnost, příkazy uvozeny znakem ’#’.
33
Makra bez parametrů definovány pomocí příkazu #define,
výraz za #define je dále v textu nahrazen hodnotou uvedenou za ním, nutno oddělit mezerou (v uvozovkách se náhrada neprovede), je-li hodnota delší než 1 řádek, musí být na konci každého (kromě posledního) znak ’\’, konstanta platí do konce souboru, hodnota může obsahovat již definovanou konstantu.
34
Příklady #define MAX 100 #define PI 3.14 #define DVE_PI (2 * PI)
#define MOD % #define OR || #define SOUBOR ”soubor.txt” #define DL_TEXT toto je text,\ ktery se nevejde na jeden radek.
35
Makra s parametry tzv. in-line funkce,
jsou nahrazovány na úrovni zdrojového kódu, nižší režie (viz dále), definice: #define jmeno(arg1, ... argN) hodn, za jménem nesmí být mezera, celou hodnotu a jednotlivé argumenty je vhodné (někdy i nutné) ozávorkovat.
36
Příklady #define secti(a, b) a + b #define secti(a, b) ((a)+(b))
#define velke(c) c=>’A’ && c<=’Z’ #define velke(c) ((c)=>’A’ && (c)<=’Z’) printf (”%d”, secti(a, b)); if (velke(c))...
37
Předdefinovaná makra jsou definovány v souboru ctype.h příklady:
isalnum, isalpha, iscntrl, isgraph, isdigit, isxdigit, isspace, ispunct, islower, isupper, tolower, toupper.
38
Podmíněný překlad rozhoduje o tom, zda se daná část kódu přeloží či nepřeloží na základě hodnoty či existence makra, příklad: #if výraz část_1 #else část_2 #endif
39
Podmíněný překlad II testovat lze pouze hodnoty symbolických konstant, nikoliv proměnných, lze použít též operátor defined #if defined(A) <=> #ifdef(A) #if !defined(A) <=> #ifndef(A) strukturu direktivy #if lze ještě rozšířit o #elif lze použít, nechceme-li překládat část programu.
40
Další operátory #include <soubor> – vložení syst. souboru,
#include ”soubor” – vložení lokálního souboru, #undef – zruší definici makra, #error – vypíše chybovou hlášku během preprocesingu, # – převod argumentu na řetězec – dá do uvozovek, ## – argumenty oddělené tímto operátorem po rozvoji makra vytvoří jeden řetězec.
41
A to je pro dnešek vše Děkuji za pozornost
42
Použitá literatura Pavel Herout – Učebnice jazyka C,
Miroslav Virius – Od C k C++, Slajdy na předmět X36PJC z akademického roku 2008/2009 (Ladislav Vágner, Karel Müller), FEL ČVUT, Slajdy na předmět 36PJC z akademického roku 2004/2005 (Petr Matyáš), FEL ČVUT, Server
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.