Információs Technológia

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Információs Technológia"

Átírás

1 Információs Technológia A C programozási nyelv (Típusok és operátorok) Fodor Attila Pannon Egyetem Műszaki Informatika Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010 szeptember 30.

2 Deklaráció és definíció Deklaráció Minden névről meg kell mondani mire szeretnénk használni, mert ennek a hiányában a fordító nem tud mit kezdeni az adott névvel A név tulajdonságai a következők : típus, tárolási osztály, láthatóság Nem történik memória foglalás Definíció Ha az a cél, hogy a deklarációnak megfelelő objektum is létrejöjjön a memóriában akkor DEFINÍCIÓT kell alkalmazni. A DEFINÍCIÓ olyan DEKLARÁCIÓ, amely helyfoglalással jár. Fodor A. (Pannon Egyetem) Információs technológia 2009 október 2 / 28

3 A C nyelv típusai Skalár (egyszerű típus) Aritmetikai típusok Egész jellegű típusok char int enum Lebegőpontos típusok float double Mutató típusok Összetett típus Összeállított típusok Tömb típusok Structúra (struct) típusok Unió (union) típusok Fodor A. (Pannon Egyetem) Információs technológia 2009 október 3 / 28

4 Alaptípusok, Típusmódosítók, Típusminősítők, Típuselőírás Alaptípusok char int float double enum struct union void (típusnév hiánya; üres típus) Típusmódosítók short (a tárolási hosszat szabályozza) long (a tárolási hosszat szabályozza) signed (előjeles) unsigned (előjel nélküli) Típusminősítők: const (olyan objektum definiálható, amely nem változatható meg (olvasható objektum)) Típuselőírás: (alaptípus, típusmódosítók, típusminősítők) Fodor A. (Pannon Egyetem) Információs technológia 2009 október 4 / 28

5 Változók mérete (sizeof operátor) sizeof kifejezés sizeof(típus) sizeof(char) 1 byte (8 bit) sizeof(short) 2 byte (16 bit) sizeof(long) 4 byte (32 bit) sizeof(short) sizeof(int) sizeof(int) sizeof(long) Az int mindig az adott arcitektúrán a gépi szó mérete Fodor A. (Pannon Egyetem) Információs technológia 2009 október 5 / 28

6 Típusok helyfoglalása (32 bites rendszert használva) bool char, unsigned char, signed char short, unsigned short int, unsigned int intn long, unsigned long float double long double long long 1 byte 1 byte 2 bytes 4 bytes 1, 2, 4, or 8 bytes depending on the value of n ( intn is Microsoft-specific.) 4 bytes 4 bytes 8 bytes 8 bytes Equivalent to int64 Fodor A. (Pannon Egyetem) Információs technológia 2009 október 6 / 28

7 Az MS Visual Studio-ban használható típusok (Nem csak ANSI C típusok) Fodor A. (Pannon Egyetem) Információs technológia 2009 október 7 / 28

8 Egész típusok short int long SCHAR_MAX 127 Maximum signed char value SCHAR_MIN -128 Minimum signed char value UCHAR_MAX 255 (0xff) Maximum unsigned char value CHAR_BIT 8 Number of bits in a char USHRT_MAX (0xffff) Maximum unsigned short value SHRT_MAX Maximum (signed) short value SHRT_MIN Minimum (signed) short value UINT_MAX (0xffffffff) Maximum unsigned int value ULONG_MAX (0xffffffff) Maximum unsigned long value INT_MAX Maximum (signed) int value INT_MIN Minimum (signed) int value LONG_MAX Maximum (signed) long value LONG_MIN Minimum (signed) long value CHAR_MAX 127 (255 if /J option used) Maximum char value CHAR_MIN -128 (0 if /J option used) Minimum char value MB_LEN_MAX 2 Maximum number of bytes in multibyte char I64_MAX Maximum (signed) int64 value I64_MIN Minimum (signed) int64 value _UI64_MAX 0xffffffffffffffff Maximum (unsigned) int64 value Fodor A. (Pannon Egyetem) Információs technológia 2009 október 8 / 28

