Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

© Tóth Ákos, Óbudai Egyetem, 2010

Hasonló előadás


Az előadások a következő témára: "© Tóth Ákos, Óbudai Egyetem, 2010"— Előadás másolata:

1 © Tóth Ákos, Óbudai Egyetem, 2010
C programozás C alapok Hello Vilag Számolás Elágazás Ciklusok Egydimenziós tömb Kétdimenziós tömb Függvények Mutatók © Tóth Ákos, Óbudai Egyetem, 2010 1

2 © szerző, intézmény, évszám
C Programozás (1) Helló Világ Kiírás printf paranccsal #include printf() kiírás getch() billentyűleütésre várás A return 0 jelenti hogy rendben végrehajtódott #include ”conio.h” int _tmain(int argc, _TCHAR* argv[]) {printf(„Hello Vilag \n"); getch(); return 0; } 1 2 3 4 © szerző, intézmény, évszám dátum/idő

3 © szerző, intézmény, évszám
C Programozás (1) Egyszerű számolás (egész típus) Kiírás printf paranccsal #include ”conio.h” int _tmain(int argc, _TCHAR* argv[]) { int x,y,z ; printf("Kerem az elso szamot"); scanf("%i",&x); printf("\n Kerem a masodik szamot"); scanf("%i",&y); printf("\n Az osszeg %d", x+y); printf("\n Az kulonbseg %d", x-y); printf("\nA szorzat %d", x*y); printf("\nA hanyados %d", x /y); printf("\nA maradek %d", x % y); getch(); return 0; } 1 2 3 4 © szerző, intézmény, évszám dátum/idő

4 © szerző, intézmény, évszám
C Programozás (1) Elágazás if (kifejezés) { utasítás1; utasitas2 ; } else{ utasitas3; utasitas4 } Logikai operátorok És && Vagy || (alt W, alt 124) Relációs operátorok ==, !=, <, <=, >, >= © szerző, intézmény, évszám dátum/idő

5 © szerző, intézmény, évszám
C Programozás (1) Elágazás Olvasson be egy számot, írja ki hogy nagyobb e 10 nél vagy sem Írjon programot ami egy beírt évszámról eldönti hogy szökőév-e. Szökőév ha 4 el osztható, 100 al nem osztható, 400 al osztható © szerző, intézmény, évszám dátum/idő

6 © szerző, intézmény, évszám
C Programozás (1) Elágazás Írjon programot ami egy beírt évszámról eldönti hogy szökőév-e. Szökőév ha 4 el osztható, 100 al nem osztható, 400 al osztható #include ”conio.h” int ev; int Oszthato4el, Oszthato100al, Oszthato400al; printf("Kerem adja meg az evszamot"); scanf("%i", &ev); Oszthato4el = ev % 4; Oszthato100al = ev % 100; Oszthato400al = ev % 400; if ((Oszthato4el ==0 && Oszthato100al !=0) || Oszthato400al==0) printf("Ez szokoev"); else printf("Nem szokoev"); getch(); return 0; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 © szerző, intézmény, évszám dátum/idő

7 © szerző, intézmény, évszám
C Programozás (1) Elágazás Feltételkezelő operátor feltétel ? Teljesül_ág: Nem_teljesül_ág #include ”conio.h” int _tmain(int argc, _TCHAR* argv[]) { int x,y; scanf("%i", &x); printf("x = %d\n", x); y = (x > 10) ? 1: 0; printf("y = %d \n", y); // semmi ertelme, csak illusztráció printf("Elojel =%i \n", (x <0) ? -1: (x==0) ? 0:1); // kiirja az előjelét getch(); return 0; } 1 2 3 4 © szerző, intézmény, évszám dátum/idő

8 © szerző, intézmény, évszám
C Programozás (1) Elágazás Többirányú elágazás switch (kifejezes) { case érték1 : utasítás utasítás break; case érték2 : utasítás utasítás break; default : utasítás utasítás break; } Írjunk programot ami egy valtozó értékét vizsgálva, ha az érték 1 akkor kiírja hogy „Egy” ha 2 akkor kiírja hogy „Kettö”, 3, 4, 5 különben írja ki hogy „érvénytelen” © szerző, intézmény, évszám dátum/idő

