+ All Categories
Home > Documents > Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace...

Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace...

Date post: 04-May-2020
Category:
Upload: others
View: 7 times
Download: 0 times
Share this document with a friend
45
České vysoké učení technické Fakulta elektrotechnická Algoritmizace a programování Ver.1.10 Jazyk C – výrazy J. Zděnek 2015
Transcript
Page 1: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

České vysoké učení technické Fakulta elektrotechnická

Algoritmizace a programování

Ver.1.10

Jazyk C – výrazy

J. Zděnek 2015

Page 2: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 2

Struktura programu (1)

Program v C se skládá z následujících sou částí:

• Příkazy preprocesoru (Preprocessor commands)

• Definice typů (type definitions)

• Prototypy funkcí (function prototypes) kde je uvedena deklarace:

• Jména funkce• Vstupních parametrů

• Návratové hodnoty funkce

• Proměnné (variables)

• Funkce (functions) (v C je procedura funkce bez návratové hodnoty)

Page 3: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 3

Struktura programu (2)

Funkce v C mají tento tvar:

• Každý program musí obsahovat právě jednu funkci main()

• Všechny funkce (včetně main()) mají jednotný formát:

typ_navrat_hodnoty jmeno_fce (parametry_fce){lokalni promenneprikazy

}

• Uvnitř funkce nelze definovat lokální funkce (definice funkci nesmí být vnořené)

• Na formátování zdrojového textu překladači nezáleží. Formátování zlepšujeautorovi (i ostatním) čitelnost a potlačuje chyby.

Page 4: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 4

Model kompilace (1)

Preprocessor

Compiler

Assembler

Linker

Source code

Header

Source code

Libraries

Executable code

Source codeAssembly code

Object codesoubor5.lib

soubor1.c

soubor2.h

soubor3.c

1)

2)

3)

4)

Zdroj.kód C

Spustitelný kód

Zdroj.kód ASM

Knihovny

soubor4.asm

Page 5: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 5

Model kompilace (2)

Vytvo ření spustitelného kódu (viz obr):• 1) Preprocesor:

• Čte zdrojový kód v C

• Odstraní komentáře

• Upraví zdrojový text podle direktiv preprocesoru (řádky začínající #)• Vloží do textu obsah jiného souboru #include ….

• Odebere text vymezený direktivami podmíněného překladu

• Expanduje makra

• 2) Překladač C:

• Čte výstup z preprocesoru • Kontroluje syntaktickou správnost textu

• Hlásí chyby a varování

• Generuje text v assembleru (když nejsou chyby)

Page 6: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 6

Model kompilace (3)

Vytvo ření spustitelného kódu (viz obr):• 3) Assembler:

• Čte výstup z překladače C

• Generuje relokovatelný object kód (kód s nevyřešenými odkazy mezi moduly)

• Přeloží případné moduly zapsané přímo v assembleru (mix programovacích jazyků)

• 4) Linker (spojovací program):

• Čte object kód všech zůčastněných modulů programu

• Připojí knihovní object moduly (přeložené dříve nebo dodané),• Vyřeší odkazy mezi moduly

• Generuje spustitelný kód (zjednodušené)

Page 7: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 7

Soubor platných znaků (ASCII) (1)

C - základní soubor znak ů:

• A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

• a b c d e f g h i j k l m h o p q r s t u v x y z

• 0 1 2 3 4 5 6 7 8 9

• ! “ # % & ‘ ( ) * + , - . / : ; < = > ? [ \ ] ^ ? _ { | } ~

• Oddělovače (whitespace characters)space, horizontal tab, vertical tab, newline, form feed

• \0 - null char (koncový znak řetězce)

Page 8: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 8

Soubor platných znaků (ASCII) (2)

C - základní soubor znak ů (pokra č.):• Řídicí znaky pro řízení výstupních zařízení (escape sequences)

C - ostatní znaky:• Mohou se použít v komentářích, řetězcích a znakových konstantách

h…=šestnáctkové

číslice (hex dig.)

\xh…

( př: \x1008 )

Horizontal tab\t

Vertical tab\v

o=osmičkové

číslice (octal dig)

\o \oo \ooo

