Skočiť na obsah


Programovanie v jazyku C a C#

Návody pre začiatočníkov a pokročilých



Fórum: Škôlka jazyka C
- - - - -
Fotografia

2. lekcia C ( Premenné) škôlka


Premenné a práca s nimi
Od teraz už nebudem v príkladoch používať hlavičky programov, ale ty ich pri svojich úlohách používaj!

Premenná je znak alebo niekoľko po sebe idúcich znakov. (napr.: a, b, strana, velkost, prve_cislo, hlavny_znak, a pod.)
Premenným je nutné deklarovať typ.

Základné dátové typy sú dva druhy:
(len pre hrubú orientáciu uvediem u jednotlivých typov aj ich veľkosť v bite na platforme x86)

1)celočíselné:
char - znak (má veľkosť 8 bite)
short - krátke celé číslo (má veľkosť 16 bite)
int - celé číslo (má veľkosť 16 bite alebo 32 bite)
long - dlhé celé číslo (má veľkosť 32 bite) (používa sa pri kompilátore, ktorý generuje
šesťnásť bitový kód, alebo ak má operačný systém šesťnásť bitovú architektúru)
Môžu byť signed, teda záporné, nula a kladné celé čísla
alebo unsigned, teda nula a kladné celé čísla.

2) reálne (s desatinnou čiarkou):
float - reálne číslo (má veľkosť 32 bite)
double - reálne číslo s dvojitou presnosťou (má veľkosť 64 bite)
long double - reálne číslo najväčšie (má veľkosť 80 bite)

Veľkosti jednotlivých typov premenných závisia na platforme, kde sa jazyk C používa.
Na zistenie presnej veľkosti na konkrétnej platforme sa používa funkcia sizeof(typ_premennej).

Vo všeobecnosti však platí:

sizeof(char)<= sizeof(short)<= sizeof(int)<= sizeof(long)<= sizeof(float)<= sizeof(double)

Samostatne chcem upozorniť na deklarovanie premennej reťazca.
Deklaruje sa tzv. smerník, ktorý ukazuje na adresu v pamäti, kde bude reťazec začínať.


Príklady deklarácie:
#include <stdio.h>

int main()

{

char c;

short i;			 /* signed */

unsigned short j;

int k;				 /* signed */

unsigned int l;

long m;			 /* signed */

unsigned long n;

float f;

double g;

long double h;

char *smernik; /* miesto v pamati, kde retazec zacina */

}

Ak premennú nedeklaruješ a použiješ ju, kompilátor ti vynadá. :lol:

Príklad:

Obrázok

Zvykom programátorov je používať nasledovné identifikátory premenných:
i j k - indexy, parametre cyklov
c - ch - znaky
m n - čítače
f - r - reálne čísla
p_ - začiatok identifikátoru napr. p_plat
s - reťazce*
*neznamená to, že každý reťazec sa musí nazvať s, ale aby sa nestalo, že ak sa v programe vyskytne identifikátor s, nemôže to byť napr. identifikátor pre reálne číslo.


Pokiaľ sa má premenná v programe použiť, je treba jej priradiť nejakú hodnotu.
Príklady:
j = 5;
d = 'z'
f = f + 3,14 * i;
Pretože priradenie je výraz, je možné niekoľkonásobné priradenie:
k = j = i = 2;
Vyhodnocuje sa sprava doľava:
k = (j = (i = 2))
Všetky premenné majú rovnakú hodnotu: 2

Údaje (hodnoty) priraďované premenným sa nazývajú konštanty a sú:

Celočíselné:
desiatkové 15, 0, 1
osmičkové 065, 015, 0, 01
šestnástkové 0x12, 0X3A, 0XCD, 0xCD, 0Xcd, 0x15, 0x0, 0x1

Reálne:
15., 56.8, .78, 3.14

Znakové:
'a', '*', '4'

Reťazcové:

Obrázok

Ak premennej nedefinuješ konštantu a použiješ ju, výstup nemôže byť správny, pretože deklarovaná premenná sa nachádza niekde v pamati a má neznámu hodnotu.
Príklad:

Obrázok

Operátory
Binárne:
+ sčítanie
- odčítanie
* násobenie
/ delenie (celých aj desatinných čísiel)
príklad:
(int) 9 / 2 = 4 (ako vidíte, nie je to presné)
(float) 9 / 2 = 4.500000 (6 desatinných miest)
% delenie modulo
príklad:
9 % 2 = 1 (zvyšok po celočíselnom delení)

Špeciálne:
inkrement ++ alebo --
príklad:
++výraz (výraz je najprv zväčšený o 1 a potom je táto nová hodnota vrátená ako hodnota výrazu)
výraz++ (vrátená je pôvodná hodnota výrazu a potom je výraz zväčšený o 1)
-- je ekvivalent ++

Obrázok

Priraďovacie:
i += j; (i = i + j)
i -= j; (i = i – j)
i *= j; (i = i * j)
i /= j; (i = i / j)
i %= j; (i = i % j)
a taj ďalej

!!! Nepoužívajte operátory takto :
i + = j;
ale takto:
i += j;
niektorým kompilátorom to robí potiaže!!!


Tieto operátory budú vysvetlené neskôr:
i >>= j;
i <<= j;
i &= j;
i ^= j;
i |= j;

Vstup a výstup znakov

Na vstup a výstup jedného znaku sa používajú príkazy getchar() a putchar().

Obrázok

Je nutné si uvedomiť, že po volaní getchar() môžeme napísať veľa znakov, kým nestlačíme ENTER, putchar() vypíše len prvý znak, ostatné ignoruje.

Ďalej je dôležité, že premenná znak môže byť deklarovaná ako char, ale aj ako int. Časom uvidíš, že niekedy je nutné deklarovať int a niekedy char.


