49
IB001 – Úvod do programování skrze C RNDr. Jaroslav PELIKÁN, Ph.D. katedra počítačových systémů a komunikací Fakulta informatiky Masarykovy univerzity Botanická 68a, 602 00 BRNO kanc.: A209, : +420 – 549 495 751 E-mail: [email protected] http://www.fi.muni.cz/usr/pelikan

IB001 – Úvod do programování skrze C

  • Upload
    elvin

  • View
    43

  • Download
    2

Embed Size (px)

DESCRIPTION

IB001 – Úvod do programování skrze C. RNDr. Jaroslav PELIKÁN, Ph.D . katedra počítačových systémů a komunikací Fakulta informatiky Masarykovy univerzity Šumavská 15, 602 00 BRNO kanc.: G409,  : +420 – 54 9 495 751 E-mail: [email protected] http://www.fi.muni.cz/usr/pelikan. - PowerPoint PPT Presentation

Citation preview

Page 1: IB001 – Úvod do programování skrze  C

IB001 – Úvod do programování skrze C

RNDr. Jaroslav PELIKÁN, Ph.D.

katedra počítačových systémů a komunikacíFakulta informatiky Masarykovy univerzity

Botanická 68a, 602 00 BRNO

kanc.: A209, : +420 – 549 495 751E-mail: [email protected]

http://www.fi.muni.cz/usr/pelikan

Page 2: IB001 – Úvod do programování skrze  C

23-04-24 2

Cíl předmětu• Seznámit studenty se základními principy

používanými při řešení problémů na počítači• Předmět je vyučován s pomocí programova-

cího jazyka C• Na konci tohoto předmětu bude student scho-

pen:– navrhnout algoritmus řešící zadaný problém– zapsat algoritmus v programovacím jazyce C– provést odladění programu

Page 3: IB001 – Úvod do programování skrze  C

23-04-24 3

Organizace předmětu• 1 přednáška:

– 2 hodiny týdně• 20 cvičebních skupin:

– 2 hodiny týdně– skupiny IB001/01 a IB001/19 jsou určeny pro

pokročilé studenty• Zakončení předmětu:

– zkouška – zápočet

Page 4: IB001 – Úvod do programování skrze  C

23-04-24 4

Požadavky ke zkoušce (1)• Zápočet:

– získat minimálně 30 bodů ze cvičení– úspěšné napsání dvou průběžných písemek:

• probíhá v počítačové učebně• napsání programu (na počítači), který řeší zadaný

problém• čas na vypracování: u každé písemky cca 50 minut• maximální počet bodů:

– za 1. písemku: 25 bodů (nutno získat min. 12 bodů)– za 2. písemku: 35 bodů (nutno získat min. 18 bodů)

• hodnocení z průběžných písemek se započítává do výsledného (celkového) hodnocení zkoušky

Page 5: IB001 – Úvod do programování skrze  C

23-04-24 5

Požadavky ke zkoušce (2)– čtyři domácí úkoly (napsání čtyř programů):

• na odevzdání úkolu je jeden týden• na každý domácí úkol je jeden opravný termín

(další týden)• jestliže student na opravný termín odevzdá (opět)

program, ve kterém jsou chyby, pak se mu odečítají body:

– podle závažnosti chyb v rozmezí –1 až – 4 body– při neodevzdání domácího úkolu nebo odevzdání úplně

špatného domácího úkolu se odečítá – 6• odečítané body za chybné domácí úkoly se započítá-

vají do požadovaných 30 bodů na udělení zápočtu a do výsledného (celkového) hodnocení zkoušky

Page 6: IB001 – Úvod do programování skrze  C

23-04-24 6

Požadavky ke zkoušce (3)• poznámka:

– cvičící může zadat mimořádné domácí úkoly (max. 4)– umožňují studentům doplnit si bodovou ztrátu z chybných

domácích úkolů (nikoliv z průběžných písemek) – za takto vypracovaný domácí úkol může získat:

» 1 bod za vyhovující řešení» 0 bodů za nevyhovující řešení

– bodovou ztrátu z domácích úkolů si student může rovněž snížit svou aktivitou na cvičení:

» je možné, aby student díky své aktivitě získal během jednoho cvičení max. 0,5 bodu