( př: \741 )

Carriage return\r

Znak \\\Newline \n

Znak ?\?Form feed\f

Znak “\”Backspace\b

Znak ‘\’Beep (pípnutí)\a

VýstupEscape sequenceVýstupEscape sequence

Page 9: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 9

Identifikátory

C - pravidla pro volbu identifikátor ů:• Obsahuje A,..,Y,a,..,z,0,..,9 a znak _ (underscore) • První znak není číslice

• Rozlišují se velká a malá písmena (case sensitive)

• Délka identifikátoru není omezena, ale pouze 31 prvních znaků je významných (může se lišit podle implementace)

C - rezervovaná slova (keywords):• Musí být zapsaná malými písmeny

void

unsigned

union

typedef

switch

struct

staticlongexterncontinue

sizeofintenumconst

signedifelsechar

shortgotodoublecase

whilereturnfordobreak

volatileregisterfloatdefaultauto

Page 10: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 10

Datové typy

• Při návrhu algoritmů a psaní programů ve vyšších programovacích jazycích abstrahujeme od binární podoby paměti počítače

• S daty pracujeme jako s hodnotami různých datových typů, které jsou uloženy v datových objektech

• Datový typ (zkráceně jen typ) specifikuje:• množinu hodnot (+ reprezentace)

• množinu operací, které lze s hodnotami daného typu provádět• Příklad typu: celočíselný typ int v jazyku C:

• množinou hodnot jsou celá čísla (interval je závislý na implementaci)

• množinu operací tvoří

• aritmetické operace +, -, *, /, jejichž výsledkem je hodnota typu int• relační operace ==, !=, >, >=, <, <=, jejichž výsledkem je logická

hodnota. V jazyce C není zavedena logický typ proměnné. Logický stav se vyhodnocuje dle hodnoty číselné proměnné kde:

= 0 znamená "false", ≠ 0 znamená "true"

Page 11: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 11

Reprezentace dat v počítači

• bit (binary digit – dvojková číslice; angl. bit – drobek, kousek)

• základní a nejmenší jednotky informace • nabývá hodnot 0 nebo 1

• byte (též bajt, česky - slabika) – uspořádaná osmice bitů

• Násobky

• 1 kB = 1 000 bajtů (dekadický kilobajt, malé „k“)

• 1 KB = 1 024 bajtů = 210 (binární kilobajt, velké „K“)

• 1 MB = 1 048 576 bajtů = 220

• 1 GB = 1 073 741 824 bajtů = 230

0 1 1 0 0 1 1 1

Page 12: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 12

Reprezentace celých čísel

• Číselné soustavy - polyadické

• Desítková soustava138,24 = 1*102+3*101+8*100+2*10-1+4*10-2

=1*100+3*10+8*1+2*0,1+4*0,01

• Dvojková soustava11010,01b = 1*24+1*23+0*22+1*21+0*20+0*2-1+1*2-2 =

1*16+1*8+0*4+1*2+0*1+0*1/2+1*1/4= 26,25

• Šestnáctková soustava (hexadecimal numeral system)• a = „0“, „1“, „2“,… „9“, „A“, „B“,… „F“; z = 16• Př: 07Dh = 0*162 + 7*161 + D*160 = 0 + 112 + 13 = 125

Page 13: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 13

Reprezentace čísel v počítači

• Celá kladná čísla – přímý binární kód

• Př: 125d = 0*27+1*26+1*25+1*24+1*23+1*22+0*21+1*20 = 01111101b

= 0 + 64 + 32 + 16 + 8 + 4 + 0 + 1

• Celá záporná čísla – dvojkový doplněk (two’s complement)• Př: -125d = 10000011b

Výpočet:

Kladné číslo: x = +125d = 0111 1101b

-------------------------------

NOT x = 1000 0010b (jednotkový doplněk)

+1--------------------------------

Záporné číslo: -x = -125d = 1000 0011b (dvojkový doplněk)

znaménkový bitvelikost čísla (není to přímý binární kód!)

Page 14: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 14

Nepřesnost v zobrazení reálných čísel

