programozas c nyelven

of 276 /276
PROGRAMOZÁS C NYELVEN Mélyen, mégis egyszerűen, gyakorlatiasan és érdekesen! Legyen benne eredetiség! 1

Author: dellvilmos

Post on 29-Jun-2015

543 views

Category:

Documents


10 download

Embed Size (px)

TRANSCRIPT

1 PROGRAMOZA8 C NYELVEN Mlyen. mgis egyszeren. gyakorlatiasan s rdekesenl Legyen benne eredetisgl2 EI sz knyvet, amelyetkezebentart azolvaso,tanknyvnekszantam.Gondolom, eredmenyesenIogiakhasznalniugyakzepiskolasdiakok,mintazegyetemi hallgatok.St,remelemtanarkollegaimistalalnakbennetlet eket,amelyeket hasznalni tudnakmaidbizonyos temak oktatasakor. knyvmegirasakortbbretrekedtem, mintegyszerenbemutatniaC nyelvet(azSIstandardnakmegIelelen),acelomazvolt,hogyprogramozni tanitsak.zelsIeiezetteligyekszemegyatIogokepetnyuitaniaprogramozasrol, mintszamitogepesIeladat megoldasrol.zeztkvetIeiezetekolyansorrendben kvetikegymast,hogyIokozatosanvezessekbeazolvasotaprogramozasvilagaba. Ieiezet ek t bbe-kevesbe egymasra eplnek. Igyekeztemnemhivatkozni olyasmire, amimegnemlettbemutatva.PeldaulmaramasodikIeiezetbenabillentyzetrl valoolvasassalesamonitorravaloirassalparhuzamosanbevezetemdioheibana szvegesallomanykezelest.zutolsoIeiezetcelia,olyanhelyzetbeiuttatniaz olvasot, hogymintegy Iellnezetbl lasson bizonyos temakrket.zert, hogy a knyv ne tnin szaraznak, sok Iogalmatmegoldott Ieladatokon keresztlvezetekbe.IogalmakelmelyitesetugyancsakmegoldottIeladatokaltal valositommeg.legt bbIeladatesetebenigyekszemelszrravezetniazolvasota megoldasra,escsakazutankzlmaIorraskodot.MindenIeiezetvegenkitztt Ieladatok talalhatok. Tizenketevesoktatoitapasztalatomatigyekeztembeepit enieknyvbe. Trekedtemra,hogygazdagonlegyenillusztralvaszemleltetabrakkal.Egyes Ieiezetek(peldaularekurzio)oktatasahozegeszensaiatosmodszereketiavasolok. Diakiaim eredmenyei aztmutatiak, hogy ezen modszerek hat ekonyan alkalmazhatok. Tbb kollegam is kiprobalta ket szep eredmennyel. Bizombenne,hogyakedvesolvasougytalaliamaid,hogygyakorlatias, erdekes, hasznos eseredeti tanknyvet tartott kezeben. szerz 3 %artalomjegyzk EVEZETS6 2MEMRIA VLTOZK2 2.1Vltoznv (azonost)12 2.2Vltozcm12 2.3Vltoztpusok13 2.4Vltoz rtke14 2.5Vltozdefinils14 2.6A scanf printf fscanf s fprintf fggvnyek15 &TASTSOK25 3.1Kifejezs-utasts25 3.2sszetett utasts25 3.3Dntsi utastsok25 3.3.1z if utasitas25 3.3.2 switch utasitas29 3.4Ciklus utastsok33 3.4.1 while ciklus33 3.4.2 do while ciklus35 3.4.3 for ciklus37 3.5Ugr utastsok40 3.5.1 break utasitas40 3.5.2 continue utasitas40 3.5.3 goto utasitas41 3.5.4 return utasitas42 KIFEJEZSEK55 4.1A kifejezsek jobb (Rvalue) s bal (Lvalue) rtke56 4.2Konstansok57 4.2.1Egesz tipusu konstansok57 4.2.2Valos tipusu konstansok58 4.2.3Karakter tipusu konstansok58 4.2.4Karakterlanc tipusu konstansok59 4.2.5Szimbolikus konstansok60 4.3Opertorok60 4 4.3.1ritmetikai operator60 4.3.2sszehasonlitasi operator61 4.3.3Logikai operatorok61 4.3.4Bitenkenti operatorok62 4.3.5Ertekadas operator64 4.3.6Kombinalt operatorok64 4.3.7Vessz operator64 4.3.8Felteteles operator65 4.3.9 $izeof operator65 4.3.10 Cast operator (explicit tipuskonverzio)66 5POINTEREK (M&TATK)70 5.1Muveletek pointerekkel72 5.1.1Ertekadas72 5.1.2sszehasonlitas73 5.1.3pointer~ / - egesz~73 5.1.4Pointerek klnbsege74 6TMK76 6.1Egydimenzis tmbk76 6.1.1Inicializalas deIinialaskor77 6.1.2Kapcsolat a tmbk es pointerek kztt77 6.2Karakterlncok (stringek)85 6.2.1Karakterlancok beolvasasa/kiirasa86 6.2.2Karaktrelanc kezel Iggvenyek88 6.3Ktdimenzis tmbk95 6.4Tbbdimenzis tmbk100 7DINAMIK&S HELYFOGLALS0 FELHASZNL LTAL DEFINILT TP&SOK09 8.1A typedef mdost jelz109 8.2A struct tpus109 8.2.1 struct - pointerek113 8.2.2Bitmezk114 8.3A union tpus116 8.4A felsorols tpus (enum)120 9FGGVNYEK22 9.1Cmszerinti paramtertads126 9.2Paramtertads a STACK-en keresztl129 5 9.3Globlis s loklis vltozk130 9.4Programtervezs kicsiben133 9.5Fggvny pointerek137 9.6Fggvny paramterknt val tadsa fggvnynek138 9.7Vltoz paramterszm fggvnyek140 9.8Parancssor argumentumok (a main fggvny paramterei)143 9.9Rekurzv fggvnyek144 0MAKRK50 LLOMNYKEZELS (INP&T / O&TP&T MVELETEK)55 11.1llomnykezel fggvnyek156 11.2A scanf/fscanf illetve printf/fprintf fggvnyek kzelebbrl162 11.3Alacsony szintu llomnykezels172 2EGY TFOG KP A C-NYELVRL7 12.1Strukturlt programozs174 12.2Modulris programozs175 12.3Definci s deklarci176 12.4A vltozk osztlyozsa177 12.5A C nyelv tpusai fellnzetbl181 12.6Egy sszetett feladat182 6 EVEZETS IeladatmegoldasszamitogeppelkommunikaciotIeltetelez.Ehhezviszontszkseg vanmindenek eltt a kvetkezkre: 1. Egynyelvre,amelyaltalkzlnitudomaszamitogeppel,mitszeretnek, hogy elvegezzen. 2. gep.gondolkodasmodiahozigazodni,azaz,gepiszintenelmagyarazni, hogy mi a teendie. Milyennyelvet.ert a szamitogep?gepikodot. Ennekagepnyelvnekaz abeceiea 0 es 1 szamiegyekbl all. Elvileg milyen lehetsegek lennenek a kommunikaciora? O gepmegtanulmagyarul.Ezkizart,klnbennemgeplenne,hanem ember. O Elsaiatitiukmiagepikod-nyelvet.Eztermeszetesenlehetsegesazels szamitogepekigyvoltakprogramozvaderendkivl.Iaraszto.Gondoliunk bele,nehezegyolyannyelven.beszelni,amelynekabeceiecsupanketbetbl all. Mivelazemberkenyelmesleny,masmegoldasokatkeresett.Igyszletettmega Iordito(kompilator)gondolata:irniegyolyanszoItvert(programot),amelyIorditgepi kodra. O legkenyelmesebbazlenne,haletezneIorditomagyarrolgepikodra. Egyelre ilyen Iorditot meg nem irtak. O megoldasegyprogramozasinyelvletrehozasavolt.Olyan.primitiv nyelvrlvanszo,amelykzelebballazemberhez,mintagepikod, megIogalmazhatokbenneagepnekszantutasitasok,esaielenlegieszkzeinkkel kepesek vagyunk olyan Iorditot irni, amely Iordit az illet nyelvrl gepi kodra. ttolIggen,hogymennyirevankzelazilletnyelvazemberinyelvhez,es mennyirevantavolagepinyelvtl,megklnbztetnkmagas-,kzepes-esalacsonv-szint programozasi nyelveket. C egy kzepes szint programozasi nyelv. mellekelt1.abraszemleletesenmutatiabemindezt.kerdielaztaszakadekot szemlelteti, amelyet at kell hidalnia valakinek, ha programozo szeretne lenni: O meg kell tanulnia egy programozasi nyelvet O meg kell tanulnia programozni a szamitogepet az illet nyelven Ebbenahasznos,esegybenerdekIeszittrekvesbenszeretnesegitsegetnyuitania knyv, amelyet az olvaso kezeben tart. EknyvbenaCnyelvnekIlegazSIszabvanyszerintivaltozatakerlbemutatasra. Miutanaz1970-esevekbenDennisRitchieesBrianKeringhanletrehoztakaCnyelvet,a nyelvklnbzvaltozataikezdtekmegielenni.Szksegessevalttehatanyelv szabvanyositasa.Ezlehetvetesziolyanprogramokirasat,amelyetbarmelymodernIordito Ielismeri. Ezt nevezik hordozhatosagnak. 7 PC Bels MEMORI (RM) Mikroprocesszor Hattertarak merevlemez. CD. floppv) Bemeneti periIeriak !l. billentvzet) Kimeneti periIeriak !l. kepernvo. nvomtato) EMBERI ELV (pl. magyar) GEPI KOD (a gep .anyanyelve) MGS SZITU PROGRMOZASI ELVEK (pl. Basic, Pascal, Cobol) KZEPES SZINT PROGRAMOZSI NYELVEK (pl. C, Forth) LCSO SZITU PROGRMOZASI ELVEK (pl. ssembly) K O M P I L A 1 O R ? 2. abra 1. abra 8 ogvan trtenik fizikailag a kapcsolatteremtes a szamitogep feladatmegoldo reszevel? Ezt mutatia be amellekelt 2. abra: .programozoFPC(personalcomputer)iranyukommunikacioaltalabana billentyzeten, a Iorditott iranyu pedig a monitoron vagy a nyomtaton keresztl trtenik. szamitogepbe(PC)beiuttatottadatokabelsmemoriabankerlnekeltarolasra. NeumannJanostolerreIele,ugyaIeladatadatai,mintaIeladatotmegoldoprogramitt kerl eltarolasra. Ezt nevezzk a .tarolt program elvenek, amely Iordulopontot ielentett a szamitastechnika trtenelmeben. programvegrehaitasaabbolall,hogyamikroprocesszoregyenkentkiolvassaa memoriabolaprogramutasitasaiteselvegziket.mikroprocesszor,azelirt mvelethezszksegesadatokatabelsmemoriabol vesziesazeredmenyeketugyanitttaroliael.Ezert ketiranyu a kommunikacio amikroprocesszor es a bels memoria kztt. leIorditottCprogramnegy,logikailagklnbz memoria-terletethasznal,mindeniknekmeglevena magaszerepe.Ezekegyikeaprogramkodiat(az utasitasokat)tartalmazza,amasikharompedigaz adatokat,amellyelaprogramdolgozik.Kesbblatni Iogiuk,mitlIgg,hogybizonyosadatokmelyik memoria-terleten(DTSZEGMES,STCK, HEP)kerlnekeltarolasra.FggaIorditotol,a programozasikrnyezettlesamikroprocesszor tipusatol,hogyannezkipontosanaprogramunkaltal hasznaltmemoria-terletterkepe.mellekeltabra elvileg mutatia be C programunkat a szamitogep memoriaiaban. Mivelabelsmemoriatartalmatrldikaszamitogepkikapcsolasakor,kialakitottak ahattertarakat (klsmemoriak).Idekilehetmenteni adatokat,maidpedigvisszalehet tlteni ket.hattertarakon az adatok allomanyokba (file) rendezve vannak tarolva. ogvan kell megoldani egv feladatot szamitogeppel? Hatlepestklnithetnkel.iobbmegerteskedveertegyiolismertIeladaton keresztl mutatiuk be a lepeseket. Feladat.Iriunk programot, amelykiindulva egymasodIokegyenlet valos egytthatoibol (a, b, c), kiiria a gykeit (x1, x2). 1. lps. A feladat elemzse Ieladat elemzesekor az alabbi kerdesekre keressk a valaszt: 1. MiadottaIeladatban?Ezeklesznekabemenoadatok.ielenesetbenaza.b.c egytthatok. Egy C program elvi memoria terkepe STCK HEP DT SZEGMES PROGRM KODJ 9 2. Mitkellkiszamitanivagyelvegezni?Ezeketnevezzkeredmenveknek. masodIoku egyenletmegoldasanak eredmenyei az x1, x2 gykk. 3. MelyikazaszamitogepszintienmegIogalmazottmveletsor,amelyet,ha vegrehait,lepesrl-lepesreelvezetiabemenadatoktolamegoldashoz?Ezt nevezzkaIeladatmegoldasialgoritmusanak.Ennekmeghatarozasaielenti lenyegebenaIeladatmegoldasat.EzalegIontosabbesegybenlegnehezebb lepes.zalgoritmusokketkitntetettmvelete,abemenadatokbeolvasasa,illetveaz eredmenyekkiirasa.Honnantrtenikabemenadatokbeolvasasa,illetvehovairodnak kiazeredmenyek?beolvasasaltalabanabillentyzetrlvagyegyallomanybol,a kiiras a kepernyre vagy egy allomanyba trtenik. EgylehetsegesIorgatoknyveannak,ahogyaszamitogepmegoldiaaIeladatot,a kvetkez:Beolvassaabillentyzetrlazt,amiadottaIeladatban,amegoldasialgoritmusnak megIelelen feldolgozza ezeket az adatokat, es kiiria az eredmenyeket a kepernyre. zalgoritmusokatlogikaisemakvagypszeudokodnvelvsegitsegevelszokas abrazolni.zalabbiakbanmegtekinthetaIentiIeladatotmegoldoalgoritmuslogikai semavalespszeudokodnyelvenIelvazolva,illetveCnyelvreatirva.emIznk magyarazatothozzaiuk,hiszencelunkvelkegyszerenannyi,hogymegIoghatobba tegykamegtargyaltIogalmakat.Ennekellenerecsaknyerbelleazolvaso,ha megprobalia magatol megerteni ket. b 0 c 0 incs megoldas Vegtelen sok megoldas - c / b a 0 a, b, c STRT STOP d b2 - 4ac d 0 incs valos megoldas x1 ,x2 ad bx21

ad bx22

beolvasas kiiras ertekadas dntes i i i i h h h h Logikai sema 10 algoritmus msodfokegyenlet(a, b, c) beolvas a, b, c pszeudkd a a = 0 akkor a b = 0 akkor a c = 0 akkor kirVgtelen sok megolds klnben kirNincs megolds vge a klnben kir- c / b vge a klnben d = b2 - 4ac a d < 0 akkor kirnincs vals megolds klnben x1 = (-b +d / 2a x1 = (-b -d / 2a kirx1,x2 vge a vge a vge algoritmus # include