9 © szerző, intézmény, évszám
C Programozás (1) Ciklusok for (kezd;veg;noveles) { } { int DB, i , Szazalek; int SzazalekOsszeg =0; int EgyesekSzama=0; float Atlag; printf("Hany százalekot kivan beirni?"); scanf("%i", &DB); for (int i =1; i<=DB;i++){ printf ("Kerem a %i edik elemet",i); scanf("%i",&Szazalek); SzazalekOsszeg =SzazalekOsszeg+Szazalek; if (Szazalek <50) EgyesekSzama++; } Atlag = (float) SzazalekOsszeg /DB; printf("Az atlag %.2f\n", Atlag); printf("Az elegtelenek szama %i\n", EgyesekSzama); getch(); return 0; 1 2 3 4 © szerző, intézmény, évszám dátum/idő

10 © szerző, intézmény, évszám
C Programozás (1) Egydimenziós tömbök int TombNev[meret] 0..meret-1 db egész szám. Elérés TombNev[1] { } 1 © szerző, intézmény, évszám dátum/idő

11 © szerző, intézmény, évszám
C Programozás (1) Tömbök int TombNev[meret] 0..meret-1 db egész szám. Elérés TombNev[1] Feladatok Oldjuk meg az előző feladatot tömbökkel Válasszuk ki a legnagyobb és a legkisebb pontszámot Rendezzük növekvő sorrendbe az értékeket Számoljon gyakoriságot, hányszor volt 1 , 2, –as érték. A nemnulla elemeket írja ki © szerző, intézmény, évszám dátum/idő

12 © szerző, intézmény, évszám
C Programozás (1) Tömbök Töltsünk fel 1 dimenziós tömböt 1, 2, 3, N értékekkel! Írassuk ki a tömböt a képernyőre ! Állítson elő két N dimenziós, egész elemű tömböt Az első páros számokat tartalmazzon a második az első N prímszámot. Írja ki a két vektor értéket a képernyőre egymás mellé 2 oszlopba Számolja ki a két vektor összegét, és 3 oszlopba írja ki a képernyőre © szerző, intézmény, évszám dátum/idő

13 © szerző, intézmény, évszám
Prímszám keresés Az első prímszám előállítása db=0; for (i=2;db<10000;i++) { s=0; for(j=2;j<i;j++) { if ((i % j) ==0) {s=1;} } if (s==0) {a[db]=i;db++; printf("%d\n",a[i]) 1 2 3 4 © szerző, intézmény, évszám dátum/idő

14 © szerző, intézmény, évszám
Prímszám keresés Az első prímszám előállítása hatékonyabban db=0; for (i=3;db<MAX;i=i+2) // csak a páratlan számok { s=0; for(j=2;j<ceil(sqrt(float(i)))+1;j++) // csak a gyökéig { if ((i % j) ==0) {s=1; break;} } if (s==0) {a[db]=i;db++; printf("%d\n",a[i]) 1 2 3 4 © szerző, intézmény, évszám dátum/idő

15 © szerző, intézmény, évszám
Prímszámkeresés { int DB, i , Szazalek; int SzazalekOsszeg =0; int EgyesekSzama=0; float Atlag; printf("Hany százalekot kivan beirni?"); scanf("%i", &DB); for (int i =1; i<=DB;i++){ printf ("Kerem a %i edik elemet",i); scanf("%i",&Szazalek); SzazalekOsszeg =SzazalekOsszeg+Szazalek; if (Szazalek <50) EgyesekSzama++; } Atlag = (float) SzazalekOsszeg /DB; printf("Az atlag %.2f\n", Atlag); printf("Az elegtelenek szama %i\n", EgyesekSzama); getch(); return 0; © szerző, intézmény, évszám dátum/idő

16 © szerző, intézmény, évszám
C Programozás (1) Többdimenziós tömbök. Például int M[4][4] 5*5 os egész számokból álló tömb Int M[4][5] ={{},{},{},{}} kezdeti értékadás, lehet részleges is { int M [5][5] = {{1,2},{3,4}}; for (int i=0; i<5;i++){ for (int j=0; j<5;j++){ printf("%4i", M[i][j]); } printf("\n"); getch(); return 0; 1 2 3 4 5 6 7 © szerző, intézmény, évszám dátum/idő

17 © szerző, intézmény, évszám
C Programozás (1) Tömbök (többdimenzió) Állítson elő két 3*3 dimenziós, egész elemű tömböt Az első páratlan számokat tartalmazzon a második az indexek összegét Írja ki a két tömb értéket a képernyőre egymás alá, formátumozva Számolja ki a két tömb összegét, és írja ki a képernyőre A B A+B formában Számolja ki a két tömb szorzatát, és írja ki a képernyőre A B A*B formában © szerző, intézmény, évszám dátum/idő

18 © szerző, intézmény, évszám
C Programozás (1) Függvények C –ben csak függvények vannak, eljárások nincsenek. A függvények érték szerint paraméterezhetőek, void : nincs paraméter, nincs visszaadott érték, ha megpróbálnánk akkor hiba void uzenetKiiiras (void) { printf(„ csak kiirok valamit\n”); // lehetne return 0, de ha nem irunk semmit akkor az ua-t jelenti } int main (void) printMessage(); 1 2 © szerző, intézmény, évszám dátum/idő

19 © szerző, intézmény, évszám
C Programozás (1) Függvények Paraméterek, lokális változók Vegyük észre hogy x,y értéke nem változott meg int lnko(int u, int v) { int temp; while (v!=0){ temp =u %v; u=v; v =temp; } return u; } int _tmain(int argc, _TCHAR* argv[]) { int x,y, eredmeny ; printf ("\nKerem az elso szamot"); scanf("%i",&x); printf ("Kerem a masodik szamot"); scanf("%i",&y); eredmeny = lnko(x,y); printf ("x = %i y = %i legnagyobb kozos oszto %i",x,y,eredmeny); 1 2 3 4 5 6 7 8 9 10 11 12 13 © szerző, intézmény, évszám dátum/idő

20 © szerző, intézmény, évszám
C Programozás (1) Függvények, tömbök Írjunk függvényt ami megkeresi a tömb minimális elemét int minimum (int ertekek[10]) { int minErtek, i; minErtek =ertekek[0]; for (i=1;i<10;++i){ if (ertekek[i]< minErtek); minErtek=ertekek[i]; ertekek[i] =0; //bug } return minErtek; } int _tmain(int argc, _TCHAR* argv[]) { int pontok[10]={3,2,10,23,4,5,1,21,32,1}; int i, minPont; int minimum (int ertekek[10]); for (i=0;i<10;i++){ printf("%i ",pontok[i]); } // kiírjuk előtte minPont= minimum(pontok); printf ("\nminimum pont = %i \n",minPont); for (i=0;i<10;i++){ printf("%i ",pontok[i]); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 © szerző, intézmény, évszám dátum/idő

21 © szerző, intézmény, évszám
C Programozás (1) Ajánlások a függvényekkel kapcsolatban Ha nem definiálunk viszatérési értéket, akkor int lesz Ha int et szeretnénk akkor irjuk oda hogy int.et szeretnénk Ha tudjuk hogy nincs visszatérési érték akkor irjunk void-ot A biztonság kedvéért deklaráljunk minde fuggvenyt a program elején, még akkor is ha abban a modulban van (később esetleg átrakjuk máshova) Feladat Írjunk abszolút érték számító függvényt © szerző, intézmény, évszám dátum/idő

22 © szerző, intézmény, évszám
C Programozás (1) Függvények, többdimenziós tömbök Írjunk fv ami a tömb összes értékét egy értékkel megszorozza void skalarSzorzas(int matrix [3][5], int ertek); void kiirMatrix(int matrix [3][5]) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 © szerző, intézmény, évszám dátum/idő

23 © szerző, intézmény, évszám
C Programozás Mutatók Mutatók int count =20; // közvetlen elérés int *int_mutato; // indirekt elérés * jelöli hogy az int_mutato egy egész értékre mutat &count a count változó címe int count =10,x; int *int_pointer; // egészre mutat int_pointer =&count; // int_pointer oda fog mutatni ahova count x=*int_pointer; // x megkapja az int_pointer által mutatott értéket printf("count = %i, x = %i \n", count, x); getch(); return 0;} 1 2 3 4 5 6 7 © szerző, intézmény, évszám dátum/idő

24 © szerző, intézmény, évszám
C Programozás Mutatók Mutatók Egy összetettebb példa mutatók alkalmazására A 7. sorban látszik, hogy eléggé átláthatatlan is lehet a kód int i1, i2, i3; int *p1, *p2; i1 =2; p1=&i1; i2=*p1 /2 +2; p2=p1; i2*=*p1++**p2/ *p1*i1**p2++; printf("i1 =%i," ,i1); printf("i2 =%i," ,i2); 1 2 3 4 5 6 7 8 9 © szerző, intézmény, évszám dátum/idő

25 C Programozás Mutatók. Tömbök
Tömb elemeinek összege mutatók használatával Egy összetettebb példa mutatók alkalmazására A hívó eljárás int tombOsszeg(int *tomb, const int n) { int sum =0; int * const tombVeg =tomb+n; // konstans mutató, nem szeretnénk ha megváltozna az értéke for (;tomb < tombVeg;tomb++) sum+=*tomb; return sum;} 1 2 3 4 6 7 8 int _tmain(int argc, _TCHAR* argv[]) int tombOsszeg(int *tomb, const int n); int ertekek[10] ={2,4,18,6,5,3,2,2,-10}; printf ("Az osszeg %i \n", tombOsszeg(ertekek,10) ); 1 2 3 4 © szerző, intézmény, évszám dátum/idő

26 C Programozás Bitműveletek
A bitműveletek & bitenkénti ÉS, a = b & c; | bitenkénti VAGY a = b | c; ^ bitenkénti KIZÁRÓ VAGY a=b^c; ~ bitenkénti NEGÁCIÓ a =~a << eltolás balra a = a << 1 >> eltolás jobbra a = a >> 1 printf() kiírási paraméterei %o oktális %x hexadecimális Érték megadás unsigned int a1 = 077u; // oktálisan előjel nélküli Unsigned int a2 = 0xAA; // hexadecimalisan © szerző, intézmény, évszám dátum/idő

27 C Programozás Bitműveletek
Érték megadás, kiírás oktálisan, hexadecimálisan int _tmain(int argc, _TCHAR* argv[]) unsigned int a, b, c; a =10; b =010; c = 0x10; printf("a b c decimalisan %d %d %d \n", a, b,c ); printf("a b c oktalisan %o %o %o \n", a, b, c); printf("a b c hexadecimalisan %X %X %X \n", a, b, c); 1 3 4 5 6 7 8 9 © szerző, intézmény, évszám dátum/idő

28 C Programozás Fájl kezelés
Tömb elemeit fájlba írjuk A hívó eljárás int _tmain(int argc, _TCHAR* argv[]) FILE *stream; int tomb[10] ={0,1,2,3,4,5,6,7,8,9}; fopen_s(&stream, "adat.txt", "w"); for (i=0;i<10;i++) { fprintf(stream, "%d", tomb[i]); } fclose(stream); 1 2 3 4 5 6 7 © szerző, intézmény, évszám dátum/idő

29 C Programozás Fájl kezelés
Tömb elemeit fájlból beolvassuk A hívó eljárás int _tmain(int argc, _TCHAR* argv[]) FILE *stream; int tomb[10] ; fopen_s(&stream, "adat.txt", "r"); for (i=0;i<10;i++) { fscanf(stream, "%d", &tomb[i]); } fclose(stream); 1 2 3 4 5 6 7 © szerző, intézmény, évszám dátum/idő

30 © szerző, intézmény, évszám
C Programozás Tömb dinamikusan A hívó eljárás #define MAX 100 // konstans megadás, nem lehet más a sorban int _tmain(int argc, _TCHAR* argv[]) { int *a = new int[MAX]; // foglalás for (int i=0;i<MAX;i++) printf(" a [ %d ] = %d \n", i, a[i]); for (int i=0;i<MAX;i++) a[i] =MAX -i; delete a; // felszabadítás a =NULL; // mutató nullázása 1 2 3 4 5 6 7 © szerző, intézmény, évszám dátum/idő

31 © szerző, intézmény, évszám
C Programozás Tömb dinamikusan, kiírás függvénnyel A hívó eljárás #define MAX 10 void kiir( int *a, int n) { for (int i=0;i<n;i++) printf(" a [ %d ] = %d \n", i, a[i]); } int _tmain(int argc, _TCHAR* argv[]) { int *a = new int[MAX]; for (int i=0;i<MAX;i++) a[i] =MAX -i; kiir(a,MAX); delete a; a =NULL; 1 3 4 5 6 7 8 9 10 11 © szerző, intézmény, évszám dátum/idő

32 © szerző, intézmény, évszám
C Programozás Tömb dinamikusan, kiírás másképp A hívó eljárás void kiir2( int a[], int n) { for (int i=0;i<n;i++) printf(" a [ %d ] = %d \n", i, a[i]); } void kiir3( int *a, int n) printf(" a [ %d ] = %d \n",i, *a+i); 1 3 4 5 6 7 8 9 10 11 © szerző, intézmény, évszám dátum/idő

33 © szerző, intézmény, évszám
Függelék printf() paraméterei %i , %2i integer %f %7.3f float Műveletek (egész): + - * / % (mod) Kiértékelés sorrend megváltoztatás () Relációs operátorok ==, !=, <,>,<=, >=, <> © szerző, intézmény, évszám dátum/idő

34 © szerző, intézmény, évszám
Irodalomjegyzék Stephen G. Kochan : Programfejlesztés C nyelven. Kiskapu, 2008 © szerző, intézmény, évszám dátum/idő

35 35


Letölteni ppt "© Tóth Ákos, Óbudai Egyetem, 2010"

Hasonló előadás


Google Hirdetések