• Pokusme se v dekadické soustavě zapsat číslo 1/3 (jedna třetina)• 0,3• přesněji 0,33• lépe 0,333• ...• 0,333333333333333333333333333333333333

• Jelikož máme omezený paměťový prostor, nikdy neuložíme číslo 1/3 přesně (Jak by číslo 1/3 vypadalo v trojkové soustavě?)

0*31 + 0*30 + 1*3-1 = (0,1)3

Page 15: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 15

Nepřesnost v zobrazení reálných čísel

Reálná čísla X se zobrazují ve tvaru:X= mantisa * základ exponent

Nepřesnosti způsobují1. Iracionální čísla ( e , π, ,…. )2. Čísla, jež mají v dané soustavě periodický rozvoj (1/3 ve dvojkové

či dekadické soustavě, 1/10 ve dvojkové)3. Čísla, která mají příliš dlouhý zápis

double (celkem 64 bit ů)

• 1 bit znaménko – dvě možnosti, +,-

• 11 bitů exponent – 2048 možností

• 52 bitů – 4 503 599 627 370 496 možností, tedy asi 4,5 biliardy- není možné v typu double přesně uložit čísla se zápisem delším než 52 bitů!

2

exponent mantisa

Page 16: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 16

Model reprezentace reálných čísel

Reálná čísla se zobrazují jako aproximace daná rozsahem paměťového místa vyhrazeného pro číslo.

Reálná čísla se zobrazují ve tvaru:X = mantisa*základ exponent = m*z exponent

Mantisa musí být normalizována:0,1 <= m < 1, důvod: jednoznačnost zobrazení

Model:• délka mantisy 3 pozice + znaménko• délka exponentu 2 pozice + znaménko

Příklad:X = 77.5 = +0.775*z+02

• lze zakódovat znaménko “+” = 0,” –” = 1• z je 10 (16, 2,..)

+|775+|02

0|775 0|02

Page 17: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 17

Model reprezentace reálných čísel

• Maximální zobrazitelné kladné číslo • Minimální zobrazitelné kladné číslo• Maximální zobrazitelné záporné číslo (v absolutní hodnotě)• Minimální zobrazitelné záporné číslo (v absolutní hodnotě)• Nula• Jak je to se zobrazitelnými hodnotami „okolo nuly“,• Jak je to se „sousedy“ aproximací?

-|999 +|99

+|000 ?|??

0.000z??

0.100z-99

0.101z-99

-0.100z-99

-0.101z-99

0.999z 99-0.999z 99

+|999+|99

+|100 -|99

-|100 -|99

0

Page 18: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 18

Model reprezentace reálných čísel

• Jaká je vzdálenost dvou aproximací??• To závisí na hodnotě!!!

• Aproximace reálných čísel:• nejsou na číselné ose rozložené rovnoměrně!!

0.000z??

0.100z-99 0.101z-99 0.100z12

0.101z12

0.999z 99

NULA

+MAXIMUM

NULA +MAXIMUM

Page 19: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 19

Reálná čísla v C (typ double)

• Reálná čísla se zobrazují ve tvaru:X= mantisa*základ exponent = m*z exponent

• V C jsou reálná čísla reprezentována typem double na 64 bitů,

norma IEEE 754

znaménkový bit (s), exponent, mantisa

• nejmenší čísla v normalizovaném tvaru (v abs. hodnotě) ±2−1022 ≈ ±2.2250738585072020 × 10−308

• největší čísla±(1-(1/2)53)21024 ≈ ±1.7976931348623157 × 10308

Page 20: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 20

Datové typy (1)

Celočíselné datové typy:

• Velikost celočíselných typů určená implementací

• Vždy ale platí (v byte): char <= short <= int <= long

• Typ boolean není (až ANSI C99), = 0 ->false, != 0 -> true

Celá čísla-32.768 až +32.7672short

Kladná celá čísla0 až 4.294.967.2954unsigned long

Velká celá čísla-2.147.483.648 až +2.147.483.6474long

Kladná celá čísla0 až 65.5352unsigned short

Kladná celá čísla0 až 65.535 nebo0 až 4.294.967.295

2 nebo 4unsigned int

Celá čísla-32.768 až +32.767 nebo-2.147.483.648 až +2.147.483.647

