Typická struktura programu. Jaká je obecná struktura programu napsaného v jazyce C
Přednáška č. 1
Téma: Seznámení s jazykem C++. Operátoři a datové typy
Plán
3. Proměnné a jejich typy
4. Operátory a matematické funkce
5. I/O operátory v C++
6. Ukázkový program v C++
1. Historie vývoje programovacího jazyka C++
Jazyk C++, který kombinuje vlastnosti jazyka C a objektově orientovaného programování, se stal jedním z hlavních programovacích jazyků v 90. letech a zůstává tak pevně i na začátku 21. století. Jazyk C++ zdědil od jazyka C takové vlastnosti, jako je efektivita, kompaktnost, rychlost provádění a přenositelnost programů. Od objektově orientovaného programování získal jazyk C++ novou metodologii programování, aby se vyrovnal se zvýšenou složitostí problémů moderního programování. A jazykové funkce, jako jsou vylepšené šablony, přinášejí do jazyka C++ další novou metodologii programování: Generic Programming. Toto trojité dědictví je pro jazyk C++ požehnáním i prokletím. Díky nim je jazyk velmi silný, ale zároveň složitý; což znamená, že se programátoři musí naučit více.
V posledních několika desetiletích se výpočetní technika vyvíjela ohromujícím tempem. Významným vývojem prošly i programovací jazyky. V 70. letech minulého století pomohly programovací jazyky jako C a Pascal zahájit éru strukturovaného programování, které přineslo řád do oboru, který jej nutně potřeboval. Jazyk C poskytl programátorovi nástroje potřebné pro strukturované programování, stejně jako tvorbu kompaktních, rychlých programů a možnost adresovat hardware, například schopnost ovládat komunikační porty a disky na magnetické disky. Tyto vlastnosti pomohly C stát se dominantním programovacím jazykem v 80. letech. Během těchto let se však objevil nový programovací model: objektově orientované programování, neboli OOP, vtělené do jazyků jako SmallTalk a C++.
jazyk C
Zaměstnanec Bell Laboratories Ken Thompson vyvinul v roce 1969 jazyk B (bi), aby vytvořil další softwarové systémy. Tento jazyk byl však vykládán, což neumožňovalo vznik nezávislých spustitelné soubory. Přesto byl tento jazyk předchůdcem jazyka C.
Na začátku 70. let Denis Ritchie z Bell Laboratories vyvíjel operační systém UNIX. K této práci potřeboval Ritchie programovací jazyk, který by byl stručný a schopný efektivně spravovat hardware a vytvářet kompaktní, rychle běžící programy. Tradičně takové potřeby programátorů uspokojoval jazyk symbolických instrukcí, který úzce souvisí s vnitřním strojovým jazykem počítače. Jazyk symbolických instrukcí je však jazyk nízká úroveň, tj. je vázán na určitý typ procesoru (nebo počítače). Pokud je tedy třeba přenést program v assembleru do jiného typu počítače, musí být přepsán do jiného assembleru.
Operační systém UNIX byl navržen tak, aby běžel na různých typech počítačů (nebo platforem). A to zahrnovalo používání jazyka vysoká úroveň. Jazyk na vysoké úrovni řeší problémy, není specifický pro hardware. Speciální programy zvané kompilátory překládají program v jazyce vyšší úrovně do programu ve vnitřním jazyce konkrétního počítače. Použitím samostatného kompilátoru pro každou platformu lze tedy stejný vysokoúrovňový jazykový program spustit na různých platformách. Ritchie potřeboval jazyk, který kombinuje efektivitu a hardwarovou dostupnost nízkoúrovňového jazyka s obecnější povahou a přenositelností vysokoúrovňového jazyka. Na základě existujícího programovacího jazyka B proto Ritchie vyvinul jazyk C. Obecně se uznává, že autory jazyka jsou Ritchie a Thompson.
Jazyk C, stejně jako většina hlavních programovacích jazyků naší doby, je procedurální.
jazyk C++
S rozvojem objektově orientované technologie již nestačily možnosti standardního jazyka C. Výsledkem byl jazyk C++.
Jazyk C++, stejně jako jazyk C, je duchovním dítětem Bell Laboratories. Autor Bjarni Stroustrup vyvinul tento jazyk na počátku 80. let. Jeho vlastními slovy: „Jazyk C++ byl navržen především proto, abychom já a moji přátelé nemuseli programovat v assembleru, C nebo různých moderních jazycích na vysoké úrovni. Jeho hlavním cílem bylo usnadnit a zpříjemnit jednotlivým programátorům psaní dobrých programů.
Stroustrup založil C++ na C, protože C byl stručný, dobře se hodil pro systémové programování, byl široce dostupný a úzce souvisel s operačním systémem UNIX. Objektově orientovaná část jazyka C++ vznikla pod vlivem modelovacího jazyka Simula67. Stroustrup přidal do jazyka C prvky OOP, aniž by výrazně změnil samotný jazyk C.
Název C++ pochází z inkrementačního operátoru ++ v jazyce C, který k hodnotě proměnné přidává jedničku. Název C++ naznačuje, že tento jazyk je vylepšenou (++) verzí jazyka C.
Generické programování
Generické programování je další programovací paradigma podporované jazykem C++. S OOP má společný cíl – zjednodušit opětovné použití programových kódů. Zatímco se však OOP zaměřuje na data, generické programování se zaměřuje na algoritmy. A má jiný rozsah. OOP je nástroj pro vývoj velkých projektů, zatímco generické programování poskytuje nástroje pro provádění běžných úkolů, jako je třídění dat. Termín generický znamená vytvoření programového kódu nezávislého na datovém typu. C++ má data různé typy– celá čísla, zlomková čísla, symboly, znakové řetězce, uživatelsky definované složité struktury sestávající z dat několika typů. Pokud například chcete třídit data různých typů, obvykle pro každý typ vytvoříte samostatnou funkci třídění. Generické programování rozšiřuje jazyk takovým způsobem, že umožňuje napsat funkci jednou pro generický (tj. nedefinovaný) datový typ a poté ji použít pro různé reálné datové typy. To zajišťují šablony jazyka C++. (Start)
2. Struktura programu C++
Program v C++ je sestaven z jednotlivých bloků nazývaných funkce. Zpravidla je program rozdělen na řadu velkých úloh a k provádění těchto úloh jsou pak vyvíjeny samostatné funkce.
Většina programů v C++ vypadá takto:
sekce připojení hlavičkového souboru
hlavička programu (funkce)
funkční tělo
Název programu
Program C++ se skládá z jednoho nebo více modulů nazývaných funkce. Provádění programu začíná funkcí s názvem main(), takže program musí mít funkci s tímto názvem. Pokud program takovou funkci nemá, pak neexistuje úplný program; kompilátor v tomto případě indikuje, že funkce main() nebyla definována.
Popis takové funkce se provádí v sekci záhlaví programu a je zapsán takto:
Je důležité vzít v úvahu skutečnost, že kompilátor C++ rozlišuje malá a velká písmena. Proto název funkce zadaný v jiném případě (například: Main() nebo MAIN()) bude rozpoznán jako neplatný.
Sekce připojení záhlaví
Při vytváření spustitelného kódu pro programy C++ se stejně jako v případě programů C používá preprocesor. Jedná se o program, který zpracovává zdrojový soubor před hlavní kompilací. Pro volání tohoto preprocesoru nemusíte dělat nic zvláštního. Spustí se automaticky při kompilaci programu.
Každý program C++ má nejprve direktivu jako:
#zahrnout
Tato direktiva způsobí, že preprocesor přidá obsah souboru iostream do programu. Toto je typická akce preprocesoru: přidání nebo změna textu zdrojový kód před sestavením.
Direktiva #include způsobí, že obsah souboru iostream bude předán kompilátoru spolu s obsahem zdrojového souboru. V podstatě obsah souboru iostream nahrazuje v programu řádek #include
Soubory, jako je iostream, se nazývají začleněné soubory (protože jsou zahrnuty v jiných souborech) nebo hlavičkové soubory (protože jsou zahrnuty na začátku souboru). Kompilátory C++ přicházejí s mnoha hlavičkovými soubory, z nichž každý podporuje jinou rodinu nástrojů. Soubory hlaviček C mají tradičně příponu h, což je nejjednodušší způsob, jak identifikovat typ souboru podle názvu. Například hlavičkový soubor math.h podporuje různé matematické funkce C++.
Soubory záhlaví jsou umístěny ve složce Include vývojového prostředí Turbo C++. Pokud se při spouštění programu zobrazí chyba oznamující, že není obsažen žádný soubor záhlaví, musíte jej nakonfigurovat v prostředí Turbo C++. Chcete-li to provést, spusťte příkaz Možnosti - Adresáře, do pole Zahrnout adresáře zadejte ..\INCLUDE a do pole Adresáře knihoven zadejte ..\LIB.
Funkční tělo
Tělo funkce obsahuje instrukce pro počítač, tzn. definuje, co funkce skutečně dělá.
Tělo funkce vypadá takto:
popis proměnných;
operátoři;
Jak vidíte, tělo funkce je uzavřeno ve složených závorkách. Popis proměnných bude probrán v další části přednášky.
Operátor je instrukce pro počítač. Aby kompilátor porozuměl zdrojovému kódu, musí vědět, kdy jeden příkaz končí a druhý začíná. Některé programovací jazyky používají oddělovače příkazů. V Pascalu je jeden příkaz od druhého oddělen středníkem. V některých případech lze středník v Pascalu vynechat, například za příkazem před slovem END, kdy nedochází k žádnému skutečnému oddělení těchto dvou příkazů. Ale v jazyce C++, stejně jako v jazyce C, se spíše než oddělovač používá terminátor (ukazatel). Terminátor je středník, který označuje konec příkazu; je spíše součástí příkazu než oddělovačem mezi příkazy. Praktickým výsledkem je, že v C++ nemůžete nikdy vynechat středník.
Instrukce RETURN 0 označuje ukončení funkce a návrat k volajícímu programu. Ve funkci main main() lze tuto instrukci vynechat.
V textu programů je povoleno používat komentáře. V C++ jsou komentáře označeny dvojitými lomítky (//). V programech C++ můžete použít komentáře z jazyka C, které jsou uzavřeny mezi /* a */.
Protože komentář C nekončí zakončením řádku, ale */, může pokračovat několik řádků. Programy mohou používat jeden z těchto dvou typů komentářů nebo oba. (Start)
C , jako jsou statické a lokální proměnné, pole, ukazatele, funkce atd., jsou co nejblíže architektuře skutečných počítačů. Ukazatel je tedy pouze adresa paměti, pole je souvislá oblast paměti, místní proměnné jsou proměnné umístěné v zásobníku hardwaru, statické proměnné jsou v statická paměť. Programátor C má vždy docela dobrou představu o tom, jak program, který píše, poběží na dané architektuře. Jinými slovy, jazyk C dává programátorovi úplnou kontrolu nad počítačem.Zpočátku byl jazyk C koncipován jako náhrada za Assembler pro psaní operační systémy. Vzhledem k tomu, že C je jazyk vysoké úrovně bez ohledu na architekturu, byl text operačního systému snadno přenosný z jedné platformy na druhou. První operační systém napsaný téměř výhradně v C byl Unixový systém. Téměř všechny dnes používané operační systémy jsou napsány v C. Navíc softwarové nástroje, které operační systém poskytuje vývojářům aplikační programy(tzv. API - Application Program Interface), jsou sady systémových funkcí v jazyce C.
Rozsah jazyka C však nebyl omezen na vývoj operačních systémů. Jazyk C se ukázal jako velmi vhodný v programech pro zpracování textu a obrazu, ve vědeckých a technických výpočtech. Objektově orientované jazyky založené na C jsou skvělé pro programování v prostředích s oknem.
V této části budou uvedeny pouze základní pojmy jazyka C (a částečně C++). Toto nenahrazuje čtení kompletní učebnice C nebo C++, jako jsou knihy a .
Místo C použijeme kompilátor C++. Faktem je, že jazyk C je téměř celý zahrnut v C ++, tzn. normální C program je platný C++ program. Slovo „normální“ znamená, že neobsahuje zbylé neúspěšné konstrukce rané verze C a v současné době se nepoužívá. Kompilátor C++ je preferován před kompilátorem C, protože má přísnější kontrolu chyb. Navíc některé konstrukce C++, které nesouvisejí s objektově orientovaným programováním, jsou velmi pohodlné a jsou vlastně vylepšením jazyka C. Jsou to v prvé řadě komentáře // , možnost popsat lokální proměnné v libovolném bodě programu, nejen na začátku bloku, a také nastavení konstant bez použití operátoru #define preprocesoru. Tyto vlastnosti C++ využijeme, přičemž v podstatě zůstaneme v rozsahu jazyka C.
Struktura C programu
Jakékoliv stačí velký program v C (programátoři používají termín projekt) se skládá ze souborů. Soubory jsou nezávisle přeloženy kompilátorem C a poté zřetězeny programem pro tvorbu úloh, výsledkem je soubor s programem připraveným ke spuštění. Jsou volány soubory obsahující texty programu C počáteční.
V C existují dva typy zdrojových souborů:
- záhlaví nebo h-soubory;
- implementační soubory nebo soubory C.
Názvy souborů záhlaví mají příponu ".h". Názvy implementačních souborů mají přípony ".c" pro jazyk C a ".cpp", ".cxx" nebo ".cc" pro jazyk C++.
Bohužel, na rozdíl od jazyka C, se programátoři nedokázali shodnout na jedné příponě názvu souboru pro soubory obsahující programy C++. Pro hlavičkové soubory použijeme příponu ".h" a pro implementační soubory příponu ".cpp".
hlavičkové soubory obsahuje pouze popisy. Především se jedná o funkční prototypy. Funkční prototyp popisuje název funkce, návratový typ, číslo a typy jejích argumentů. Samotný funkční text není obsažen v h-souboru. Také h-soubory popisují názvy a typy externích proměnných, konstant, nových typů, struktur atd. Obecně h-soubory obsahují pouze rozhraní, tj. informace potřebné k používání programů již napsaných jinými programátory (nebo stejným programátorem dříve). Soubory záhlaví poskytují pouze informace o jiných programech. Při překladu hlavičkových souborů se zpravidla nevytvářejí žádné objekty. Například v záhlaví souboru nemůžete definovat globální proměnná. Popisný řetězec
definování celočíselné proměnné x je chyba. Místo toho použijte popis
což znamená, že proměnná x je definována někde v implementačním souboru (což je neznámé). Slovo externí (externí) je pouze hlásí informace o externí proměnné, ale nedefinuje tuto proměnnou.
Implementační soubory, neboli C-soubory, obsahují texty funkcí a definice globálních proměnných. Jednoduše řečeno, soubory C obsahují samotné programy, zatímco soubory h obsahují pouze informace o programech.
Reprezentace zdrojových textů ve formě hlavičkových souborů a implementačních souborů je nezbytná pro vytváření velkých projektů, které mají modulární strukturu. Soubory záhlaví se používají k předávání informací mezi moduly. Implementační soubory jsou samostatné moduly, které jsou vyvíjeny a kompilovány nezávisle a kombinovány za účelem vytvoření spustitelného programu.
Implementační soubory mohou obsahovat popisy obsažené v hlavičkových souborech. Samotné hlavičkové soubory mohou také používat jiné hlavičkové soubory. Soubor záhlaví je zahrnut pomocí direktivy #include preprocessor. Řetězec obsahuje například popis standardních I/O funkcí
#zahrnout
(stdio - od slov standardní vstup / výstup). Název souboru h je zapsán do úhlové konzoly pokud toto h-
Složení jazykaV textu v jakémkoli přirozeném jazyce, čtyři
základní prvky: symboly, slova, fráze a věty.
Podobné prvky jsou obsaženy v algoritmickém jazyce:
Abeceda jazyka, respektive jeho symboly, jsou základními nedělitelnými znaky, s
kterým jsou psány všechny texty v jazyce.
Lexém je nejmenší jednotka jazyka, která má nezávislý
význam.
Výraz definuje pravidlo pro výpočet nějaké hodnoty.
Operátor specifikuje úplný popis nějaké akce.
K popisu složité akce je nutná sekvence
operátory. Operátory lze sloučit do jednoho celku
příkaz nebo blok (blok v jazyce C++ je
posloupnost příkazů uzavřených ve složených závorkách ( )).
V tomto případě se s nimi nakládá jako s jedním prohlášením.
Každý prvek jazyka je definován syntaxí a sémantikou.
Syntaktické definice stanovují konstrukční pravidla
prvky jazyka a sémantika určuje jejich význam a pravidla
použití.
Kombinované jediným algoritmem, sadou popisů a
operátory tvoří program v algoritmickém jazyce.
Proces provádění programu
Chcete-li spustit program, musíte jej přeložitdo jazyka srozumitelného procesoru – do strojových kódů. Tento
proces se skládá z několika fází:
Program je nejprve předán preprocesoru, který
spojuje textové soubory, obsahující popis
prvky použité v programu.
Výsledná celý text program vstoupí
kompilátor, který zvýrazní tokeny, a poté na základě
gramatika jazyka rozpoznává výrazy a operátory,
vytvořené z těchto lexémů. Kompilátor pak zjistí
syntaktické chyby, a pokud žádné nejsou, sestavení
objektový modul.
Generuje linker nebo linker
spustitelný modul programu, připojující se k objektu
modul jiné objektové moduly. Pokud je program
z několika zdrojových souborů, jsou kompilovány
samostatně a kombinované ve fázi propojení.
Spustitelný modul má příponu .exe a může být
spuštěna k provedení.
Abeceda jazyka C++
Abeceda C obsahuje:velká a malá písmena latinské abecedy (A,B,...,Z, a, b,..., z) a a
podtržítko;
číslice: 0,1,2,3,4,5,6,7,8,9
speciální znaky: " , () | () * + - / % \ ; " . :?< = >_ ! & # nezobrazitelných znaků ("zobecněné mezery"),
používá se k oddělení lexémů od sebe (např.
tabulátor, skok na nový řádek).
Ze znaků abecedy
jazykové lexémy se tvoří:
identifikátory;
klíčová (rezervovaná) slova;
provozní značky;
konstanty;
oddělovače (závorky, tečka, čárka, mezery).
Hranice tokenů jsou definovány jinými tokeny, jako např
oddělovače nebo provozní značky.
Identifikátory
Identifikátor je název objektu programu. VLze použít latinské identifikátory
písmena, číslice a podtržítka. Velká písmena a
malá písmena jsou různá. První postava
identifikátorem může být písmeno nebo znak
podtržítka. kde:
identifikátor se nesmí shodovat s klíčovými slovy
slova a názvy použité normy
jazykové objekty;
nedoporučuje se začínat identifikátory znakem
podtržítka;
Identifikátory mohou být libovolné délky, ale
kompilátor nebere v úvahu více než 31 znaků z
začátek identifikátoru;
Příklady identifikátorů:
KOM_16, velikost 88, _MIN, TIME, čas
Klíčová slova
Klíčová slova jsou vyhrazené identifikátory, které majíspeciální hodnota pro kompilátor. Mohou být použity pouze v
smyslu, ve kterém jsou definovány. Seznam klíčová slova C++ je uvedeno v
stůl:
INT
CHAR
PLOVÁK
DVOJNÁSOBEK
STRUKTOVAT
SVAZ
DLOUHO
KRÁTKÝ
NEPODEPSANÝ
AUTO
KONST
SKUTEČNÝ
EXTERNÍ
REGISTROVAT
TYPEDEF
STATICKÝ
JÍT DO
VRÁTIT SE
VELIKOST
PŘESTÁVKA
POKRAČOVAT
LI
ZRUŠIT
NOVÝ
JINÝ
PRO
DĚLAT
ZATÍMCO
PŘEPÍNAČ
POUZDRO
VÝCHOZÍ
VSTUP
A
STRUKTOVAT
TYPEDEF
BOOL
Operační známky
Operační znak je jeden nebo víceakční symboly
přes operandy. vnitřní znak
mezery nejsou povoleny.
Operace se dělí na unární,
binární a ternární v počtu
zapojených operandů.
Jednoduché datové typy
Datový typ definuje:vnitřní reprezentace dat v paměti
počítač;
soubor hodnot, které mohou
přijímat hodnoty tohoto typu;
operace a funkce, které mohou být
platí pro hodnoty tohoto typu.
Jazyk C++ definuje šest standardů
jednoduché datové typy k reprezentaci
celé číslo, skutečné číslo, znak a
logické hodnoty. Typy dat
Mezi specifikátory typu patří:
char
- symbolický;
double - skutečná dvojitá přesnost s plovoucí desetinnou čárkou;
float - skutečná plovoucí desetinná čárka;
int - celé číslo;
dlouho
- celé číslo zvýšené délky (long integer);
short - celé číslo redukované délky (short integer);
podepsané - podepsané, tzn. celé číslo se znaménkem (nejvýznamnější bit se počítá jako
ikonický);
nepodepsaný - nepodepsaný, tzn. celé číslo bez znaménka (nejvýznamnější bit ne
považováno za ikonické).
prázdnota
- nedostatek hodnoty;
bool - boolean (může mít pouze hodnoty true a false.
Vnitřní reprezentace false je 0 (nula).
Jakákoli jiná hodnota je interpretována jako pravdivá.)
K popisu konstant použijte předtím servisní slovo const
popis typu. Například const float g=9,8;
10. Struktura C programu
C++ program jejednu nebo více funkcí. Jedna z funkcí
by se mělo nazývat main(). Je to z tohoto
funkce spustí spouštění programu a od
tato funkce podle potřeby,
jsou volány další funkce.
Nejjednodušší definice funkce má následující formát:
název return_type ([ parametry ])
{
příkazy, které tvoří tělo funkce
}
Zpravidla se funkce používá k výpočtu některých
hodnoty, takže před názvem funkce je uveden její typ. Li
funkce nesmí vracet hodnotu, je určen typ void.
kde:
– Tělo funkce je uzavřeno ve složených závorkách.
– Funkce nelze vnořovat.
– Každý příkaz končí středníkem (kromě
složený operátor).
11. Struktura C programu
Program se může skládat z několika modulů (zdrojových souborů) a zpravidlaobsahuje direktivy preprocesoru. Příklad struktury programu obsahující
hlavní, f1 a f2 funkce:
direktivy preprocesoru
popisy
int main()
{
operátory hlavních funkcí
}
int f1() (
operátory funkce f1
}
int f2() (
operátory funkce f2
}
/* Příklad jednoduchého programu */
#zahrnout
int main()
{
printf("Ahoj světe!");
návrat 0;
}
12. I/O funkce ve stylu C
Základní I/O funkce ve stylu C:int scanf (formát const char*...) // vstup
int printf(formát const char*...) // výstup
Provádějí formátovaný vstup a výstup libovolného počtu hodnot podle řetězce
formát. Formátovací řetězec obsahuje znaky, které se zkopírují do streamu (na obrazovku) popř
jsou požadovány ze streamu (z klávesnice) na vstupu a specifikace převodu počínaje
znak %, které jsou při vstupu a výstupu nahrazeny konkrétními hodnotami.
#zahrnout
int main() (
int i;
printf("Zadejte celé číslo\n");
scanf("%d", &i);
printf("Zadali jste číslo %d, díky!", i);
návrat 0; )
První řádek tohoto programu je direktiva preprocesoru, která vkládá do textu programu
hlavičkový soubor
direktivy preprocesoru začínají znakem #.
Třetí řádek je popis proměnné typu integer s názvem i .
Funkce printf na čtvrtém řádku vytiskne výzvu Zadejte celé číslo a přeskočí na nový řádek
podle \n escape sekvence.
Funkce scanf uloží celé číslo zadané z klávesnice do proměnné i a vytiskne se následující příkaz
zobrazí řetězec, který obsahuje, a nahradí specifikaci převodu hodnotou tohoto čísla.
13. I/O funkce ve stylu C++
Stejný program využívající knihovnutřídy C++
#zahrnout
pomocí jmenného prostoru std;
int main()
{
int i;
cout<< "Введите целое число\n";
cin >> i;
cout<< "Вы ввели число" << i << ", спасибо!"; return 0;
}
14. Standardní knihovny
Jazyk C má bohatou podporu ve formulářivíce než 450 knihovních rutin funkcí a maker, které můžete
zavolejte z vašich programů C k vyřešení
širokou škálu úloh, včetně I/O
nízká a vysoká úroveň, pracujte s
řádky a soubory, alokace paměti,
procesní řízení, transformace
dat, matematických výpočtů a
mnohem více.
15. Direktivy preprocesoru
První fáze se nazývá preprocesor.kompilátor. Pokyny pro preprocesor
se nazývají směrnice. Oni musí
začínají znakem #, kterému předchází
řádek může obsahovat pouze mezery
symboly.
Vyhledejte soubor, pokud není zadána úplná cesta,
vedeny ve standardních katalozích
zahrnuté soubory. Místo hranatého
závorky, lze použít uvozovky (" ").
- v tomto případě se vyhledávání souboru provádí v
adresář obsahující zdrojový soubor a
pak již ve standardních adresářích.
Soubory záhlaví obvykle mají
rozšíření.h .
16. Směrnice o preprocesoru #include
Pro připojení knihoven použijtesměrnice preprocesoru
# include [název souboru]
#include směrnice<имя_файла>vložky
obsah zadaného souboru do tohoto bodu
zdrojový soubor, kde je zapsán.
Například:
#zahrnout
#include "mylib.h"
17. #define direktiva preprocesoru
Direktiva #define definuje substituci v textuprogramy. Používá se k určení
symbolické konstanty.
Formát definice symbolické konstanty:
#define jméno text_substituce /*Všechny výskyty
jména jsou nahrazena textem náhrady */
Příklady:
#definujte M 1000
#define Vasia „Vasily Ivanovič“
18. Některé standardní knihovny
ALLOC.HPopis funkcí správy paměti
(alokace, dealokace atd.)
BIOS.H
Popis různých funkcí používaných v
přístup k podprogramům BIOS (zákl
I/O systém).
CONIO.H Popis různých funkcí používaných v
přístup k I/O rutinám DOS s
klávesnice.
GRAPHICS.H Obsahuje prototypy grafických funkcí.
MATH.H Obsahuje popis prototypů matematiky
funkcí
STDIO.H Definuje typy a makra potřebná pro
standardní I/O balíček. Také definuje
standardní vstupní/výstupní proudy stdin, stdout a
popisuje I/O podprogramy.
STDLIB.H Popisuje některé obecné rutiny:
podprogramy pro transformaci, vyhledávání, třídění a další.
STRING.H
Popisuje několik rutin pro zpracování řetězců a
práce s pamětí.
19. Funkce výstupu formátu PRINTF
To nejběžnější jsme již použilivýstupní funkcí v C je podprogram printf. Její
účelem je zapisovat informace na obrazovku.
Jeho formát je jednoduchý a flexibilní:
printf(<строка формата>, <объект>, <объект>, ...);
20. Funkce vstupu formátu SCANF
Pro interaktivní vstupní režim lze pravděpodobně použít vve většině případů funkce scanf. scanf je podle definice vstupní funkce
ekvivalent k printf; jeho formát vypadá takto:
scanf(<строка формата>,<адрес>,<адрес>,...)
Scanf má však jeden velmi důležitý rozdíl: následující objekty
formátovací řetězec musí být adresy, nikoli hodnoty. Například v
Program obsahuje následující výzvu:
scanf("%d %d", &a, &b);
Toto volání říká programu, že by měl od vás očekávat vstup.
dvě desetinná (celočíselná) čísla oddělená mezerou; první vůle
přiřazena k a a druhá k b. Všimněte si, že zde používáme operaci
adresy (&) pro předání adres aab do scanf.
21. Formátovací řetězec
Formátovací řetězec je řetězec, který začínáa končí dvojitými uvozovkami ("jako tento");
účelem printf je zapsat tento řádek na obrazovku. Před
výstup printf nahradí vše navíc
uvedené objekty v řadě podle
se specifikacemi formátu uvedenými v
samotná linka. Příklad příkazu printf:
printf(“ d= %f \n",d);
22. Formátovací řetězec
%f ve formátovacím řetězci je specifikace formátu. Všechnospecifikace formátu začínají znakem procenta (%) a
(obvykle) následované jedním písmenem označujícím typ
data a jak je transformovat.
%f použité ve specifikaci říká, co se očekává
nějaké skutečné číslo. Zde je několik dalších běžně používaných specifikací formátu:
- %u celé číslo bez znaménka
- %ld dlouhé celé číslo
- %p hodnota ukazatele
- %d celé číslo
- %e číslo s pohyblivou řádovou čárkou v exponenciálním tvaru
- %c znak
- %s řetězec
- %x nebo %X celé číslo v hexadecimálním formátu.
23. Formátovací řetězec
Šířku pole můžete nastavit vloženímmezi % a písmenem, např. desetinné pole
šířka 4 je uvedena jako %4d. Hodnota bude
vytištěno posunuto doprava (před
mezery), takže celková šířka pole je 4.
Nebo například %6.2f by to znamenalo
přidělených 6 pozic pro reálné číslo,
a 2 - pod zlomkovou částí.
Pokud chcete vytisknout znak %, vložte %%.
24. Formátovací řetězec
\n v řetězci není specifikace formátu, alepoužíván (z historických důvodů) jako
escape sekvence a představuje
speciální znak vložený do řetězce. V tomto případě
\n vloží znak na začátek nového řádku, takže
po výstupu řádku se kurzor přesune na začátek nového řádku
linky.
- \f (překlad formátu nebo vymazat obrazovku)
- \t (tabulátor)
- \b (backspace<-)
- \xhhh (vložte znak s ASCII kódem hhh, kde hhh
obsahuje 1 až 3 hexadecimální číslice)
Pokud potřebujete vytisknout zpětné lomítko, pak
vložit \\.
25. Příklad programu v jazyce C
#zahrnout#zahrnout
hlavní()
{
plovoucí x1,y1,x2,y2;
printf("Zadejte dvě čísla: ");
scanf("%f %f %f %f",&x1,&y1,&x2,&y2);
float d = sqrt(pow((x2-x1),2)+pow((y2-y1),2));
printf("d= %f \n", d);
}
26. Další výstupní funkce PUTS, PUTCHAR
Existují dvě další výstupní funkce, které vám mohou pomocizajímavosti: klade a putchar. Funkce puts vyšle na výstup řetězec
obrazovce a ukončí výstup znakem nového řádku.
Zvažte příklad programu:
#zahrnout
hlavní()
{
puts("Ahoj, studente VKI NSU");
}
Všimněte si, že \n je na konci řádku vynecháno; to není nutné, protože
klade sám přidává tento znak.
Naopak funkce putchar zapíše jeden znak
obrazovce a nepřidává \n. putchar(ch) je ekvivalentní
printf("%c",ch).
27. Funkce GETS, GETCH
hlavní(){
název znaku;
printf("Jak se jmenuješ: ");
scanf("%s",jméno);
}
Pokud zadáte příjmení a jméno, zobrazí se pouze příjmení. Protože
mezera, kterou zadáte za jménem, signalizuje skenování konce vstupu
linky.
Tento problém můžete vyřešit pomocí funkce get.
hlavní()
{
název znaku;
printf("Jak se jmenuješ: ");
dostane(jméno);
printf("Ahoj, %s\n", jmeno);
}
28. Funkce GETS, GETCH
#zahrnout#zahrnout
hlavní()
{
clrscr();
název znaku;
printf("Jak se jmenuješ: ");
dostane(jméno);
printf("Ahoj, %s\n", jmeno);
getch();
}
Zde funkce getch čeká na zadání libovolného znaku.
Funkce getch přečte jeden znak z klávesnice bez problému
na obrazovku (na rozdíl od scanf a get). Všimněte si, že nemá
parametr. Pokud funkci přiřadíme symbolické proměnné, pak
získá hodnotu stisknutého znaku.
Například: c=getch();
29. Operace přiřazení
Nejběžnější operací je přiřazení,například p=a/b nebo ch = getch(). V C
přiřazení je označeno jedním znakem
rovnost (=); zatímco hodnota napravo od znaménka
rovnost je přiřazena proměnné vlevo.
Můžete také použít sekvenční
zadání, například: suma=a= b. Takový
případech se přiřazení provádí vpravo
doleva, to znamená, že b bude přiřazeno k a, které v
zase bude přiřazen k součtu, tedy všem
tři proměnné získají stejnou hodnotu (a
jmenovitě počáteční hodnota b).
30. Aritmetické operace. Přírůstek. Dekrementovat.
C podporuje obvyklou sadu aritmetických operací:- násobení (*)
- divize (/)
- určení zbytku dělení (%)
- sčítání (+)
- odčítání (-)
Chcete-li zvýšit hodnotu proměnné o jednu, použijte přírůstek (++),
decrement (--) pro snížení o jednu.
Tak:
x++; // zvýšení x o jednu
y--; // snížení y o jednu
Příklady operací s postfixem a prefixem:
a=2;
a=2;
x=18-2*a++;
x=18-2*(++a);
Dostaneme:
a=3
a=3
x=14
x=12
31. Kombinované operace
Následuje několik příkladů výrazůa způsoby, jak je snížit:
a = a + b zkráceno na a += b;
a = a - b; zkráceno na a -= b;
a = a* b; zkráceno na a *= b;
a = a/b; zkráceno na a /= b;
a = a % b; sníženo na a %= b;
32. Příklad 1
Vypočítejte X3 a X10 pomocí čtyř násobení prodaná celočíselná hodnota X.
#zahrnout
int x,x2,x3,x5,x10;
hlavní() (
printf("\n Výpočetní program X^3 a X^10\n");
puts("Zadejte hodnotu X");
scanf("%i",&x);
x2=x*x;
x3=x*x2;
x5=x2*x3;
x10=x5*x5;
printf("%i na 3. mocninu = %i \n",x,x3);
printf("%i na 10. mocninu = %i",x,x10);
}
33. Příklad 2
Daný úhel v radiánech. Vypočítejte sinus a kosinus úhlu.#zahrnout
#zahrnout
float Angle,Result1,Result2;
hlavní()
{
printf("\n Program pro výpočet sin a cos úhlu\n");
puts("Nastavte hodnotu úhlu v radiánech");
scanf("%f",&Úhel);
Vysledek1=sin(Uhel);
Vysledek2=cos(Uhel);
printf("Sinus úhlu je %f \n",Výsledek1);
printf("Kosinus úhlu je %f",Výsledek2);
Každý program napsaný v jazyce C se skládá z jedné nebo více „funkcí“, což jsou základní moduly, ze kterých je sestaven.
Příklad struktury jednoduchého programu v C:
Obecná forma |
Příklad |
direktivy preprocesoru |
#zahrnout # definovat N 10 |
název hlavní funkce | |
začátek těla hlavní funkce | |
deklarace proměnných a polí |
intx=1; charstr[N]; |
programová prohlášení |
klade("Vstupte název"); dostane(str); printf("\n %s, %d jsi můj host!",str,x); |
Konec těla hlavní funkce |
Direktivy preprocesoru
Součástí kompilátoru je program tzv preprocesor. Preprocesor pracuje před překladem programu z vysokoúrovňového jazyka do strojového jazyka a provádí jeho předběžnou transformaci. Každá direktiva preprocesoru začíná znakem # (číslo) a zabírá celý řádek. Direktivy, které se nevejdou na jeden řádek, mohou pokračovat na dalším řádku. Znak pro pokračování řádku je znak zpětného lomítka (\) v řádku, na kterém se pokračuje.
Nejčastěji používanou direktivou je zahrnutí souboru do programu.
# zahrnout < název>
Kde název je název souboru obsaženého v textu programu.
Tato směrnice se nazývá substituční směrnice . Říká kompilátoru, aby jej nahradil souborem název. Soubor název tzv. hlavička. Obsahuje deklarace dat a funkcí používaných v programu. Například včetně směrnice
# zahrnout < matematika. h>
vám umožní v programu používat standardní matematické funkce, jako je sin x, cos x, ln x atd. Seznam standardních matematických funkcí bude uveden níže.
Směrnice
# zahrnout < stdio. h>
umožňuje programu používat standardní vstupně-výstupní funkce.
Další běžně používanou směrnicí je definiční směrnice.
#define S1 S2
Kde S1, S2- řetězce znaků.
Preprocesor hledá řetězec znaků v textu programu S1 a nahradí jej řetězcem S2 . Například včetně směrnice
# definovat P printf
umožňuje napsat písmeno na klávesnici P místo slova printf.
Tato náhrada se neprovádí uvnitř textových řetězců (literálů), znakových konstant a komentářů, tzn. direktivní akce # definovat se nevztahuje na texty oddělené uvozovkami, apostrofy a umístěné uvnitř komentářů.
Hlavní funkce
Každý program v jazyce C musí obsahovat deklaraci funkce hlavní(), které se říká hlavní funkce . Tato funkce obvykle nemá žádné parametry a nevrací žádnou hodnotu. Toto slovo se používá k označení této skutečnosti. prázdnota. Řádek s názvem hlavní funkce tedy obvykle vypadá takto:
void main (void)
void main()
Proměnné a pole
Pole je skupina proměnných stejného typu se společným názvem. Název proměnné nebo pole je identifikátor – sekvence složená ze znaků:
a – z, A – Z, 0 – 9,_(podtržítko),
a první znak nemůže být číslice. Malá a velká písmena latinské abecedy jsou vnímána jako různé znaky. Funkční slova jazyka C nelze použít jako název proměnné nebo pole. Hlavní funkční slova jazyka C jsou uvedena v příloze.
Prvky pole jsou rozlišeny svými čísly (indexy). Index může mít pouze nezáporné celočíselné hodnoty. Index se zapisuje za název pole v hranatých závorkách. Může existovat několik indexů. V tomto případě je každý index zapsán ve vlastních hranatých závorkách.
V jazyce C lze používat proměnné a pole různých typů. Každý typ dat zabírá určitý počet bajtů paměti a může nabývat hodnot z určitého rozsahu. Množství této paměti, a tedy i rozsah akceptovaných hodnot v různých implementacích jazyka C se může lišit. Počet bajtů paměti obsazených proměnnou určitého typu pro konkrétní implementaci jazyka C lze určit pomocí operace velikost(typ). Množství paměti přidělené pro proměnnou celočíselného typu můžete určit například takto:
k = sizeof(int); printf(„Pod proměnnou typuintpřiděleno %d bajtů paměti“,k); |
V těchto pokynech jsou uvažovány tři hlavní typy proměnných a polí, typické hodnoty velikosti obsazené paměti a rozsah hodnot (tabulka 1):
stůl 1
Specifikátor typu (klíčové slovo) |
Význam |
Velikost paměť (bajt) |
Rozsah hodnot |
|
Celé číslo |
32768 . . . +32767 |
|||
2147483648 . . . +2147483647 |
||||
Platný |
Skutečné typové číslo |
3,4-10-38. . . 3,4 až 10 38 (modulo) |
||
Symbolický |
128 . . . +127 |
Podívejme se blíže na proměnnou typu char. Jak je vidět z tabulky. 1, zadejte proměnnou char zabírá jeden bajt paměti. Jeden bajt paměti může obsahovat buď celé číslo bez znaménka z rozsahu , nebo celé číslo se znaménkem z rozsahu [–128, 127]. Toto číslo je kódem pro jeden z 256 znaků. Symbol odpovídající danému kódu je určen použitou tabulkou kódů. Tedy hodnota proměnné typu char může být považováno buď za celé číslo, nebo jako znak, jehož kód se rovná tomuto číslu.
Pozastavte prosím AdBlock na tomto webu.
Doufám, že už jste si na svůj počítač nainstalovali nějaké IDE a naučili se v něm kompilovat programy. Pokud ne, tak
Všechny programy napsané v C mají společnou strukturu. O čem budeme hovořit v této lekci. Náš první program napsaný v předchozím kroku nám s tím pomůže.
Vyplníme jednoduchou mapu. V tuto chvíli víme, že programy existují, ale nevíme, jak jsou uvnitř uspořádány. Naše mapa tedy bude vypadat takto.
Obr.1 Mapa "Struktura programů C." První úroveň.
V průběhu kurzu se budeme k této mapě vracet, zpřesňovat ji, doplňovat o nové prvky a bloky.
Nyní pozornost. Nebojte se! Níže je uveden zdrojový kód tří jednoduchých programů. Vaším úkolem je si je pozorně prohlédnout a pokusit se v jejich kódu najít nějaký vzor (něco, co je běžné v každém programu).
Výpis 1. Program 1. Vytiskne "Hello, World!"
#zahrnout
Výpis 2. Program 2
int main(void) ( int a, b, c; a = 5; b = 10; c = a+b; return 0; )
Výpis 3. Program 3
#zahrnout
Udělejte si čas a sledujte pokračování lekce a správnou odpověď na tento problém. Nejprve si zkuste odpovědět sami. Poté klikněte na tlačítko "Sledovat pokračování!"
Takže odpověď zní: Ve všech výše uvedených programech existuje následující konstrukce:
Výpis 4. Hlavní funkcí každého programu v C je hlavní funkce.
int main(void) ( return 0; )
Co je to za design? Toto je deklarace hlavní funkce. Každý program napsaný v C má takovou funkci. Ať už je to velký program nebo malý, počítačová hra nebo program "Hello, World!" napsaný vámi nebo Billem Gatesem - pokud je program napsán v C - má hlavní funkci. . To je takříkajíc hlavní funkce našeho programu. Když spustíme program, můžeme si o sobě myslet, že spouštíme hlavní funkci programu.
Zastavme se na chvíli. Zdá se, že jsme již přišli na něco o struktuře programů v jazyce C. Jakýkoli program v jazyce C musí obsahovat hlavní funkci. Zobrazme tuto skutečnost na naší znalostní mapě "Struktura programů C."
Obr.2 Mapa "Struktura programů C." hlavní funkce.
Nyní nás mapa neobtěžuje svou zející prázdnotou. Pokračujme ve výzkumu.
Dovolte mi mluvit trochu o hlavní funkci ao funkcích obecně.
Před názvem funkce je int, což je zkratka pro slovo integer, které se z angličtiny překládá jako „celek“. Takový zápis znamená, že když hlavní funkce dokončí svou práci, musí volajícímu programu (v našem případě jde o operační systém) vrátit celé číslo. Obvykle je to pro hlavní funkci číslo nula, které informuje operační systém: "Říkají, že je vše v pořádku. Nedošlo k žádným incidentům."
Viděli jste někdy chybové zprávy na obrazovce počítače? Obvykle píšou něco jako "Program se zhroutil ... bla bla bla ... Kód -314." Tady je to asi stejné. Rozdíl je v tom, že když se vyskytnou problémy, operační systém nás na to upozorní, a když je vše v pořádku, už nás to zase neobtěžuje.
Za názvem funkce se v závorce píše slovo void. Obecně se argumenty funkce obvykle zapisují do hranatých závorek, ale v našem případě, když je v hranatých závorkách zapsáno void, znamená to, že funkce nemá žádné argumenty. Jinými slovy, hlavní funkce ke spuštění nepotřebuje žádný další vstup zvenčí. O tom všem si povíme podrobněji, ale zatím si pamatujte, že slovo void místo argumentů funkce znamená, že pro tuto funkci nejsou vyžadovány žádné argumenty.
Uvnitř složených závorek je popis hlavní funkce, tzn. přesně to, co má tato funkce dělat.
Před uzavírací složenou závorkou vidíme příkaz return. Právě tento příkaz je zodpovědný za vrácení hodnoty z funkce. Tito. podívejte se, pokud program dosáhl tohoto bodu, pak bylo vše v pořádku a nedošlo k žádné chybě, což znamená, že můžete vrátit hodnotu nula.
Můžete se ptát, proč zrovna nula? A čert ví! Je to prostě tak, jak to obvykle dělají. V zásadě můžete vrátit nějaké jiné celé číslo, například 100 nebo -236. Pokud je to celé číslo. Pamatujete si int? Proto celek.
Takže jsme přišli na hlavní funkci. Ještě okamžik. To, co je napsáno ve složených závorkách, se obvykle nazývá "tělo funkce" (nebo popis funkce) a první část, ta před složenými závorkami, se nazývá záhlaví funkce.
Vraťme se k našemu prvnímu programu „Hello, World“ a podívejme se, co je co.
Výpis 5. Program "Ahoj světe".
#zahrnout
Něco, čemu nyní v tomto programu rozumíme. Nejasné zůstávají pouze dva řádky, pojďme popořadě.
Výpis 6. Direktiva include
#zahrnout
Tento řádek je zprávou pro kompilátor. Tyto zprávy, které začínají znakem #, se nazývají direktivy kompilátoru. Doslova: "připojit soubor stdio.h". Během kompilace bude místo tohoto řádku vložen obsah souboru stdio.h. Nyní si povíme něco málo o tomto souboru. stdio.h (od STanDart Input Output) je hlavičkový soubor, který popisuje různé standardní funkce související se vstupem a výstupem.
Nabízí se rozumná otázka: "Proč potřebujeme psát tento řádek? Proč sem vůbec potřebujeme vkládat tento soubor?" To je nutné, abychom v našem programu mohli použít standardní funkci výstupu obrazovky printf ().
Jde o to. Než něco použijeme v našem programu, musíme to nejprve popsat. Představte si situaci, byli jste požádáni, abyste přinesli lustr, ale nevíte, co to je. Není jasné, co dělat.
Stejně tak kompilátor. Když na nějakou funkci narazí, hledá její popis (tedy co má dělat a co to znamená) na začátku programu (od úplného začátku až do okamžiku, kdy je v programu použita). Funkce printf() je tedy popsána v souboru stdio.h. Proto to spojujeme. Ale když to připojíme, kompilátor bude schopen najít funkci printf (), jinak vypíše chybu.
Mimochodem, je čas doplnit naši znalostní mapu. Před hlavní funkci přidáme ještě jeden blok, blok pro připojení hlavičkových souborů.
Obr.3 Mapa "Struktura programů C." Blok připojení souborů záhlaví.
Pokračujme v našem programu.
Výpis 7. funkce printf().
Printf("Ahoj světe!\n");
V tomto řádku zavoláme standardní funkci printf() pro zobrazení na obrazovku. V tomto nejjednodušším případě mu předáme jeden parametr, řetězec napsaný v uvozovkách, který musí být zobrazen na obrazovce, v našem případě je to Hello, World! \n Ale počkat, co to je \n? Při spuštění programu nebyly na obrazovce žádné \n. Proč jsme to sem tedy psali? Tato sekvence je speciální znak, který je příkazem pro přechod na další řádek. Je to jako stisknout klávesu Enter v MS Word. Takových speciálních znaků je několik, všechny jsou psány pomocí znaku "\" - zpětného lomítka. Tyto speciální znaky se nazývají řídicí znaky. Pak vám je ukážu. Jinak se na obrazovce objeví přesně to, co jste napsali do dvojitých uvozovek.
Mimochodem, všimněte si, že každý příkaz C končí znakem ";" (středník). Je to jako tečka na konci věty v ruštině. V běžném jazyce oddělujeme věty tečkou a v programovacím jazyce C oddělujeme příkazy od sebe středníkem. Středník je tedy povinný. V opačném případě bude kompilátor nadávat a dát chybu.
Chcete-li volat funkci, musíte napsat její název a v závorkách zadat parametry, které jí byly předány. Funkce může mít jeden nebo více parametrů. Nebo zde nemusí být žádné parametry, v takovém případě nemusíte nic psát do závorek. Například výše jsme zavolali funkci printf() a předali jí jeden parametr, řetězec, který se má vytisknout na obrazovku.
Mimochodem, dobrá rada. Vzhledem k tomu, že hlavní funkce je vždy přítomna v každém programu a doslova v každém programu potřebujeme něco zobrazit na obrazovce, doporučuji si rovnou vytvořit soubor s následující mezerou, abyste nepsali pokaždé to samé.
Výpis 8. Standardní šablona pro C programy.
#zahrnout
No, zdá se, že je to vše. Tuto první lekci lze považovat za dokončenou. I když ne, je tu ještě jedna věc.
Nejdůležitější v této lekci je samozřejmě obecná struktura programu. Kromě toho jsme se ale naučili zobrazovat na obrazovce libovolný text. Zdá se, že se nenaučili vůbec nic, ale i to stačí na to, abyste například 8. března udělali malý dárek mamince.
Zdrojový kód programu pohlednice je v archivu se zdrojovými kódy této lekce. Experiment! Uspěješ.