Anglická verze
logolink

< Zpět na seznam lekcí

Úvod do programovacího jazyka C

AlgortimyObsah lekce:

  • O jazyce C
  • Struktura programu v jazyce C
  • Proměnná a její datový typ
  • Přiřazení hodnoty do proměnné
  • Vstup a výstup
  • Příklad jednoduchého výpočtu matematického vzorce

O jazyce C

Vývoj jazyka C započal v letech 1969 – 1972 v laboratořích AT&T. O několik let později, v roce 1978 byl vytvořen 1. standard jazyka C. Autory tohoto standardu byly Brian W. Kernighan & Dennis M. Ritchie , kteří tento jazyk popsali v knize The C programming language.

Postupem času se jazyk C dočkal dalších verzí (ANSI C, C99, ...), které byly standardizovány, a nalézá uplatnění nejen v oblasti osobních počítačů, ale i v oblasti mobilních zařízení, mikropočítačů nebo i v průmyslu.

Pro vývoj aplikací v tomto programovacím jazyce lze využít celou řadu vývojových prostředí. Příklady, které jsou zde popsány, byly vytvořeny ve vývojovém prostředí Microsoft Visual C++ Express 2010.

Volně dostupná vývojová prostředí

Struktura programu v jazyce C

Před popisem základní struktury programu se nejprve podívejme na jednoduchý příklad. Výsledkem níže uvedeného programu bude výpis textu "Hello, World!".

UKÁZKA PROGRAMU ZAPSANÉHO V PROGRAMOVACÍM JAZYCE C
Hlavičkové soubory
#include <stdio.h> 
Hlavní funkce programu
int main() 
{
	Příkazová část
	printf("Hello, World!");
    fflush(stdin);
	getchar();
 	Návratová hodnota funkce
	return 0;
}

Když se podíváme na výše uvedený program, uvidíme, že na je obsažena direktiva #include s odkazem na soubor stdio.h. Tato direktiva slouží pro vložení knihoven, nebo přesněji hlavičkových souborů, které obsahují deklaraci funkcí, které lze v jazyce C použít. Výše zmíněný soubor stdio.h obsahují zejména funkce pro výpis do konzole, načtení dat od uživatele nebo pro práci se soubory. Těchto knihoven existuje velké množství a setkáte se s nimi v následujících lekcích.

Na dalším řádku je hlavička hlavní funkce programu. Program v jazyce C strukturujeme tak, že jej rozdělíme do jednotlivých funkcí – i nejjednodušší program však musí obsahovat minimálně jednu funkci a tou je funkce main, neboli hlavní funkce programu. Hlavní funkce programu se zapisuje následujícím způsobem:

int main()
{
	zde budou jednotlivé příkazy programu
	return 0;
}

Klíčové slovo main je název funkce. Napravo od něj jsou prázdné závorky. Ty mohou obsahovat vstupní parametry funkce (těm se budeme věnovat v některé z dalších lekcí). A nalevo od názvu funkce se nachází klíčové slovo int. Jedná se o datový typ návratové hodnoty funkce (neboli jaký bude výsledek funkce). V případě této funkce se jedná o celé čislo (int).

Za hlavičkou funkce následují složené závorky, v nichž jsou umístěny jednotlivé příkazy programu a příkaz return, který slouží pro předání návratové hodnoty funkce. V případě funkce main vede toto klíčové slovo k ukončení programu.

Když se podíváme na návratovou hodnotu této funkce, tak zjistíme, že v našem případě je to hodnota 0. U hlavní funkce programu tato hodnota říká, že program proběhl v pořádku a bude ukončen (při různých chybových stavech můžeme použít i jinou číselnou hodnotu).

Příkaz, který zatím nebyl popsán je řádek "printf("Hello, World!");" . Ten již není povinnou součástí základní struktury programu, ale jedná se o příkaz pro výpis textu do konzole. Za touto funkcí ještě následuje řádek, který obsahuje funkci getchar(); - ta je doplněna, aby program nebyl okamžitě ukončen (v tuto chvíli program čeká na stisk libovolné klávesy).

Vhodné je zde upozornit ještě na jednu skutečnost, a tou je fakt, že všechny příkazy programovacího jazyka C jsou ukončeny středníkem na konci řádku.

Takže obecně vzato má program následující strukturu:

UKÁZKA PROGRAMU ZAPSANÉHO V PROGRAMOVACÍM JAZYCE C
Hlavičkové soubory
#include <stdio.h>
#include <jménodalšíhosouboru.h>
…

Hlavní funkce programu
int main() 
{
	Příkazy programu
	...
	Návratová hodnota funkce
	return 0;
}

Několik poznámek:

Struktura programu se někdy může trochu odlišovat od výše uvedeného kódu. Rozdíl bude zejména v hlavičce funkce main, která někdy může mít vstupní hodnoty, potom by řádek int main() vypadal následovně: int main(int argc, char* argv[]). Pokud nám vývojové prostředí nabídne strukturu v této podobě, můžeme ji ponechat beze změny. Význam těchto parametrů si však vysvětlíme později.

Na druhou odlišnost můžeme narazit ve vývojových prostředích MS Visual Studio a MS Visual C++ Express. Řádek #include <stdio.h> je zde nahrazen řádkem #include "stdafx.h" a řádek int main() je zde nahrazen řádkem int _tmain(int argc, _TCHAR* argv[]). Pokud nám vývojové prostředí nabídne tuto strukturu, opět necháme beze změny.

Protože ve výuce budeme většinou používat vývojové prostředí MS Visual Studio, tak v dalším textu bude proto používána tato modifikace, která byla popsány v předchozím odstavci.

UKÁZKA PROGRAMU ZAPSANÉHO V PROGRAMOVACÍM JAZYCE C - Modifikace v MS Visual Studio
Hlavičkové soubory
#include "stdafx.h" 
#include <jménodalšíhosouboru.h>
…

Hlavní funkce programu
int _tmain(int argc, _TCHAR* argv[])
{
	Příkazy programu
	...
	Návratová hodnota funkce
	return 0;
}

Komentáře

Důležitou součástí programu jsou i komentáře. Ty autorovi umožňují psát si do programu poznámky, které mu později mohou usnadnit orientaci v programu.