2 nebo 4int

Malá čísla-128 až +1271signed char

Malá čísla0 až 2551unsigned char

Znaky-128 až +127 nebo 0 až 2551char

PoužitíRozsahVelikost [byte]Typ

Page 21: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 21

Datové typy (2)

C - reálná čísla (necelo číselné datové typy):• Velikost reálných čísel určená implementací• Většina překladačů se řídí standardem IEEE-754-1985, potom

jsou rozsahy reálných čísel dány následující tabulkou:

C - typ void:• void značí prázdnou hodnotu nebo proměnnou bez typu (jen ukazatelé)

• void funkce1 (….) - fukce bez návratové hodnoty (procedura)

• int funkce2 (void) - funkce bez vstupních parametrů• void *ptr; - ukazatel bez určeného typu (viz dále)

19 desítkových číslic3.4E-4932 až 1.1E+493210long double

15 desítkových číslic2.3E-308 až 1.7E+3088double

6 desítkových číslic1.2E-38 až 3.4E+384float

PřesnostRozsah (uveden pro kladná č.)Velikost [byte]Typ

Page 22: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 22

Konstanty (1)

6 typů konstant:

• Celočíselné (integer constants)

• Reálné (floating constants)

• Znakové (character constants)

• Řetězcové (literal constants) (literály)

• Výčtové (enumeration constants) (pojmenované prvky množiny)

