Základy jazyka C. Úvod do programování 1 Tomáš Kühr

Podobné dokumenty
Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Základy jazyka C. Základy programování 1 Tomáš Kühr

Základy jazyka C. Úvod do programování 1 Tomáš Kühr

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Operátory. Základy programování 1 Tomáš Kühr

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

Seminář z IVT Proměnné a operátory. Slovanské gymnázium Olomouc 11. září 2014 Tomáš Kühr

Vícerozměrná pole. Úvod do programování 2 Tomáš Kühr

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Algoritmizace a programování

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Racionální čísla, operátory, výrazy, knihovní funkce

Racionální čísla, operátory, výrazy, knihovní funkce

Formátové specifikace formátovací řetězce

5 Přehled operátorů, příkazy, přetypování

Úvod do programování. Lekce 1

Úvod do programovacích jazyků (Java)

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

- jak udělat konstantu long int: L long velka = 78L;

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Proměnná a její uložení v paměti

Paměť počítače. alg2 1

Programovací jazyk Pascal

Základy algoritmizace a programování

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Algoritmizace a programování

Programovací jazyk C++ Hodina 1

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Zápis programu v jazyce C#

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Data, výrazy, příkazy

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Struktura programu, proměnné, konstanty, výrazy v jazycích C a C#

Základy algoritmizace a programování

IUJCE 07/08 Přednáška č. 1

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Výrazy, operace, příkazy

Programování v jazyce C pro chemiky (C2160) 9. Práce s PDB soubory

Objektově orientované programování

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Operační systémy. Cvičení 3: Programování v C pod Unixem

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Jazyk C# a platforma.net

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Výrazy, operace, příkazy

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Datové typy pro reálná čísla

Datové typy strana 29

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Zjednodušené základy jazyku C. Josef Podstata

Java reprezentace dat, výrazy. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Znalost výčtových typů. Aktivní znalost kombinovaných (zkrácených přiřazení). Znalost bitových operací. Znalost operátoru sekvence.

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Ukázka knihy z internetového knihkupectví

Algoritmizace a programování

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Algoritmy v jazyku C a C++

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Standardní vstup a výstup

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

Seznámení s datovými typy a operátory

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

2 Datové typy v jazyce C

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Opakování programování

Jazyk C++ I. Polymorfismus

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

Algoritmy v jazyku C a C++

Sada 1 - Základy programování

Čísla a číselné soustavy.

Programování v jazyce JavaScript

KTE / ZPE Informační technologie

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

7. Datové typy v Javě

Programování C++ Lukáš Tomášek. verze

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: Ukončí program. Nula znamená, že vše proběhlo bez chyby.

Úvod do programování - Java

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

NPRG030 Programování I, 2016/17 1 / :58:13

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

Přetěžování operátorů

C# konzole Podíl dvou čísel, podmínka IF

Datové typy a jejich reprezentace v počítači.

Transkript:

Základy jazyka C Úvod do programování 1 Tomáš Kühr

Organizační záležitosti Konzultace Pracovna 5.043 Pondělí 9.30 11.30, středa 10.00 11.30 a 13.00 14.30 (oficiální) Pátek 8.00 9.30 (někdy), 12.30-13.00 a od 14.45 dle potřeby (neoficiální) Emailem tomas.kuhr@upol.cz Web předmětu http://www.inf.upol.cz/kombinovane-studium/uvod-do-programovani-1 Sbírka úloh http://jazykc.inf.upol.cz/

Literatura Pavel Herout: Učebnice Jazyka C. Kopp, 2007. Brian W. Kernighan, Dennis M. Ritchie: Programovací jazyk C, Computer Press, 2006. Reek Kenneth: Pointers on C. Addison Wesley, 1997. Robert Sedgewick: Algorithms in C. Addison-Wesley Professional, 2001. Jeri R. Hanly, Elliot B. Koffman: Problem Solving and Program Design in C. Addison Wesley, 2006. Eric S. Roberts: Programming Abstractions in C. Addison Wesley, 1997. Eric S. Roberts: The Art and Science of C. Addison Wesley, 1994. a další