9 Lebeg?pontos típusok float double long double DBL_DIG 15 # of decimal digits of precision DBL_EPSILON e-016 Smallest such that 1.0+DBL_EPSILON!=1.0 DBL_MANT_DIG 53 # of bits in mantissa DBL_MAX e+308 Maximum value DBL_MAX_10_EXP 308 Maximum decimal exponent DBL_MAX_EXP 1024 Maximum binary exponent DBL_MIN e-308 Minimum positive value DBL_MIN_10_EXP (-307) Minimum decimal exponent DBL_MIN_EXP (-1021) Minimum binary exponent _DBL_RADIX 2 Exponent radix _DBL_ROUNDS 1 Addition rounding: near FLT_DIG 6 Number of decimal digits of precision FLT_EPSILON e-07F Smallest such that 1.0+FLT_EPSILON!=1.0 FLT_MANT_DIG 24 Number of bits in mantissa FLT_MAX e+38F Maximum value FLT_MAX_10_EXP 38 Maximum decimal exponent FLT_MAX_EXP 128 Maximum binary exponent FLT_MIN e-38F Minimum positive value FLT_MIN_10_EXP (-37) Minimum decimal exponent FLT_MIN_EXP (-125) Minimum binary exponent FLT_RADIX 2 Exponent radix FLT_ROUNDS 1 Addition rounding: near Fodor A. (Pannon Egyetem) Információs technológia 2009 október 9 / 28

10 Karakterkonstansok alakja, speciális értékek Egyszerű karakterek: Például: a kis a betű Például: : kettőspont spec. karakter escape kódja \ aposztróf \a alarm hangjelzés \b backspace visszatörlés \f form feed lapdobás \n new line újsor jel \r carriage return kocsi vissza \t horizontális tabulátor \v vertikális tabulátor \\ backslash \ \" idézőjel \? kérdőjel Fodor A. (Pannon Egyetem) Információs technológia 2009 október 10 / 28

11 Karakterkonstansok alakja, speciális értékek 2 numerikus escape karakterek \0 nulla értékű karakter \10 oktális 10 (8 decimális) értékű karakter \x10 a 10 hexadecimális (16 decimális) értékű karakter Kiterjesztett karakterkészlet alklamazásakor: L A Számításnál a... char típusú értéket előbb automatikusan mindig... int típusúvá alakítja, majd azzal számol. Fodor A. (Pannon Egyetem) Információs technológia 2009 október 11 / 28

12 Tárolási osztály A deklarációban a típust megelőző néhány alapszó: auto, register, static, extern Az objektum tárolásával, láthatóságával, élettartamával kapcsolatban tartalmaz előírásokat auto register static extern Fodor A. (Pannon Egyetem) Információs technológia 2009 október 12 / 28

