1 / 48

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 Šumavská 15, 602 00 BRNO kanc.: G409,  : +420 – 54 9 495 751 E-mail: pelikan@fi.muni.cz http://www.fi.muni.cz/usr/pelikan.

elvin
Download Presentation

IB001 – Úvod do programování skrze C

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 – 549495751 E-mail: pelikan@fi.muni.cz http://www.fi.muni.cz/usr/pelikan

  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

  3. Organizace předmětu • 1 přednáška: • 2 hodiny týdně • 25 cvičebních skupin: • 2 hodiny týdně • Zakončení předmětu: • zkouška • zápočet

  4. Požadavky ke zkoušce (1) • Zápočet: • 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ů • za 2. písemku: 35 bodů • za obě písemky je zapotřebí získat v součtu alespoň 30 bodů • hodnocení z průběžných písemek se započítává do výsledného (celkového) hodnocení zkoušky

  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 • 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 • maximálně dvě neomluvené neúčasti na cvičení

  6. Požadavky ke zkoušce (3) • Zápočet musí být zapsán na ISu nejpozději 12 hodin před začátkem závěrečné zkoušky • 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 (písemky, na níž získal men-ší bodové hodnocení)

  7. 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ů z průběžných písemek a zá-věrečné zkoušky, mínus body za chybné domá-cí úkoly: 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ů

  8. Literatura • Pelikán, Jaroslav: Prezentace k přednáškám z předmětu IB001 Úvod do programování 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

  9. 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átorema 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

  10. Programovací jazyky – historie • Strojový kód • Jazyk symbolických instrukcí – Assembler • vědeckotechnické výpočty • FORTRAN, ALGOL, COBOL • vědeckotechnické výpočty • hromadné zpracování dat • SIMULA, LISP, SIMSCRIPT • PL/1, ADA, Prolog, C/C++, C#, Pascal, Java

  11. 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í

  12. 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

  13. Historie jazyka C (1) • 1969 – 1973: • DennisM. 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: • DennisM. Ritchie a Brian W. Kernighan vydáva-jí knihu The C Programming Language (K&R)

  14. 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

  15. 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)

  16. „Životopis“ programu Systémovéknihovny *.so, *.a, *.lib Editor Objektovésoubory *.o, *.obj Hlavičkovésoubory *.h Zdrojový kód Sestavovací program linker *.c *.h Preprocesor Spustitelný program*.exe Překladač compiler Spuštění, laděníladící program – debugger

  17. 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 #

  18. 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

  19. 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

  20. 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

  21. 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í

  22. 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

  23. 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-12.11mingw-setup.exe (cca 97 MB) • obsahuje i překladač GCC a debugger GDB z MingGW • MinGW – Minimalist GNU for Windows: • distribuceposkytující sadu nástrojů vhodnou pro vývoj aplikací pro MS Windows

  24. 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, …

  25. 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, …

  26. 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é jsouuvozené znakem \, např.: • \npřechod na nový řádek • \t horizontální tabulátor • \\zpětné lomítko • \” uvozovky • \xhh kdehhoznačuje číslo v šestnáctkové soustavě požadovaného znaku • \ooo kde ooo označuje číslo v osmičkové soustavě požadovaného znaku

  27. 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)

  28. 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

  29. 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

  30. 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

  31. 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

  32. Struktura programu v jazyce C(1) /*Vložení hlavičkových souborů */ #include <soubor.h> /* Globální deklarace a definice */ návratový_typjmFunkce(seznam formálních parametrů) { /* Tělo funkce jmFunkce*/ } int main(seznam formálních parametrů) { /* Tělo funkce main */ } Hlavička funkce

  33. 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

  34. 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

  35. 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

  36. 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 vracetceločísel-nou hodnotu v rozmezí 1 až 255

  37. 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

  38. 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: returnvý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

  39. 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

  40. 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í hodnotuEOF (-1)

  41. 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 parametremformat • 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

  42. 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)

  43. 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) tvaru počet desetinných míst je dán částí přesnost • % vypíše znak %

  44. Ú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

  45. 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 PI3.1415926

  46. 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 #definezapisovat vždy velkými písmeny

  47. 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 – (, )

  48. 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)

More Related