Zápočet Vzorné (přehledné a efektivní) vyřešení zadané úlohy Samostatně S možností využít své dříve vytvořené zdrojové soubory S možností využívat elektronickou i tištěnou literaturu Je možné pracovat na školním PC nebo svém notebooku Termíny budou vypsány před zkouškovým obdobím

Jazyk C vytvořen 1972 autor Dennis Ritchie poslední verze C11 (prosinec 2011) my si ale vystačíme s ANSI C (1990), příp. C99 (1999) inspirace pro mnoho soudobých jazyků vlastnosti: nízkoúrovňový překládaný (kompilovaný) platformově nezávislý staticky typovaný procedurální (imperativní) paradigma

Ukázka zdrojového souboru #include <stdlib.h> #include <stdio.h> /* * Tento program nedělá nic jiného, * než že pozdraví celý svět. */ int main() { // hlavní funkce programu /* sem budeme zatím psát všechny příkazy */ printf("ahoj, světe!\n"); // napíše text do konzole } return 0; // úspěšný konce programu

Vývojová prostředí MS Visual Studio / MS Visual C++ (MS Windows) Code::Blocks (multiplatformní) GNU Emacs (GNU/Linux) Xcode (OS X) Libovolný textový editor

Několik poznámek k syntaxi C rozlišuje velká a malá písmena (case sensitivity) system System SYSTEM C ignoruje většinu bílých znaků (mezer, tabulátorů, odřádkování) (2*pi*r*(r+v)) = ( 2 * pi * r * (r+v) ) ale naopak "Ahoj světe!" "Ahoj int cislo; intcislo; světe!" Příkazy jsou ukončeny středníkem povrch = ( 2 * pi * r * (r+v) ); printf("ahoj světe!");

Proměnná Pojmenované místo v paměti Lze v ní uchovávat 1 hodnotu Předem daného datového typu Vytvoření proměnné: typ identifikátor; typ identifikátor = hodnota; Příklady: int cislo; double desetinne_cislo = 3.14; char pismeno = 'A'; int logickahodnota = 0;

Identifikátor proměnné Jedinečný v rámci daného bloku / programu Může obsahovat písmena, číslice a podtržítko Musí začínat písmenem (nebo podtržítkem) Identifikátor by měl být smysluplný Program častěji čteme než píšeme! obsah = pi * polomer * polomer; vs. xyz = ahoj * abc * abc; Nedoporučuji používat háčky a čárky Doporučuje se underscore_case, případně camelcase double polomer_kruznice; double pi = 3.14; int idhlavnihouzivatelevaplikaci;

Základní datové typy char - obvykle pro znaky (1 byte, rozsah typicky 0 až 255) int - celé číslo (velikost přirozená pro danou platformu) float / double - desetinná čísla (s pohyblivou řadovou čárkou) (double má dvojnásobnou přesnost) Na typ int lze aplikovat kvalifikátory long a short: short int prumerna_mzda = 25000; int poslanecky_plat = 56000; long int majetek_billa_gatese = 1180000000000; short prumerna_mzda = 25000; long majetek_billa_gatese = 1180000000000; Kvalifikátor long lze aplikovat na double: long double velke_desetinne_cislo = 0.1234567890234567893;

Znaménkové a neznaménkové typy Na celočíselné typy (int, char, ale i short, long) lze aplikovat modifikátory signed a unsigned unsigned - reprezentace pouze nezáporných čísel signed - čísla mohou být kladná i záporná Stejná velikost paměti Rozsah signed char je od -128 do 127. Rozsah unsigned char je od 0 do 255.

Logické hodnoty v C Logické hodnoty pravda a nepravda reprezentujeme v C čísly Není zde speciální datový typ Nula = nepravda Nenulové číslo (typicky 1) = pravda

Číselné konstanty Celočíselné konstanty zapisujeme číslicemi Záporní čísla odlišujeme znaménkem mínus Implicitně mají typ int (velké hodnoty long int) Desítkové: 14, 16U, -12, 5145L, 58UL Osmičkové: 07, 0245, 0123 Šestnáctkové: 0xABC, 0x0, 0x12B U desetinných čísel používáme tečku (ne čárku) Implicitně jsou tyto konstanty typu double Desetinné: 12.34, 15.47F, 57.478L, 1e+6, 3.14e-3