13 Karaktersorozat tárolása, ábrázolása Nincsen karakter sorozat típus Macskakörmök (") közé zárt karaktersorozat Nyomtatható karakterekből: "Alma" Speciális szekvenciákból: "\talma\a\n" Haxadecimális vagy oktális számjegyekből: "\111\0111" Kiterjesztett karakterkészlet alkalmazása esetén L"Alma" A karaktersorozatot egy 0 \0 érték zárja le Fodor A. (Pannon Egyetem) Információs technológia 2009 október 13 / 28

14 Felsorolt típusok enum azonosító felsorolás Olyan egyedi típus, melynek értékkészlete a névvel megadott értékek halmaza Példa: enum evszak {tavasz, nyar, osz, tel} automatikusan 0, 1, 2, 3 Példa: enum evszak {tavasz, nyar=4, osz, tel} automatikusan 0, 4, 5, 6 Fodor A. (Pannon Egyetem) Információs technológia 2009 október 14 / 28

15 Példák egyszerű változók definiálására Egyszerű változó: egy egész vagy lebegőpontos érték tárolására alkalmas <tárolási osztály> típus <típus...> változónév <kezdőérték> <,...>; Példa: int alpha; int beta=50; int delta; int alpha, beta=50, delta; extern int gamma; register int epsilon; Fodor A. (Pannon Egyetem) Információs technológia 2009 október 15 / 28

16 Saját típus létrehozása Érvényes típusokhoz szinonim nevet rendel hozzá typedef Példa: unsigned long double \\ típusnév, ami meghatároz egy típust unsigned long double valtozo; \\ definíció, itt a valtazo \\ kezdőérték nélküli változó typedef unsigned long double tipusom; \\ Típus deklarálása tipusom voltozom; \\ Változó definiálása Fodor A. (Pannon Egyetem) Információs technológia 2009 október 16 / 28

17 Konstansok definíciója Konstansok, értékadás const Példa: const int konstansom; konstansom=4; const int konstansom=4; # makro Példa: #define KONSTANSOM 1 enum típus Fodor A. (Pannon Egyetem) Információs technológia 2009 október 17 / 28

18 Értékadás Konstansok, értékadás A bal oldal azt az objektumot jelöli ki (címzi meg) a memóriában, ahova a jobb oldalon megadott kifejezés értékét be kell tölteni = jel az értékadás operátora objektum = érték; (változó/kifejezés) = (változó/kifejezés); Példa: i = 5; i = j; Fodor A. (Pannon Egyetem) Információs technológia 2009 október 18 / 28

19 Operátorok Operátorok Aritmetikai operátorok (+ - * / %) Relációs operátorok ( < <= > >= ==!= ) Logikai operátorok ( &&! ) Bitenkénti operátorok (& ) Léptető operátorok (» «) Értékadó operátorok ( = += *=...) Feltételes operátor (?:) Fodor A. (Pannon Egyetem) Információs technológia 2009 október 19 / 28

20 Operátorok Aritmetikai és relációs operátorok Aritmetikai operátorok + összeadás - kivonás * szorzás / osztás egészek között: egészrész (5 / 2 2) % maradék képzés (5 % 2 1) Relációs operátorok (eredmény: 1/0 true/false) Az ANSI C-ben nincsen logikai változó < kisebb <= kisebb vagy egyenlő > nagyobb >= nagyobb vagy egyenlő == egyenlő! = nem egyenlő Fodor A. (Pannon Egyetem) Információs technológia 2009 október 20 / 28

21 Logikai operátorok Operátorok Logikai vagy: kifejezés1 kifejezés2 Példák: a < 3 a > 5 c > 3 a > 5 if (a < 3 a > 5) c = 8 ; Logikai és: kifejezés1 && kifejezés2 Logikai tagadás:! kifejezés Fodor A. (Pannon Egyetem) Információs technológia 2009 október 21 / 28

22 Bitenkénti operátorok Operátorok & bitenkénti és 3&5 1 bitenkénti vagy bitenkenti kizáró vagy bitenkenti negálás (egyes komplemens) 3 4 Fodor A. (Pannon Egyetem) Információs technológia 2009 október 22 / 28

23 Léptető operátorok Operátorok << logikai tolás balra 0-kat léptet be 2 hatványaival való szorzás Példa: (előjelnélküli 8 bites) = 5 5 << = 10 5 << = = << = << = 0 >> logikai tolás jobbra 0-kat léptet be 2 hatványaival való osztás Példa: (előjelnélküli 8 bites) = 5 5 >> = 2 5 >> = = 4 4 >> = 2 4 >> = 1 4 >> = 0 Fodor A. (Pannon Egyetem) Információs technológia 2009 október 23 / 28

24 Operátorok Értékadó operátorok és kifejezések Az értékadás is kifejezés Többszörös értékadás. Példa: a = b = c = 12; Minden kétoperandusú operator kombinálható az értékadással. Kifejezés1 operátor= Kifejezés2 + - * / %» «& Tömörebb írásmód. Egyszerű optimalizálási lehetőség. Példák: i+=4 i=i+4 i*=j i=i*j x/=y x=x/y Zárójelezésre ügyelni kell!!! x*=y+1 x=x*(y+1) Fodor A. (Pannon Egyetem) Információs technológia 2009 október 24 / 28

25 Feltételes kifejezés operátor (?:) Operátorok Kif1?Kif2:Kif3 Példa: z=(a>b)?a:b; if (a>b) z=a; else z=b; Fodor A. (Pannon Egyetem) Információs technológia 2009 október 25 / 28

26 A ++ és operátor Operátorok ++ inkrementáló (növelés eggyel) - - dekrementáló (csökkentés eggyel) Prefix forma: ++i és i Példa: int j, i = 5; j = ++i; i értékét 1-gyel megnöveljük Kiértékeljük az operandust: i-t, ami most 6, ez lesz a ++i kifejezés értéke j-be a kiértékelt jobbérték kifejezés értékét, a 6-ot másoljuk Postfix forma: i++ és i Példa: int j, i = 5; j = i++; j-be a kiértékelt jobbérték kifejezés értékét, a 5-t másoljuk kiértékeljük az operandust: i-t, ami most 6, ez lesz az i++ kifejezés értéke i értékét 1-gyel megnöveljük Fodor A. (Pannon Egyetem) Információs technológia 2009 október 26 / 28

27 Operátorok Precedencia és a kiértékelés sorrendje Fodor A. (Pannon Egyetem) Információs technológia 2009 október 27 / 28

28 Példaprogram Operátorok #include <stdio.h> void main(void) { int a, b; do { scanf("%d %d", &a, &b); if (a > b) printf("a nagyobb szám: %d\n", a); else printf("a nagyobb szám: %d\n", b); } while ( a > 0 ); } // Tömörebb formában #include <stdio.h> void main(void) { int a, b; do { scanf("%d %d", &a, &b); printf("a nagyobb szám: %d\n", (a>b)?a:b); } while ( a > 0 ); } Fodor A. (Pannon Egyetem) Információs technológia 2009 október 28 / 28