online kép - Fájl  tube fájl feltöltés file feltöltés - adja hozzá a fájlokat online fedezze fel a legújabb online dokumentumok Kapcsolat
   
 

Letöltheto dokumentumok, programok, törvények, tervezetek, javaslatok, egyéb hasznos információk, receptek - Fájl kiterjesztések - fajltube.com

 

Online dokumentumok - kep
   
kategória
 

Biológia állatok Fizikai Földrajz Kémia Matematika Növénytan Számítógépes
Filozófia
Gazdaság
Gyógyszer
Irodalom
Menedzsment
Receptek
Vegyes

 
 
 
 













































 
 

A C nyelv kifejezései, utasítasai

számítógépes

Fájl küldése e-mail Esszé Projekt


egyéb tételek

 
A programok felépítése, az utasítasok típusai
A videokonferencia mint prezentació
Halózatok kapcsolastechnikaja
INTERNET ÉS KOMMUNIKÁCIÓ
A Paint Shop Pro grafikai program hasznalata
Az ACCESS objektumai
Prezentació készítése
Az INTERNET történet, jellemzői
Általanos tajékoztató a digitalis tachografokról
MS DOS 6.22 telepítése és üzemeltetése
 
 

A C nyelv kifejezései, utasításai

A C programok végrehajtandó része a program során elvégzendõ tevékenységek leírását, a szükséges utasításkat tartalmazza. A struktúrált programozási nyelvek sajátossága, hogy viszonylag kevés utasítást és sok beépített eljárást, függvényt tartalmaznak. Ezek a tulajdonságok C nyelv esetén is megfigyelhetõk, az utasítások mindössze a struktúrált programozás eszözeit biztosítják a programozó számára.

A C nyelv utasításainak csoportosítása:
 

ˇ        Üres utasítás:    ;

ˇ        Összetett utasítás:   

ˇ        Szelekciós utasítások:    if, switch

ˇ        Vezérlésátadó utasítások:    break, return



ˇ        Iterációs (ciklus) uta 838i87i sítások:    for, while

ˇ        Kifejezés utasítások

Üres utasítás:
Olyan helyen alkalmazzuk, ahol szintaktikailag mindenképpen szerepelnie kell egy utasításnak, de semmilyen tevékenységet nem szeretnénk végezni. Nem tévesztendõ össze az utasításokat lezáró pontosvesszõvel.
 

Összetett utasítás:
A program blokkszerkezetének kialakítását teszi lehetõvé elsõsorban. Az összetett utasítás szintaktikailag egy utasításnak számít, de az utasítászárójelek között több utasítás is szerepelhet. Tehát célszerûen alkalmazhatjuk az összetett utasítást a program olyan részeinél, ahol egy utasítás állhat, de több utasítást szeretnénk egyszerre elvégezni. Például: ciklusmagok, szelekciós utasítások.
 

Szelekciós utasítások:
Ezek az utasítások lehetõvé teszik a program feltételtõl függõ végrehajtását, két vagy több irányban.

if utasítás:
Az if utasítás feltételes végrehajtást, illetve kétirányú elágazást tesz lehetõvé. A két lehetõségnek megfelelõen két formában használhatjuk ezt az utasítást.

Feltételes végrehajtás:

if (feltétel) utasítás;

Az utasítás csak akkor kerül végrehajtásra, ha a feltétel teljesül, egyébként a program az utasítást figyelmen kívül hagyja. A feltétel lehet egy változó vagy egy kifejezés. A kifejezés típusa lehet logikai (értelemszerûen), és numerikus. A numerikus kifejezés esetén a 0-nál nagyobb érték jelenti a feltétel teljesülését, míg a 0 és a negatív érték hamis eredményt szolgáltat.

Kétirányú elágazás:

if (feltétel)
    utasítás1;
    else
    utasítás2;

Amennyiben a feltétel igaz, az utasítás1, egébként az utasítás2 kerül végrehajtásra. Az utasítás1 után mindig ki kell tenni a pontosvesszõt (Pascal-tól eltérõen). A feltétel ebben az esetben is egyaránt lehet változó vagy kifejezés.

Az if utasítás mindkét formájára igaz, hogy a feltételt minden esetben zárójelek között kell megadni.

switch utasítás:
A switch utasítás segítségével tudjuk megoldani a program során az esetszétválasztást, azaz a kettõnél több irányú elágazást. Az esetszétválasztás során egy változó vagy egy kifejezés értékétõl függõen folytatódhat a program végrehajtása több (max 257) irányban. A változó, illetve kifejezés típusa mindenképpen egész típus kell legyen. A felvehetõ értékeket a switch utasításon belül konstansként kell meghatároznunk.

switch (kifejezés)