– maximálně dvě neomluvené neúčasti na cvičení• Zápočet musí být zapsán na ISu nejpozději

12 hodin před začátkem závěrečné zkoušky

Page 7: IB001 – Úvod do programování skrze  C

23-04-24 7

Požadavky ke zkoušce (4)

• Poznámka:– v průběhu semestru je možné využít jednoho

opravného termínu průběžné písemky– opravný termín bude na konci výukového

období, popř. začátkem zkouškového období– v rámci opravného termínu je možné, aby si

student opravil bodové hodnocení z jedné své průběžné písemky

Page 8: IB001 – Úvod do programování skrze  C

23-04-24 8

Zkouška• Závěrečná zkouška probíhá pouze

písemnou formou (bez počítačů)• Čas na vypracování: 60 minut• Maximální počet bodů: 40 bodů• Výsledné hodnocení:

– dáno součtem bodů ze cvičení a závěrečné zkoušky:

A: 92 – 100 bodů D: 65 – 73 bodů B: 83 – 91 bodů E: 56 – 64 bodů C: 74 – 82 bodů F: méně než 56 bodů

Page 9: IB001 – Úvod do programování skrze  C

23-04-24 9

Literatura• Pelikán, Jaroslav: Prezentace k přednáškám

z předmětu IB001 Úvod do programování skrze C – http://www.fi.muni.cz/usr/pelikan

• Herout, Pavel: Učebnice jazyka C, KOPP, České Budějovice 1994

• Kernighan, Brian W. – Ritchie, Dennis M.: Programovací jazyk C, Computer Press, Brno 2006

• Harbison, Samuel P. – Steele, Guy L. Jr.: Referenční příručka jazyka C, SCIENCE 1996

Page 10: IB001 – Úvod do programování skrze  C

23-04-24 10

Programovací jazyk • Prostředek (soubor pravidel) pro zápis algo-

ritmů, které mohou být provedeny na počítači• Komunikační nástroj mezi programátorem

a počítačem• Zápis algoritmu ve zvoleném programovacím

jazyce se nazývá program• Příklady programovacích jazyků:

– C, C++, C#, Pascal, BASIC, Java, Prolog, Lisp

Page 11: IB001 – Úvod do programování skrze  C

23-04-24 11

Programovací jazyky – historie • Strojový kód • Jazyk symbolických instrukcí – Assembler

– vědeckotechnické výpočty• FORTRAN, COBOL, ALGOL

– vědeckotechnické výpočty– hromadné zpracování dat

• SIMULA, SIMSCRIPT, LISP• PL/1, ADA, Prolog, C/C++, C#, Pascal, Java

Page 12: IB001 – Úvod do programování skrze  C

23-04-24 12

Programovací jazyk C (1)• Univerzální programovací jazyk• Není specializován pro žádnou konkrétní oblast• Nejedná se o „jazyk vysoké úrovně“:

– pracuje přímo pouze se základními datovými typy (např. znaky, celá čísla, reálná čísla)

– neumožňuje přímo práci s řetězci a poli– neobsahuje přímo nástroje pro vstupy a výstupy– zmíněné akce (práce s řetězci, poli, vstupy a výstu-

py) je nutné provádět pomocí volání funkcí

Page 13: IB001 – Úvod do programování skrze  C

23-04-24 13

Programovací jazyk C (2)• Jeho obecnost jej dělají vhodnějším a efektiv-

nějším pro většinu úloh, než jiné jazyky• Jazyk C se vyznačuje:

– úspornými výrazy– standardizací řídících struktur, které vedou k vy-

tváření dobře strukturovaných a čitelných progra-mů

– moderními datovými strukturami– bohatou množinou operátorů

• Není vázán na konkrétní typ počítače ani na určitý operační systém

Page 14: IB001 – Úvod do programování skrze  C

23-04-24 14

Historie jazyka C (1)• 1969 – 1973:

– Dennis M. Ritchie, AT&T Bell Labs– počáteční vývoj jazyka C– předchůdci jazyka C: ALGOL, CPL, BCPL, B

• 1973:– většina zdrojového kódu operačního systému

UNIX byla přepsána do jazyka C• 1978:

– Dennis M. Ritchie a Brian W. Kernighan vydáva-jí knihu The C Programming Language (K&R)

Page 15: IB001 – Úvod do programování skrze  C

23-04-24 15

Historie jazyka C (2)– tato kniha sloužila jako první standard jazyka C– popsaná verze jazyka C bývá označována jako

K&R C• 1983:

– American National Standards Institute (ANSI) sestavuje komisi X3J11 s úkolem vytvořit stan-dardní specifikaci jazyka C

• 1989:– standard dokončen a schválen pod označením

ANSI X3.159-1989 „Programming Language C“– zmíněný standard bývá označován jako ANSI C,

Standard C nebo C89

Page 16: IB001 – Úvod do programování skrze  C

23-04-24 16

Historie jazyka C (3)• 1990:

– standard ANSI C (s drobnými změnami) byl při-jat institucí International Organization for Stan-dardization (ISO) jako ISO/IEC 9899:1990

– zmíněný standard se rovněž označuje jako C90• 1999:

– vydán dokument ISO 9899:1999 (nazývaný také C99), který byl v roce 2000 přijat i jako ANSI standard

• 2011:– vydán dokument ISO 9899:2011 (nazývaný také

C11)

Page 17: IB001 – Úvod do programování skrze  C

23-04-24 17

„Životopis“ programuEditor

*.c *.h

Preprocesor

Překladačcompiler

Objektovésoubory

*.o, *.obj

Systémovéknihovny

*.so, *.a, *.lib

Sestavovací programlinker

Spustitelný program*.exe

Hlavičkovésoubory*.h

Spuštění, laděníladící program – debugger

Zdrojový kód

Page 18: IB001 – Úvod do programování skrze  C

23-04-24 18

Preprocesor (1)• Program, který zpracovává (upravuje) vstupní

data tak, aby výstup mohl být dále zpracovaný jiným programem

• Často používán pro předzpracování zdrojové-ho kódu před vlastním překladem (kompilací)

• Preprocesor jazyka C:– pracuje na základě svých direktiv (příkazů) zapsa-

ných ve zdrojovém kódu– za direktivu preprocesoru je považován každý řá-

dek začínající znakem #

Page 19: IB001 – Úvod do programování skrze  C

23-04-24 19

Preprocesor (2)– za znakem # musí následovat název direktivy– mezi operace prováděné preprocesorem jazyka C

