Programozás I. gyakorlat
2. gyakorlat
Kifejezések, vezérlési szerkezetek, struktúrák
Kifejezések Mit ír ki az alábbi program? #include <stdio.h> int main() { int a = 20, b = 40; printf("%d\n", a > b); printf("%d\n", a < b); printf("%d\n", a == b); printf("%d\n", a != b); printf("%d\n", a >= b); printf("%d\n", a <= b); return 0; }
Kifejezések Mit ír ki az alábbi program? #include <stdio.h> int main() { int a = 20, b = 40; printf("%d\n", a > b || a < 30); printf("%d\n", a < b && b > 50); printf("%d\n", a = b); return 0; }
Kifejezések Vizsgáltassuk meg, hogy „b” értéke „a” és „c” között van-e! #include <stdio.h> int main() { int a = 10, b = 20, c = 30; printf("%d\n", a < b < c ); a = -30; b = -20; c = -10; printf("%d\n", a < b < c ); return 0; }
Kifejezések Helyesen: #include <stdio.h> int main() { int a = 10, b = 20, c = 30; printf("%d\n", (a < b) && (b < c) ); a = -30; b = -20; c = -10; printf("%d\n", (a < b) && (b < c) ); return 0; }
Elágazás Írjon programot osztályozó programot, amely bekéri egy dolgozat pontszámát, és kiírja az érdemjegyet! Ponthatárok: 0 – 20 : 1 21 – 36 : 2 37 – 40 : 3 41 – 60 : 4 60 – 100: 5 Nem megfelelő érték esetén írjon ki hibaüzenetet!
Elágazás #include <stdio.h> int main() { int eredmeny; printf("Kerem az eredmenyt: "); scanf("%d", &eredmeny); if (eredmeny < 0) printf("Nem irhat be negativ szamot!\n"); if (eredmeny > 100) printf("Ennyire csak nem lett jo!\n"); if (eredmeny >= 0 && eredmeny <= 20) printf("Elegtelen\n");
Elágazás
}
if (eredmeny >= 21 && eredmeny printf("Elegseges\n"); if (eredmeny >= 37 && eredmeny printf("Kozepes\n"); if (eredmeny >= 41 && eredmeny printf("Jo\n"); if (eredmeny >= 61 && eredmeny printf("Jeles\n"); return 0;
<=
36)
<= 40) <= 60) <= 100)
Ciklus Fejlesszük tovább a programot! Hibás érték esetén kérje be újra a számot! Segítség: Legalább egyszer be kell kérni az eredményt...
Ciklus #include <stdio.h> int main() { int eredmeny; do { printf("Kerem az eredmenyt: "); scanf("%d", &eredmeny); if (eredmeny < 0) printf("Nem irhat be negativ szamot!\n"); if (eredmeny > 100) printf("Ennyire csak nem lett jo!\n"); if (eredmeny >= 0 && eredmeny <= 20) printf("Elegtelen\n");
Ciklus if (eredmeny >= 21 && eredmeny <= 36) printf("Elegseges\n"); if (eredmeny >= 37 && eredmeny <= 40) printf("Kozepes\n"); if (eredmeny >= 41 && eredmeny <= 60) printf("Jo\n"); if (eredmeny >= 61 && eredmeny <= 100) printf("Jeles\n"); } while ( eredmeny < 0 || eredmeny > 100 ); return 0; }
Ciklus Fejlessze tovább a programot úgy, hogy először megkérdezi, hány tanuló van, és bekéri az összes eredményt! Segítség: Ha tudjuk előre hányszor kell a ciklusmagot végrehajtani, érdemes számlálós ciklust használni.
Ciklus #include <stdio.h> int main() { int eredmeny; int i, mennyi; printf("Mennyi diak van? "); scanf("%d", &mennyi); for (i = 0; i < mennyi; i++) { do { printf("Kerem az eredmenyt: "); ... } while ( eredmeny < 0 || eredmeny > 100 ); } return 0; }
switch - case #include <stdio.h> int main() { int a = 40; switch (a) { case 0: printf("A"); case 40: printf("B"); case 60: printf("C"); } return 0; }
switch - case switch (a) { case 0: printf("A"); break; case 40: printf("B"); break; case 60: printf("C"); break; }
Struktúrák ● ● ●
Eddig elemi adattípusokat használtunk: int, short, long double, float char Lehetőség van összetett adattípusok létrehozására is.
Struktúrák Írjunk programot, amely egy személy néhány adatát (életkor, magasság, fizetés) tárolja. Eddigi tudásunk alapján is megoldható a feladat...
Struktúrák #include <stdio.h> int main() { int kor, fizetes, magassag; printf("Kora: "); scanf("%d", &kor); printf("Fizetes: "); scanf("%d", &fizetes); printf("Magassag: "); scanf("%d", &magassag); printf("A kora: %d\n", kor); printf("A fizetese: %d Ft\n", fizetes); printf("A magassaga: %d cm", magassag); return 0; }
Struktúrák Definiáljunk egy új adattípust, amely 3 elemi adattípusú értéket tárol: struct Szemely { int kor, fizetes, magassag; };
struct Szemely { int kor, fizetes, magassag; } bela;
Struktúrák struct Szemely valaki; printf("Kora: "); scanf("%d", &valaki.kor); printf("Fizetes: "); scanf("%d", &valaki.fizetes); printf("Magassag: "); scanf("%d", &valaki.magassag); printf("A kora: %d\n", valaki.kor); printf("A fizetese: %d Ft\n", valaki.fizetes); printf("A magassaga: %d cm", valaki.magassag);
Struktúrák struct Szemely valaki; struct Szemely masvalaki = { 20, 100, 200 }; printf("Kora: "); scanf("%d", &valaki.kor); printf("Fizetes: "); scanf("%d", &valaki.fizetes); printf("Magassag: "); scanf("%d", &valaki.magassag); valaki = masvalaki; printf("A kora: %d\n", valaki.kor); printf("A fizetese: %d Ft\n", valaki.fizetes); printf("A magassaga: %d cm", valaki.magassag);
Nagyobb feladat
●
●
●
A korábbi zh eredményeket bekérő programot bővítsék ki: Hozzanak létre struktúrát, amely egy tanuló életkorát, eddigi tanulmányi átlagát és a legújabb dolgozatának pontszámát tárolja Minden tanuló esetében a két új adatot is kérje be a program Minden tanuló után kérdezze meg a program, hogy van-e még tanuló, a felhasználó az 'i' vagy 'n' karakterekkel válaszolhat (igen esetén újabb tanuló adatainak bekérése következik)
Nagyobb feladat Bővítsék ki a programot úgy, hogy számoljon átlagot, határozza meg a legnagyobb és legkisebb pontszámokat!
Feladat Írjon programot, amely megjelenít a képernyőn egy szorzótáblát! Bővítse ki a programot úgy, hogy a program kérdezze meg, hányas szorzótáblát jelenítse meg! Egészítse ki úgy, hogy azt is kérdezze meg, hogy 1-től meddig jelenítse meg a táblázatot!
Megoldás #include <stdio.h> int main() { int i; int hanyas, meddig; printf("Hanyas szorzotabla? "); scanf("%d", &hanyas); printf("Meddig jelenitsem meg? "); scanf("%d", &meddig); for (i = 1; i <= meddig; i++) printf("%2d * %2d = %2d\n",i,hanyas,i*hanyas); return 0; }
Feladat Írjon menüvel vezérelt számológép programot! A menüben lehessen választani a négy alapművelet, valamint a programból való kilépés között. Ha a felhasználó egy műveletet választ, akkor a program kérjen be két számot, majd végezze el a választott műveletet. Osztáskor ellenőrizze, hogy az osztó nem nulla, ha mégis, akkor kérje be az osztót újra, amíg helyes értéket nem írunk be.
Megoldás #include <stdio.h> int main() { int menu; double a, b; do { printf("Osszeadas: 1\n"); printf("Kivonas: 2\n"); printf("Szorzas: 3\n"); printf("Osztas: 4\n"); printf("Kilepes: 5\n"); scanf("%d", &menu);
Megoldás if (menu >= 1 && menu <= 4) { printf("Az elso szam: "); Scanf("%lf", &a); printf("A masodik szam: "); scanf("%lf", &b); } switch (menu) { case 1: printf("Az osszeg: %g\n", a + b); break; case 2: printf("A kulonbseg: %g\n", a - b); break;
Megoldás case 3: printf("A szorzat: %g\n", a * b); break; case 4: while (b == 0.0) { printf("Uriember nem oszt 0-val, kerek uj osztot! "); scanf("%lf", &b); } printf("A hanyados: %g\n", a / b); break; case 5:
Megoldás
}
printf("Kilepes\n"); break; default: printf("Ilyen menupont nincs!\n"); } } while (menu != 5); return 0;
Feladat
●
● ● ● ●
●
Az előző programot lássa el még több funkcióval, például: Lehessen választani decimális, oktális és hexadecimális megjelenítés között (segítség: printf()) Tudjon százalékot számolni Számoljon abszolút értéket Számoljon reciprokot Számolja ki egy szám faktoriálisát (segítség: for ciklussal) Számolja ki egy szám egész kitevős hatványát ciklussal
Néhány megoldás printf("Minek a faktorialisa? "); scanf("%d", &num); fact = 1; for (i = 2; i <= num; i++) fact *= i; printf("A faktorialis: %d\n", fact); int a, b, i, p = 1; printf("Hatvany alap: "); scanf("%d", &a); printf("Kitevo: "); scanf("%d", &b); for (i = 1; i <= b; i++) p *= a; printf("A hatvany: %d\n", p);
Feladat Írjon egyszerű kalandjátékot, amely a következőképpen működik: A játék helyszínekből áll, minden helyszínen kiír a képernyőre egy rövid szöveget, amelyben leírja, hogy a játékos éppen hol van, mit lát, stb. A játékos egyszerű menü segítségével választhat néhány lehetőség közül, majd a választásnak megfelelően megy tovább a következő helyszínre.
Feladat Az előző programot fejlessze tovább úgy, hogy a játékosnak bizonyos tulajdonságai is legyenek (életerő, ügyesség, stb.), ezeket tárolja struktúrában. A program jegyezze meg, hogy a játékos milyen tárgyat, kulcsot stb. talált meg, és ez legyen hatással bizonyos helyszíneken a történetre (például a várkastély pincéjében egy ajtón csak akkor engedjen be a program, ha a játékos már megtalálta hozzá a kulcsot).
Folyamatábra Valósítsa meg a következő dián látható folyamatábrát a tanult vezérlési szerkezetek segítségével. A kérdéseknél a program scanf()-el olvassa be a választ, a kijelentő mondatokat pedig írja ki a képernyőre.
Folyamatábra