Programozás alapjai 2.Gy: A C nyelv alapjai. P R O A L A G 1/32 B ITv: MAN 2018.10.02
Code::Blocks Indítsa el mindenki! 2/32
1 Code::Blocks Új projekt 2 3 4 5 3/32
Code::Blocks Forráskód Kód fordítása: Build \ Build 2x Project Manager Source code Mindig kapunk egy ilyen alap-kódot! Kód futtatása: Build \ Run Egyszerre: Build \ Build and run 4/32 Logs window Amíg látszik a Terminál ablak, nem lehet újra futtatni a kódot!
Code::Blocks Hiba Vegyünk ki egy aposztrófot! Aztán Build and run Sikertelen fordításkor a hibás sor elején piros jel jelenik meg, és kiíródik a Logs területre a fordító üzenete. Ha nem látszik a Logs ablak, akkor View \ Logs bekapcsolása! Javítsuk, futtassuk! 5/32
A C nyelvű kód #include könyvtári modul hívása könyvtári modul: megírt függvények gyűjteménye, pl. beolvasás a billentyűzetről, kiírás a képernyőre, gyökvonás int main { printf( szöveg ); kiírás a képernyőre return 0; a main függvény visszatérő értéke 6/32 Ez a főprogram, az ebben lévő utasítások hajtódnak végre Mindig ilyen szerkezetű a C program!
Az első program # include <stdio.h> int main ( ) { printf ( Helló Világ! \n ); return 0; Könyvtári modul hívás Főprogram Sorvégjel Sortörés Képernyőre író függvény A főprogram visszatérő értéke 7/32
A programkészítés menete # include <stdio.h> void main ( ) { printf ( Helló Világ! \n ); Prg1.c Szövegszerkesztő (editor) Fordítóprogram Könyvtári modul stdio.h 1FF0 35BB 337DD 239C 410F 396A C44D 006A stdio.h printf 410F 396D 5CF3 B00A 3CDA 4107 FAC4 660D Tárgykódú modul Prg1.obj 1.Megírjuk a forráskódot, és lefordítjuk. 2.A lefordított kódhoz hozzáadjuk a meghívott könyvtári modulokat 3.A linker összeszerkeszti a programot 8/32 4.Végeredmény: a futtatható (exe) program Linker 10011110 11000011 10101100 10111000 00101100 10010010 10010000 01111011 Prg1.exe
Standard könyvtári modulok A standard függvények deklarációját standard könyvtári modulok (header fájlok) tartalmazzák. Az #include un. direktíva a forrásszövegbe beszúrja a megadott fájlt: A standard input-output függvények és konstansok deklarációinak beillesztése (ez mindig kell!): #include <stdio.h> Vegyes gyűjtemény, egy átlagos programozónak nincs rá szüksége, kitörölhető a kódból: #include <stdlib.h> Matematikai függvények deklarációi: #include <math.h> Saját függvények deklarációi 9/32 #include "fuggvenyeim.h"
Kiírás C nyelven (1.) Egyszerű szöveg kiírása (aposztrófok között): printf("helló Világ!"); Szöveg és érték kiírása: Az aposztrófok között %-jel után megadható a kiírt érték típusa, utána vesszővel elválasztva az értéket tartalmazó változó neve. A sum nevű változó értéke fog d típusú adatként a % helyén kiíródni! printf("összeg: a+b+c = %d", sum); Az érték típusa változó elválasztó 10/32
Kiírás C nyelven (2.) Szöveg és érték kiírása megadott módon: \-jel után megadható a kiírás módja, pl: \n sortörés \t tabulálás \\ \ jel kiírása \ kiírása A sum nevű változó értéke fog d típusú adatként a % helyén kiíródni! printf("összeg: a+b+c = %d\n", sum); sortörés A printf() külön tartalmazza a kiírandó szöveget és a kiírást befolyásoló változókat. Ami a dupla idézőjelek között megjelenik változtatás nélkül kiírásra kerül, kivétel ez alól a \ és % karaktereket követő jel, vagy a jelsorozat. 11/32
Változó deklaráció A C nyelvben minden változót kötelező deklarálni! Szintaktikája: Változó: típus azonosító[,azonosító]; Pl. int a, b, c; unsigned int ertek=0; Tömb: típus azonosító[elemek száma]; Pl. int szamok[10]; Az indexelés 0-tól indul! 12/32 Deklarálás Inicializálás
Példa 1. Három szám összege # include <stdio.h> void main ( ) { int a, b, c; int sum=0; a=1; b=2; c=3; sum =a+b+c; printf ("Összeg: a+b+c = %d\n", sum); Összeg: a+b+c = 6 Visszatérési érték típusaként megadva jelzi, hogy nincs visszatérési érték! Ha void a main, nem kell a return 0; utasítás! 13/32
Példa 2. Kör területe # include <stdio.h> void main ( ) { float r, terulet; const float PI=3.14159; r=2.2; terulet = r*r*pi; Tizedes tört formátum: 6 helyen, 2 tizedessel printf ("Az r = %6.2f sugarú kör területe:%10.2f\n", r, terulet); Az r = 2.20 sugarú kör területe: 15.21 14/32
Példa 3. int char # include <stdio.h> void main ( ) { char kar= A ; char egesz=55; printf ( Karakterek: %c és %c\n,kar, egesz); printf ( Egészek: %d és %d\n,kar, egesz); Karakterek: A és 7 Egészek: 65 és 55 Karakter típus 15/32
Példa 4. - Túlcsordulás # include <stdio.h> Tárolás 1 bájton, tartománya: 0.. 255 void main ( ) { unsigned char a, b, s; a=100; b=100; s = a+b; printf("a=%4d, b=%4d, s=%4d\n", a, b, s); a=200; b=200; s = a+b; printf("a=%4d, b=%4d, s=%4d\n", a, b, s); a= 100, b= 100, c= 200 a= 200, b= 200, c= 144 16/32
Egyszerű input scanf ( ) A standard inputról végez formázott bevitelt Ugyanazok a formátum elírások, mint a printf-nél A scanf függvénynek a változó címét kell átadnunk, ahová tennie kell a beolvasott értéket a konverzió után a %d és a %f formátummal történ beolvasás esetén! 17/32
Példa 5. Egész, valós, szöveg beolvasás # include <stdio.h> void main ( ) { int i; float x; char name [50]; scanf ("%d %f %s", &i, &x, name); printf("i=%d, x=%8.2f, name=%s\n", i, x, name); 14 3.5 BitMan i=14, x= 3.50, name= BitMan Nem írja ki semmit, csak beolvassa az adatokat. Nem elegáns, de működik! 18/32
Példa 6. Kör sugara # include <stdio.h> Kiír egy szöveget, aztán void main ( ) { beolvas egy adatot. Normális megoldás! float r, terulet; const float PI=3.14159; printf("kérem a kör sugarát: "); scanf ("%f", &r); terulet = r*r*pi; printf ("Az r= %6.2f sugarú kör területe:%10.2f \n", r, terulet); Kérem a kör sugarát: 3.6 Az r= 3.60 sugarú kör területe: 40.72 19/32 B ITI T MAN
Feladat Készítsünk kalkulátort. Adjon meg két számot, es végezzen el rajtuk valamilyen aritmetikai műveletet. Az eredményt írassa ki a képernyőre. Módosítsa úgy a programot, hogy kérje be a felhasználótól a számokat. Egész es valós értékekkel is próbálják ki! 20/32
Kalkulátor 1. #include <stdio.h> int main() { printf("szamolas fix adatokkal!\n"); printf("%d * %d = %d\n", 7, 4, 7*4); return 0; #include <stdio.h> int main(){ int a=5, b=2, c=a*b; printf("szamolas fix adatokkal!\n"); printf("%d * %d = %d\n", a, b, c); return 0; 21/32
Kalkulátor 2. #include <stdio.h> int main(){ int a=5, b=2, c=a/b; printf("szamolas fix adatokkal!\n"); printf("%d / %d = %d\n", a, b, c); return 0; #include <stdio.h> int main(){ int a=5, b=2; float c=a/b; printf("szamolas fix adatokkal!\n"); printf("%d / %d = %f\n", a, b, c); return 0; 22/32
Kalkulátor 3. #include <stdio.h> int main(){ int a=5, b=2; float c=(float)a/b; printf("szamolas fix adatokkal!\n"); printf("%d / %d = %.2f\n", a, b, c); return 0; 23/32
Kalkulátor 3. #include <stdio.h> int main(){ int a, b; float c; printf("szamolas beolvasott adatokkal!\n"); printf("a="); scanf("%d", &a); printf("b="); scanf("%d", &b); c=(float)a/b; printf("%d / %d = %.2f\n", a, b, c); return 0; 24/32
Feladat Olvassuk be egy kör sugarát, és írassuk a kör területét és kerületét. A sugár legyen valós szám. #include <stdio.h> void main(){ float r; double k, t, pi = 3.14; printf("\nadja meg a kor sugarat: "); scanf("%f", &r); t = r*r*pi; k = 2*r*pi; printf("\na kor terulete: %f\n", t); printf("\na kor kerulete: %f\n", k); Double típusú változót nem lehet beolvasni, a scanf erre alkalmatlan! Double értéket általában float-ként írunk ki. A %e kóddal lehet double-ként kiíratni, ekkor így íródik ki: 4.069440e+001 25/32
Feladat Olvassuk be egy kör sugarát, és írassuk a kör területét és kerületét. Használjuk a math könyvtárat! #include <stdio.h> #include <math.h> main(){ float r; double k, t; printf("\nadja meg a kor sugarat: "); scanf("%f", &r); t = r*r*m_pi; k = 2*r*M_PI; printf("\na kor terulete: %f\n", t); printf("\na kor kerulete: %f\n", k); A math.h standard header állományban definiálva van a PI konstans: M_PI néven 26/32
Feladat Írjon C programot, amely kiszámítja a háromszög területét oldalainak megadásával. Használja a Héron képletet: t 2 = s(s-a)(s-b)(s-c), ahol a, b, c a háromszög oldalainak a hossza es s a kerület fele. Ügyeljen a változók típusára! A terület meghatározásához használja a négyzetgyökvonást végrehajtó függvényt: double sqrt(double num). Ennek deklarációját a math.h standard header állomány tartalmazza. 27/32
A C nyelvű kód #include <stdio.h> #include<math.h> void main(){ int a, b, c; double t, t2, s; printf("\n A haromszog oldalai: "); scanf("%d, %d, %d", &a, &b, &c); A vesszők miatt így kell s = (double)(a + b + c) / 2; megadni az adatokat: t2 = s*(s-a)*(s-b)*(s-c); t = sqrt(t2); printf("\na haromszog terulete: %.2f, kerulete: %d\n", t, a+b+c); 28/32
Feladat Határozza meg egy beolvasott egész szám abszolút értékét. Felhasználjuk a C nyelv legjellegzetesebb operátorát. #include <stdio.h> void main(){ int szam, absz; printf("\nadja meg a szamot: "); scanf("%d", &szam); absz = szam<0? szam*(-1):szam; printf("\n%d abszolut erteke: %d", szam, absz); c=(a<b?a:b); Értelmezése: ha a kisebb b állítás igaz, akkor c legyen egyenlő a-val, egyébként c legyen egyenlő b-vel. 29/32
Feladat Olvassunk be egy egész számot, és döntsük el róla, hogy páros, vagy páratlan. #include <stdio.h> void main() { int a; printf("\nkerek egy egesz szamot: "); scanf("%d", &a); printf( (a%2==0)? " Paros":" Paratlan" ); a%2 az a osztva 2-vel osztási maradéka printf(a<b? a : b ); Értelmezése: ha a kisebb b állítás igaz, akkor kiírja a-t, egyébként kiírja b-t. 30/32
Házi feladatok 1. Írjon C programot, amely bekéri egy téglalap 2 oldalának hosszát és kiszámítja a téglalap területét és kerületét. 2. Írjon C programot, amely segédváltozó használatával felcserél két beolvasott értéket. 3. Írjon C programot, amely két megadott számról eldönti a feltételes operátor használatával, hogy melyik a nagyobb. 4. Készítsen C programot, amely bekéri egy téglatest három oldalának hosszát és kiszámítja annak felszínét (A = 2 * (a*b + a*c + b*c)) és térfogatát (V= a*b*c). A felszín számításánál ügyeljen a helyes zárójelezésre (a műveletek precedenciájára)! 31/32
VÉGE VÉGE 32/32