A konstansok elõtt szerepelnie kell a case utasításnak, a konstans értéktõl kettõsponttal elválasztva írhatjuk le az utasításokat. Az esetkonstansok után több utasítást is megadhatunk utasítászárójel ( ) alkalmazása nélkül. A default utasítás után szereplõ utasítások akkor kerülnek végrehajtásra, ha a kifejezés (változó) értéke nem volt egyenlõ egyik konstanssal sem. A default utasítás elhagyható.
Fontos figyelnünk arra, hogy miután egy konstanshoz tartozó utasítások végrehajtásra kerülnek, ki kell ugranunk a swith utasításból, ez ugyanis nem történi meg automatikusan (Pascal-lal ellentétben). A kiugrást célszerû a break utasítással végrehajtani.

Egy példa a swith utasítás alkalmazására:

#include <stdio.h

main()

    return 0;
}
 

A program beolvas egy betût a billentyûzetrõl, majd kiértékeli, melyik betût ütöttük le. A case utasítás után csak egy konstans értéket adhatunk meg. Ha több érték esetén szeretnénk ugyanazt a tevékenységet végrehajtani, célszerû a fenti módszert alkalmazni. Minden esetkonstanshoz tartozó utasítássorozat végén célszerû a switch utasításból kiugrani, a break utasítás segítségével. Ha ezt nem tesszük akkor szemantikai hibát fogunk tapasztalni (a program nem úgy fog mûködni, ahogy szeretnénk. Hagyjuk el a break utasításokat, futtassuk a programot és meglátjuk mi fog történni, itt leírni hosszú lenne).
 

Vezérlésátadó utasítások:

Mint a nevükbõl is lehet következtetni, a program futása során a végrehajtás menetét befolyásoló utasítások. Hatásukra a program futásának folytonossága megszakad, a végrehajtás egy távolabbi utasításnál folytatódik. Azt, hogy hol fog folytatódni a végrehajtás az utasítás határozza meg.

break utasítás:
Hatására a program kilép az éppen végrehajtás alatt álló szelekciós vagy ciklusutasításból, és a szelekciós vagy ciklusutasítás után álló utasítással folytatja a program végrehajtását. Tehát egy szelekció vagy egy ciklus megszakítható a break utasítás segítségével. Ciklusok közül elsõsorban a while ciklusoknál alkalmazható, a for ciklus mûködésébe "nem illik" beavatkozni (de lehetséges!).

return utasítás:
Hatására a program kilép az éppen végrehajtás alatt álló függvény törzsébõl, és a függvényhívás után álló utasítással folytatódik a program végrehajtása. A return utasítás után meg kell adnunk a függvény visszatérési értékét. A return utasításnak speciális szerepe van a main() függény használata során. A main() függvényben szereplõ return utasítás hatására a program mûködése befejezõdik.
 

Iterációs (ciklusszervező) utasítások:

Minden magasszintû programozási nyelv biztosítja a lehetõséget az ismétlõdõ tevékenységek ciklusban történõ végrehajtásához. (Bõvebben lásd 8. tétel). A C nyelv háromféle ciklusszervezési lehetõséget biztosít a programozó számára.



for ciklus:
Elöltesztelõ ciklus, az ismétlések szám elõre meg van határozva. Mûködés szempontjából hasonló a Pascal For ciklusához.

for (ciklusváltozó=kezdõérék; feltétel; léptetés)
    utasítás;

A for ciklus fejrészében együtt határozzuk meg a ciklus futásának összes feltételét. Az elsõ a ciklusváltozó kezdõértékének meghatározása, amely egy egyszerû értékadással történik. A feltétel határozza meg, hogy a ciklusváltozónak milyen értéket kell elérni a ciklus befejezéséhez. A léptetés során növeljük vagy csökkentjük a ciklusváltozó értékét. A ciklusváltozó int típusú változó.

Példa:
...
for (i=1; i<=10; i++)
    printf("%d\n", i);
...

A példaprogram kiírja a ciklusváltozó értékét a ciklus minden egyes iterációja (végrehajtása) során. A for ciklus esetében a ciklusmag egyetlen utasítást tartalmazhat, ezért gyakran alkalmazzuk az összetett utasítást ciklusmagként.

while ciklus:
Elöltesztelõ ciklus, az ismétlések száma nincs elõre meghatározva, határozatlan ismétlésszámú ciklus.

while (feltétel)
    utasítás;

A feltételt itt is mindig zárójelek között kell megadni. A feltétel int vagy logikai típusú kifejezés, kiértékelése az if utasításánál leírtak szerint történik. A ciklusmag addig ismétlõdik, amíg a feltétel igaz. A ciklusmag itt is egy utasításból épül fel, gyakran használjuk az összetett utasítást. Példa:
Határozzuk meg az elsõ N természetes szám összegét.

#include <stdio.h

main()

 printf("Az elso %d termeszetes szam osszege: %d\n", n, sum);
 return 0;
}

A ciklusmag végrehajtása addig ismétlõdik, amíg i értéke el nem éri n értékét. A ciklusmagon belül magunknak kell változtatni az i változó értékét, a while ciklusnál a ciklusváltozó léptetése a ciklusmagon belül történik.

do ... while ciklus:
Hátultesztelõ, határozatlan ismétlésszámú ciklus.