Formátovaný výstup


Používa sa príkaz printf().
printf("%d", i)
Kde '%d' označuje že argument je formátová špecifikácie, 'i' označuje deklarovanú a definovanú premennú.

So znakom % môže byť uvedený celý rad formátových špecifikácií:
c - znak (pozn. Jeden znak je lepšie čítať zn = getchar(); ako scanf(„%c“, &zn) ;)
d - desiatkové číslo typu signed int
ld - desiatkové číslo typu signed long
u - desiatkové číslo typu unsigned int
lu - desiatkové číslo typu unsigned long
f - float (pre printf() tiež double)
Lf - long double (Pozor, L musí byť veľké)
lf - double (Pozor, niekedy sa nedá použiť pre printf())
x - hexadecimálne číslo malými písmenami napr.: 1a2c
X - hexadecimálne číslo veľkými písmenami napr.: 1A2C
o - osmičkové číslo
s - reťazec


Tu si to treba poriadne naštudovať! Je toho viac ako som ukázal.


Treba si uvedomiť, že počet argumentov výstupu môže byť viac než 2, to znamená že sa dá vytlačiť viac než jedna premenná.

Príklad:

Obrázok

Tu je dôležité, že koľko je argumentov na ľavej strane, toľko ich musí byť aj na pravej.

Počul si už termín ASCII tabuľka?
Každý znak má svoju neopakovateľnú hodnotu v rozsahu 0 až 255. V tabuľke sa používajú spravidla
decimálne a hexadecimálne hodnoty jednotlivých znakov.

Znaky s decimálnou hodnotou 0 - 127 tvoria základnú tabuľku.
Znaky s hodnotou 0 - 31 sú takzvané netlačiteľné znaky.

Obrázok

Znaky s decimálnou hodnotou 128 - 255 tvoria doplnkovú tabuľku.

Obrázok

Z tohto vyplýva, že si môžeš vypísať decimálnu alebo hexadecimálnu hodnotu akéhokoľvek znaku.

Obrázok

Úlohy:

1. úloha: Napíš do súboru ludolf.c, skompiluj a spusti nasledovný program:
#include <stdio.h>

main()

{

float pi;

pi = 3.1415926535;

printf("Pi = %f",pi);

}
2. úloha: Napíš program pism.c, v ktorom budeš mať premennú pismk typu char. Najprv do
nej vložíš písmeno A (príkazom pismk = 'A'; – tie apostrofy okolo toho A sú
dôležité) potom jej obsah zväčšíš o 1 a vypíšeš. Čo dostaneš? Čo dostaneš, ak o 1
zväčšíš premennú v ktorej je uložené písmenko 'Z'? Čo napíšu na obrazovku príkazy
printf("%c %d\n",65,65);

printf("%c %d\n",'C','C');
Spoiler


3. úloha: Napíš program, v ktorom budeš mať dve premenné typu int (mená im vymysli sám),
naplň ich nejakými hodnotami a potom vypíš ich súčet a súčin. Je nutné aby program vypisoval súčet a súčin správne pre ľubovoľné hodnoty tých dvoch premenných.
Spoiler

4. úloha: Napíš program, ktorý vypíše nasledujúcu tabuľku:
--------------

| 1 x 9 =  9 |

| 2 x 9 = 18 |

| 3 x 9 = 27 |

| 4 x 9 = 36 |

| 5 x 9 = 45 |

| 6 x 9 = 54 |

| 7 x 9 = 63 |

| 8 x 9 = 72 |

| 9 x 9 = 81 |

|10 x 9 = 90 |

--------------
pričom sa v jeho zdrojovom kóde bude nachádzať len číslo 1 a 9, aj to iba raz a to v riadku, ktorý vyzerá takto:
int i = 9, j = 1;
Žiadne iné čísla v kóde nebudú!!!
Spoiler

5. úloha: Sú dané definície:
int a = 2, b = 2, c = 1, d = 0, e = 4;
Napíš program ktorý vypíše hodnoty nasledujúcich výrazov a správnosť skontroluj vlastným výpočtom (tiež v tom programe)
a)
a++ / ++c * --e
b )
--b * c++ -a
c)
-b - --c
d)
++a - --e
e)
e / --a * b++ / c++
f)
a %= b = d = 1 + e / 2
(po každom výpočte daj do premenných pôvodné hodnoty)
Spoiler

6. úloha: Napíš program, ktorý vypíše maximálne číslo, ktoré je možné uložiť do unsigned int a do signed int.
Pomôcka: -1 ako signed int je maximálne unsigned int a maximálne signed int je ½ maximálneho unsigned int.

7. úloha: Napíš program, ktorý zistí to isté ako v úlohe č. 6 pre typy short a long.
Spoiler

8. úloha: Napíš program, ktorý objasní všetky spôsoby použitia operátora / (delenie celočíselné aj reálne) a operátora % (delenie modulo).
Spoiler

9. úloha: Napíš program, ktorý krátko pípne. :D
Spoiler
  • 0

Popis: Premenné

- typy a deklarácia premenných
- operátory: binárne, špeciálne, priraďovacie
- vstup a výstup znakov
- formátovaný výstup
- ASCII tabuľka
- úlohy k lekcii
Poznámky: Ak chceš, aby ti niekto úlohy skontroloval, zabal ich do zip-u a zašli na e-mail:
libcosenior zavináč gmail botka com

Poprípade tam môžeš konzultovať, čo ti nie je jasné.
Odkazy:


-1 Komentárov


Najlepšie lekcie


Najnovšie pridané lekcie


Najnovšie komentáre


Najviac komentované lekcie


Najviac zobrazené lekcie


Náhodné lekcie


Na tejto stránke bolo užívateľ(ov) za posledných 30 minút

členov, návštevníkov