Programozás alapjai C nyelv 3. gyakorlat Szeberényi Imre BME IIT
<
[email protected]>
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
-1-
Előző óra összefoglalása • • • • • • • •
Algoritmus leírása Szintaxis leírása C nyelv tulajdonságai Hagyományos C fordító C nyelv szerkezete, első C program Változó, típus fogalma Belső és külső ábrázolási forma Egész és valós típus belső ábrázolása
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
-2-
Karakter típus (char) Egésznek (byte) fogható fel és általában nem negatív. • értékkészlet: karakterek tárolására alkalmas [ CHAR_MIN, CHAR_MAX ]
-ban definiált
• konstansok: ’a’, ’9’, ’\n’, ’\012’, ’\x12’, • művelethalmaz: azonos az int műveleteivel • belső ábrázolás: adott gép kódkészlete többnyire ASCII Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
-3-
1
Karakter konstansok • Aposztrofok (’) közé zárt: – nyomtatható karakterek: ’A’, ’Z’ – speciális szekvenciák: \n, \t, \v, \b, \r, \f, \a \\, \?, \’, \”, – max. 3 oktális, vagy tetszőleges számú hexa számjegy: \ooo, \xhh
• (Kiterjesztett karaktertípus: L’A’)
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
-4-
Karaktersorozat Nincs karaktersorozat típus, de van konstans: • Macskakörmök (”) közé zárt: – nyomtatható karaktarek: ”Alama” – speciális szekvenciák: ”\tAlma\n” – oktális, vagy hexa számjegy: ”\123\0123”
• (Kiterjesztett karakterkészlet esetén: L”Alma”)
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
-5-
Karaktersorozatot lezáró nulla Mindig van egy „ajándék” lezáró nulla a sorozat végén. ”Hello \n”
Lezáró nulla
Valahol a memóriában: H e l l o
\n \0
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
-6-
2
Változók mérete (sizeof operátor) sizeof kifejezés, vagy sizeof(típus) sizeof(char) --> sizeof(short) >= sizeof(long) >= sizeof(short) <= sizeof(int) <= sizeof(float) <=
1 byte (8 bit) 2 byte (16 bit) 4 byte(32 bit) sizeof(int) sizeof(long) sizeof(double)
Az int mindig az adott architektúra legoptimálisabb egésze. Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
-7-
Kifejezés, utasítás • Operátorok alkalmazásával kifejezések jönnek létre. – Pl: 5 + 6 vagy a = 2
• Az utasítások legegyszerűbb fajtája a kifejezésutasítás: kifejezés ; – Pl: 5 + 6 ; vagy a = 2;
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
-8-
Összetett utasítás • Kapcsos zárójelekkel összefogott utasítássorozat. – pl: {a = 3; c = 5 * 2; } Pontosabban: összetett_utasítás: { deklarációs_lista.opc utasítás_lista }
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
-9-
3
Változók deklarálása újból deklaráció: deklaráció_sp. kezdeti_dekl_listaopc ; deklaráció_sp.: típus_spec. deklaráció_sp.opc tárolási_osztály_sp. deklaráció_sp.opc típus_minősítő deklaráció_sp.opc register unsigned int A12; unsigned int register a12; long; Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 10 -
Tárolási osztály, típusminősítők, • Típus specifikátor: – void, char, short, int, long, float, double, signed, unsigned, struktúra_v_union_spec, felsorolás_spec, típus_név
• Tárolási osztály spec. – auto, register, static, extern
• Típus minősítők – const, volatile Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 11 -
2005.10.03. .
- 12 -
Páros-páratlan Start vezérlési szerkezet
a
i
a páros ?
páros
n páratlan
Stop Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
4
Elágazás (if) if ( kifejezés ) utasítás1 else utasítás2 egy bejárat
Példa: if (a < b ) x = a; else x = b;
i
n
kifejezés
utasítás1
utasítás2
if (x > y) x = x - y; egy kijárat Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 13 -
Páros-páratlan (2) #include <stdio.h> main() { int A; scanf(”%d”, &a); if (a % 2 == 0) printf(”páros\n”); else printf(”páratlan\n”); } Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 14 -
Első „n” páratlan szám Start
1
elöl vizsgáló ciklus
n
n
i
i
i:= 0 pt:= 1 Stop 1
pt i:= i + 1 pt:= pt + 2
inicializálás Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 15 -
5
Elöl vizsgáló ciklus (while) while ( kifejezés ) utasítás egy bejárat
Példa: while (i <= 10) { printf(”%d\n”, i); i = i + 1; }
n
kifejezés
i utasítás
egy kijárat Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 16 -
Első n páratlan szám (2) #include <stdio.h> main() { int i, n, pt; scanf(”%d”, &n); i = 0; pt = 1; while ( i < n ) { printf(”%d\n”, pt); i = i + 1; pt = pt + 2; } } Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 17 -
Első „n” Fibonacci szám Start
1
elöl vizsgáló ciklus
n
n
i
i
i:= 0 a:=1 b:=1
Stop
1
a
i:= i + 1 c:= a +b a:=b, b:=c
inicializálás Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 18 -
6
Fibonacci void main() { int a, b, c; int n, i; scanf("%d", &n); a = b = 1; i = 0;// még nem írtunk ki while (i < n) { printf("°d", a); i = i + 1; // +1 kiírás történt c = a + b; a = b; b = c; } Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 19 -
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 (?:)
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 20 -
Aritmetikai operátorok +-*/% / - egészek között: egészrész (5 / 2 ⇒ 2) % - maradék képzés (5 % 2 ⇒ 1)
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 21 -
7
Relációs operátorok < <= > >= == !=
kisebb kisebb vagy egyenlő nagyobb nagyobb vagy egyenlő egyenlő nem egyenlő
Programozás alapjai I. (C nyelv, gyakorlat)
Eredményük 0 v. 1 hamis v. igaz
© BME-IIT Sz.I.
2005.10.03. .
- 22 -
Logikai operátorok Nincs logikai típus, de van logikai operátor. Aritmetikai típus értékkészlete
Háttér konverzió
0 = hamis, a többi igaz
Logikai művelet
0 vagy 1
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 23 -
Logikai operátorok (2) Logikai vagy: Sorrend !! 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: Sorrend !! ! kifejezés
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 24 -
8
Bitenkénti operátorok & | ^ ~
bitenkénti és 3&5⇒1 bitenkénti vagy 3|5 ⇒7 bitenkénti kizáró vagy 3 ^ 5 ⇒ 6 bitenkénti negálás (egyes komplemens) ~3 ⇒ - 4
& 0 1 0 0 0 1 0 1
| 0 1 0 0 1 1 1 1
Programozás alapjai I. (C nyelv, gyakorlat)
^ 0 1 0 0 1 1 1 0
© BME-IIT Sz.I.
~ 0 1 1 0 2005.10.03. .
- 25 -
Léptető operátorok << logikai tolás balra 0 pl: 5 << 1
00000101 = 5 00001010 = 10
128 << 1
10000000 = 128 00000000 = 0
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 26 -
Léptető operátorok(2) >> logikai tolás jobbra (előjeletlen) 0 pl: 5 >> 1
00000101 = 5 00000010 = 2
128 >> 1
10000000 = 128 01000000 = 64
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 27 -
9
Léptető operátorok(3) >> aritmetikai tolás jobbra (előjeles) (implementáció függő)
pl: 5 >> 1
00000101 = 5 00000010 = 2
-128 >> 1
10000000 = -128 11000000 = -64
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 28 -
Értékadó operátorok • Az értékadás is kifejezés ⇒ többszörös értékadás. Pl: a = b = c = 12 • Minden kétoperandusú operátor kombinálható az értékadással. • Rövidebb írásmód. Egyszerű optimalizálási lehetőség. pl: a += 3 ⇒ a = a + 3 a *= c ⇒ a = a * c x /= y ⇒ x = x / y Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 29 -
Balérték (lvalue) • Olyan érték (kifejezés), ami értékadás bal oldalán szerepelhet. • Az operátorok egy része balértéket igényel (pl. értékadó op.), de van olyan operátor is, ami balértéket állít elő. • Legegyszerűbb balérték a változó neve.
Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 30 -
10
Páros-páratlan II. Start a
i
a páratlan?
n
páratlan
n
hátul vizsgáló ciklus
páros
i
a>0
Stop Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
- 31 -
2005.10.03. .
Hátul vizsgáló ciklus (do while) do utasítás while ( kifejezés ) ; egy bejárat
Példa: do { printf(”%d\n”, i); i = i + 1; } while (i <= 10);
utasítás
kifejezés
i
n
egy kijárat Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 32 -
Páros-páratlan II. (2) #include <stdio.h> Logikai értékké main() konvertálódik { int a; do { scanf(”%d”, &a); if (a & 1) printf(”Páratlan\n”); else printf(”Páros\n”); } while ( a > 0 ); } Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 33 -
11
For ciklus for ( kifejezés1; kifejezés2; kifejezés3) utasítás egy bejárat
kifejezés1
Példák: for (i = 1; i <=10; i += 1) printf(”%d\n”, i);
n
kifejezés2
i utasítás
for (;;) ;
kifejezés3 egy kijárat Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 34 -
Páros-páratlan III. Feladat: Olvassuk be fájl végéig, vagy amíg szám következik az inputon, maximum 10 egész számot és írjuk ki, hogy páros v. páratlan számot olvastunk! Vázlat: cv. előkészítés i=1 while i <= 10 AND tudunk_olvasni kiír; cv. növelés i=i+1 Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 35 -
Páros-páratlan III. (2) #include <stdio.h> Sorrend main() fv.érték { int i, a; for (i=1; i <= 10 && scanf(”%d”,&a) == 1; i+=1) if (a & 1) printf(”Páratlan\n”); else printf(”Páros\n”); } Programozás alapjai I. (C nyelv, gyakorlat)
© BME-IIT Sz.I.
2005.10.03. .
- 36 -
12