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
[email protected]
2010 szeptember 30.
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
Fodor A. (Pannon Egyetem)
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
Információs technológia
2009 október
6 / 28
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
Egész típusok short ⇐ int ⇐ long
SCHAR_MAX SCHAR_MIN UCHAR_MAX CHAR_BIT USHRT_MAX SHRT_MAX SHRT_MIN UINT_MAX ULONG_MAX INT_MAX INT_MIN LONG_MAX LONG_MIN CHAR_MAX CHAR_MIN MB_LEN_MAX I64_MAX I64_MIN _UI64_MAX
127 -128 255 8 65535 32767 -32768 4294967295 4294967295 2147483647 -2147483647-1 2147483647 -2147483647-1 127 -128 2 9223372036854775807 -9223372036854775807-1 0xffffffffffffffff
Fodor A. (Pannon Egyetem)
Maximum signed char value Minimum signed char value (0xff) Maximum unsigned char value Number of bits in a char (0xffff) Maximum unsigned short value Maximum (signed) short value Minimum (signed) short value (0xffffffff) Maximum unsigned int value (0xffffffff) Maximum unsigned long value Maximum (signed) int value Minimum (signed) int value Maximum (signed) long value Minimum (signed) long value (255 if /J option used) Maximum char value (0 if /J option used) Minimum char value Maximum number of bytes in multibyte char Maximum (signed) __int64 value Minimum (signed) __int64 value Maximum (unsigned) __int64 value
Információs technológia
2009 október
8 / 28
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
Lebeg?pontos típusok float ⇐ double ⇐ long double
DBL_DIG DBL_EPSILON DBL_MANT_DIG DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP _DBL_RADIX _DBL_ROUNDS FLT_DIG FLT_EPSILON FLT_MANT_DIG FLT_MAX FLT_MAX_10_EXP FLT_MAX_EXP FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP FLT_RADIX FLT_ROUNDS
15 2.2204460492503131e-016 53 1.7976931348623158e+308 308 1024 2.2250738585072014e-308 (-307) (-1021) 2 1 6 1.192092896e-07F 24 3.402823466e+38F 38 128 1.175494351e-38F (-37) (-125) 2 1
Fodor A. (Pannon Egyetem)
# of decimal digits of precision Smallest such that 1.0+DBL_EPSILON !=1.0 # of bits in mantissa Maximum value Maximum decimal exponent Maximum binary exponent Minimum positive value Minimum decimal exponent Minimum binary exponent Exponent radix Addition rounding: near Number of decimal digits of precision Smallest such that 1.0+FLT_EPSILON !=1.0 Number of bits in mantissa Maximum value Maximum decimal exponent Maximum binary exponent Minimum positive value Minimum decimal exponent Minimum binary exponent Exponent radix Addition rounding: near
Információs technológia
2009 október
9 / 28
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
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ípus változónév <, ...>; 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
A C programozási nyelv (Típusok és operátorok)
A változók típusai a C nyelvben
Saját típus létrehozása Érvényes típusokhoz szinonim nevet rendel hozzá typedef Példa:
unsigned \\ unsigned \\ \\
long double típusnév, ami meghatároz egy típust 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
A C programozási nyelv (Típusok és operátorok)
Konstansok, értékadás
Konstansok definíciója
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
A C programozási nyelv (Típusok és operátorok)
Konstansok, értékadás
É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
A C programozási nyelv (Típusok és operátorok)
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
A C programozási nyelv (Típusok és operátorok)
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
A C programozási nyelv (Típusok és operátorok)
Operátorok
Logikai 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
A C programozási nyelv (Típusok és operátorok)
Operátorok
Bitenkénti operátorok
& bitenkénti és 3&5 ⇒ 1 | bitenkénti vagy 3|5 ⇒ 7 ∧ bitenkenti kizáró vagy 3 ∧ 5 ⇒ 6 ∼ bitenkenti negálás (egyes komplemens) ∼3⇒4
Fodor A. (Pannon Egyetem)
Információs technológia
2009 október
22 / 28
A C programozási nyelv (Típusok és operátorok)
Operátorok
Léptető 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 << 1 5 << 2 64 << 1 64 << 2
00000101 00001010 00010100 01000000 10000000 00000000
= = = = = =
5 10 20 64 128 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 >> 1 5 >> 2 4 >> 1 4 >> 2 4 >> 3 Fodor A. (Pannon Egyetem)
00000101 00000010 00000001 00000100 00000010 00000001 00000000
= = = = = = =
5 2 1 4 2 1 0
Információs technológia
2009 október
23 / 28
A C programozási nyelv (Típusok és operátorok)
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
A C programozási nyelv (Típusok és operátorok)
Operátorok
Feltételes kifejezés operátor (?:)
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
A C programozási nyelv (Típusok és operátorok)
Operátorok
A ++ és −− operátor ++ 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
A C programozási nyelv (Típusok és operátorok)
Operátorok
Precedencia és a kiértékelés sorrendje
Fodor A. (Pannon Egyetem)
Információs technológia
2009 október
27 / 28
A C programozási nyelv (Típusok és operátorok)
Operátorok
Példaprogram #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