patří např.:• vložení hlavičkových souborů (#include)• rozvoj maker (#define)• odstranění částí zdrojového kódu, které (v závislosti na

vyhodnocených podmínkách) nemají být aktuálně pře-kládány – podmíněný překlad (#if, #else, #endif, #elif, #ifdef, #ifndef)

• případné odstranění komentářů– výsledkem práce preprocesoru jazyka C je opět

textový soubor

Page 20: IB001 – Úvod do programování skrze  C

23-04-24 20

Překladač – compiler• Program realizující překlad zdrojového sou-

boru (zpracovaného již preprocesorem) do objektového (relativního) kódu počítače

• Vzniká soubor *.o nebo *.obj• V objektovém kódu ještě nejsou známy adresy

proměnných a funkcí, které se nacházejí v knihovních modulech

Page 21: IB001 – Úvod do programování skrze  C

23-04-24 21

Sestavovací program – linker• Program provádějící propojení objektových

kódů s knihovními moduly• V průběhu sestavování jsou nalezeny dosud

neznámé adresy proměnných a funkcí a odpo-vídající knihovní moduly jsou připojeny k vý-slednému programu

• Výsledkem činnosti sestavovacího programu je spustitelný soubor ve strojovém kódu (*.exe), popř. knihovna, která bude později využívána jiným programem

Page 22: IB001 – Úvod do programování skrze  C

23-04-24 22

Ladící program – debugger • Program sloužící pro ladění (nalézání) chyb,

které nastávají při běhu programu• Umožňuje např.:

– postupné provádění programu po jednotlivých řádcích, tzv. krokování

– sledování hodnot, kterých nabývají použité pro-měnné

– přerušení běhu programu na předem definovaném řádku (vložení breakpointu) a následné zahájení krokování

Page 23: IB001 – Úvod do programování skrze  C

23-04-24 23

Programovací jazyk C v IB001 (1)• Vývojové prostředí Code::Blocks:

– zaměřené na jazyky C a C++– existují verze pro operační systémy MS Windows,

Linux a Mac OS X– podporuje využití různých překladačů, např.:

GCC/MinGW, MS Visual C++, Watcom, …– dovoluje spolupráci s debuggerem GDB– textový editor umožňuje např.:

• zvýrazňování syntaxe• dokončování kódu• skrývání částí kódu

Page 24: IB001 – Úvod do programování skrze  C

23-04-24 24

Programovací jazyk C v IB001 (2)– možnosti Code::Blocks lze dále rozšířit pomocí

zásuvných modulů – plug-ins– http://www.codeblocks.org/– http://www.codeblocks.org/downloads/26– codeblocks-13.12mingw-setup.exe (cca 98 MB)

• obsahuje i překladač GCC a debugger GDB z MingGW

• MinGW – Minimalist GNU for Windows:– distribuce poskytující sadu nástrojů vhodnou

pro vývoj aplikací pro MS Windows

Page 25: IB001 – Úvod do programování skrze  C

23-04-24 25

Základní pojmy (1)• Identifikátor:

– konečná posloupnost písmen (anglické abecedy), číslic a znaku podtržítko

– nesmí:• začínat číslicí• obsahovat mezeru• být shodný s klíčovým (rezervovaným) slovem

– název volíme mnemonicky– např.: teplota, tlak, x1, x2, …

Page 26: IB001 – Úvod do programování skrze  C

23-04-24 26

Základní pojmy (2)

• Klíčová (rezervovaná) slova:– slova mající v programovacím jazyce svůj

speciální význam– identifikátor nesmí být pojmenovaný stejně

jako klíčové slovo– neobsahují mezeru– např: while, if, else, do, switch, …

Page 27: IB001 – Úvod do programování skrze  C

23-04-24 27

Základní pojmy (3)• Řetězcový literál (řetězcová konstanta):

– posloupnost znaků uzavřená do uvozovek (”)– může obsahovat mezery a znaky národních abeced– může obsahovat řídící posloupnosti, které jsou

uvozené znakem \, např.:•\n přechod na nový řádek•\t horizontální tabulátor•\\ zpětné lomítko•\” uvozovky•\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

Page 28: IB001 – Úvod do programování skrze  C

23-04-24 28

Poznámka• Dva sousedící identifikátory, klíčová slova

nebo čísla musí být od sebe oddělena ales-poň jednou:– mezerou – tabulátorem– znakem konce řádku– komentářem (překladač jej nahrazuje mezerou)

• Přebytečné mezery, tabulátory a znaky kon-ce řádků jsou překladačem ignorovány

• Jazyk C rozlišuje velká a malá písmena (case sensitive)

Page 29: IB001 – Úvod do programování skrze  C

23-04-24 29

Komentáře• Poznámky, které jsou překladačem ignoro-

vány• Nemají žádný vliv na funkci programu• Slouží k lepší čitelnosti (lepšímu pochope-

ní) programu• Zapisují se:

– mezi znaky /*, */– za znaky //

• až ve standardu C99 nebo C++• za poznámku jsou považovány všechny znaky až do

konce řádku

Page 30: IB001 – Úvod do programování skrze  C

23-04-24 30

Program v jazyce C (1)• Na nejvyšší úrovni se skládá z:

– direktiv preprocesoru:• řádek začínající znakem #

– globálních deklarací a definic– funkcí

• Jedna z funkcí se vždy jmenuje main:– musí být v programu vždy uvedena– volána jako první po spuštění programu

Page 31: IB001 – Úvod do programování skrze  C

23-04-24 31

Program v jazyce C (2)• Funkce je tvořena:

– hlavičkou, která specifikuje: • viditelnost funkce vně souboru, ve kterém je defino-

vána• návratový typ – typ hodnoty, kterou funkce vrací• jméno funkce• seznam (typ a počet) formálních parametrů, pomocí

nichž funkce může komunikovat se svým okolím– tělem funkce, které obsahuje:

• lokální deklarace a definice• posloupnost příkazů, která bude po vyvolání funkce

provedena

Page 32: IB001 – Úvod do programování skrze  C

23-04-24 32

Program v jazyce C (3)• Poznámky:

– příkazy jsou prováděny postupně ve stejném pořadí, v jakém jsou zapsány

– všechny příkazy v jazyce C jsou ukončeny středníkem – středník je nedílnou součástí příkazu

– výjimku tvoří složený příkaz, který se střední-kem neukončuje

Page 33: IB001 – Úvod do programování skrze  C

23-04-24 33

Struktura programu v jazyce C (1)/* Vložení hlavičkových souborů */#include <soubor.h>/* Globální deklarace a definice */návratový_typ jmFunkce(seznam formálních parametrů)

{ /* Tělo funkce jmFunkce */ }

int main(seznam formálních parametrů){ /* Tělo funkce main */ }

Hlavička funkce

Page 34: IB001 – Úvod do programování skrze  C

23-04-24 34

Struktura programu v jazyce C (2)• #include <soubor.h>:

– direktiva preprocesoru– zabezpečí vložení hlavičkového souboru soubor.h do zdrojového kódu

– hlavičkové soubory mimo jiné popisují tzv. prototypy (deklarace) funkcí

– prototyp funkce:• deklaruje funkci před jejím použitím a před tím, než je

definována• tvořen hlavičkou funkce, za níž následuje středník• pro správné vyvolání funkce je zapotřebí, aby překla-

dač znal informace uvedené v její hlavičce

Page 35: IB001 – Úvod do programování skrze  C

23-04-24 35

Struktura programu v jazyce C (3)• návratový_typ:

– udává typ hodnoty, kterou funkce vrací– jestliže funkce nevrací žádnou hodnotu, pak by

návratovým typem měl být typ void– void:

• představuje prázdný datový typ• používá se pro:

– označení funkcí, které nevracejí žádnou hodnotu– označení prázdného seznamu formálních parametrů– vytváření obecného ukazatele

Page 36: IB001 – Úvod do programování skrze  C

23-04-24 36

Struktura programu v jazyce C (4)

• jmFunkce:– identifikátor specifikující jednoznačné jméno

funkce– následně se používá pro její vyvolání

• seznam formálních parametrů:– slouží k předání vstupních hodnot funkci– je-li prázdný, měl by být použitý typ void

Page 37: IB001 – Úvod do programování skrze  C

23-04-24 37

Struktura programu v jazyce C (5)• Funkce main:

– každý spustitelný program musí obsahovat právě jednu funkci main

– volána jako první po spuštění programu– návratový typ by měl být vždy int (celé číslo)– konvence:

• jestliže program skončí bezchybně, pak by funkce main měla vracet hodnotu 0

• v případě chybového stavu by měla vracet celočísel-nou hodnotu v rozmezí 1 až 255

Page 38: IB001 – Úvod do programování skrze  C

23-04-24 38

Struktura programu v jazyce C (6)

– seznam formálních parametrů může být využitý pro předání vstupních hodnot z příkazové řádky operačního systému

Page 39: IB001 – Úvod do programování skrze  C

23-04-24 39

Příkaz return (1)• Používán k ukončení právě probíhající funkce• Pomocí příkazu return je možné, aby fun-

kce vrátila svou hodnotu• Obecný tvar: return výraz;• Funkce:

– způsobí ukončení právě prováděné funkce– řízení se předá na místo bezprostředně následující

za voláním funkce– výraz se vyhodnotí a výsledná hodnota je funkcí

vrácena– není-li uveden výraz, pak funkce nevrací žádnou

hodnotu

Page 40: IB001 – Úvod do programování skrze  C

23-04-24 40

Příkaz return (2)• Poznámka:

– jestliže program dosáhne konce těla funkce, aniž by byl proveden příkaz return, pak je výsledek stejný, jako by se provedl return neobsahující žádný výraz

Page 41: IB001 – Úvod do programování skrze  C

23-04-24 41

Funkce výstupu (1)• Funkce puts:

– deklarována v: stdio.h– prototyp: int puts(const char *s);– funkce:

• vypíše řetězec s na standardní výstup (obrazovka monitoru) a provede odřádkování

– vrácená hodnota:• při úspěšném výpisu vrací nezápornou hodnotu• při neúspěšném výpisu vrací hodnotu EOF (-1)

Page 42: IB001 – Úvod do programování skrze  C

23-04-24 42

Funkce výstupu (2)• Funkce printf:

– deklarována v: stdio.h– prototyp: int printf(const char *format,…);

– funkce: • vypíše na standardní výstup posloupnost dat specifikova-

nou parametrem format• za parametrem format očekává alespoň tolik dalších

argumentů, kolik je specifikováno parametrem format– vrácená hodnota:

• při úspěšném výpisu vrací počet vypsaných znaků• při neúspěšném výpisu vrací záporné číslo

Page 43: IB001 – Úvod do programování skrze  C

23-04-24 43

Funkce výstupu (3)– parametr format:

• řetězec obsahující text, který se má vypsat• může obsahovat formátovací značky, za něž jsou do-

sazeny a podle nichž jsou odpovídajícím způsobem formátovány hodnoty uvedené v následujících argu-mentech

• Formátovací značka: – obecný tvar: %[příznaky][šířka][.přesnost][délka]specifikátor– šířka:

• určuje minimální šířku pole pro výpis argumentu• argument s méně znaky bude zleva, popř. zprava

doplněn výplňovými znaky (obvykle mezera)

Page 44: IB001 – Úvod do programování skrze  C

23-04-24 44

Funkce výstupu (4)– přesnost:

• u reálných čísel určuje počet číslic, které budou vypsány za desetinnou čárkou (implicitně 6)

– příklady specifikátorů pro výpis číselných hodnot:•d, i celé číslo se znaménkem v desítkové soustavě•o celé číslo bez znaménka v osmičkové soustavě•x, X celé číslo bez znaménka v šestnáctkové

soustavě•u celé číslo bez znaménka v desítkové soustavě •f reálné číslo v desítkové soustavě

počet desetinných míst je dán částí přesnost•e, E reálné číslo v desítkové soustavě v semilogarit-

mickém (exponenciálním) tvarupočet desetinných míst je dán částí přesnost

•% vypíše znak %

Page 45: IB001 – Úvod do programování skrze  C

23-04-24 45

Úprava programu• Znaky { a } psát pod sebe• Příkazy mezi { a } odsadit o dvě až čtyři me-

zery• Středník psát bezprostředně za příkaz• Záhlaví programu opatřit komentářem, který

obsahuje zadání problému, jehož řešení pro-gram představuje

Page 46: IB001 – Úvod do programování skrze  C

23-04-24 46

Konstanty (1)• Pevně dané hodnoty určitého typu (např. číslo):

– čísla v jazyce C:• celá (int): 264, –1, 8765• reálná (double): 3.14159, –427.8123, 1.0,

4E–5, 1.2E3• Pojmenované konstanty:

– lze definovat pomocí direktivy preprocesoru– obecný tvar: #define IDENTIFIKÁTOR hodnota

– např: #define PI 3.1415926

Page 47: IB001 – Úvod do programování skrze  C

23-04-24 47

Konstanty (2)– takto definované konstanty nemají specifikovaný

datový typ– preprocesor provede textové nahrazení všech výsky-

tů identifikátoru IDENTIFIKÁTOR hodnotou hodnota

– poznámka – konvence:• identifikátory za direktivou #define zapisovat vždy

velkými písmeny

Page 48: IB001 – Úvod do programování skrze  C

23-04-24 48

Výrazy (1)• Tvořeny pomocí operátorů a operandů• Příklady aritmetických operátorů:

– + součet– – rozdíl– * součin– / podíl (reálný i celočíselný)– % zbytek po celočíselném dělení

• Při vyhodnocování je respektována běžná prio-rita operátorů (podobně jako v matematice)

• Změnu priority operátorů je možné provést pomocí kulatých závorek – (, )

Page 49: IB001 – Úvod do programování skrze  C

23-04-24 49

Výrazy (2)• Příklady operandů:

– konstanty– pojmenované konstanty– proměnné– volání funkcí:

• funkce je vyhodnocena a výsledná hodnota je použita jako operand

• Příklady výrazů:– 20+30*5–8/2– 2*sin(PI/2)+6– 4*(2+5)*(8.5+4.32)