Konstantní znaky a řetězce Znakové konstanty zapisujeme do apostrofů Znakové: 'a', '9', '\'', '\n' Řetězcové konstanty zapisujeme do úvozovek Řetězce: "Ahoj", "124", "\"Ahoj\"", "Prvni\nDruhy\nTreti\n" Textové řetězce jsou posloupnosti znaků ukončené '\0'

Výstup na obrazovku Pomocí funkce printf z knihovny stdio Obecně: printf(řídící_řetězec, hodnota1, hodnota2,...); Příklady: int x = 5, y = 3; int sum = 8; int cislo = 23; printf("součet je 8"); printf("součet je %d", 8); printf("součet je %d", sum); printf("součet je %d", x + y); printf("součet je %d\t Součin je %d\n", x + y, x * y); printf("plán jsme splnili na 100 %%."); printf("dekadicky %d je oktalově %o a hexadecimálně %x.\n", cislo, cislo, cislo);

Vstup z klávesnice Pomocí funkce scanf z knihovny stdio Obecně: scanf(řídící_řetězec, &promenna1, &promenna2,...); Příklady: int cislo, cislo2; unsigned int hexa_cislo; unsigned int den, mesic, rok; scanf("%d", &cislo); scanf("%x", &hexa_cislo); scanf("%d %d", &cislo, &cislo2); scanf("%d.%d.%d", &den, &mesic, &rok);

Možnosti formátovacího řetězce %c výpis nebo načtení znaku %d (%i) celé číslo desítkově znaménkově %u celé číslo desítkově neznaménkově %o celé číslo osmičkově %x (%X) celé číslo šestnáctkově (malá / velká písmena) %f desetinné číslo (float a double při výpisu) %lf načtení desetinného čísla typu double %e (%E) desetinné číslo semilogaritmicky %g (%G) jako %f nebo %e (%E) podle hodnoty čísla %s textový řetězec

Operátory a jejich vlastnosti Základní konstrukce (skoro) každého jazyka Z daných operandů vytvoří výsledek, který je možné dále využívat Arita udává počet operandů (vstupů) Některé operátory mají i tzv. vedlejší efekt Příklady výrazů s operátory: a+b (binární sčítání) a-b (binární odčítání) -a (unární mínus) a<=b (binární menší nebo rovno) a-- (unární dekrementace) prumer = (a+b)/2; (přiřazení, sčítání a dělení v 1 výrazu)

Priorita a asociativita operátorů Priorita určuje pořadí, ve kterém se operátory vyhodnocují Znáte ji vlastně už z matematiky 1 + 2 / 3 + 4 =? Vyhodnocování výrazu lze ovlivnit použitím (kulatých) závorek (1 + 2) / (3 + 4) 1 + (2 / 3 + 4) (1 + 2) / 3 + 4 Asociativita udává směr, ve kterém se vyhodnocují binární operátory se stejnou prioritou Zleva nebo zprava 1 2 3 4 =? Opět lze ovlivnit závorkami ((1 2) -3) 4 (1 2) (3 4) 1 (2 (3 4))

Aritmetické operátory Unární operátory + a Binární operátory +,, * a / s obvyklým významem Asociativita zleva Příklady: stejne_cislo = +cislo; opacne_cislo = -cislo; delka = vetsi - mensi; prumer = (prvni + druhy + treti) / 3; obsah = 2 * pi *polomer * polomer; Binární operátor % pro určení zbytku po celočíselném dělení (modulo) Příklad: int delenec = 13, delitel=5, podil, zbytek; podil = delenec / delitel; zbytek = delenec % delitel;

Aritmetické operátory Pozor na typy operandů Pokud jsou všechny operandy celočíselné, je i výsledek celočíselný Jinak je výsledek reálné číslo Například při dělení toto může ovlivnit i hodnotu výsledku int cislo = 15; double polovina; polovina = cislo / 2; Lze obejít přetypováním operandu nebo desetinným zápisem konstanty polovina = (double)cislo / 2; polovina = cislo / 2.0;