do
    utasítás;
while (feltétel);

A ciklusmag végrehajtása addig ismétlõdik, amíg a feltétel igaz. Tulajdonképpen a while ciklus hátultesztelõ változatának tekinthetõ. Sokkal ritkábban alkalmazzuk, mint az elõzõ két ciklust. A feltétel int vagy logikai típusú lehet. A ciklusmag egyetlen utasítást tartalmazhat, tehát ha több utasítást szeretnénk itt elhelyezni, akkor összetett utasítást kell alkalmaznunk. A ciklusváltozó értékének változtatását a ciklusmagon belül a programnak kell elvégezni, a léptetés nem automatikus. Az elõbbi feladat megoldása do ... while ciklus alkalmazásával:

#include <stdio.h

main()

 while (i<=n);

 printf("Az elso %d termeszetes szam osszege: %d\n", n, sum);
 return 0;
}
 
 

Kifejezések:

A kifejezések operátorokból (mûveleti jelekbõl) és oprandusokból (változókból, konstansokból) felépülõ mûveletek. Az operátorok határozzák meg az elvégzésre kerülõ mûveletet, az operandusok adják az értéket, amivel mûveletet kell végezni.
Egy kifejezésen belül elõírhatjuk több mûvelet elvégzését is: ezek az összetett kifejezések. Az összetett kifejezések kiértékelése során a mûveletek sorrendjét az operátorok határozzák meg, ezt nevezzük precedencia szabálynak. A precedencia szabály határozza meg, hogy az összetett kifejezések kiértékelése során milyen sorrendben kell elvégezni a mûveleteket. Egy másik fontos szabály az asszociativitás, amely meghatározza, hogy az összetett kifejezésen belül az azonos precedenciaszintû operátorok milyen sorrendben kerülnek kiértékelésre.

A C operátorok precendenciája és assziciativitása
 
 

() [] . -

balról jobbra

! ~ - ++ -- & * (típus) sizeof

jobbról balra

* / %

balról jobbra

+ -

balról jobbra

<<

balról jobbra

< <=  =


balról jobbra

== !=

balról jobbra

&

balról jobbra

^

balról jobbra

|

balról jobbra

&&

balról jobbra

||

balról jobbra

?:

jobbról balra

= += -= *= /= %= <<= = &= |= ^=

jobbról balra

,

balról jobbra

 

A precedencia alapján csak akkor lehet meghatározni az összetett kifejezés kiértékelésének sorrendjét, ha a kifejezésben szereplõ mûveletek különbözõ precedenciájúak.
Pld:
e=a+3*b;
A fenti kifejezés kiértékelése során elõször nyilván a szorzást végzi el a program, majd a szorzathoz adja hozzá a változó értékét. A precedencia szabályait felülbírálhatjuk zárójelek segítségével (hogy pontosan fogalmazzak a kifejezés precedenciáját változtatjuk meg, hiszen a táblázatban látható, hogy a zárójel a legmagasabb precedenciával rendelkezõ operátor).
e=(a+3)*b;
A kifejezés kiértékelése során mostmár elõször az összeadás történik meg, aztán kerül sorra a szorzás.

Ha egy kifejezésen belül azonos precedenciaszintû operátorok szerepelnek, azok kiértékelésének sorrendjét az asszociativitás határozza meg.
Pld:
...
e=3;
b=2;
c=5;
e+=b+7-2+c;
...

A példában az e változó értéke 15 lesz, mivel elõször az elsõ összeadás kerül kirtékelésre, majd a kapott eredménybõl kivonjuk a 2-t, hozzáadjuk a c változó értékét, és végül a kapott értékkel (12) megnöveljük az e változó értékét. A kifejezés kiértékelése során a precedencia mellett figyelembe kell venni az asszociativitás szabályait is, mivel az összeadás és a kivonás azonos precedenciájú mûveletek.

Egy érdekes lehetõség a C nyelvben a többszörös értékadás. Az értékadás is a kifejezések közé sorolható. Nézzünk egy példát:
a=b=2;
Ez a sor a C programban egy utasításként kerül értelmezésre, mivel bármely kifejezésbõl utasítást lehet elõállítani, ha a kifejezés után pontosvesszõt írunk. A kifejezés (utasítás) két azonos precedenciájú mûveletbõl épül fel: a=2, b=2. A két mûveletet egyetlen kifejezésbe is írhatjuk, mivel az értékadás mûvelet kiértékelése jobbról balra haladva történik, tehát elõször a kifejezés jobb oldalán álló konstans kerül értelmezésre, majd elõször a b, másodszor az a változó kapja meg a konstans értékét.
Szintaktikailag helyes a következõ utasítás is, amelyet egy kifejezés segítségével írunk fel:
x+2;
A kifejezés valóban utasításként kerül kiértékelésre, de hatására semmi nem történik, tehát szintaktikailag helyes, de valójában nincs értelme ilyen utasításokat írni a C programba.


: 907