V jazyce C rozlišujeme dva typy komentářů:

  • Jednořádkové komentáře – v tomto případě jsou v řádku umístěny dvě lomítka (// text komentáře) a za komentář je považován text od těchto dvou lomítek do konce aktuálního řádku.
  • Víceřádkové komentáře – text, který má být považován za komentář, je ohraničen znaky lomeno + hvězdička na začátku a hvězdička + lomeno na konci komentáře (/* text komentáře */)
  • UKÁZKA POUŽITÍ KOMENTÁŘŮ
    /*
    ukázka základní struktury program v jazyce C
    */
    #include "stdafx.h" 
    
    // hlavní funkce programu
    int _tmain(int argc, _TCHAR* argv[])
    {
    	printf("Hello, World!"); // výpis textu na terminál
        fflush(stdin);
    	getchar();
    	return 0;
    }
    

Proměnná a její datový typ

Abychom mohli v programu uchovat nějakou hodnotu (například nějaké číslo x, které bude rovno třeba pěti), tak potřebujeme tzv. deklarovat proměnnou nějakého datového typu. Například v matematice často používáte zápis typu x=5. Tento zápis znamená, že x se rovná číslu 5.

Chceme-li mít v programu možnost takové x vytvořit a uchovat v něm nějakou hodnotu, pak musíme x deklarovat.

Z matematického zápisu x=5 také vidíme, že x může nabývat nějaké číselné hodnoty (v tomto případě přirozeného resp. celého čísla 5). Počítači musíme sdělit nejen to, jak se proměnná jmenuje, ale také to, jakých hodnot může nabývat (neboli jakého je datového typu = jaký typ dat v ní může být obsažen - tzn. zjednodušeně zda v ní budou čísla, znaky, písmena,...). Deklaraci provedeme tak, že uvedeme datový typ a za nám následuje jméno proměnné (s jedním datovým typem jsme se již setkali, a to s datovým typem pro celé číslo – int). Pro náš případ to zařídíme zápisem int x; - ten znamená, že v proměnné x může být uchováno téměř libovolné celé číslo.

Chceme-li mít v programu proměnnou x, která bude celočíselného datového typu, pak ji deklarujeme zápisem :

DEKLARACE PROMĚNNÉ X V PROGRAMOVACÍM JAZYCE C
#include "stdafx.h" 

int _tmain(int argc, _TCHAR* argv[])
{
	int x;
	return 0;
}

V programu můžeme deklarovat v podstatě libovolné množství proměnných (omezeni jsme pouze pamětí počítače). Pokud máme více proměnných stejného typu, pak je můžeme oddělit čárkami a nemusíme je psát pod sebe:

DEKLARACE PROMĚNNÝCH X,Y,A,B V PROGRAMOVACÍM JAZYCE C
#include "stdafx.h" 

int _tmain(int argc, _TCHAR* argv[])
{
	int x, y;
    int a;
    int b;
	return 0;
}

Kromě datového typu int můžeme v jazyce C používat i další datové typy. Jejich přehled je obsahem následující tabulky.

 

Datový typ

Povolený zkrácený zápis

Popis

Rozsah

Celočíselné datové typy se znaménkem

signed int

int

Celé číslo se znaménkem

od - 2 147 483 648
do + 2 147 483 647

signed short int

short int nebo short

Krátké celé číslo se znaménkem

od - 32 768
do + 32 767

signed long int

long int nebo long

Dlouhé celé číslo se znaménke,

od - 2 147 483 648
do + 2 147 483 647

signed char

char

Znak se znaménkem

od - 128
do + 127

Celočíselné datové typy bez znaménka

signed int

 

Celé číslo se znaménkem

od 0
do + 4 294 967 295

signed short int

signed short

Krátké celé číslo bez znaménka

od 0
do + 65 536

signed long int

signed long

Dlouhé celé číslo bez znaménka

od 0
do + 4 294 967 295

signed char

 

Znak bez znaménka

od 0
do + 256

Reálné datové typy

float

 

Reálné číslo s jednoduchou přesností

od 3.4×10-38
do 3.4×1038

double

 

Reálné číslo s dvojitou přesností

od 1.7×10-308
do 1.7×10308

long double

 

Reálné číslo se zvýšenou přesností

od 3.4×10-38
do 3.4×1038

 

Přiřazení hodnoty do proměnné

Pokud máme proměnnou deklarovanou, pak ji můžeme začít v programu používat. Pomocí operátoru přiřazení = (znak "rovná se") do ní vložíme hodnotu takto:

Přiřazení čísla 7 do proměnné x v programovacím jazyce C
 x = 7;

Vstup a výstup

Vstup

Vstupem rozumíme data, která vstupují do programu (zpravidla jako hodnoty nějakých proměnných). K zadání vstupu do programu použijeme funkci scanf. Funkce scanf má minimálně 2 parametry. Prvním parametrem je řetězec, který určuje jakým způsobem a v jakém formátu se mají hodnoty načíst, dalšími parametry jsou adresy jednotlivých proměnných, do kterých mají být načtené hodnoty uloženy. První otázkou je, jak získat adresu proměnné. V tomto případě si lze pomoci operátorem, který uvedeme před jménem proměnné. Pro získání adresy je třeba použít znak "&" (pro získání adresy proměnné x je použit zápis &x).

Nyní zpět k prvnímu parametru. Ten obsahuje tzv. řídící řetězec. V tomto řetězci je definováno, jakým způsobem se mají získat data od uživatele a jaké má být použito formátování a datový typ. Každá hodnota je v tomto řetězci označena znakem "%" a jedním písmenem dle následující tabulky.

Řetězec

Typ dat

%c

Znak

%d

Číslo int, desítkové znaménkové

%u

Číslo int, desítkové neznaménkové

%x

Číslo int, šestnáctkové malými písmeny

%X

Číslo int, šestnáctkové velkými písmeny

%o

Číslo int, osmičkové

%ld

Číslo long int, desítkové, znaménkové

%f

Číslo float

%lf

Číslo double

%s

Řetězec

 

Následující kód demonstruje možnosti použití příkazu scanf pro načtení hodnot (pro zjednodušení je vynechána základní struktura programu v jazyku C. Pro vyzkoušení programu je třeba umístit do funkce main):

Vstup proměnné v programovacím jazyce C
int x, y;
float z;
scanf("%d",&x); 	// načte 1 celé číslo a uloží do proměnné x
scanf("%f",&z); 	// načte 1 racionální číslo a uloží do z
scanf("%d %d",&x,&y); 	// načtou se dvě celá čísla oddělená mezerou
			// první se uloží do proměnné x, druhé do y
            

Výstup

Výstupem programu rozumíme informace, které nám program poskytne. Jedná se tedy o oznámení výsledku výpočtu nebo prostě jen o nějaké textové sdělení. Výstup nám bude vypisovat na obrazovku. Abychom na obrazovku něco vypsali, tak použijeme funkci printf. S touto funkcí jsme se již mohli v úvodu setkat. V našem prvním programu se jednalo o výpis textu "Hello, World!" (v programu to byl konkrétně řádek s příkazem printf("Hello, World!"); )

Funkce printf má syntaxi velmi podobnou funkci scanf, která slouží pro získání dat od uživatele. Prvním parametrem je opět řetězec, který obsahuje data, která mají být vypsána. Tento řetězec obsahuje text, který je ohraničený uvozovkama. V rámci tohoto příkazu se (stejně jako u scanf) mohou vyskytovat skupiny znaků, které začínají znakem %. Který je následován znaky, které určují, v jakém formátu mají být data zobrazena. Zápis těchto znaků je popsán v tabulce u funkce scanf, která byla popsána výše.

Další parametry obsahují proměnné, konstanty nebo hodnoty, které mají být za tyto řídící znaky dosazeny. Zde je však jeden rozdíl – nedosazujeme adresu proměnné, ale přímo proměnnou, tzn. vynecháme znak "&".

Výpis textu Ahoj na obrazovku v programovacím jazyce C
 printf("Ahoj");

Kromě běžných znaků mohou tyto řetězce obsahovat i znaky speciální, které slouží například pro zalomení řádku. Tyto znaky se nazývají "escape sekvence" a zapisují se znakem "\", za kterým následuje znak, dle toho, co se má zobrazit.

Seznam těchto sekvencí shrnuje následující tabulka.

Sekvence

Význam

\n

Nový řádek

\r

Návrat na začátek řádku

\f

Nová stránka

\t

Tabulátor

\b

Posun doleva

\a

Písknutí

\\

Zpětné lomítko

\’

Apostrof

\0

Nulový znak

VÝPIS TEXTU NA VÍCE ŘÁDKŮ V PROGRAMOVACÍM JAZYCE C
printf("1. radek\n2. radek\n3. radek\n");

Chceme-li vypsat hodnotu nějaké proměnné, pak do řetězce přidáme potřebný řídící znak (viz. popis příkazu printf výše) a jméno proměnné doplníme jako další parametr.

VÝPIS PROMĚNNÉ X V PROGRAMOVACÍM JAZYCE C
int x;
x = 5;
printf("%d",x);
VÝPIS PROMĚNNÉ X V PROGRAMOVACÍM JAZYCE C
int x;
x = 5;
printf("Hodnota x je %d!",x);

Náš ilustrační program pro vstup hodnoty proměnné x bychom měli vylepšit tak, aby uživatel věděl, co má dělat a informovat ho o výsledku (nyní už i s kompletní strukturou programu).

VÝPIS PROMĚNNÉ X V PROGRAMOVACÍM JAZYCE C
#include "stdafx.h" 

int _tmain(int argc, _TCHAR* argv[])
{
	int x;
	printf("Zadejte prosím hodnotu x: ");
	scanf("%d",&x);
	printf("Proměnná x má hodnotu: %d.",x);
    fflush(stdin);
	getchar();
	return 0;
}            

Příklad jednoduchého výpočtu matematického vzorce

Jak jsme viděli, tak jsme schopni napsat program, který uživateli sečte libovolná dvě zadaná čísla. Chtěli bychom ale také, aby za nás počítač uměl řešit náročnější matematické výrazy a vzorce. Především potřebujeme další běžně používané početní operace:

  • + sčítání
  • - odčítání
  • * násobení
  • / dělení
  • % zbytek po celočíselném dělení

Příklad: Vypočtěte objem a povrch krychle.

Objem a povrch krychle v programovacím jazyce C
            #include "stdafx.h" 

int _tmain(int argc, _TCHAR* argv[])
{
	int a;
 	printf("Zadejte prosím velikost strany krychle:"); 
 	scanf("%d", &a);
 	printf("Objem krychle o straně a= %d má hodnotu %d.\n", a, (a*a*a));
 	writeln("Povrch krychle o straně a= %d má hodnotu %d.\n', a, 6*(a*a));
 	getchar();
	return 0;

}            

Domácí úkol

Napište program pro výpočet povrchu a objemu kvádru.

Další čtení

Odkazy
webdesign, xhtml, css, php - Mgr. Michal Mikláš