Přiřazení Pomocí operátoru = Zápis ve tvaru identifikátor_proměnné = jakýkoli_výraz Příklady použití cislo = 15; druhe_cislo = 2*cislo; Vedlejší efekt do proměnné uvedené vlevo uloží výsledek výrazu vpravo Asociativní zprava prvni = druhy = treti = 42; (prvni = (druhy = (treti = 42))); Další přiřazovací operátory += -= *= /= %= atd. Význam cislo += 5; cislo = cislo+5;

Inkrementace a dekrementace Aritmetické operátory, které v matematice nemáme Mají vedlejší efekt Inkrementace (++) zvyšuje hodnotu operandu o 1 cislo++; cislo+=1; cislo = cislo+1; Dekrementace (--) snižuje hodnotu operandu o 1 cislo--; cislo-=1; cislo = cislo-1; Mohou být v tzv. prefixovém nebo postfixovém tvaru Prefixové a postfixové použití se odlišuje výsledkem int vysledek1, vysledek2; int cislo = 5; vysledek1 = cislo++; vysledek2 = ++cislo; Nedoporučuji používat přiřazení, inkrementaci a dekrementaci ve složitějších výrazech! y = (x++ - 5 + (z = y - 2));

Podmínkové operátory Operátory pro porovnávání < > <= >= == (rovná se)!= (nerovná se) Binární operátory Výsledkem je logická hodnota (nula vs. nenulové číslo) Příklady: prvni >= druhe + treti cislo!= - cislo dalsi_cislo == cislo + 10 Typické chibyčki: prvni >= druhe > treti 10 < cislo < 20

Logické operátory Slouží pro konstrukci složitějších podmínek K dispozici máme operátory konjunkce (a zároveň) && disjunkce (nebo) negace! Asociativita zleva Příklady: (10 < cislo) && (cislo <= 20) (cislo <= 10) (20 < cislo)!((10 < cislo) && (cislo <= 20)) a b a && b a b!a 1 1 1 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0 0 1

Líné vyhodnocování Při vyhodnocování logických operátorů (konjunkce a disjunkce) se vyhodnocuje pouze část výrazu nezbytná pro určení výsledné pravdivostní hodnoty Příklady: (2 < 1) && (10 < cislo/0) (10 < cislo) && (cislo <= 20) (10 < 12) cokoli (10 < cislo) (cislo <= 0) Obzvláště zde tak platí doporučení neschovávat do složitějších podmínek operátory s vedlejším efektem (přiřazení, inkrementace, dekrementace).

Přetypování Změna typu výrazu na jiný typ Obecně: (nový_typ)výraz Příklady: int delenec = 5, delitel = 2; double podil; podil = (double)delenec / delitel; Existuje i implicitní přetypování: double cislo = 3.123; int cela_cast; cela_cast = cislo;

Podmínkový operátor Slouží pro větvení uvnitř výrazu Při složitějším použití nepřehledný Jediný ternární operátor Obecně: podmínka? výraz_splněno : výraz_nesplněno Pokud platí podmínka, pak se operátor vyhodnotí na výraz_splněno, jinak na výraz_nesplněno. Příklady: int cislo1, cislo2; int min;... min = (cislo1 < cislo2)? cislo1 : cislo2;

Čárka Slouží pro vytváření sekvencí Smysluplný téměř jen v řídících řádcích cyklů Obecně: výraz_1, výraz_2 Vyhodnotí se výraz_1, výsledek se zapomene, vyhodnotí se výraz_2 a jeho výsledek udává výsledek celé sekvence Výrazy obvykle mívají nějaký vedlejší efekt Příklady: int cis1 = 5, cis2 = 2; int min, max;... (cis1 < cis2)? (min = cis1, max = cis2) : (min = cis2, max = cis1);

Přehled operátorů Priorita Operátory Asociativita Arita 1 () [] ->. 2! ~ ++ -- + - (typ) * & sizeof unární 3 * / % zleva doprava binární 4 + - zleva doprava binární 5 << >> zleva doprava binární 6 < > <= >= zleva doprava binární 7 ==!= zleva doprava binární 8 & zleva doprava binární 9 ^ zleva doprava binární 10 zleva doprava binární 11 && zleva doprava binární 12 zleva doprava binární 13? : zprava doleva ternární 14 = += -= *= /= %= >>= <<= &= = ^= zprava doleva binární 15, zleva doprava binární