Feladatgyűjtemény a C programozási nyelvhez Smidla József 2011. november 7.
2
Tartalomjegyzék I.
Nyelvi alapok
5
1. Kimenet, bemenet
7
2. Változók, operátorok 3. Vezérlési szerkezetek 3.1. Programozási tételek . . . . 3.1.1. Csere . . . . . . . . 3.1.2. Lineáris keresés . . . 3.1.3. Eldöntés . . . . . . . 3.1.4. Megszámlálás . . . . 3.1.5. Minimum kiválasztás 3.1.6. Rendezés . . . . . . 3.2. Feladatok . . . . . . . . . .
13 . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
21 21 21 21 21 21 21 21 21
4. Függvények 37 4.1. Függvényhívások . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.2. Rekurzió . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.3. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5. Mutatók
45
6. Struktúrák
51
7. File kezelés
53
8. A standard könyvtár
55
9. Az előfeldolgozó
57
II.
59
Fejlettebb technikák
10.Láncolt listák
61
11.Fák
63
12.Bitműveletek
65
13.Memóriakezelés
67 3
4 14.Parancssori paraméterek
TARTALOMJEGYZÉK 69
I. rész
Nyelvi alapok
5
1. fejezet
Kimenet, bemenet A következő feladatokat úgy oldja meg, hogy az alábbi programot egészítse ki: 1 #include <s t d i o . h> 2 3 int main ( ) { 4 int i 1 = 1 0 , i 2 = 8 , i 3 = 3 ; 5 double d = 6 6 6 . 6 6 6 ; 6 float f = 42.0; 7 char ch = ’M’ ; 8 char s t r [ ] = " e z ␣ egy ␣ s z o v e g " ; 9 10 // I d e i r j a a m e g o l d a s t ! 11 12 return 0 ; 13 }
Az alábbi feladatok mindegyikében látható 1-1 példa kimenet olyan formában, hogy az egyes karaktereket (például a szóközöket) jól láthatóan elkülöníthessük egymástól. Ott, ahol tabulátort kell használni, az átláthatóság kedvéért a példában 3 szóköz található, a valóságban ez több is lehet.
1.1.1. feladat Írassa ki az i1 v´altoz´o ´ert´ek´et minimum 5 karakter sz´eles mez˝ oben, jobbra igaz´ıtva: 1 0 1.1.2. feladat Írassa ki az i1 v´altoz´o ´ert´ek´et minimum 5 karakter sz´eles mez˝ oben, balra igaz´ıtva: 1 0 1.1.3. feladat Írassa ki az i1 v´altoz´o ´ert´ek´et minimum i2 karakter sz´eles mez˝ oben, jobbra igaz´ıtva: 1 0 7
8
1. Kimenet, bemenet
1.1.4. feladat Írassa ki az i1 v´altoz´o ´ert´ek´et minimum 5 karakter sz´eles mez˝ oben, jobbra igaz´ıtva, a mez˝o u ¨res karaktereinek hely´en 0 legyen: 0 0 0 1 0 1.1.5. feladat Írassa ki az i1 v´altoz´o ´ert´ek´et, ha a sz´am pozit´ıv, akkor legyen el˝ otte egy sz´ ok¨ oz: 1 0 1.1.6. feladat Írassa ki a d v´altoz´o ´ert´ek´et minimum 8 karakter sz´eles mez˝ oben, 3 tizedesjegy pontoss´aggal: 6 6 6 . 6 6 6 1.1.7. feladat Írassa ki a d v´altoz´o ´ert´ek´et minimum i1 karakter sz´eles mez˝ oben, 3 tizedesjegy pontoss´aggal: 6 6 6 . 6 6 6 1.1.8. feladat Írassa ki a d v´altoz´o ´ert´ek´et minimum 8 karakter sz´eles mez˝ oben, i1 tizedesjegy pontoss´aggal: 6 6 6 . 6 6 6 0 0 0 0 0 0 0 1.1.9. feladat Írassa ki a d/2.0 ´ert´ek´et minimum 8 karakter sz´eles mez˝ oben, 3 tizedesjegy pontoss´aggal: 3 3 3 . 3 3 3 1.1.10. feladat Írassa ki a d v´altoz´o ´ert´ek´et minimum i3 karakter sz´eles mez˝ oben, i1 tizedesjegy pontoss´aggal: 6 6 6 . 6 6 6 0 0 0 0 0 0 0 1.1.11. feladat Írassa ki az f v´altoz´o ´ert´ek´et minimum 8 karakter sz´eles mez˝ oben, 3 tizedesjegy pontoss´aggal: 4 2 . 0 0 0 1.1.12. feladat Írassa ki az f v´altoz´o ´ert´ek´et minimum i1 karakter sz´eles mez˝ oben, 3 tizedesjegy pontoss´aggal: 4 2 . 0 0 0 1.1.13. feladat Írassa ki az f v´altoz´o ´ert´ek´et minimum 8 karakter sz´eles mez˝ oben, i1 tizedesjegy pontoss´aggal: 4 2 . 0 0 0 0 0 0 0 0 0 0 1.1.14. feladat Írassa ki az f/4.0 ´ert´ek´et minimum 8 karakter sz´eles mez˝ oben, 3 tizedesjegy pontoss´aggal: 1 0 . 5 0 0 1.1.15. feladat Írassa ki az f v´altoz´o ´ert´ek´et minimum i3 karakter sz´eles mez˝ oben, i1 tizedesjegy pontossaggal: 4 2 . 0 0 0 0 0 0 0 0 0 0
9 1.1.16. feladat Írassa ki, hogy a 40 hány százaléka a 90-nek, a kimenetben jelenjen meg a % jel is: 4 4 . 4 4 4 4 4 4 % 1.1.17. feladat Írassa ki a d v´altoz´o ´ert´ek´et minimum 7 karakter sz´eles mez˝ oben, norm´ al alakban: 6 . 6 6 6 6 6 0 e + 0 2
1
1.1.18. feladat 2
Írassa ki az i1 v´altoz´o ´ert´ek´et okt´alisan:
1.1.19. feladat
Írassa ki az i1 v´altoz´o ´ert´ek´et hexadecim´alisan:
a 1.1.20. feladat Írassa ki az i1 v´altoz´o ´ert´ek´et okt´alisan, 6 karakter sz´eles mez˝ oben, a mez˝ ou ¨res helyein legyen 0: 0 0 0 0 1 2 1.1.21. feladat Írassa ki az i1 v´altoz´o ´ert´ek´et hexadecim´alisan, 6 karakter sz´eles mez˝ oben, a mez˝ ou ¨res helyein legyen 0: 0 0 0 0 0 a 1.1.22. feladat Írassa ki az i1 v´altoz´o ´ert´ek´et okt´alisan, 6 karakter sz´eles mez˝ oben, a sz´ am 0-val kezd˝ odj¨on, jelezve, hogy okt´alis sz´amot ´ırunk ki: 0 1 2 1.1.23. feladat Írassa ki az i1 v´altoz´o ´ert´ek´et hexadecim´alisan, 6 karakter sz´eles mez˝ oben, a mez˝ ou ¨res helyein legyen 0, a ki´ırt ´ert´ek pedig 0x-el kezd˝ odj¨ on, jelezve, hogy hexadecim´ alis sz´amot ´ırunk ki: 0 x 0 0 0 a
e
1.1.24. feladat Írassa ki az str stringet: z e g y s z o v e g
’
1.1.25. feladat Írassa ki az str stringet ’-k k¨oz¨ott: e z e g y s z o v e g ’
"
1.1.26. feladat Írassa ki az str stringet "-k k¨oz¨ott: e z e g y s z o v e g "
\
1.1.27. feladat Írassa ki az str stringet \ -k k¨oz¨ott: e z e g y s z o v e g \
1.1.28. feladat Írassa ki az str stringet, majd az utols´o el˝otti karakter hely´ere ´ırasson ki 1-et : e z e g y s z o v 1 g 1.1.29. feladat Írassa ki az str stringet, majd az elej´et ´ırja fel¨ ul i1 ´ert´ek´evel : 1 0 e g y s z o v e g
10
1. Kimenet, bemenet
1.1.30. feladat Írassa ki az str stringet, majd ut´ana egy tabul´atornyi t´ avols´ agra i1 ´ert´ek´et 4 sz´eles mez˝obe, a mez˝o u ¨res helyeire 0-kat rakva: e z e g y s z o v e g 0 0 1 0 1.1.31. feladat
Írassa ki a ch karaktert:
1.1.32. feladat 7
Írassa ki a ch karakter ASCII k´odj´at decim´alisan:
M
7
1.1.33. feladat Írassa ki a ch karakter ASCII k´odj´at hexadecim´alisan, az A-F bet˝ uket kisbet˝ usen: 4 d 1.1.34. feladat Írassa ki a ch karakter ASCII k´odj´at hexadecim´alisan, az A-F bet˝ uket nagybet˝ usen: 4 D 1.1.35. feladat Írassa ki a ch karakter ASCII k´odj´at hexadecim´alisan, az A-F bet˝ uket kisbet˝ usen, a ki´ırt ´ert´ek 0x-el kezd˝odj¨on: 0 x 4 d 1.1.36. feladat Írassa ki a ch karakter ASCII k´odj´at hexadecim´alisan, az A-F bet˝ uket nagybet˝ usen, a ki´ırt ´ert´ek 0X-el kezd˝odj¨on: 0 X 4 D 1.1.37. feladat Írassa ki a ch karakter ASCII k´odj´at hexadecim´alisan, az A-F bet˝ uket nagybet˝ usen, a ki´ırt ´ert´ek 0x-el kezd˝odj¨on: 0 x 4 D 1.1.38. feladat Írassa ki a d ´ert´ek´et 2 tizedesjegy pontoss´aggal, de u ´gy, hogy a tizedespont helyett vessz˝o legyen: 6 6 6 , 6 7 1.1.39. feladat Írassa ki az i1, i2 ´es i3 ´ert´ek´et, az egyes sz´amok k¨ oz¨ ott legyen 1-1 tabul´ atornyi t´avols´ag: 1 0 8 3 1.1.40. feladat Írassa ki az str string legfeljebb els˝o 7 karakter´et "-k k¨ oz´e: " e z e g y " 1.1.41. feladat Írassa ki az str string legfeljebb els˝o i1-2 karakter´et ’-k k¨ oz´e: ’ e z e g y s ’ 1.1.42. feladat Írassa ki az str string legfeljebb els˝o 5 karakter´et egy 8 sz´eles mez˝ obe, a mez˝ ot hat´arolj´ak " karakterek: " e z e g "
11 1.1.43. feladat Írassa ki az str string legfeljebb els˝o 5 karakter´et egy 8 sz´eles mez˝ obe, balra igaz´ıtva, a mez˝ot hat´arolj´ak " karakterek: " e z e g " 1.1.44. feladat Írassa ki az str string legfeljebb els˝o i2 karakter´et egy 8 sz´eles mez˝ obe, a mez˝ ot hat´ arolj´ ak " karakterek: " e z e g y s " 1.1.45. feladat Írassa ki az str string legfeljebb els˝o i2 karakter´et egy i2 + i3 sz´eles mez˝ obe, balra igaz´ıtva, a mez˝ot hat´arolj´ak " karakterek: " e z e g y s " 1.1.46. feladat Írassa ki az első sorba a " karaktert, majd a k¨ovetkez˝obe egy tabulatorral beljebb a ’-t ´es v´eg¨ ul a harmadik sor elej´ere a \ -t: " ’ \ 1.1.47. feladat Írassa ki a d ´ert´ek´et u ´gy, hogy a tizedesjegyeket cser´elje ki az i1 ´ert´ek´ere: 6 6 6 . 1 0 1.1.48. feladat Rajzoltasson ki a képernyőre egy 3*3-as mátrixot, amely minimum 5 karakter széles mezőben 1 tizedes pontossággal lebegőpontos számokat tartalmaz: 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . 0 7 . 0 8 . 0 9 . 0 1.1.49. feladat Írassa ki az -i1 ´ert´ek´et, mintha el˝ojel n´elk¨ uli v´altoz´o lenne: 4 2 9 4 9 6 7 2 8 6 1.1.50. feladat Írassa ki az i1*10000 ´ert´ek´et, majd a k¨ovetkez˝o sorba mintha short int t´ıpus´ u lenne: 1 0 0 0 0 0 - 3 1 0 7 2 1.1.51. feladat Írassa ki a d*i1 ´ert´ek´et egy i1 sz´eles mez˝obe, 2 tizedesjegy pontoss´ aggal, a mez˝ ot hat´arolj´ak " karakterek, a tizedespont hely´en legyen pontosvessz˝ o, ha a sz´ am pozit´ıv, akkor is jelenjen meg az el˝ojel, a mez˝o u ¨res helyeire ker¨ uljenek 0 karakterek: " + 0 0 6 6 6 6 ; 6 6 "
12
ki:
1. Kimenet, bemenet A következő feladatokat úgy oldja meg, hogy az alábbi programot egészítse
1 #include <s t d i o . h> 2 3 int main ( ) { 4 int a = 0 , b = 0 , c = 0 , d = 0 ; 5 char ch1 , ch2 ; 6 7 // I d e i r j a a m e g o l d a s t ! 8 9 return 0 ; 10 } 1.1.52. feladat A getchar seg´ıts´eg´evel olvasson be egy karaktert a billenty˝ uzetr˝ ol a ch1 v´ altoz´oba, majd ´ırja ki a k´eperny˝ore a beolvasott karaktert: Kerek egy karaktert: t ←A beolvasott karakter: ’t’ 1.1.53. feladat A getchar seg´ıts´eg´evel olvasson be a billenty˝ uzetr˝ol 2 karaktert ( ch1, ch2), majd ´ırja ki ˝oket a k´eperny˝ore: Kerem az elso karaktert: r ←Kerem a masodik karaktert: t ←A beolvasott karakterek: ’r’ es ’t’ 1.1.54. feladat Olvassa be az a v´altoz´o ´ert´ek´et billenty˝ uzetr˝ol scanf seg´ıts´eg´evel, majd a beolvasott ´ert´eket ´ırja ki a k´eperny˝ore: Kerek egy szamot: 53 ←A beolvasott szam: 53 1.1.55. feladat Olvasson be a billentyűzetről egyetlen scanf seg´ıts´eg´evel kett˝ o sz´ amot az a ´es b v´altoz´okba, majd ´ırja ki a k´et sz´amot a k´eperny˝ore: Kerek ketto szamot :34 54 ←A szamok: 34, 54 1.1.56. feladat Olvasson be a billentyűzetről 4 számot, egymástól 1-1 ponttal elválasztva, az a, b, c ´es d v´altoz´okba, majd ´ırja ki a beolvasott sz´ amokat a k´eperny˝ ore: Kerek negy szamot, ponttal elvalasztva: 1.2.3.4 ←A szamok: 1, 2, 3, 4
2. fejezet
Változók, operátorok Az alábbi feladatokat az alábbi kódot néhány scanf-el ´es egyetlen printf-el kieg´esz´ıtve, ´es a printf param´eterek´ent megadott ¨osszetett kifejez´essel oldja meg! 1 #include <s t d i o . h> 2 #include < s t d l i b . h> 3 4 int main ( ) { 5 int a , b , c ; 6 char ch1 , ch2 ; 7 8 // I d e i r j a a m e g o l d a s t ! 9 10 return 0 ; 11 } 1.2.1. feladat a m´ asodik:
´Irja ki a k´eperny˝ore, hogy az els˝o sz´am nagyobb-e mint
Kerem az elso szamot: 5 ←Kerem a masodik szamot: 5 ←Az elso szam nagyobb-e mint a masodik: nem
Kerem az elso szamot: 10 ←Kerem a masodik szamot: 5 ←Az elso szam nagyobb-e mint a masodik: igen 1.2.2. feladat
´Irja ki a k´eperny˝ore a 2 sz´am k¨oz¨ ul a legnagyobb ´ert´ek´et:
Kerem az elso szamot: 5 ←Kerem a masodik szamot: 15 ←A legnagyobb szam: 15 1.2.3. feladat
´Irja ki a k´eperny˝ore a 3 sz´am k¨oz¨ ul a legnagyobb ´ert´ek´et:
13
14
2. Változók, operátorok
Kerem az elso szamot: 5 ←Kerem a masodik szamot: 15 ←Kerem a harmadik szamot: 10 ←A legnagyobb szam: 15 1.2.4. feladat
´Irja ki a k´eperny˝ore a 3 sz´am k¨oz¨ ul a legkisebb ´ert´ek´et:
Kerem az elso szamot: 5 ←Kerem a masodik szamot: 15 ←Kerem a harmadik szamot: 10 ←A legkisebb szam: 5 1.2.5. feladat Kerem Kerem Kerem A ket
´Irja ki a k´eperny˝ore a k´et legnagyobb sz´am ´ert´ek´et:
az elso szamot: 25 ←a masodik szamot: 15 ←a harmadik szamot: 30 ←legnagyobb szam: 25, 30
1.2.6. feladat osszeg´et: ¨
´Irja ki a k´eperny˝ore a legkisebb ´es legnagyobb sz´am
Kerem az elso szamot: 25 ←Kerem a masodik szamot: 15 ←Kerem a harmadik szamot: 30 ←Az osszeg: 45 1.2.7. feladat
´Irja ki, hogy az els˝o sz´am negat´ıv-e:
Kerem az elso szamot: 25 ←A szam nem negativ Kerem az elso szamot: 0 ←A szam nem negativ Kerem az elso szamot: -5 ←A szam negativ 1.2.8. feladat ´Irja ki, hogy az els˝o sz´am negat´ıv-e, majd n¨ovelje meg az els˝ o sz´ am ´ert´ek´et a ki´ırat´as ut´an, most a n¨ovel´es ellen˝orz´es´ere haszn´alhat egy m´ asodik printf h´ıv´ ast is: Kerem az elso szamot: 25 ←A szam nem negativ Az elso szam erteke az elozo kiiratas utan: 26 Kerem az elso szamot: 0 ←A szam nem negativ Az elso szam erteke az elozo kiiratas utan: 1
15 Kerem az elso szamot: -5 ←A szam negativ Az elso szam erteke az elozo kiiratas utan: -4 1.2.9. feladat ´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy az els˝o sz´am kett˝ ovel nagyobb, mint a m´ asodik: Kerem az elso szamot: 7 ←Kerem a masodik szamot: 5 ←Igen, az elso 2-vel nagyobb, mint a masodik Kerem az elso szamot: 7 ←Kerem a masodik szamot: 6 ←Nem, az elso nem 2-vel nagyobb, mint a masodik 1.2.10. feladat ´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy az els˝o sz´am kett˝ ovel nagyobb, mint a m´ asodik, vagy a harmadik 3-al kisebb, mint az els˝o: Kerem az elso szamot: 7 ←Kerem a masodik szamot: 5 ←Kerem a harmadik szamot: 6 ←A harom szam megfelel a feltetelnek Kerem az elso szamot: 7 ←Kerem a masodik szamot: 6 ←Kerem a harmadik szamot: 4 ←A harom szam megfelel a feltetelnek Kerem az elso szamot: 7 ←Kerem a masodik szamot: 6 ←Kerem a harmadik szamot: 5 ←A harom szam nem felel meg a feltetelnek 1.2.11. feladat ´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy az els˝o sz´am a m´ asodikn´ al nagyobb, ´es a harmadikn´al kisebb: 1.2.12. feladat ´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy az els˝o ´es a m´ asodik sz´ am k¨ ul¨ onbs´ege 5-n´el nagyobb:
1.2.13. feladat ´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy az els˝o ´es a m´ asodik sz´ am k¨ ul¨ onbs´ege 5-n´el nagyobb, vagy 5-el egyenl˝o:
1.2.14. feladat ´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy az els˝o sz´am oszthat´ o a m´ asodikkal, de a harmadikkal nem:
16
2. Változók, operátorok
1.2.15. feladat ´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy az els˝o sz´am oszthat´ o a m´ asodikkal, ´es a harmadikkal osztva a marad´ek 4 lesz:
1.2.16. feladat ´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy az els˝o sz´am oszthat´ o a m´ asodikkal, ´es a harmadikkal osztva a marad´ek nagyobb-e mint 5, ´es a h´ arom sz´ am ¨ osszege 50 ´es 100 k¨oz¨ott van-e:
´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy ha az els˝o 1.2.17. feladat sz´ amot bitenk´ent balra 2-vel, majd a m´asodikat jobbra 3-al eltoljuk, ´es a k´et sz´ amot ¨ osszeadjuk, akkor az eredm´eny oszthat´o-e a harmadik sz´ammal:
´Irja ki a 3 sz´am k¨oz¨ 1.2.18. feladat ul a legkisebb sz´am ´ert´ek´et a k´eperny˝ ore, majd a ki´ır´ as ut´an n˝oj¨on egyel a v´altoz´o ´ert´eke:
1.2.19. feladat ´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy a ch1 karakter az angol ABC kisbet˝ ui k¨oz¨ ul valamelyik:
1.2.20. feladat sz´ amjegy-e:
´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy a ch1 karakter
1.2.21. feladat ´Irja ki a k´eperny˝ore, hogy igaz-e az, hogy a ch1 karakter szerepelhet-e egy lebeg˝opontos sz´am ki´ır´asa k¨ozben (teh´at sz´amjegyen k´ıv¨ ul lehet ’.’, ’-’, ’+’, ’e’ vagy ’E’ karakter is):
1.2.22. feladat Ha a ch1 karakter az angol ABC kisbet˝ ui k¨oz¨ ul valamelyik, akkor ´ırassa ki a k´eperny˝ore a nagybet˝ us v´altozat´at, egy´ebk´ent pedig az eredeti bet˝ ut:
1.2.23. feladat Ha a ch1 karakter az angol ABC nagybet˝ ui k¨oz¨ ul valamelyik, akkor ´ırassa ki a k´eperny˝ore a kisbet˝ us v´altozat´at, ha a ch1 kisbet˝ u, akkor a nagybet˝ us megfelel˝oj´et ´ırja ki
17 1.2.24. feladat B˝ ov´ıtse ki az el˝oz˝o programot u ´gy, hogy ha a ch1 nem tartozik az angol ABC bet˝ ui k¨ oz´e, akkor ´ırjon ki hiba¨ uzenetet:
1.2.25. feladat
´Irassa ki az els˝o sz´am ellentetj´et:
1.2.26. feladat
´Irassa ki az els˝o ´es m´asodik sz´am ¨osszeg´enek ellentetj´et:
´Irassa ki, hogy igaz-e az, hogy az els˝o k´et sz´am 1.2.27. feladat n´egyzet¨ osszege nagyobb-e mint a harmadik sz´am:
1.2.28. feladat ´Irja ki, hogy a beolvasott ch1 v´altoz´o 5. bitj´enek mi az ´ert´eke (a bitek sorsz´ amoz´ as´ at 0-r´ ol kezdj¨ uk): Gepeljen be egy karaktert: A ←Az 5. bit erteke: 0 Gepeljen be egy karaktert: a ←Az 5. bit erteke: 1 1.2.29. feladat B˝ ov´ıtse ki az el˝oz˝o programot u ´gy, hogy a ch1 v´altoz´o osszes bitj´et ki´ırja a k´eperny˝ ¨ ore: Gepeljen be egy karaktert: A ←A bitminta: 01000001 Gepeljen be egy karaktert: a ←A bitminta: 01100001 1.2.30. feladat
Invert´ alja a ch1 v´altoz´o bitjeit:
Gepeljen be egy karaktert: A ←A bitminta invertalas elott: 01000001 A bitminta invertalas utan: 010111110 Gepeljen be egy karaktert: m ←A bitminta invertalas elott: 01101101 A bitminta invertalas utan: 010010010 1.2.31. feladat
´ ıtsa be a ch1 v´altoz´o 4. bitjet 1-re: All´
Gepeljen be egy karaktert: A ←A bitminta a modositas elott: 01000001 A bitminta a modositas utan: 001010001
18
2. Változók, operátorok 1.2.32. feladat
´ ıtsa be a ch1 v´altoz´o 6. bitjet 0-ra: All´
Gepeljen be egy karaktert: A ←A bitminta a modositas elott: 01000001 A bitminta a modositas utan: 000000001 1.2.33. feladat
´ ıtsa be a ch1 v´altoz´o 2. 5 ´es 6. bitj´et 1-re: All´
Gepeljen be egy karaktert: A ←A bitminta a modositas elott: 01000001 A bitminta a modositas utan: 001100101 1.2.34. feladat
´ ıtsa be a ch1 v´altoz´o 0., 1. ´es 3. bitj´et 0-ra: All´
Gepeljen be egy karaktert: m ←A bitminta a modositas elott: 01101101 A bitminta a modositas utan: 001100100 1.2.35. feladat A ch1 v´altoz´o minden bitj´et tolja el balra 1-el, ´es a legkisebb helyi´ert´ek˝ u bitje legyen 0: Gepeljen be egy karaktert: m ←A bitminta a modositas elott: 01101101 A bitminta a modositas utan: 011011010 1.2.36. feladat A ch1 v´altoz´o minden bitj´et tolja el balra 1-el, ´es a legkisebb helyi´ertek˝ u bitje legyen 1: Gepeljen be egy karaktert: m ←A bitminta a modositas elott: 01101101 A bitminta a modositas utan: 011011011 ´ 1.2.37. feladat Allap´ ıtsa meg, hogy a ch1 ´es ch2 v´altoz´onak vannak-e olyan azonos helyi´ert´ek˝ u bitp´arjai, amelyek ´ert´ekei rendre megegyeznek: Gepelje be az elso karaktert: m ←Gepelje be a masodik karaktert: a ←Az elso karakter bitmintaja: 0001101101 A masodik karakter bitmintaja: 01000001 Vannak egyezo bitek ´Irassa ki, hogy h´any bitet foglal el egy int t´ıpus´ 1.2.38. feladat u v´ altoz´ o az adott architekt´ ur´an:
1.2.39. feladat foglal-e t¨ obb b´ ajtot:
´Irassa ki, hogy a short vagy az int t´ıpus´ u v´altoz´o
19 1.2.40. feladat El˝ ofordulhat-e az az ANSI C szabv´any szerint, hogy a float, double ´es long double t´ıpus´ u v´altoz´ok m´erete azonos? 1.2.41. feladat 1 2
x ∗= y + 1 x = x ∗ y + 1 1.2.42. feladat
1
Ekvivalens-e egym´assal a k¨ovetkez˝o k´et kifejez´es?
Mi lesz az ´ert´eke a k¨ovetkez˝o kifejez´esnek, ´es mi´ert?
4 < 5 < 3 1.2.43. feladat Mi lesz az ´ert´eke az a, b, ´es c v´altoz´oknak az al´abbi k´ odr´eszlet v´egrehajt´ asa ut´ an, ´es mi´ert?
1 2 3 4
int a = 2 ; int b = 0 ; int c = −1; a | | b++ && c−−; 1.2.44. feladat Mi lesz az ´ert´eke az a, b, ´es c v´altoz´oknak az al´abbi k´ odr´eszlet v´egrehajt´ asa ut´ an, ´es mi´ert?
1 2 3 4
int int int a++
a = −1; b = 0; c = −1; | | b++ && c−−;
1.2.45. feladat Mi lesz az ´ert´eke az a, b, ´es c v´altoz´oknak az al´abbi k´ odr´eszlet v´egrehajt´ asa ut´ an, ´es mi´ert? 1 int 2 int 3 int 4 ++a
a = −1; b = 0; c = −1; && b++ && c−−;
1.2.46. feladat Lehet-e abb´ol probl´ema, ha egy unsigned int t´ıpus´ u v´ altoz´ ot konvert´ alunk signed long-ra, ha igen, milyen probl´ema, ´es mi´ert? 1.2.47. feladat Lehet-e abb´ ol probl´ema, ha egy double t´ıpus´ u v´altoz´ot konvert´ alunk float-ra, ha igen, milyen probl´ema, ´es mi´ert? 1.2.48. feladat Lehet-e abb´ol probl´ema, ha egy long int t´ıpus´ u v´ altoz´ ot konvert´ alunk double-ra, ha igen, milyen probl´ema, ´es mi´ert? 1.2.49. feladat Lehet-e abb´ ol probl´ema, ha egy double t´ıpus´ u v´altoz´ot konvert´ alunk long int-re, ha igen, milyen probl´ema, ´es mi´ert?
20
2. Változók, operátorok
3. fejezet
Vezérlési szerkezetek 3.1. 3.1.1.
Programozási tételek Csere
Van k´et v´ altoz´ onk, (A ´es B), ´es azok ´ert´ek´et szeretn´enk felcser´elni. Az egyik lehets´eges m´ odszer az, hogy haszn´ alunk egy seg´edv´altoz´ot. Ebbe elmentj¨ uk az A v´ altoz´ o ´ert´ek´et: SEGED = A Mivel A ´ert´ek´et ´ıgy elmentett¨ uk, fel¨ ul´ırhatjuk B ´ert´ek´evel: A = B Majd B ´ert´ek´et fel¨ ul´ırjuk A eredeti ´ert´ek´evel, amit most a SEGED-ben t´arolunk: B = SEGED
3.1.2.
Lineáris keresés
3.1.3.
Eldöntés
3.1.4.
Megszámlálás
3.1.5.
Minimum kiválasztás
3.1.6.
Rendezés
3.2.
Feladatok
A k¨ ovetkez˝ o feladatokat az al´ abbi forr´ask´odot kieg´esz´ıtve oldja meg. A p´elda kimenetekben az els˝ o bek´ert sz´ am az i1, a m´asodik az i2 ´es a harmadik pedig az i3 v´ altoz´ o. Bizonyos feladatokat u ´gy is meg lehetne oldani, hogy egy k´eplettel kisz´am´ıtjuk az eredm´enyt (p´eld´ aul egy intervallumon bel¨ ul az eg´esz sz´amok ¨osszege), ´am most gyakorl´ as c´elj´ ab´ ol tekints¨ unk el ezekt˝ol a k´epletekt˝ol, ´es ezek n´elk¨ ul oldjuk meg a feladatokat. Minden algoritmusn´al gondoljuk v´egig a sz´els˝os´eges eseteket is!
21
22
3. Vezérlési szerkezetek
1 #include <s t d i o . h> 2 3 int main ( ) { 4 5 int i 1 , i 2 , i 3 ; 6 p r i n t f ( ” G e p e l j e n be 3 szamot : ” ) ; 7 s c a n f ( ”%d %d %d” , &i 1 , &i 2 , &i 3 ) ; 8 9 // I d e i r j a a m e g o l d a s t ! 10 11 return 0 ; 12 } 1.3.1. feladat Rajzoljon ki a k´eperny˝ore egy i1 sorb´ol ´es i2 oszlopb´ol all´ ´ o * karakterekkel kit¨ olt¨ott t´eglalapot: Gepeljen be 2 szamot: 1 1 ←* Gepeljen be 2 szamot: 3 4 ←**** **** **** 1.3.2. feladat Rajzoljon ki a k´eperny˝ore egy i1 sorb´ol ´es i2 oszlopb´ol all´ ´ o * karakterekkel hat´arolt t´eglalapot: Gepeljen be 2 szamot: 1 1 ←* Gepeljen be 2 szamot: 2 4 ←**** **** Gepeljen be 2 szamot: 3 4 ←**** **** **** Gepeljen be 2 szamot: 5 6 ←****** ****** ****** ****** ****** 1.3.3. feladat Rajzoljon ki a k´eperny˝ore egy i1 karakternyi magas der´eksz¨ og˝ u h´ aromsz¨ oget:
23
3.2. FELADATOK Gepeljen be 1 szamot: 1 ←* Gepeljen be 1 szamot: 2 ←* ** Gepeljen be 1 szamot: 3 ←* ** *** 1.3.4. feladat magass´ ag´ u X-et:
Rajzoljon ki a k´eperny˝ore egy i1 karakter sz´eless´eg˝ u ´es
Gepeljen be 1 szamot: 1 ←* Gepeljen be 1 szamot: 2 ←** ** Gepeljen be 1 szamot: 3 ←* * ** * * Gepeljen be 1 szamot: 4 ←**** *** *** **** Gepeljen be 1 szamot: 5 ←***** **** *** **** ***** 1.3.5. feladat
Adja ¨ ossze a sz´amokat i1-t˝ol i2-ig:
Gepeljen be 2 szamot: 10 20 ←Az osszeg: 165 1.3.6. feladat
Adjon ¨ ossze minden i1. sz´amot i2-t˝ol i3-ig:
Gepeljen be 3 szamot: 2 10 20 ←Az osszeg: 90
24
3. Vezérlési szerkezetek
1.3.7. feladat Sz´amolja ki i1 faktori´alis´at! Egy n sz´am faktori´alisa az eg´esz sz´ amok szorzata 1-t˝ol n-ig, tov´abb´a a 0 faktori´alisa 1: Gepeljen be 1 szamot: 0 ←0 faktorialisa: 1 Gepeljen be 1 szamot: 1 ←1 faktorialisa: 1 Gepeljen be 1 szamot: 2 ←2 faktorialisa: 2 Gepeljen be 1 szamot: 3 ←3 faktorialisa: 6 Gepeljen be 1 szamot: 4 ←4 faktorialisa: 24 1.3.8. feladat ´Irassa ki k´eperny˝ore a Fibonacci-sorozat els˝o i1 elem´et. A Fibonacci sorozat i. elem´et jel¨olje Fi , ahol i ≥ 0. Az els˝o k´et elem ´ert´eke: F0 = 0, F1 = 1. Ha i ≥ 2, akkor Fi = Fi−1 + Fi−2 . Gepeljen be 1 szamot: 10 ←Az elso 10 Fibonacci szam: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 1.3.9. feladat Vizsg´alja meg, hogy az int t´ıpus legfeljebb mekkora N sz´ am faktori´ alis´ anak t´ arol´as´ara alkalmas: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 ez
faktorialisa: 1 faktorialisa: 1 faktorialisa: 2 faktorialisa: 6 faktorialisa: 24 faktorialisa: 120 faktorialisa: 720 faktorialisa: 5040 faktorialisa: 40320 faktorialisa: 362880 faktorialisa: 3628800 faktorialisa: 39916800 faktorialisa: 479001600 faktorialisa: 6227020800 mar nagyobb, mint 2147483647
A legnagyobb ertek, amelynek faktorialisat egy int-ben tarolni tudjuk: 12 1.3.10. feladat ´Irassa ki egy m´ertani sorozat els˝o i1 elem´et, ha az els˝o elem i2, ´es a szorz´ o i3 :
25
3.2. FELADATOK Gepeljen be 3 szamot: 10 2 3 ←2 6 18 54 162 486 1458 4374 13122 39366 1.3.11. feladat ha i2 nem negat´ıv :
Sz´ amolja ki az i1 i2-edik hatv´any´at, de csak akkor,
Gepeljen be 2 szamot: 0 0 ←0ˆ0 = nem ertelmezheto Gepeljen be 2 szamot: 4 0 ←4ˆ0 = 1 Gepeljen be 2 szamot: 0 5 ←0ˆ5 = 0 Gepeljen be 2 szamot: 1 5 ←1ˆ5 = 1 Gepeljen be 2 szamot: 2 5 ←2ˆ5 = 32 Gepeljen be 2 szamot: 3 5 ←3ˆ5 = 243 Gepeljen be 2 szamot: 4 5 ←4ˆ5 = 1024 1.3.12. feladat Sz´ amolja ki az i1 i2-edik hatv´any´at ´es kezelje azt az esetet is, amikor i2 negat´ıv: Gepeljen be 2 szamot: 0 -4 ←Hiba, ervenytelen adatok! Gepeljen be 2 szamot: 1 -4 ←1ˆ-4 = 1 Gepeljen be 2 szamot: 2 -4 ←2ˆ-4 = 0.0625 Gepeljen be 2 szamot: 3 -4 ←3ˆ-4 = 0.0123457 Gepeljen be 2 szamot: 4 -4 ←4ˆ-4 = 0.00390625 Gepeljen be 2 szamot: 5 -4 ←5ˆ-4 = 0.0016 1.3.13. feladat
´Irja ki a k´eperny˝ore i1 oszt´oit :
26
3. Vezérlési szerkezetek
Gepeljen be 1 szamot: 1 ←1 Gepeljen be 1 szamot: 2 ←1 2 Gepeljen be 1 szamot: 10 ←1 2 5 10 Gepeljen be 1 szamot: 17 ←1 17 Gepeljen be 1 szamot: 100 ←1 2 4 5 10 20 25 50 100 1.3.14. feladat
Hat´arozza meg, hogy i1 pr´ımsz´am-e:
Gepeljen be 1 szamot: 1 ←A(z) 1 nem primszam Gepeljen be 1 szamot: 2 ←A(z) 2 primszam Gepeljen be 1 szamot: 3 ←A(z) 3 primszam Gepeljen be 1 szamot: 4 ←A(z) 4 nem primszam Gepeljen be 1 szamot: 11223 ←A(z) 11223 nem primszam Gepeljen be 1 szamot: 79609 ←A(z) 79609 primszam 1.3.15. feladat ´ert´ek´et:
Hat´arozza meg az i1 ut´an k¨ovetkez˝o els˝o pr´ımsz´am
Gepeljen be 1 szamot: 1 ←A(z) 1 utani elso primszam: 2 Gepeljen be 1 szamot: 3 ←A(z) 3 utani elso primszam: 5 Gepeljen be 1 szamot: 100 ←A(z) 100 utani elso primszam: 101 Gepeljen be 1 szamot: 1232 ←A(z) 1232 utani elso primszam: 1237
27
3.2. FELADATOK 1.3.16. feladat
Hat´ arozza meg, hogy i1 n´egyzetsz´am-e:
Gepeljen be 1 szamot: 1 ←A(z) 1 negyzetszam Gepeljen be 1 szamot: 2 ←A(z) 2 nem negyzetszam Gepeljen be 1 szamot: 4 ←A(z) 4 negyzetszam Gepeljen be 1 szamot: 10 ←A(z) 10 nem negyzetszam Gepeljen be 1 szamot: 49 ←A(z) 49 negyzetszam Gepeljen be 1 szamot: 32244 ←A(z) 32244 nem negyzetszam Gepeljen be 1 szamot: 28558336 ←A(z) 28558336 negyzetszam 1.3.17. feladat n´egyzetsz´ am van:
Sz´ amolja meg, hogy i1 el˝ott i1-t is vizsg´alva) mennyi
Gepeljen be 1 szamot: 1 ←A(z) 1 elott 1 negyzetszam van Gepeljen be 1 szamot: 100 ←A(z) 100 elott 10 negyzetszam van Gepeljen be 1 szamot: 212341 ←A(z) 212341 elott 460 negyzetszam van 1.3.18. feladat Sz´ amolja meg, hogy i1 ´es i2 k¨oz¨ott ( i1-t ´es i2-t is vizsg´ alva) mennyi n´egyzetsz´ am van: Gepeljen be 2 szamot: 1 1 ←A [1, 1] intervallumban 1 negyzetszam van Gepeljen be 2 szamot: 1 10 ←A [1, 10] intervallumban 3 negyzetszam van Gepeljen be 2 szamot: 1 100 ←A [1, 100] intervallumban 10 negyzetszam van Gepeljen be 2 szamot: 232 3242 ←A [232, 3242] intervallumban 41 negyzetszam van
28
3. Vezérlési szerkezetek
1.3.19. feladat Olvasson be a billenty˝ uzetr˝ol sz´amokat 0 v´egjelig (teh´at ha a beolvasott sz´ am 0, akkor v´ege a beolvas´asnak), ´es szamolja meg, hogy a 0-t kiv´eve mennyi sz´ amot olvasott be: Kerek egy szamot: Kerek egy szamot: Kerek egy szamot: Kerek egy szamot: Kerek egy szamot: Kerek egy szamot: 5 szamot olvastam
4 ←2 ←8 ←5 ←7 ←0 ←be
1.3.20. feladat Olvasson be a billenty˝ uzetr˝ol sz´amokat 0 v´egjelig, ´es a v´egjelen k´ıv¨ ul hat´ arozza meg a legnagyobb beolvasott elemet: Kerek egy szamot: 4 ←Kerek egy szamot: 2 ←Kerek egy szamot: 8 ←Kerek egy szamot: 7 ←Kerek egy szamot: 0 ←A legnagyobb beolvasott szam: 8 Kerek egy szamot: -5 ←Kerek egy szamot: -7 ←Kerek egy szamot: 0 ←A legnagyobb beolvasott szam: -5 1.3.21. feladat Olvasson be a billenty˝ uzetr˝ol sz´amokat 0 v´egjelig, ´es a v´egjelen k´ıv¨ ul hat´ arozza meg a legkisebb beolvasott elemet: Kerek egy szamot: 4 ←Kerek egy szamot: 2 ←Kerek egy szamot: 8 ←Kerek egy szamot: 7 ←Kerek egy szamot: 0 ←A legkisebb beolvasott szam: 2 1.3.22. feladat Olvasson be a billenty˝ uzetr˝ol sz´amokat 0 v´egjelig, ´es sz´ amolja meg, hogy mennyi p´aros sz´amot olvasott be: Kerek egy szamot: 4 ←Kerek egy szamot: 2 ←Kerek egy szamot: 8 ←Kerek egy szamot: 7 ←Kerek egy szamot: 0 ←3 paros szamot olvastam be 1.3.23. feladat Olvasson be a billenty˝ uzetr˝ol sz´amokat 0 v´egjelig, ´es sz´ amolja ki a beolvasott sz´amok ´atlag´at, a v´egjelet ne vegye figyelembe:
29
3.2. FELADATOK Kerek egy szamot: 4 ←Kerek egy szamot: 2 ←Kerek egy szamot: 8 ←Kerek egy szamot: 7 ←Kerek egy szamot: 0 ←A szamok atlaga: 5.25 1.3.24. feladat
Egy dolgozat ponthat´arai a k¨ovetkez˝ok:
• 0 - 12 : el´egtelen • 13 - 18 : el´egs´eges • 19 - 27 : k¨ ozepes • 28 - 31 : j´ o • 32 - 39 : jeles A program ´ırja ki, hogy i1 pontsz´am eset´en milyen jegy adhat´o az adott dolgozatra: Gepeljen be 1 szamot: 1 ←Az erdemjegy: elegtelen Gepeljen be 1 szamot: 12 ←Az erdemjegy: elegtelen Gepeljen be 1 szamot: 20 ←Az erdemjegy: elegseges Gepeljen be 1 szamot: 32 ←Az erdemjegy: jeles 1.3.25. feladat Switch - case seg´ıts´eg´evel hat´arozza meg, hogy az i1. h´ onap i2. napj´ aig h´ any nap telt el az ´evben, ha nem sz¨ok˝o´evben vagyunk.: Kerem a honapot: 5 ←Kerem a napot: 20 ←Az eltelt napok szama: 140 1.3.26. feladat Switch - case seg´ıts´eg´evel hat´arozza meg, hogy az i1 ´evben a i2. h´ onap i3. napj´ aig h´any nap telt el az ´evben, de most vegye figyelembe azt is, ha sz¨ ok˝ o´evben vagyunk: Kerem az evet: 1993 ←Kerem a honapot: 5 ←Kerem a napot: 20 ←Az eltelt napok szama: 140 Kerem az evet: 2000 ←Kerem a honapot: 5 ←-
30
3. Vezérlési szerkezetek
Kerem a napot: 20 ←Az eltelt napok szama: 141 1.3.27. feladat Val´os´ıtson meg egy egyszer˝ u men¨ ut! A program jelen´ıtsen meg 4 v´ alaszt´ asi lehet˝ os´eget, amik k¨oz¨ ul 1 ´es 4 k¨oz¨otti sz´amok be´ır´as´aval lehessen v´ alasztani, ´es a v´ alaszt´asnak megfelel˝oen ´ırjon ki egy u ¨zenetet: Elso menupont: 1 Masodik menupont: 2 Harmadik menupont: 3 Negyedik menupont: 4 Valasszon a fenti menupontok kozul: 2 ←Ugyintezonk ebredeseig kerjuk varjon turelemmel 1.3.28. feladat B˝ov´ıtse ki az el˝oz˝o programot u ´gy, hogy a men¨ upont v´ alaszt´ as ut´ an k´erdezze meg a felhaszn´al´ot, hogy szeretne-e u ´jra v´alasztani, ha igen, akkor jelenjen meg u ´jra a men¨ u, egy´ebk´ent lepjen ki: Elso menupont: 1 Masodik menupont: 2 Harmadik menupont: 3 Negyedik menupont: 4 Valasszon a fenti menupontok kozul: 1 ←Sajnaljuk, de ugyintezonknek jelenleg nincs kedve az On problemajaval foglalkozni Kivan masik menupontot kivalasztani (i/n)? i ←Elso menupont: 1 Masodik menupont: 2 Harmadik menupont: 3 Negyedik menupont: 4 Valasszon a fenti menupontok kozul: 3 ←Jelenleg fontosabb dolgunk is van, mint Onnel foglalkozni Kivan masik menupontot kivalasztani (i/n)? n ←Forduljon hozzank maskor is bizalommal! 1.3.29. feladat M´odos´ıtsa az el˝oz˝o programot u ´gy, hogy minden eddigi men¨ upontb´ ol t´erjen vissza a men¨ ube, ´es legyen egy kil´ep´es men¨ upont is : Elso menupont: 1 Masodik menupont: 2 Harmadik menupont: 3 Negyedik menupont: 4 Kilepes: 5 Valasszon a fenti menupontok kozul: 4 ←Probalta kikapcsolni, bekapcsolni?
3.2. FELADATOK
31
Elso menupont: 1 Masodik menupont: 2 Harmadik menupont: 3 Negyedik menupont: 4 Kilepes: 5 Valasszon a fenti menupontok kozul: 5 ←Forduljon hozzank maskor is bizalommal! 1.3.30. feladat Fejlessze tov´ abb az el˝oz˝o programot egyszer˝ u sz´amol´og´ep programm´ a: lehessen v´ alasztani a n´egy alapm˝ uvelet k¨oz¨ ul, ´es v´egezze el a kiv´ alasztott m˝ uveletet k´et bek´ert sz´am k¨oz¨ott. Amennyiben oszt´as eset´en az oszt´ o nulla, akkor jelen´ıtsen meg egy hiba¨ uzenetet, majd addig k´erje be az oszt´ ot, am´ıg a felhaszn´ al´ o null´ at´ ol k¨ ul¨onb¨oz˝o ´ert´eket nem ´ır be: Osszeadas: 1 Kivonasz: 2 Szorzas: 3 Osztas: 4 Kilepes: 5 Valasszon egy menupontot: 2 ←Kerem a szamokat: 5 3 ←5 - 3 = 2 Osszeadas: 1 Kivonasz: 2 Szorzas: 3 Osztas: 4 Kilepes: 5 Valasszon egy menupontot: 4 ←Kerem a szamokat: 5 0 ←Uriember nem oszt 0-val, kerek masik osztot: 0 ←Uriember nem oszt 0-val, kerek masik osztot: 2 ←5 / 2 = 2.5 Osszeadas: 1 Kivonasz: 2 Szorzas: 3 Osztas: 4 Kilepes: 5 Valasszon egy menupontot: 5 ←Viszlat 1.3.31. feladat T¨ olts¨ on fel egy 10 elem˝ u int t¨omb¨ot sz´amokkal, a sz´ amokat billenty˝ uzetr˝ ol olvassa be: Kerem a(z) 1. szamot: 5 ←Kerem a(z) 2. szamot: 2 ←. .
32
3. Vezérlési szerkezetek
. Kerem a(z) 10. szamot: 8 ←1.3.32. feladat
´Irassa ki a fenti t¨omb elemeit:
A beolvasott tomb: 5 20 6 7 2 3 63 5 6 12 1.3.33. feladat
Hat´arozza meg a t¨omb legnagyobb ´es legkisebb elem´et:
A tomb legnagyobb eleme: 63 A tomb legkisebb eleme: 2 1.3.34. feladat
Cser´elje meg a t¨omb els˝o ´es m´asodik elem´et:
Csere elott: 5 20 6 7 2 3 63 5 6 12 Csere utan: 20 5 6 7 2 3 63 5 6 12 1.3.35. feladat
Cser´elje meg a t¨omb els˝o ´es a legkisebb elem´et:
Csere elott: 5 20 6 7 2 3 63 5 6 12 Csere utan: 2 20 6 7 5 3 63 5 6 12
1.3.36. feladat Az el˝oz˝o programot b˝ov´ıtse ki u ´gy, hogy rendezze n¨ ovekv˝ o sorrendbe a t¨ omb¨ot: Csere elott: 5 20 6 7 2 3 63 5 6 12 Legkisebb elem: 2, pozicioja: 5 1. es 5. elem csereje utan: 2 20 6 7 5 3 63 5 6 12 Kovetkezo legkisebb elem: 3, pozicioja: 2. es 6. elem csereje utan: 2 3 6 7 5 20 63 5 6 12 Kovetkezo legkisebb elem: 5, pozicioja: 3. es 5. elem csereje utan: 2 3 5 7 6 20 63 5 6 12 Kovetkezo legkisebb elem: 5, pozicioja: 4. es 7. elem csereje utan: 2 3 5 5 6 20 63 7 6 12 Kovetkezo legkisebb elem: 6, pozicioja: 5. es 5. elem csereje utan: 2 3 5 5 6 20 63 7 6 12 Kovetkezo legkisebb elem: 6, pozicioja: 6. es 9. elem csereje utan:
6
5
7
5
9
33
3.2. FELADATOK 2 3 5 5 6 6 63 7 20 12 Kovetkezo legkisebb elem: 7, pozicioja: 8 7. es 8. elem csereje utan: 2 3 5 5 6 6 7 63 20 12 Kovetkezo legkisebb elem: 12, pozicioja: 10 8. es 10. elem csereje utan: 2 3 5 5 6 6 7 12 20 63 Kovetkezo legkisebb elem: 20, pozicioja: 9 9. es 9. elem csereje utan: 2 3 5 5 6 6 7 12 20 63
1.3.37. feladat sorrendbe rendezzen!
M´ odos´ıtsa az el˝oz˝o programot u ´gy, hogy cs¨okken˝o
1.3.38. feladat Egy m´ asik t¨ombbe m´asolja ´at az el˝oz˝o feladatokban haszn´ alt t¨ ombb˝ ol a p´ aros sz´ amokat. A sz´amok sorrendje tetsz˝oleges lehet: Az elso tomb: 5 20 6 7 2 3 63 5 6 12 A masodik tomb: 20 6 2 6 12 1.3.39. feladat Hat´ arozza meg egy string hossz´at (saj´at ciklussal, ´es ne az strlen-el!), seg´ıts´eg: a string karaktert¨omb ’\0’-val van lez´arva. A string: "ez egy szoveg" Hossza: 13 1.3.40. feladat Vizsg´ alja meg, hogy egy string palindrom-e (azaz el¨olr˝ol olvasva ugyanaz-e mint visszafel´e), p´eld´aul.: gorog, keretkarakterek: String: "gorog" Ez palindrom String: "keretkarakterek" Ez palindrom String: "alma" Ez nem palindrom 1.3.41. feladat megford´ıtja: A tomb 5 20 6 A tomb 12 6 5
´Irjon programot, amely egy t¨omb elemeinek sorrendj´et
megforditas elott: 7 2 3 63 5 6 12 megforditas utan: 63 3 2 7 6 20 5
1.3.42. feladat ´Irjon programot, amely egy t¨omb elemeit a t¨omb¨on bel¨ ul egyel el˝ or´ebb tolja, ´es az eredeti els˝ o elemet az utols´o helyre illeszti be:
34
3. Vezérlési szerkezetek
A tomb 5 20 6 A tomb 20 6 7
az eltolas 7 2 3 63 5 az eltolas 2 3 63 5 6
elott: 6 12 utan: 12 5
1.3.43. feladat ´Irjon programot, amely eld¨onti, hogy egy adott ´ert´ek benne van-e egy t¨ ombben: A tomb: 5 20 6 7 2 3 63 5 6 12 Gepeljen be 1 szamot: 2 ←A(z) 2 benne van a tombben Gepeljen be 1 szamot: 4 ←A(z) 4 nincs benne a tombben 1.3.44. feladat van sz¨ uks´eg
Gondolja v´egig, hogy az el˝oz˝o feladatban h´any l´ep´esre
• a legjobb esetben • a legrosszabb esetben • ´ atlagosan 1.3.45. feladat ´Irjon olyan algoritmust, amely egy rendezett t¨ombben keres egy adott ´ert´eket, kihaszn´alva a t¨omb rendezetts´eg´et. 1.3.46. feladat
Az el˝oz˝o algoritmusban h´any l´ep´esre van sz¨ uks´eg
• a legjobb esetben • a legrosszabb esetben 1.3.47. feladat ´Irjon programot, amely k´et azonos elemsz´am´ u t¨ombr˝ol eld¨ onti, hogy az azonos index˝ u elemeik mind megegyeznek-e: Az egyik tomb: 5 20 6 7 2 3 63 5 6 12 A masik tomb: 5 20 6 7 2 3 63 5 6 12 A ket tomb megegyezik Az egyik tomb: 4 20 7 6 2 3 61 5 6 12 A masik tomb: 5 20 6 7 2 3 63 5 6 12 A ket tomb nem egyezik meg Az egyik tomb: 4 20 7 6 2 3 61 5 6 12
35
3.2. FELADATOK A masik tomb: 5 20 6 7 2 3 63 5 6 A ket tomb nem egyezik meg
´Irjon programot, amely k´et azonos elemsz´am´ 1.3.48. feladat u t¨omb eset´en megsz´ amolja, hogy mennyi azonos index˝ u elem¨ uk egyezik meg: Az egyik tomb: 4 20 7 6 2 3 61 5 6 12 A masik tomb: 5 20 6 7 2 3 63 5 6 12 6 elem egyezik meg ´Irjon programot, amely eld¨onti, hogy egy adott A ´es 1.3.49. feladat B t¨ omb eseten az A t¨ omb elemei mind benne vannak-e B t¨ombben u ´gy, hogy az elemek sorrendje b´ armilyen lehet a t¨omb¨ok¨on bel¨ ul. Az ism´etl˝od˝o elemek azonosnak tekinthet˝ ok: A 4 B 2 A B
tomb: 20 7 6 2 3 61 5 6 12 tomb: 3 8 3 tomb elemei nincsenek benne mind a B-ben tomb elemei mind benne vannak az A-ban
1.3.50. feladat ´Irjon programot, amely kisz´amolja egy t¨omb elemeinek atlag´ ´ at, sz´ or´ as´ at, a legnagyobb ´es legkisebb elem k¨ ul¨onbs´eg´et: A tomb elemei: 4 20 7 6 2 3 61 5 6 12 Atlag: 12.6 Szoras: 16.88905 Legnagyobb es legkisebb elem kulonbsege: 59
1.3.51. feladat koribb elemeit:
´Irjon programot, amely meghat´arozza egy t¨omb leggya-
A tomb elemei: 4 20 7 6 2 3 61 5 6 12 A tomb leggyakoribb elemei: 6 A tomb elemei: 4 20 7 6 2 3 61 5 6 2 A tomb leggyakoribb elemei: 2 6
36
3. Vezérlési szerkezetek
4. fejezet
Függvények 4.1.
Függvényhívások
Az al´ abbiakban ismertetj¨ uk, hogy a C programok f¨ uggv´enyh´ıv´asai milyen mechanizmus szerint j´ atsz´ odnak le. Ennek ismerete az´ert sz¨ uks´eges, hogy ´erts¨ uk azt, hogy a f¨ uggv´enyek param´eterei, lok´alis v´altoz´oi hov´a ker¨ ulnek, hogy kezeli azokat a program. Tov´ abb´ a, ezen inform´aci´ok birtok´aban bizonyos v´egzetes hib´ ak elker¨ ul´es´ere is tudatosan felk´esz¨ ulhet¨ unk. Kezdetben vizsg´ aljuk meg az al´ abbi programot: 1 #include <s t d i o . h> 2 3 void f v ( ) { 4 p r i n t f ( ” f v \n” ) ; 5 } 6 7 int main ( ) { 8 p r i n t f ( ”main\n” ) ; 9 fv ( ) ; 10 return 0 ; 11 } A program a main f¨ uggv´eny els˝o utas´ıt´as´aval indul (8-as sor). Amint el´erkezik az fv() sorhoz, a vez´erl´es ´atugrik az fv f¨ uggv´eny els˝o sor´ara (4es sor). Miut´ an az fv f¨ uggv´eny utols´o utas´ıt´asa is v´egrehajt´odott, a vez´erl´es visszal´ep a main f¨ uggv´enybe, m´egpedig oda, ahol annak a fut´asa megszakadt (9-es sor). A k´erd´es az, hogy a program honnan tudja, hogy az fv f¨ uggv´eny befejez´ese ut´ an a main f¨ uggv´enybe kell visszal´epni, m´egpedig a k´od 9. sor´ara? El˝ osz¨ or arra gondolhatunk, hogy a C ford´ıt´o biztos olyan g´epi k´odot ford´ıtott a forr´ ask´ odb´ ol, hogy a vez´erl´es az fv utols´o sora ut´an mindig a main f¨ uggv´eny ´ tekints¨ megfelel˝ o sor´ aba ugorjon. Am uk meg a k¨ovetkez˝o programot:
37
38
4. Függvények
1 #include <s t d i o . h> 2 3 void f v 1 ( ) { 4 p r i n t f ( ” f v 1 \n” ) ; 5 } 6 7 void f v 2 ( ) { 8 p r i n t f ( ” f v 2 \n” ) ; 9 fv1 ( ) ; 10 p r i n t f ( ” f v 1 h i v a s utan , de az fv2−ben \n” ) ; 11 } 12 13 int main ( ) { 14 p r i n t f ( ”main\n” ) ; 15 fv2 ( ) ; 16 p r i n t f ( ” f v 2 h i v a s utan , de a main−ben \n” ) ; 17 fv1 ( ) ; 18 p r i n t f ( ” f v 1 h i v a s utan , de a main−ben \n” ) ; 19 return 0 ; 20 } Ennek a programnak a kimenete a k¨ovetkez˝o: main fv2 fv1 fv1 hivas utan, de az fv2-ben fv2 hivas utan, de a main-ben fv1 fv1 hivas utan, de a main-ben Teh´ at el˝ osz¨ or megh´ıvjuk az fv2 f¨ uggv´enyt, az pedig megh´ıvja az fv1-et. Az fv1 v´egrehajt´ asa ut´an a program u ´jra az fv2-ben folytat´odik, m´egpedig a forr´ ask´ od 10. sor´ aban. Viszont az fv1-et k¨ ul¨on megh´ıvjuk a main-b˝ol is, ekkor viszont az fv1 lefut´asa ut´an m´ar a forr´ask´od 18. sor´aban folytat´odik a v´egrehajt´ as. Nem igaz teh´at, hogy a ford´ıt´o ”be´egeti”, hogy egy f¨ uggv´eny v´egrehajt´ asa ut´ an hol kell folytat´odnia a vez´erl´esnek. Teh´at valami m´odon meg kell jegyezni, hogy egy f¨ uggv´enyh´ıv´as v´egrehajt´asa ut´an hol kell folytat´odnia a programnak. Erre haszn´alhatunk egy list´at, amire minden f¨ uggv´enyh´ıv´as el˝ott feljegyezz¨ uk, hogy ha v´egrehajtottuk a f¨ uggv´enyt, akkor hol kell folytat´odnia a programnak. Erre a list´ara ´ırjuk fel a forr´ask´od megfelel˝o sorainak a sz´am´at! L´ assuk, hogy m˝ uk¨ odik ez az el˝oz˝o program eset´eben: Kezdetben a vez´erl´es a k´od 14. sor´an ´all. Miut´an ezt v´egrehajtottuk, r´ at´er¨ unk a k¨ ovetkez˝ o utas´ıt´asra, ami egy f¨ uggv´enyh´ıv´as (tulajdonk´eppen az el˝ oz˝ o sor is az volt, de erre m´eg visszat´er¨ unk). A 15. sor szerint el kell ind´ıtani az fv2 f¨ uggv´enyt. Ezen a ponton tudjuk, hogy ha ez a f¨ uggv´eny lefutott, akkor a 16. sorban kell folytatni a programot. Ez´ert feljegyezz¨ uk a 16. sort:
39
4.1. FÜGGVÉNYHÍVÁSOK
16. sor Elind´ıtjuk h´ at az fv2 f¨ uggv´enyt, r´augrunk a 8. sorra. Ezt v´egrehajtjuk, majd k¨ ovetkezik a 9. sor, ahol megh´ıvjuk az fv1 f¨ uggv´enyt. Itt tudjuk, hogy az fv1 v´egrehajt´ asa ut´ an a k´ od 10. sor´aban kell folytatni a v´egrehajt´ast, ez´ert ezt is fel´ırjuk a list´ ankra:
10. sor 16. sor ´ Atugrunk a k´ od 4. sor´ ara, v´egrehajtjuk, majd ezzel befejezt¨ uk az fv1 f¨ uggv´enyt. Ekkor megn´ezz¨ uk, hogy melyik a legutols´o sorsz´am a list´ankon. Jelen esetben ez a 10. sor, ez´ert ide ugrunk, majd a legut´obbi bejegyz´est t¨or¨olj¨ uk a list´ ar´ ol:
16. sor Miut´ an v´egezt¨ unk a 10. sorral is, befejezz¨ uk az fv2 v´egrehajt´as´at, ez´ert u ´jra megn´ezz¨ uk, hogy melyik a legutols´o sorsz´am a list´an. Ez a 16. sor, teh´at ide ugrunk, ´es ezt a bejegyz´est is t¨ or¨olj¨ uk a list´ar´ol:
A 16. sor ut´ an j¨ on a 17. ami egy u ´jabb f¨ uggv´enyh´ıv´as, itt most az fv1-et kell elind´ıtani. Tudjuk, hogy miut´ an v´egezt¨ unk ezzel a f¨ uggv´ennyel, a k´od 18. sor´ aban kell majd folytatni a programot, ez´ert ezt a sorsz´amot fel´ırjuk a list´ara:
40
4. Függvények
18. sor ´Igy, miut´ an az fv1 lefutott, megn´ezz¨ uk a lista legutols´o bejegyz´es´et, ez a 18. sor. Ugrunk a 18. sorra, majd t¨or¨olj¨ uk a list´at. A C programokban (´es szinte minden m´as nyelven ´ırt programokban is) haszn´ alnak ilyen list´ at a f¨ uggv´enyh´ıv´asok vez´erl´es´ere. Az ilyen list´akat szaksz´oval veremnek, vagy angolul stack-nek h´ıvjuk. A tov´abbiakban a verem sz´ot fogjuk haszn´ alni. A verem bizonyos elemeket, jelen esetben sz´amokat t´arol. A verem teteje mindig az a poz´ıci´o, ahov´a a legutols´o elemet besz´ urtuk, ´es u ´j elem hozz´ aad´ asakor csak a verem tetej´ere pakolhatunk. Azaz, amit utolj´ara besz´ urtunk, azt vehetj¨ uk ki els˝onek (last in, first out, azaz LIFO elv). Azt az ´ert´eket, ami jelzi, hogy az aktu´alis f¨ uggv´eny v´egrehajt´asa ut´an melyik utas´ıt´ason kell folytatni a programot, visszat´er´esi c´ımnek nevezz¨ uk. A c´ım sz´o onnan ered, hogy a program utas´ıt´ asai annak v´egrehajt´asakor a mem´ori´aban tal´alhat´oak, ´ıgy minden utas´ıt´ as m´ as ´es m´as mem´oria c´ımen helyezkedik el, a verembe pedig ilyen c´ımeket sz´ urunk be. A verem azonban nem csak visszat´er´esi c´ımek t´arol´as´ara alkalmas. Tekints¨ uk az al´ abbi programot: 1 #include <s t d i o . h> 2 3 void f v ( int p1 , int p2 ) { 4 int l = 0 ; 5 l = p1 + p2 ; 6 p1 = 1 0 ; 7 p r i n t f ( ”%d\n” , l ) ; 8 } 9 10 int main ( ) { 11 int a = 2 , b = 5 ; 12 fv (a , b ) ; 13 return 0 ; 14 } Ez a program tartalmaz v´altoz´okat is. A main f¨ uggv´enyben vannak az a, b, az fv-ben pedig a p1, p2 ´es l v´altoz´ok. A main f¨ uggv´enyb˝ol nem l´ athatjuk az fv-ben l´ev˝ o v´altoz´okat, mivel ezek lok´alis v´altoz´ok: Ha a main-ben hivatkozn´ ank a p1-re, akkor a ford´ıt´o hibajelz´es ut´an le´allna. Hasonl´oan, az fv-b˝ ol sem l´ athat´ oak a main v´altoz´oi. Amennyiben a main-ben l´etrehozunk egy p1 nev˝ u v´ altoz´ ot, az semmilyen zavart nem fog okozni az fv m˝ uk¨od´es´eben, mivel itt kett˝ o, egym´ ast´ ol teljesen elk¨ ul¨on¨ ul˝o p1 v´altoz´o l´etezne a programban. Ez az´ert hasznos, mert egy nagyobb programban, ahol ak´ar t¨obb ezer f¨ uggv´eny is lehet, nem kell arra u ¨gyelni, hogy mikor melyik f¨ uggv´enyben milyen v´altoz´o neveket haszn´ alunk. Ellenkez˝o esetben nagyobb programok fejleszt´ese hamar gy¨ otrelmes tort´ ur´ av´ a v´ alna.
41
4.1. FÜGGVÉNYHÍVÁSOK
Ezek a lok´ alis v´ altoz´ ok szint´en a veremben helyezkednek el. A k¨ovetkez˝oben bemutatjuk, hogy hogyan fut le a fenti program, m´egpedig u ´gy, hogy a verem tartalm´ anak v´ altoz´ as´ at is nyomon k¨ovetj¨ uk. Mint minden C program, ez is a main f¨ uggv´ennyel kezd˝odik. Itt l´etrej¨on az a ´es b v´ altoz´ o, ´ıgy azokat belerakjuk a verembe:
b=5 a=2 A k¨ ovetkez˝ o l´ep´esben megh´ıvjuk az fv f¨ uggv´enyt. El˝otte azonban jegyezz¨ uk fel, hogy annak lefut´ asa ut´ an a 13. sorban kell folytatni a v´egrehajt´ast, ez´ert ezt jegyezz¨ uk fel a veremben:
13. sor b=5 a=2 Az fv f¨ uggv´enynek vannak param´eterei is: Az a ´es b ´ert´ek´et ´atadjuk az fv-nek, hogy azokat felhaszn´ alhassa a fut´asa sor´an. A param´eterek ´ert´ekeit szint´en a verembe sz´ urjuk be, el˝ osz¨ or a b, majd az a ´ert´ek´et:
2 5 13. sor b=5 a=2 Ezek ut´ an a vez´erl´es ´ atugrik az fv f¨ uggv´enyre. A f¨ uggv´eny tudja, hogy neki 2 param´etere van, ´es ismeri azok t´ıpusait is. Azt is tudja, hogy ha neki 2 param´etere van, akkor azok a verem tetej´en tal´alhat´oak meg, ez´ert a p1-et ´es a p2-t megfelelteti a verem tetej´en l´ev˝o ´ert´ekeknek:
p1 = 2 p2 = 5 13. sor b=5 a=2
42
4. Függvények
A k¨ ovetkez˝ o l´ep´es a f¨ uggv´eny v´egrehajt´asa. Az els˝o utas´ıt´as szerint l´etre kell hozni m´eg egy lok´ alis v´ altoz´ot, az l-t, teh´at ezt is besz´ urjuk a verembe:
l=0 p1 = 2 p2 = 5 13. sor b=5 a=2 Az 5. sor ´ertelm´eben az l ´ert´ek´et megv´altoztatjuk, teh´at a verem els˝o sor´ aban t´ arolt ´ert´ek megv´altozik:
l=7 p1 = 2 p2 = 5 13. sor b=5 a=2 A 6. sor hat´ as´ ara a p1 ´ert´ek´et v´altoztatjuk meg:
l=7 p1 = 10 p2 = 5 13. sor b=5 a=2 Itt j´ ol l´ atszik, hogy a p1 ´es a v´altoz´ok semmilyen kapcsolatban nem ´allnak egym´ assal, a eredeti ´ert´eke v´altozatlan marad. A 7. sor elv´egz´ese ut´an az fv-t befejezz¨ uk, a f¨ uggv´eny lok´alis v´altoz´oira a tov´abbiakban nincs sz¨ uks´eg, ez´ert azok megsemmis¨ ulnek:
13. sor b=5 a=2 Mivel a f¨ uggv´eny v´egrehajt´as´at befejezz¨ uk, ez´ert vissza kell t´erni a main f¨ uggv´enybe, ez´ert kiolvassuk a veremb˝ol, hogy h´anyadik k´odsorn´al kell folytatni a programot. Ez a 13. sor, teh´at ide ugrunk, ´es a visszat´er´esi c´ımet t¨or¨olj¨ uk a veremb˝ ol:
43
4.2. REKURZIÓ
b=5 a=2 Term´eszetesen a fenti programban a printf is egy f¨ uggv´eny, teh´at annak megh´ıv´ asakor a fenti mechanizmus j´atsz´odik le, teh´at a verembe u ´jabb visszat´er´esi c´ım ´es u ´jabb lok´ alis v´ altoz´ok ker¨ ulnek, ´am a printf lefut´asa ut´an ´ a verem ezek t¨ orl˝ odnek is a veremb˝ ol u ´gy, ahogy az fv eset´eben azt l´attuk. Am haszn´ alat´ anak k¨ osz¨ onhet˝ oen ez egy´ altal´an nem fogja megzavarni a programunk m˝ uk¨ od´es´et, hiszen ´ıgy a printf u ´gy fut le, hogy ut´ana a vermen nem l´atunk v´ altoz´ ast. A fenti forr´ ask´ od 12. sor´ aban l´ athat´o f¨ uggv´eny param´etereket aktu´alis param´etereknek, m´ıg a 3. sorban l´ev˝ o param´eter list´at form´alis param´etereknek h´ıvjuk. A form´ alis param´eterek a p´eldaprogram 12. sor´aban kapt´ak meg konkr´et ´ert´ekeiket az aktu´ alis param´eterekt˝ ol. Kicsit mélyebben Aki j´ aratos a verem m˝ uk¨ od´es´eben ´es az assembly programoz´asban, most bizony´ ara azt mondja, hogy a verem m˝ uk¨od´es´enek fenti ismertet´ese pontatlan, nem minden ilyen sorrendben zajlik le. Ez teljesen igaz, a fenti le´ır´asban az´ert nem k¨ ovett¨ uk a val´ os´ agot teljes szigor´ us´aggal, hogy az ismertetett m˝ uk¨od´esi mechanizmust k¨ onnyebben bemutathassuk, ´es az Olvas´o k¨onnyebben meg´ertse a l´enyeget. Az al´ abbiakban a teljess´eg kedv´e´ert le´ırjuk a fenti mechanizmus val´ odi m˝ uk¨ od´es´et a 32 bites Intel processzorok eset´eben, majd ut´ana kit´er¨ unk arra, hogy a 64 bites processzorok m˝ uk¨od´ese mennyiben t´er el ett˝ol. TODO: ezt a r´eszt befejezni...
4.2.
Rekurzió
4.3.
Feladatok
44
4. Függvények
5. fejezet
Mutatók A k¨ ovetkez˝ o feladatokat u ´gy oldja meg, hogy az al´abbi programot eg´esz´ıtse ki: 1 #include <s t d i o . h> 2 #include < s t d l i b . h> 3 4 int main ( ) { 5 int a = 1 , b = 2 , c = 3 ; 6 7 return 0 ; 8 }
1.5.1. feladat
´Irassa ki az a, b ´es c v´altoz´ok c´ımeit:
Az ’a’ cime: 0xbfc56a08 A ’b’ cime: 0xbfc56a04 A ’c’ cime: 0xbfc56a00
1.5.2. feladat v´ altoz´ oban:
T´ arolja el az a v´altoz´o c´ım´et egy k¨ ul¨on pa nev˝ u
A ’pa’ erteke: 0xbfc56a08 1.5.3. feladat kereszt¨ ul:
V´ altoztassa meg az a v´altoz´o ´ert´ek´et a pa v´altoz´on
Az ’a’ erteke a valtoztatas elott: 1 Az ’a’ erteke a valtoztatas utan: 10
1.5.4. feladat
T´ arolja el a pa c´ım´et is egy ppa nev˝ u v´altoz´oban:
A ’ppa’ erteke, azaz ’pa’ cime: 0xbfc569fc 45
46
5. Mutatók
1.5.5. feladat kereszt¨ ul:
V´altoztassa meg az a v´altoz´o ´ert´ek´et a ppa v´altoz´on
Az ’a’ erteke a valtoztatas elott: 10 Az ’a’ erteke a valtoztatas utan: 100
1.5.6. feladat mutasson:
A ppa-n kereszt¨ ul ´all´ıtsa ´at a pa v´altoz´ot u ´gy, hogy b-re
A ’A ’pa’ erteke a valtoztatas elott: 0xbfc56a08 A ’pa’ erteke a valtoztatas utan: 0xbfc56a04 A ’b’ cime: 0xbfc56a04
1.5.7. feladat
A ppa-n kereszt¨ ul v´altoztassa meg b ´ert´ek´et:
A ’b’ erteke a valtoztatas elott: 2 A ’b’ erteke a valtoztatas utan: 200
1.5.8. feladat
Foglaljon le dinamikusan egy 10 elem˝ u int t¨omb¨ot!
1.5.9. feladat
Szabad´ıtsa fel az el˝obb lefoglalt t¨omb¨ot!
1.5.10. feladat
Lefoglal´as ut´an t¨oltse fel a t¨omb¨ot ´ert´ekekkel!
1.5.11. feladat A lefoglal´ast, felszabad´ıt´ast ´es felt¨olt´est tegye k¨ ul¨on f¨ uggv´enybe, de u ´gy, hogy a f¨ uggv´enyek visszat´er´esi t´ıpusa void legyen! 1.5.12. feladat sorrendbe!
Rendezze a lefoglalt ´es felt¨olt¨ott t¨omb elemeit n¨ovekv˝o
´Irjon f¨ 1.5.13. feladat uggv´enyt, amely az el˝obbi t¨ombb˝ol kigy˝ ujti a p´ aros sz´ amokat egy m´ asik dinamikus t¨ombbe. Csak akkora legyen az u ´j t¨omb, amennyi p´ aros sz´ am van az els˝oben! 1.5.14. feladat Foglaljon le k´et dinamikus t¨omb¨ot, t¨oltse fel ˝oket, majd hozzon l´etre egy harmadik dinamikus t¨omb¨ot, ´es az tartalmazza a k´et el˝oz˝o t¨ omb elemeit! Csak akkora legyen a harmadik t¨omb, amekkora sz¨ uks´eges! 1.5.15. feladat Az el˝oz˝o programot ´ırja ´at u ´gy, hogy a harmadik t¨ omb egyszer tartalmazzon minden elemet, ´es tov´abbra is akkora legyen a t¨omb, amennyi elem ker¨ ul bele! 1.5.16. feladat Az el˝oz˝o programot b˝ov´ıtse ki u ´gy, hogy az elemek rendezve ker¨ uljenek a harmadik t¨ombbe! 1.5.17. feladat ´Irjon programot, amely n db dinamikus t¨omb¨ot t´arol, az els˝ o t¨ omb 2, a m´ asodik 4, azaz az i. t¨omb 2*i darab elemet tartalmazzon! T¨ oltse is fel a t¨ omb¨ oket!
47 1.5.18. feladat Az el˝ oz˝ o programot m´odos´ıtsa u ´gy, hogy a lefoglal´as, felt¨ olt´es ´es felszabad´ıt´ as k¨ ul¨ on void visszat´er´esi t´ıpus´ u f¨ uggv´enyekkel t¨ort´enjen! 1.5.19. feladat ´Irjon programot, amely dinamikusan l´etrehoz egy n*m-es m´ atrixot, f¨ olt¨ olti ´ert´ekekkel, ki´ırja ´es felszabad´ıtja. 1.5.20. feladat Az el˝ oz˝ o programot m´odos´ıtsa u ´gy, hogy a lefoglal´as, felt¨ olt´es ´es felszabad´ıt´ as k¨ ul¨ on void visszat´er´esi t´ıpus´ u f¨ uggv´enyekkel t¨ort´enjen! 1.5.21. feladat ´Irjon programot, amely l´etrehoz kett˝o n m´eret˝ u vektort, ´es ¨ osszeadja ˝ oket, az eredm´eny egy u ´jabb n m´eret˝ u vektorba ker¨ ul. 1.5.22. feladat ´Irjon programot, amely l´etrehoz kett˝o n m´eret˝ u vektort, ´es skal´ arisan ¨ osszeszorozza ˝ oket. 1.5.23. feladat ´Irjon programot, amely l´etrehoz egy n*m-es dinamikus m´ atrixot, ´es egy m elem˝ u oszlopvektort, felt¨olti ˝oket, majd ¨osszeszorozza a m´ atrixot ´es a vektort. Az eredm´enyt egy k¨ ul¨on dinamikus vektorba ´ırja, majd az eredm´enyt jelen´ıtse meg a k´eperny˝on. ´Irjon programot, amely egy n*m ´es egy m*k m´eret˝ 1.5.24. feladat u dinamikus m´ atrixot hoz l´etre, felt¨ olti ˝oket ´ert´ekekkel, majd ¨osszeszorozza a k´et m´ atrixot. Az eredm´eny egy u ´j, dinamikusan l´etrehozott m´atrixba ker¨ ulj¨on. 1.5.25. feladat ´Irjon programot, amely egy n*n-es m´atrixot hoz l´etre dinamikusan, majd l´etrehoz ebb˝ ol egy (n-1)*(n-1)-es m´atrixot, amely ugyanaz, mint az eredeti m´ atrix, de az i. sor ´es j. oszlop n´elk¨ ul. Az i ´es j ´ert´ek´et billenty˝ uzetr˝ ol k´erje be a program ´Irjon programot, amely egy dinamikusan l´etrehozott 1.5.26. feladat n*m-es m´ atrix transzpon´ altj´ at hozza l´etre, az eredm´eny m´atrix is dinamikusan legyen l´etrehozva. 1.5.27. feladat ´Irjon programot, amely 2 n*m-es, dinamikusan l´etrehozott m´ atrix ¨ osszegeit sz´ amolja ki, az eredm´eny m´atrix is dinamikusan legyen l´etrehozva.
1.5.28. feladat sz´ amolja ki.
´Irjon f¨ uggv´enyt, amely egy 2*2-es m´atrix determin´ans´at
´Irjon programot, amely kisz´amolja egy dinamikusan 1.5.29. feladat l´etrehozott n*n-es m´ atrix adjung´ alt m´atrix´at (a feladathoz ´erdemes felhaszn´alni az el˝ oz˝ o feladatok megold´ asait), az eredm´eny egy ujabb dinamikus m´atrixba ker¨ ulj¨ on. 1.5.30. feladat ´Irjon programot, amely, ha lehets´eges, kisz´amolja egy dinamikusan l´etrehozott n*n-es m´ atrix inverz´et, ´es az eredm´eny egy u ´jabb dinamikus m´ atrixba ker¨ ulj¨ on. A program ezek ut´an ellen˝orizze le a sz´amol´as helyess´eg´et, azaz vizsg´ alja meg, hogy az eredeti ´es az inverz szorzata val´oban egys´egm´ atrixot ad-e.
48
5. Mutatók
´Irjon programot, l´etrehoz egy 3 dimenzi´os, felt¨olti 1.5.31. feladat ´ert´ekekkel, majd felszabad´ıtja. 1.5.32. feladat Az el˝oz˝o programot m´odos´ıtsa u ´gy, hogy a lefoglal´as, felt¨ olt´es ´es felszabad´ıt´ as k¨ ul¨on void visszat´er´esi t´ıpus´ u f¨ uggv´enyekkel t¨ort´enjen! 1.5.33. feladat Az el˝oz˝o programot b˝ov´ıtse ki u ´gy, hogy a program keresse meg a legkisebb elem´et, ´es ´ırassa ki annak index´et. Amennyiben ez az elem t¨ obbsz¨ or fordul el˝ o, akkor el´eg csak az els˝ot megkeresni. 1.5.34. feladat Az el˝oz˝o programot b˝ov´ıtse ki u ´gy, hogy a program keresse meg a legkisebb elemet, ´es sz´amolja meg, hogy mennyi ilyen elem van, ´es ezt ´ırassa ki a k´eperny˝ore. 1.5.35. feladat B˝ov´ıtse ki az el˝oz˝o programot u ´gy, hogy a legkisebb elemek indexeit gy˝ ujtse ki egy 3*n m´eret˝ u dinamikus t¨ombbe, ahol n a legkisebb elemek mennyis´ege. *1.5.36. feladat ´Irjon programot, amely dinamikusan egy tetsz˝oleges dimenzi´ o sz´ am´ u t¨ omb¨ ot hoz l´etre, felt¨olti ´ert´ekekkel, megjelen´ıti a k´eperny˝on, majd felszabad´ıtja. A program olvassa be billenty˝ uzetr˝ol a dimenzi´ok sz´am´at, majd a dimenzi´ ok m´ereteit. Az al´ abbi feladatok megold´as´ahoz ne haszn´alja a string.h header f´ajlt! ´Irjon programot, amely dinamikusan l´etrehoz, majd 1.5.37. feladat felt¨ olt k´et stringet, ki´ırja, majd felszabad´ıtja ˝oket. 1.5.38. feladat Az el˝oz˝o programot b˝ov´ıtse ki u ´gy, hogy az egyik stringr˝ ol k´esz´ıtsen m´ asolatot, a m´asolat szint´en egy dinamikusan l´etrehozott karaktert¨ omb legyen. 1.5.39. feladat Az el˝oz˝o programot b˝ov´ıtse ki u ´gy, hogy a k´et stringet osszef˝ ¨ uzi, az eredm´enyt egy harmadik, dinamikusan lefoglalt stringbe teszi. ´Irjon f¨ 1.5.40. feladat uggv´enyt, amely k´et dinamikusan l´etrehozott stringr˝ ol meg´ allap´ıtja, hogy egyenl˝oek-e. ´Irjon f¨ 1.5.41. feladat uggv´enyt, amely k´et dinamikusan l´etrehozott stringr˝ ol meg´ allap´ıtja, hogy melyik van el˝or´ebb az ABC-ben, a stringek csak az angol ABC kisbet˝ uit tartalmazz´ak. ´Irjon f¨ 1.5.42. feladat uggv´enyt, amely k´et dinamikusan l´etrehozott stringr˝ ol meg´ allap´ıtja, hogy melyik van el˝or´ebb az ABC-ben, a stringek csak az angol ABC kis- ´es nagybet˝ uit tartalmazz´ak, az egyes bet˝ uk kis ´es nagybet˝ us v´ altozatai azonosnak tekinthet˝oek, azaz az ”alma” sz´o egyenrang´ u az ”AlMa” sz´ oval. 1.5.43. feladat ´Irjon f¨ uggv´enyt, amely kap egy stringet, ´es egy i eg´esz sz´ amot. A f¨ uggv´eny megkeresi az i. sz´ot a kapott stringben, lefoglal egy u ´j dinamikus karaktert¨ omb¨ ot, ´es abba ki´ırja a kert sz´ot, majd visszat´er az u ´j stringgel. Ha nem l´etezik az i. sz´ o, akkor a f¨ uggv´eny NULL-al t´er vissza.
49 1.5.44. feladat ´Irjon f¨ uggv´enyt, amely kap egy stringeket tartalmaz´o t¨ omb¨ ot, ´es dinamikusan l´etrehoz egy u ´j stringet, amely a t¨ombben l´ev˝o stringeket tartalmazza ¨ osszef˝ uzve, sz´ ok¨ ozzel elv´alasztva, majd visszat´er az u ´j stringgel. 1.5.45. feladat ´Irjon f¨ uggv´enyt, amely kap egy stringeket tartalmaz´o t¨ omb¨ ot, majd ABC sorrendbe rendezi a benne l´ev˝o stringeket, a rendezett stringek sorozat´ at egy m´ asik dinamikus t¨ombben tarolja. A f¨ uggv´eny t´erjen vissza az u ´jonnan l´etrehozott t¨ ombbel. 1.5.46. feladat Mi a baj az al´abbi programr´eszlettel? Melyik sort engedi leford´ıtani a ford´ıt´ o, melyiket nem, melyik okoz fut´as k¨ozbeni hib´at? 1 2 3 4 5 6
char ∗ s z o v e g = ” alma ” ; char s z o v e g 2 [ ] = ” k o r t e ” ; f r e e ( szoveg ) ; szoveg = 0; f r e e ( szoveg2 ) ; szoveg2 = 0; 1.5.47. feladat
1 2
r e g i s t e r int r a = 4 2 ; int ∗ pra = &r a ; 1.5.48. feladat register v´ altoz´ o lesz?
1 2
Megoldhat´o-e az el˝oz˝o probl´ema u ´gy, hogy a pra is
r e g i s t e r int r a = 4 2 ; r e g i s t e r int ∗ pra = &r a ; 1.5.49. feladat
1 2
Mi´ert nem j´ o az al´abbi programr´eszlet?
Mi´ert nem j´ o az al´abbi programr´eszlet?
int alma ; int ∗∗∗ mutato = &&&alma ; ´Irjon programot, amely ki´ırja a k´eperny˝ore, hogy a 1.5.50. feladat programot 32, vagy 64 bites rendszerre ford´ıtott´ak.
50
5. Mutatók
6. fejezet
Struktúrák
51
52
6. Struktúrák
7. fejezet
File kezelés
53
54
7. File kezelés
8. fejezet
A standard könyvtár
55
56
8. A standard könyvtár
9. fejezet
Az előfeldolgozó
57
58
9. Az előfeldolgozó
II. rész
Fejlettebb technikák
59
10. fejezet
Láncolt listák
61
62
10. Láncolt listák
11. fejezet
Fák
63
64
11. Fák
12. fejezet
Bitműveletek
65
66
12. Bitműveletek
13. fejezet
Memóriakezelés
67
68
13. Memóriakezelés
14. fejezet
Parancssori paraméterek
69