• Symbolické (#define MAX 300)

Page 23: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 23

Konstanty - celočíselné (2)

Formát celo číselné konstanty:• Desítkový - nezačíná číslicí 0 (nula), př: 1024• Osmičkový - začíná číslicí 0 (nula), př: 012

• Šestnáctkový - začíná znaky 0x nebo 0X (nula x), př: 0x7F8A

• číslice a,..,f (A,..,F) mohou být velká i malá pismenaTyp celo číselné konstanty:• Není-li určen explicitně, přiřadí se nejbližší dostatečně veliký typ

• Desítkové konst. - int, long, unsigned long• Šestnáctkové a osmičkové - int, unsigned int, long, unsigned long

• Určí se explicitně znaky U nebo u (unsigned), L nebo l (long) jinak int

unsigned long0x1BUL0333ul27UL

long0x10L020L16L

unsigned int0xAU012U10U

int0x7FFF07777732767

int0xF01715

TypŠestnáctkov ěOsmičkověDesítkov ě

Page 24: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 24

Konstanty - reálné (3)

Formát reálné konstanty:• S řádovou tečkou př: 41.9• Mantisa a exponent př: 5.67E-3 // 5.67*10-3

nebo rovněž 5.67e-3

Typ reálné konstanty:• Není-li určen explicitně, pak je - double

• Určí se explicitně znaky• F nebo f - float

• L nebo l - long double

• V tabulce jsou všechny konstanty typu double

.4E-50.4e-54E-60.000004

0.37e63.7E+537e+4370000.0

12e0.12E212.012.

519E-20.0519e+20.519E15.19

Page 25: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 25

Konstanty - znakové (4)

Formát znakové konstanty :• Jeden nebo více znaků v jednoduchých apostrofech

• př: ‘B’, ‘g’, ‘ab’, ’9’

Hodnota znakové konstanty :• Jednoznaková konstanta má hodnotu odpovídajícího kódu znaku

• př: v ASCII kódu ‘0’ ~= 48, ‘A’ ~=65

• Víceznaková konstanta - hodnota závisí na implementaci překladače C

Typ znakové konstanty:• Znaková konstanta je typu int

Pozn:• Řídicí znaky (escape sequences) mohou tvořit znakové konstanty

• př: ‘\n’

Page 26: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 26

Konstanty - řetězcové (literály) (5)

Formát řetězcové konstanty (literálu) :• Posloupnost znaků a řídicích znaků (escape sequences)

uzavřená v uvozovkách

• př: “Já jsem řetězcová konstanta ! \n”Pozn:• Řetězcové konstanty oddělené pouze oddělovači (whitespace characters)

jsou sloučeny do konstanty jediné.• př: “Já jsem” “řetězcová konstanta ! \n”

se sloučí do “Já jsem řetězcová konstanta ! \n”

Typ řetězcové konstanty:• Řetězcová konstanta je uložená v poli typu char (array of char) a je

zakončená znakem ‘\0’

• př: “Nazdar” se uloží v poli typu char takto:

‘\0’‘r’‘a’‘d’‘z’‘a’‘N’

Page 27: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 27

Konstanty - výčtové (enum type) (6)

Formát vý čtové konstanty :• enum { CERVENA, MODRA, BILA, CERNA};

• pak CERVENA=0 a každý další prvek má hodnotu o jedničku vyšší

• enum { MALY=5, VETSI, VELKY, NEJVETSI }• pak MALY=5, VETSI=6 a každý další prvek má hodnotu o jedničku vyšší

Typ vý čtové konstanty:• Výčtová konstanta je typu int

Page 28: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 28

Konstanty - symbolické #define (7)

Formát symbolické konstanty #define:• Konstanta se založí příkazem preprocessoru #define

(je to makro bez parametrů, každé #define musí být na samostatné řádku)

př:

#define CERVENA 0 /* Zde muze byt komentar */#define MODRA 1 / /Je zvykem jména konstant psát velkými písmeny

#define BILA 2

• Hodnotu konstanty je možné vyjádřit konstantním výrazem

př:

#define MAX_1 (100*5)-12

• Symbolické konstanty mohou být vnořené

př:#define MAX_2 MAX_1+30

Page 29: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 29

Komentář

C používá dva zp ůsoby ozna čení komentá ře:• /* Toto je komentář */

• /* Toto je rovněž komentář

rozdělený na několik řádků*/

• // Toto je též komentář až do konce řádku

• /* Komentář nesmí být vnořený do jiného komentáře

• /* to je chybný zápis komentáře */• */

• Preprocesor nahradí každý komentář jednou mezerou• // ….. tento způsob některé překladače nepodporují

Page 30: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 30

Proměnné a přiřazení

• Proměnná je datový objekt, který je označen jménem a je v něm uložena hodnota nějakého typu, která se může měnit

• V jazyku C zavedeme výše uvedenou proměnnou deklaracíint alfa = 0;

• Hodnotu proměnné lze změnit přiřazovacím příkazem

alfa = 37;

0alfa

37alfa

0alfa

jméno proměnné datový objekt

hodnota proměnné

Page 31: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 31

Deklarace proměnných

• Proměnné se zavádějí deklaracemi

• Příklady deklarací proměnných:int i; // deklarace prom ěnné i typu int

double x; // deklarace prom ěnné x typu double

• Proměnná deklarovaná uvnitř funkce (lokální proměnná) nemá deklaracídefinovanou hodnotu

• Deklaraci proměnné lze doplnit o inicializaci proměnné:int x = 10; // deklarovaná prom ěnná má hodnotu 10

• Deklarací lze zavést několik proměnných stejného typu:int x, z;

Page 32: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 32A0B36PRI „PROGRAMOVÁNÍ“ 02 32

Přiřazovací příkaz

• Slouží pro přiřazení hodnoty proměnné

• Tvar přiřazovacího příkazu:<proměnná> = <výraz>;

• Příklad:x = y + z;

proměnné x se přiřadí součet hodnot proměnných y a zx = x + 1;

hodnota proměnné x se zvětší o 1

• Příklady přiřazovacích příkazů:int i; double d; char c

i = 14;

d = 3.14;

c = 'A';

Page 33: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 33A0B36PRI „PROGRAMOVÁNÍ“ 02 33

Přiřazovací příkaz

• Přířazovací operátory:

<proměnná> = <proměnná> <OP> <výraz> ~ <proměnná> <OP>= <výraz>

Př.:j += 5; ~ j = j + 5;

• přiřazení je výraz !!!:Př.:int x, y;

x = 7; // má hodnotu 7 a lze tedy op ět p ři řadit!!

y = x = x + 6;// vyhodnotí se jako y = (x = (x + 6));

Page 34: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 34A0B36PRI „PROGRAMOVÁNÍ“ 02 34

Příkaz výstupu - printf()

• printf("Cislo Pi = %6.3f \n ", Math.PI);

Výstup na obrazovku: Cislo Pi = 3.142

• Specifikace formátu %[$indexParametru][modifikátor][ší řka][.p řesnost]konverze

• konverze - povinný parametr• typ celé číslo d,o,x - dekadicky, oktalově a hexadecimálně• typ double f je desetinný zápis; e,E vědecký s exponentem

• šířka - počet sázených míst, zarovnání vpravo

• přesnost - počet desetinných míst

• modifikátor - v závislosti na typu konverze určuje další vlastnosti, například pro konverzi f (typ double)• symbol + určuje, že má být vždy sázeno znaménko,• symbol - určuje zarovnání vlevo, • symbol 0 doplnění čísla zleva nulami.

• \n přechod na další řádek

• a další…

Page 35: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 35

Příkaz vstupu – scanf()

• V dalších příkladech budeme potřebovat příkazy pro vstup číselných dat zadaných na klávesnici

• Použijeme standardní funkce scanf()

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char** argv) {

int pocet;

scanf("%d", &pocet);

printf("Pocet = %d", pocet);

}

• Ve funkci scanf() je nutné uvést očekávaný formát vstup (zde %d znamenáceločíselný formát a proměnnou do které se má hodnota z klávesnice uložit. Pozor před hodnotou musí být znak & (znamená to volání odkazem viz dalšípřednášky)

Page 36: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 36

Typové konverze

• Typová konverze je operace, která hodnotu nějakého typu převede na hodnotu jiného typu, důvod jiná reprezentace čísel

• Typová konverze může být implicitní (vyvolá se automaticky) nebo explicitní(v programu je třeba ji explicitně předepsat)

• Konverze typu int na double je v jazyku C implicitní:

• kde se očekává hodnota typu double , může být uvedena hodnota typu int, která se automaticky převede na hodnotu typu double

• Příklad:double x; int i = 1;x = i; //hodnota 1 typu int se automaticky p řevede

//na hodnotu 1.0 typu double

• Převod hodnoty typu double na int (odseknutím necelé části) je třeba explicitně předepsat

• Příklad:double x = 1.2; int i;i = (int)x; //hodnota 1.2 typu double se odseknutím

//necelé části p řevede na hodnotu 1 typu int

Page 37: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 37

Výrazy• Výraz předepisuje výpočet hodnoty určitého typu• Příklad výrazu: {14.6 + sin(3.14)} * a100

• Výraz může obsahovat:

• proměnné• konstanty

• volání funkcí

• binární operátory• unární operátory

• závorky

• Pořadí operací předepsaných výrazem je dáno:• prioritou operátorů

• asociativitou operátorů

• Příklad:výraz pořadí operací zdůvodněníx + y * z x + (y * z) * má vyšší prioritu nežx + y + z x + y) + z + je asociativní zleva

Page 38: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 38

Aritmetické operátory

• Pro operandy typu int a double budeme požívat tyto aritmetické operátory (seřazeno sestupně podle priority):• unární – (změna znaménka)

• binární *, /, % (násobení, dělení a zbytek po dělení)• binární + a – (sčítání a odčítání)

• Jsou-li oba operandy stejného typu, výsledek aritmetické operace je téhožtypu

• Jsou-li operandy různého typu, operand typu int se implicitní konverzípřevede na hodnotu typu double a výsledkem operace je hodnota typu double

• Výsledkem dělení operandů typu int je celá část podílunapř. 7/3 je 2 -7/3 je -2

• Pro zbytek po dělení platí: x % y = x – ( x / y) * y

např: 7%3 je 1; -7%3 je -1; 7%-3 je 1; -7%-3 je -1

• speciální inkrementační a dekrementační operátory:++x, x++, --x, x--

Page 39: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 39

Relační operátory• Hodnoty všech jednoduchých typů jsou uspořádané a lze je porovnávat

relačními operátory

• Budeme používat tyto relační operátory (priorita je menší než priorita aritmetických operátorů):• >, <, >=, <= (větší než, menší než, větší nebo rovno, menší nebo

rovno)• ==, != (rovná se, nerovná se)

• Výsledek relační operace je (true , když relace označená operátorem platí, false v opačném případě)(true se v "C" hodnotí dle výsledku ≠ 0 a false dle výsledku = 0. V "C" není typ logické proměnné.

• Jestliže při porovnávání číselných hodnot jsou operandy různého typu, operand typu int se implicitní konverzí převede na hodnotu typu double

• Relační operátory mají menší prioritu, než aritmetické operátory

Page 40: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 40

Logické operátory

• Logické operátory jsou unární a binární• unární ! (negace)• binární && resp. & (konjunkce, logický součin)• binární || resp. | (disjunkce, nevýhradní logický součet, OR)• binární ^ (disjunkce, výhradní logický součet, XOR)

x y !x x && y x || y x ^ yfalse false true false false falsefalse true true false true truetrue false false false true truetrue true false true true false

• Negace má stejnou prioritu, jako změna znaménka, logický součin má nižší prioritu nežrelační operátory

• Operace && a || se vyhodnocují zkráceným způsobem, tj. druhý operand se nevyhodnocuje, jestliže lze výsledek určit již z prvního operandu

Page 41: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 41

Standardní knihovny (1)

Standardní knihovny (ANSI C library – Standard Library ) :• Vlastní jazyk C neobsahuje žádné prost ředky pro vstup a výstup dat, složit ější

matematické operace, práci s řetězci, t řídění, blokové p řesuny dat v pam ěti, práci s datem a časem, komunikaci s opera čním systémem,správu pam ěti pro dynamické p řidělování, vyhodnocení b ěhových chyb (run-time errors) apod.

• Tyto a další funkce jsou však obsaženy ve standardních knihovnách (ANSI C Library) dodávaných s p řekladači jazyka C.

• Uživatel dostává k dispozici p řeložený kód knihoven (který se p řipojuje – linkuje k uživatelovu kódu) a hlavi čkové soubory (headers) s prototypy funkcí, novými typy, makry a konstantami

• Hlavi čkové soubory (obdoba interface v Jav ě) se připojují k uživatelovu kódu direktivou preprocesoru #include <…>.

• Je zvykem , že hlavi čkové soubory mají rozší ření *.h , např. stdio.h

Page 42: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 42

Standardní knihovny (2)

Standardní knihovny (ANSI C library – Standard Library ) pokra č:• Standardní knihovny jsou rozd ěleny do následujících částí:

(uvedeno pro ANSI C95):

• Vstup a výstup (formátovaný i neformátovaný)• stdin.h

• Rozsahy čísel jednotlivých typ ů

• limits.h

• Matematické funkce• stdlib.h• math.h

• Zpracování b ěhových chyb (run-time errors)• errno.h• assert.h

Page 43: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 43

Standardní knihovny (3)

Standardní knihovny (ANSI C library – Standard Library ) pokra č:• Standardní knihovny jsou rozd ěleny do následujících částí:

(uvedeno pro ANSI C95) pokra č:

• Klasifikace znak ů (typ char)• ctype.h

• Práce s řetězci (string handling)• string.h

• Internacionalizace (adaptace pro r ůzné jazykové mutace)• locale.h

• Vyhledávání a t řídění• stdlib.h

• Blokové p řenosy dat v pam ěti• string.h

Page 44: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

A8B14ADP Algoritmizace a programovaní -Jazyk C - výr azy 44

Standardní knihovny (4)

Standardní knihovny (ANSI C library – Standard Library ) pokra č:• Standardní knihovny jsou rozd ěleny do následujících částí:

(uvedeno pro ANSI C95) pokra č:

• Správa pam ěti (Dynamic Memory Management)• stdlib.h

• Datum a čas• time.h

• Komunikace s opera čním systémem• stdlib.h• signal.h

• Nelokální skok (lokální je sou částí jazyka, viz goto)• setjump.h

Page 45: Jazyk C – výrazymotor.feld.cvut.cz/sites/default/files/predmety/A8... · A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8 Soubor platných znak ů(ASCII) (2) C - základní

České vysoké učení technické Fakulta elektrotechnická

Algoritmizace a programování

Jazyk C – Jazyk C – výrazy

KONEC


Recommended