05.08.2013 Views

C KALBŲ ABC - VPU biblioteka - Vilniaus pedagoginis universitetas

C KALBŲ ABC - VPU biblioteka - Vilniaus pedagoginis universitetas

C KALBŲ ABC - VPU biblioteka - Vilniaus pedagoginis universitetas

SHOW MORE
SHOW LESS

Transform your PDFs into Flipbooks and boost your revenue!

Leverage SEO-optimized Flipbooks, powerful backlinks, and multimedia content to professionally showcase your products and significantly increase your reach.

VILNIAUS PEDAGOGINIS UNIVERSITETAS<br />

FIZIKOS IR TECHNOLOGIJOS FAKULTETAS<br />

Aušra Kynienė<br />

C <strong>KALBŲ</strong> <strong>ABC</strong><br />

Metodinė priemonė<br />

VILNIUS, 2004<br />

1


Darbas apsvarstytas ir rekomenduotas skelbti Teorinës fizikos<br />

ir informaciniø technologijø katedros posëdyje 2004 m. spalio<br />

mën. 06 d., protokolo Nr. 2.<br />

Recenzavo: prof. Joana Lipeikienë<br />

dr. Artûras Acus<br />

2<br />

© Aušra Kynienė, 2004<br />

© <strong>Vilniaus</strong> <strong>pedagoginis</strong> <strong>universitetas</strong>, 2004


TURINYS<br />

PRATARMË ...................................................................................5<br />

C KALBOS PRANAÐUMAI .........................................................6<br />

PROGRAMAVIMO PROCESAS .................................................8<br />

OPERATORIAI..............................................................................9<br />

PAPRASTOS PROGRAMOS STRUKTÛRA .............................12<br />

DUOMENØ IR KINTAMØJØ TIPAI .....................................14<br />

UÞDUOTYS.................................................................................15<br />

SIMBOLINËS EILUTËS, FUNKCIJOS PRINTF ( ) IR<br />

SCANF ( ) ....................................................................................15<br />

UÞDUOTYS.................................................................................19<br />

VEIKSMAI, REIÐKINIAI IR OPERATORIAI .........................20<br />

PAGRINDINIAI VEIKSMAI ....................................................22<br />

UÞDUOTYS.................................................................................26<br />

LOGINËS OPERACIJOS ...........................................................27<br />

OPERATORIUS IF .....................................................................27<br />

SÀLYGINËS OPERACIJOS .......................................................29<br />

LOGINËS OPERACIJOS ...........................................................30<br />

SÀLYGINË OPERACIJA: ?: .......................................................31<br />

OPERATORIUS SWITCH .........................................................31<br />

UÞDUOTYS.................................................................................33<br />

CIKLAI IR KITI PROGRAMOS VALDYMO BÛDAI ............33<br />

KITI VALDANTIEJI OPERATORIAI.......................................36<br />

MASYVAI ....................................................................................37<br />

UÞDUOTYS.................................................................................38<br />

KAIP TEISINGAI NAUDOTIS FUNKCIJOMIS? ..................38<br />

PAPRASTOS FUNKCIJOS KÛRIMAS IR JOS<br />

PANAUDOJIMAS ......................................................................40<br />

GLOBALIEJI (IÐORINIAI) IR LOKALIEJI (VIETINIAI)<br />

KINTAMIEJI ..............................................................................43<br />

UÞDUOTYS.................................................................................44<br />

REKURSINËS FUNKCIJOS .....................................................44<br />

UÞDUOTIS ..................................................................................45<br />

MASYVAI IR RODYKLËS .........................................................45<br />

3


ÁVESTIES IR IÐVESTIES BYLOS C KALBOJE .......................48<br />

SIMBOLINIØ EILUÈIØ PAKEITIMAS ..................................52<br />

UÞDUOTYS.................................................................................52<br />

LITERATÛRA ..............................................................................53<br />

PRIEDAS ......................................................................................53<br />

C KALBOS RAKTAÞODÞIAI ...........................................................53<br />

PROGRAMOS VYKDYMO VALDYMAS .............................................54<br />

4


PRATARMË<br />

„C kalbos <strong>ABC</strong>” metodinio leidinio paskirtis – supaþindinti<br />

su C kalbos programavimo pagrindais. Knygelë skirta visiems,<br />

kurie nori iðmokti ðiuolaikinës programuotojø kalbos.<br />

Programuojant, kaip ir uþsiimant bet kuria kita veikla, patirtis<br />

ágyjama dirbant, todël ðioje metodinëje priemonëje pateikiama<br />

daug uþduoèiø dirbti savarankiðkai. Ði metodinë<br />

priemonë ðiek tiek praplësta: pateikiamos ir sudëtingesnës<br />

temos, kuriø gali prireikti, kuriant sudëtingesnes programas.<br />

Èia visiðkai nekalbama apie grafikos kûrimo elementus.<br />

Leidinyje gausu pateiktø programø pavyzdþiø, taèiau dalis<br />

programø yra nebaigtos ir, norint, kad ðios programos<br />

veiktø, paèiam skaitytojui reikës jas papildyti. Leidinio pabaigoje<br />

pridedamas priedas, kuriame patekiama C kalboje<br />

naudojamø funkcijø santrauka.<br />

Ðis leidinys studentams turëtø padëti suprasti C kalbà ir<br />

pramokti patiems ðia kalba raðyti programas. Norintiems daugiau<br />

susipaþinti su C ir C++ kalba rekomenduojama paskaityti<br />

literatûros sàraðe minimas knygas [1–5].<br />

5


C KALBOS PRANAÐUMAI<br />

C programavimo kalba – tai dideliø galimybiø programavimo<br />

kalba, vis labiau naudojama visame pasaulyje. Dabartiniu<br />

metu ði kalba – pagrindinë profesionalø programavimo<br />

kalba, kuri sëkmingai vartojama tiek sisteminei, tiek<br />

taikomajai árangai kurti. Pirmà kartà C kalbà apraðë B. W. Karnighan<br />

ir D. M. Ritchie 1978 m. iðleistoje knygoje „C programavimo<br />

kalba”. C kalbos variantas su klasëmis pavadintas<br />

C++ kalba. Ði kalba – kaip instrumentas programuotojams<br />

– praktikams. Be pastarosios yra ir kitø programavimo<br />

kalbø, pvz., Paskalio, t. y. grieþto programavimo kalba, Beisiko,<br />

kurios sintaksë artima anglø kalbai. Ið esmës C++ yra<br />

nauja programavimo kalba, pritaikyta sudëtingoms programø<br />

sistemoms ir instrumentinëms programavimo priemonëms<br />

kûrti, panaudojant objektinio programavimo technologijà. Ði<br />

kalba yra glaudþiai susijusi su klasikine C kalba.<br />

C – ðiuolaikinë, efektinga programavimo kalba.<br />

Jos dëka geriausiai iðnaudojamos kompiuterio galimybës.<br />

C kalba paraðytos programos yra kompaktiðkos ir greitai vykdomos.<br />

C – mobilioji programavimo kalba. Tai reiðkia, jei programa<br />

paraðyta ðia kalba, ji gali bûti lengvai, su nedideliais<br />

pataisymais arba visai be jø perkeliama á kitas skaièiavimo<br />

sistemas, pvz., ið IBM kompiuterio programos veikimà perkelti<br />

á UNIX.<br />

C – galinga ir lanksti programavimo kalba. Didelë dalis<br />

galingos UNIX ir Windows operacinës sistemos paraðyta C<br />

kalba. Ja paraðytos programos naudojamos fizikiniams ir techniniams<br />

uþdaviniams spræsti, taip pat animacijai kurti.<br />

C – turi galimybæ panaudoti nemaþai valdanèiøjø konstrukcijø,<br />

kurios paprastai asocijuojasi su asembleriu. Asem-<br />

7


lerio programavimo kalba labai sudëtinga (þr. 1 pav.). Tai<br />

skaièiai ir kodai, kuriuos ne specialistui suprasti sunku, kadangi<br />

ji raðoma procesoriaus kalba (þr. 2 pav.).<br />

8<br />

B8 23 01 MOV AX,0123<br />

05 25 00 ADD AX,0025<br />

8B D8 MOV BX,AX<br />

03 D8 ADD BX,AX<br />

8B CB MOV CX,BX<br />

2B C8 SUB CX,AX<br />

2B C0 SUB AX,AX<br />

90 NOP<br />

CB RETF<br />

1 pav. Asembleriu praðyta programa<br />

B8 23 01 05 25 00 8B D8 03 D8 8B CB 2B C8 2B C0<br />

90 CB D0 A2 17 04 1F C3 1E 52 2E 8E 34 00 AE 1A<br />

45 04 B4 41 CD 21 BA 94 04 B4 41 CD 21 5A E8 93<br />

02 C6 06 44 04 00 1F C3 BA 87 80 E8 DA FF 0E 1F<br />

E9 AB F8 9C E8 9D FC 50 52 BA 78 81 E8 C9 FF 0E<br />

1F E8 08 31 5A 58 9D 3D 41 00 75 03 E9 8F F8 E9<br />

12 BA 8E 1E 3A D0 FE 06 44 04 06 57 1E 56 1E 06<br />

1F BE 8D 87 26 C6 06 A3 E5 00 E8 EA F0 1F 72 1F<br />

2 pav. Procesoriaus kalba<br />

Asembleriu paraðyta programa yra labai didelës apimties,<br />

nes kompiuteriui reikia detaliai aiðkinti kiekvienà atliekamà<br />

veiksmà. Asembleris – tai sisteminë programuotojø kalba, kuri<br />

leidþia panaudoti visas kompiuterio galimybes. Fortranas puikiai<br />

suskaièiuoja sinusà, taèiau sunkiai pavaizduoja taðkà ekrane.<br />

C kalba – tai aukðto lygio programavimo kalba, kuri<br />

kaip ir asembleris leidþia panaudoti visas kompiuterio galimy-


es. Ðiuo metu C kalba yra sisteminë programuotojø kalba.<br />

Tai struktûrinë kalba, taèiau ji nëra labai grieþta ir per<br />

daug nevarþo programuotojo.<br />

PROGRAMAVIMO PROCESAS<br />

Programos raðymas ir parengimas vykdyti yra gana ilgas<br />

procesas, kuris schematiðkai yra pavaizduotas 3 pav. Ið pradþiø<br />

pasinaudojus turimu redaktoriumi, raðomas programos<br />

tekstas. Èia svarbu neapsirikti renkant programos tekstà ir<br />

parinkti bylos vardà, kurioje bus programa. Programos teksto<br />

byla – *.cpp arba *.c (pirmoji – C++ kalba, antroji – C).<br />

Toliau paraðytà programà kompiliuojame, t. y. mûsø paraðytà<br />

programà perraðome kompiuterio kalba ir gauname objektinæ<br />

bylà *.obj. Tai gali bûti tik nedidelë programos dalis.<br />

Visus programø gabaliukus á vienà *.exe bylà sujungia kita<br />

programa, vadinama komponuotoju (Linker). Ði programos<br />

dalis átraukia ir bibliotekos funkcijas. Taèiau gautoji programa<br />

yra klaidinga, todël jà reikia derinti ir taisyti. Tai atliekama<br />

derintojo (Debugger) programa.<br />

Programa<br />

.for<br />

.bas<br />

.pas<br />

.c<br />

.cpp<br />

Redaktorius<br />

Editor<br />

.asm<br />

3 pav. Borland’o kompiliatorius<br />

Kompiliatorius<br />

Compiler<br />

.obj<br />

.lib<br />

.obj<br />

Komponuotojas<br />

Linker<br />

.exe<br />

.com<br />

Derintojas<br />

Debugger<br />

Rezultatas<br />

9


OPERATORIAI<br />

10<br />

„=”<br />

Ið pradþiø pabandysime pasiaiðkinti visiðkai paprastà programà.<br />

Pabandykite suprasti, kà daro ði programa?<br />

#include <br />

main ( ) /* paprasta programa*/<br />

{<br />

int num;<br />

num = 1;<br />

printf (”Að paprasta”);<br />

printf (”skaièiavimo maðina. \n”);<br />

printf (”Mano mëgstamiausias skaièius %d todël, kad<br />

tai pirmas skaièius. \n”, num);<br />

return 0;<br />

}<br />

Jei manote, kad programa kaþkà parodys ekrane, tai Jûs<br />

esate visiðkai teisûs.<br />

Programos rezultatas:<br />

Að paprasta skaièiavimo maðina.<br />

Mano mëgstamiausias skaièius 1 todël, kad tai pirmas skaièius.<br />

Paraðytos programos apþvalga<br />

#include – á programà átraukiama papildoma<br />

byla. Ði byla paprastai yra bet kuriame C kompiliatoriaus


pakete. Gali bûti nurodoma ne viena, o kelios reikalingos<br />

bibliotekos. Programuotojai tai vadina programos antraðte. Ði<br />

eilutë net nëra C kalbos operatorius. # nurodo, kad programai<br />

vykdyti reikës C kompiliatoriaus bibliotekos.<br />

main ( ) – funkcijos vardas. Programa, kuri yra paraðyta<br />

C kalba, pradedama vykdyti nuo funkcijos main ( ). Todël C<br />

kalbos visos paprogramës gali turëti ávairius vardus, iðskyrus<br />

valdanèiàjà. Paprogramë – tai atskira nepriklausoma programos<br />

dalis, á kurià nukreipta pagrindinë funkcija. Skliausteliai<br />

po main ( ) nurodo, kad tai ne kintamasis, o funkcija.<br />

Ðiuose skliaustuose gali bûti nurodoma ðios funkcijos gràþinama<br />

informacija. Nurodytoje programoje funkcijai nieko neperduodama,<br />

todël ir ji nieko negràþina.<br />

/* paprasta programa*/ – komentaras.<br />

Komentarai – tai pastabos, kurios padeda suprasti programos<br />

esmæ. Komentarai skirti tik programuotojui, kompiliatorius<br />

jø nepastebi. Komentarus galima raðyti toje pat eilutëje,<br />

kurioje nurodomos operacijos.<br />

{ – funkcijos pradþia.<br />

int num; – kintamojo tipo apraðymas. Apraðydami kintamuosius<br />

nurodome jø tipà ir vardà. Ðiuo atveju nurodome,<br />

kad bus naudojamas kintamasis num, kuris bus sveikas skaièius<br />

(int).<br />

Programuojant yra bûtina nurodyti naudojamø kintamøjø<br />

tipà. Programa pradedama raðyti nuo kintamøjø apraðymo,<br />

kurie bus naudojami programoje, nurodant jø tipà. Kintamaisiais<br />

gali bûti ne tik sveikieji skaièiai, bet ir simboliai bei<br />

slankaus kablelio skaièiai. Kabliataðkiu baigiamas raðyti bet<br />

11


koks operatorius C kalboje. Kintamøjø tipai gali bûti ávairûs:<br />

char, int, float, double ir t. t.<br />

Pasirenkant kintamøjø vardus taip pat laikomasi tam tikrø<br />

taisykliø: kintamojo pavadinimas gali bûti nuo vieno iki septyniø<br />

daugiau simboliø. Kintamojo vardo pirmasis simbolis<br />

bûtinai turi bûti raidë, o toliau – skaièiai, didþiosios ir maþosios<br />

raidës ir „_” simbolis, kuris suprantamas kaip raidë.<br />

12<br />

Teisingi vardai Klaidingi vardai<br />

Wiggly $Z^**<br />

cat1 1cat<br />

Hot_Tub Hot-Tub<br />

_kcaB don’t<br />

num = 1; – priskyrimo operatorius. „=” kintamajam num<br />

priskiria vienetà. Apibrëþus kintamojo tipà, kompiuterio atmintyje<br />

kintamajam buvo iðskirta atminties vieta, o su priskyrimo<br />

operatoriumi mes tà vietà uþpildëme. Ðis operatorius<br />

irgi baigiamas kabliataðkiu.<br />

printf (”Að paprasta”); – iðvedimo ekrane operatorius.<br />

Ðis operatorius ekrane paraðo frazæ: Að paprasta.<br />

printf ( ) – iðvedimo ekrane funkcija. Kad tai yra funkcija,<br />

parodo skliaustai. Simboliø eilutë, esanti skliaustuose, perduodama<br />

funkcijai printf ( ). Ði funkcija perþiûri visus simbolius<br />

tarp kabuèiø ir juos paraðo. Tarp kabuèiø raðomi simboliai<br />

– tai funkcijai perduodami argumentai.<br />

\n – kompiliatoriui nurodo á kitos eilutës pradþià. Tai<br />

simbolis, kuris atitinka ávedimo klaviðo paspaudimà. Simbolis<br />

\t – þymi tabuliacijos klaviðo paspaudimà ir pan.<br />

%d – nurodo, kur ir kokiu formatu paþymëti kintamojo


num vertæ. % – nurodo, kad ðioje vietoje turi bûti spausdinamas<br />

skaièius, o d – nurodo, kad þymimas sveikasis skaièius<br />

turi bûti deðimtainëje sistemoje.<br />

} – pagrindinës main ( ) funkcijos pabaiga.<br />

PAPRASTOS PROGRAMOS STRUKTÛRA<br />

Susipaþinsime su pagrindinëmis C kalbos programos raðymo<br />

taisyklëmis. Paprastai programà gali sudaryti viena ar kelios<br />

funkcijos, ið kuriø viena bûtinai turi vadintis main ( ). Funkcijà<br />

pradedame apraðyti nuo antraðtës, toliau apraðoma funkcija.<br />

Funkcijos struktûros paprasta schema pateikta 4 pav.<br />

Antraštė<br />

#include<br />

main( )<br />

int num;<br />

num = 1;<br />

Funkcijos<br />

aprašymas<br />

printf("%d tai<br />

skaičius.\n", num);<br />

4 pav. C kalbos funkcijos struktûra<br />

Pagalbinės bibliotekos<br />

Funkcijos vardas ir<br />

argumentai<br />

Kintamojo aprašymas<br />

Priskyrimo operatorius<br />

Funkcijos iškvietimo<br />

operatorius<br />

13


Programuojant nereikëtø visko raðyti á vienà eilutæ. Kompiliatorius<br />

paraðytoje programoje á tuðèias eilutes nereaguoja.<br />

Todël galima detaliai atskirti kiekvienà funkcijos dalá.<br />

14<br />

Pateiksime ðiek tiek sudëtingesnæ programà:<br />

#include <br />

main ( ) /* skaièiø daugyba*/<br />

{<br />

int a, b;<br />

a = 6;<br />

b = 2 * a;<br />

printf (”%d padauginus ið dviejø gausime %d. \n”, a, b);<br />

return 0;<br />

}<br />

Ðios programos rezultatas: 6 padauginæ ið dviejø gausime<br />

12. Kaip matome, jei ekrane reikia iðvesti kelis kintamuosius,<br />

tai po kabuèiø ið eilës nurodomi kintamieji, kuriø reikðmes<br />

ekrane norime iðvesti.<br />

Uþduotys<br />

1. Paraðykite programà, kuri ekrane iðvestø Jûsø vardà ir<br />

pavardæ.<br />

2. Paraðykite programà, kuri ekrane iðvestø Jûsø amþiø,<br />

kai nurodyti Jûsø gimimo metai.


DUOMENØ IR KINTAMØJØ TIPAI<br />

Duomenø ir kintamøjø tipai bei jø raktiniø þodþiø paaiðkinimas<br />

yra pateiktas 1 lentelëje.<br />

1 lentelë<br />

Duomenø tipai ir jø raktaþodþiai<br />

Raktiniai žodžiai: int, long, short, unsigned,<br />

char, float, double.<br />

int – jei kintamasis sveikasis skaičius su<br />

ženklu.<br />

long arba long int – dideli sveikieji skaičiai<br />

short arba short int – nedideli sveikieji<br />

skaičiai<br />

unsigned int, unsigned long, insigned short –<br />

gali būti nulis arba teigiamas sveikasis skaičius<br />

char – simbolinis kintamasis<br />

float – teigiamas ir neigiamas slankaus<br />

kablelio skaičius.<br />

double arba long float – dvigubo tikslumo<br />

arba ilgas dvigubas skaičius<br />

Skaičiai nuo –32768 iki 32767<br />

–2147483648 iki 2147483647<br />

–32768 iki 32767<br />

skaičiai nuo 3,4 . 10 -38<br />

iki 3,4 . 10 38<br />

1,7 . 10 -308 iki 1,7 . 10 308<br />

Þmogui skirtumas tarp sveikojo skaièiaus ir slankaus<br />

kablelio skaièiaus – tai tik skirtingas uþraðymo bûdas, o<br />

kompiuteriui – ðiø skaièiø uþraðymas á kompiuterio atmintá.<br />

Sveikøjø skaièiø pavyzdþiai: 2, –23, 2456. Tuo tarpu 3,14<br />

arba 2/3 jau nëra sveikieji skaièiai.<br />

Pagrindiniai ðiø skaièiø skirtumai:<br />

1. Sveikieji skaièiai neturi trupmeninës dalies, o slankaus<br />

kablelio skaièiai gali bûti sveiki arba trupmeniniai.<br />

2. Veiksmai su trupmeniniais skaièiais atliekami ilgiau.<br />

Norint, kad ekrane bûtø paraðytas sveikasis skaièius, reikia<br />

raðyti %d, simbolá – %c, slankaus kablelio skaièiø – %f.<br />

15


Uþduotys<br />

Studentas paraðë programà, kurioje gausu klaidø. Suraskite<br />

jas.<br />

16<br />

#include <br />

main ( )<br />

(<br />

float g; h;<br />

float tax, rate;<br />

)<br />

g = e21;<br />

tax = rate * g;<br />

SIMBOLINËS EILUTËS, FUNKCIJOS PRINTF ( ) IR<br />

SCANF ( )<br />

Ðiame skyriuje pabandysime iðsiaiðkinti, kaip reikia apibrëþti<br />

simbolines konstantas ir kaip dirbti su simbolinëmis<br />

eilutëmis. Ið pradþiø pateiksime programos pavyzdá ir pabandysime<br />

suprasti, kà ji daro:<br />

/* dialogas*/<br />

#define DENSITY 1200 /*þmogaus kûno tankis*/<br />

#include<br />

#include<br />

#include<br />

main ( )<br />

{<br />

float weight, volume;


int size, letters;<br />

char name[40];<br />

clrscr ();<br />

printf (”Labas! Koks Jûsø vardas? \n”);<br />

scanf (”%s”, name);<br />

printf (”%s, kokia Jûsø masë?\n”, name);<br />

scanf (”%f”, &weight);<br />

size = sizeof (name);<br />

letters = strlen (name);<br />

volume = weight/DENSITY;<br />

printf (”Nuostabu, %s, Jûsø tûris %2.2f kubiniai metrai.\n”,<br />

name, volume);<br />

printf (”Be to, Jûsø vardas sudarytas ið %d raidþiø. \n”,<br />

letters);<br />

printf (”Ir jis kompiuterio atmintyje uþima %d baitø.\n”,<br />

size);<br />

getch ( );<br />

}<br />

return 0;<br />

Programos veikimo rezultatas:<br />

Labas! Koks Jûsø vardas?<br />

Viktorija<br />

Viktorija, koks Jûsø svoris?<br />

64<br />

Nuostabu, Viktorija, Jûsø tûris 0,053 kubiniai metrai<br />

Be to, Jûsø vardas sudarytas ið 9 raidþiø,<br />

Ir jis kompiuterio atmintyje uþima 40 baitø.<br />

Perþiûrësime, kas gi nauja atsirado ðioje programoje:<br />

17


1. Èia buvo apibrëþtas masyvas, kuriame saugomas vartotojo<br />

ávestas vardas.<br />

2. Vedant ir iðvedant simbolinæ eilutæ buvo naudota iðvedimo<br />

specifikacija %s.<br />

3. Buvo apibrëþta konstanta DENSITY.<br />

4. Ávesta ávesties funkcija scanf ( ), kuri nuskaito vedamus<br />

duomenis.<br />

5. Ávestos eilutës ilgiui nustatyti naudota funkcija strlen ( ).<br />

6. Masyvo dydþiui nustatyti panaudota nauja funkcija sizeof<br />

( ).<br />

scanf ( ) ir printf ( ) funkcijø viduje ávesta ir norima iðvesti<br />

informacija raðoma kabutëse, kurios nurodo eilutës pradþià<br />

ir pabaigà. Simbolinei eilutei ávesi panaudotas masyvas – tai<br />

kompiuterio atmintyje iðskirta vieta, kurioje ðalia patalpinama<br />

tarpusavyje logiðkai susijusi vienodo tipo informacija (þr.<br />

5 pav.).<br />

V I K T O R I J A \0<br />

5 pav. Eilutës iðdëstymas masyve. Kiekvienas masyvo elementas uþima 1 baità. \0 – C<br />

kalboje þymi eilutës pabaigà<br />

Pateiktame pavyzdyje yra apibrëþtas 40 elementø masyvas,<br />

kiekviename masyvo elemente galima patalpinti vienà<br />

simbolá. Lauþtiniai skliaustai rodo, kad name kintamasis yra<br />

masyvas, kuris turi 40 elementø, o char nurodo, kad elementø<br />

tipas yra simbolinis:<br />

18<br />

char name[40];<br />

Simbolis %s nurodo funkcijai printf ( ) þymëti simbolinæ<br />

eilutæ. Funkcija scanf ( ) skaito simbolius ið klaviatûros, kol


sutinka tarpo, tabuliacijos klaviðo ir ávedimo klaviðo simbolá.<br />

Duomenims ávesti arba nuskaityti C kalboje yra ir daugiau<br />

funkcijø, pvz.: gets ( ), getchar ( ).<br />

Raðant programas, daþnai tenka susidurti su konstantomis,<br />

kuriø nuolat prireikia skaièiuojant. Todël konstantos yra<br />

apibrëþiamos pradþioje #define, paskui nurodomas konstantos<br />

vardas, o po tarpo nurodoma konstantos reikðmë. Jei tai simbolinë<br />

konstanta, tai jos reikðmë nurodoma kabutëse:<br />

#define DENSITY 1200 – skaitinë konstanta;<br />

#define PHRAISE ”Ðtai ir að” – simbolinë eilutë – konstanta.<br />

Kiekvienoje programos vietoje, kur sutinkamos nurodytos<br />

konstantos, á jø vietà ið karto áraðomos konstantø reikðmës.<br />

Funkcijos scanf ( ) ir printf ( ) – ávedimo ir iðvedimo<br />

funkcijos. Norint, kad ðios funkcijos iðvestø arba ávestø kintamàjá,<br />

reikia nurodyti kintamøjø formatà. Toliau pateikti iðvedimo<br />

/ ávedimo formatai ir iðvedamos / ávedamos informacijos<br />

tipas:<br />

Formatas Iðvedamos / ávedamos informacijos tipas<br />

%d deðimtainis sveikasis skaièius;<br />

%c vienas simbolis;<br />

%s simboliø eilutë;<br />

%e slankaus kablelio skaièius, iðvedimas eksponentiniu<br />

formatu;<br />

%f slankaus kablelio skaièius, deðimtaininis iðvedimas;<br />

%g naudojama vietoj f ir e, jeigu jis yra trumpesnis;<br />

%u deðimtainis sveikasis skaièius be þenklo;<br />

19


20<br />

%o aðtuntainës sistemos skaièius be þenklo;<br />

%x ðeðioliktainës sistemos skaièius be þenklo.<br />

Galima tarp % ir simbolio nurodyti skaièius:<br />

%4d – spausdinamam skaièiui skirti 4 simboliai, pildoma<br />

ið deðinës á kairæ<br />

_ _ _ 5;<br />

%4.5f – skaièius po taðko nurodo iðvedimo tikslumà, t. y.<br />

kiek skaièiø po kablelio iðvesti ekrane;<br />

%ld – atitinka long duomenø tipà;<br />

%-10d – iðvedimui skirta 10 simboliø, spausdinama ið kairës<br />

á deðinæ.<br />

Áraðant duomenis klaviatûra, kaip matëme scanf ( ) funkcijoje,<br />

nurodant kintamàjá, kuriam bus priskirta nuskaityta<br />

reikðmë, naudojamas simbolis &. Ðis simbolis reiðkia nuorodà<br />

á kintamàjá, arba kintamojo adresà. Jei kintamasis apibrëþtas<br />

*p, tai kintamojo adresas bus p; jei kintamasis apibrëþtas p,<br />

tai kintamojo adresas bus &p.<br />

Uþduotys<br />

1. Paraðykite programà, kuri paklaustø Jûsø vardo, pavardës,<br />

gimimo metø. Po to iðvestø Jûsø amþiø, suskaièiuotø<br />

raides ir pasakytø, kiek vietos kompiuterio atmintyje uþima<br />

Jûsø duomenys.<br />

2. Suraskite klaidas:<br />

define B oi-oi<br />

define X 10<br />

main ( )<br />

{


int age;<br />

char name;<br />

printf (”Koks Tavo vardas?”);<br />

scanf (”%s”, name);<br />

printf (”nuostabu, %c, kiek jums metø?\n”, name);<br />

scanf (”%f”, age);<br />

xp = age + X;<br />

printf (”%s! Jums tikriausiai %d ?\n”, B, xp);<br />

}<br />

VEIKSMAI, REIÐKINIAI IR OPERATORIAI<br />

Ðiame skyrelyje aptarsime duomenø apdorojimo operacijas:<br />

sudëtá, atimtá, daugybà ir dalybà; suþinosime apie ciklà.<br />

Ciklas – tai eilë veiksmø, kurie nuolatos yra kartojami. Vienas<br />

ið ciklo operatoriø – while. Panagrinëkime programos<br />

pavyzdá:<br />

/*batø dydis*/<br />

#define OFFSET 7,64<br />

#define SCALE 0,325<br />

main ( )<br />

{<br />

/* perskaièiuoja batø dydá á pëdos dydá coliais*/<br />

float shoe, foot;<br />

printf (”Batø dydis Pëdos dydis\n”);<br />

shoe = 3,0;<br />

while (shoe < 18,5)<br />

{<br />

21


22<br />

foot = SCALE*shoe + OFFSET;<br />

printf (”%13.2f %16.2f coliai\n”, shoe, foot);<br />

shoe = shoe + 1,0;<br />

}<br />

printf(”Jei Jums ði avalynë tinka, neðiokite jà. \n”);<br />

return 0;<br />

}<br />

Programos veikimo rezultatas:<br />

Batø dydis Pëdos dydis<br />

3,01 8,61 coliai<br />

4,0 8,94 coliai<br />

.. ..<br />

17,0 13,16 coliai<br />

18,0 13,49 coliai<br />

Jei Jums ði avalynë tinka, neðiokite jà.<br />

while ciklo darbas: sàlyga, kuri turi bûti tenkinama, nurodoma<br />

skliaustuose. Kol sàlyga shoe < 18,5 bus tenkinama, tol<br />

ciklas bus vykdomas. Pradinis rezultatas – shoe = 3,0. Apskaièiuotas<br />

pëdos dydis paraðomas, o shoe kintamojo reikðmë<br />

padidinama vienetu: shoe = shoe +1,0;. Ciklo pradþià ir<br />

pabaigà þymi riestiniai skliaustai {}. Tarp jø esantys operatoriai<br />

kartojami tol, kol ciklo sàlygos yra tenkinamos. Kai sàlyga<br />

netenkinama, tada iðeinama ið ciklo ir vykdoma kita komanda<br />

printf ( ). Ðià programà galima pakeisti, jei vietoj<br />

SCALE reikðmës paraðysime 1,8, o vietoj OFFSET – 32,0,<br />

Tuomet gausime programà, kuri temperatûrà þymi ne pagal<br />

Celcijaus, o pagal Farenheito skalæ.


PAGRINDINIAI VEIKSMAI<br />

Pagrindinës operacijos yra skirtos aritmetiniams veiksmams<br />

atlikti.<br />

1. Priskyrimo veiksmas: „=”.<br />

C kalboje ðis þenklas nereiðkia lygybës. Jis paþymi kintamajam<br />

priskirtà reikðmæ, pvz.,<br />

Bmw = 2003;<br />

Toks uþraðas reiðkia, kad kintamajam Bmw priskirta reikðmë<br />

2003, t. y. kintamojo vardas – Bmw, kintamojo reikðmë<br />

– 2003.<br />

Paþiûrëkime á pavyzdá:<br />

i = i + 1;<br />

Matematiniu poþiûriu tai bûtø neteisinga, o C kalboje tai<br />

reiðkia, kad reikia paimti kintamàjá vardu i ir jo vertæ padidinti<br />

vienetu. Trumpai tai galima uþraðyti: i++, t. y. pats<br />

kaip ir i = i + 1.<br />

2. „+” – tai sumavimo veiksmas.<br />

Sudedami du dydþiai, esantys operatoriaus kairëje ir deðinëje<br />

pusëje. Pvz., printf (”%d”, 4 + 20);<br />

Ekrane bus iðvesta 24.<br />

Sumuojami dydþiai gali bûti ir kintamieji, ir konstantos.<br />

3. „–” – tai atimties veiksmas.<br />

Atima kintamøjø arba konstantø reikðmes: ið kairëje þenklo<br />

pusëje stovinèio kintamojo reikðmës atimama deðinëje<br />

þenklo pusëje stovinèio kintamojo reikðmë.<br />

23


24<br />

4. „–” – tai þenklo pakeitimo veiksmas.<br />

Pakeièia kintamojo þenklà prieðingu.<br />

5. „* ” – tai daugybos veiksmas.<br />

Padaugina kintamuosius ar konstantas. Specialaus operatoriaus<br />

laipsniui kelti C kalboje nëra.<br />

6. „ / ” – tai dalybos operatorius.<br />

Operatoriaus kairëje pusëje esanèio kintamojo reikðmë yra<br />

dalijama ið kintamojo reikðmës, esanèios operatoriaus deðinëje<br />

pusëje.<br />

Toliau pateiktos programos pavyzdys parodo, kaip atliekama<br />

dalybos operacija ir kuo skiriasi sveikøjø skaièiø dalyba<br />

nuo slankaus kablelio skaièiø dalybos:<br />

/*dalybos pavyzdþiai*/<br />

...<br />

main ( )<br />

{<br />

printf (”sveikøjø skaièiø dalyba: 5/4 tai %d \n”, 5/4);<br />

printf (”sveikøjø skaièiø dalyba: 6/3 tai %d \n”, 6/3);<br />

printf (”slankiuoju kableliu: 7,0/4,0 tai %2.2f \n”, 7,0/4,0);<br />

return 0;<br />

}<br />

Programos veikimo rezultatas:<br />

sveikøjø skaièiø dalyba: 5/4 tai 1


sveikøjø skaièiø dalyba: 6/3 tai 2<br />

slankaus kablelio skaièiø dalyba: 7,0/4,0 tai 1,75<br />

7. „%” – tai liekanos operatorius.<br />

Jei turime uþraðà 13%5, tai rezultatas bus 3: 13, kurá galima<br />

uþraðyti 2*5 + 3, liekana yra 3. Tai ir yra operatoriaus<br />

veikimo rezultatas.<br />

8. „++” ir „– –” – tai didinimo ir maþinimo operatoriai.<br />

„++” – padidina kintamojo vertæ 1, o „– –” sumaþina<br />

vertæ 1. Ðiems operatoriams vykdyti yra galimi keli variantai.<br />

Tai priklauso nuo to, kur ðie operatoriai raðomi: prieð funkcijà<br />

ar po jos. Veikimo rezultatas tas pats, tik reikðmës pakeitimo<br />

laikas skirtingas.<br />

Paanalizuokime toliau pateiktà programà:<br />

/* sumavimas*/<br />

main ( ) /*operatoriaus raðymas ið kairës ir ið deðinës*/<br />

{<br />

int a = 1, b = 1;<br />

int aplus, plusb;<br />

aplus = a++;<br />

plusb = ++b;<br />

printf (”a aplus b plusb”);<br />

printf (”%3d %5d %5d %5d \n”, a, aplius, b, pliusb);<br />

return 0;<br />

}<br />

Programos veikimo rezultatas:<br />

A aplus b plusb<br />

2 1 2 2<br />

25


Abiejø kintamøjø reikðmës padidëjo vienetu, taèiau kintamajam<br />

aplus a reikðmë buvo priskirta prieð padidinimà: kintamajam<br />

priskirta sena reikðmë a ir tik po to a reikðmë padidinama;<br />

o plusb – po padidinimo: kintamojo reikðmë padidinama,<br />

o tik po to ta reikðmë priskiriama naujam kintamajam.<br />

Analogiðkai veiksmai atliekami ir su maþinimo operatoriumi:<br />

„– –”. 2 lentelëje pateikiamos C kalbos operacijos ir jø<br />

atlikimo tvarka.<br />

2 lentelë<br />

Aritmetiniai veiksmai ir jø atlikimo tvarka<br />

Aritmetiniai veiksmai<br />

+ Prie kairėje pusėje stovinčio kintamojo<br />

pridedama dešinėje stovinčio kintamojo<br />

reikšmė.<br />

– Iš kairėje stovinčio kintamojo atimama<br />

dešinėje stovinčio kintamojo reikšmė.<br />

– Pakeičia dešinėje šio ženklo pusėje<br />

stovinčio kintamojo ženklą.<br />

* Padaugina kintamuosius.<br />

/ Kairėje pusėje esantį kintamąjį padalija iš<br />

dešinėje pusėje esančio kintamojo.<br />

% Išveda skaičiaus liekaną, kai dalijama šio<br />

operatoriaus kairėje stovinčio kintamojo<br />

reikšmė iš šio operatoriaus dešinėje pusėje<br />

esančio kintamojo reikšmės.<br />

++ Kintamojo vertę padidina vienetu.<br />

– – Kintamojo vertę sumažina vienetu.<br />

Veiksmai (išdėstyti atlikimo tvarka) Kaip vykdoma operacija<br />

() {} -> . Iš kairės į dešinę<br />

! ~ ++ – – – * & sizeof( ) Iš dešinės į kairę<br />

* / % Iš kairės į dešinę<br />

+ – Iš kairės į dešinę<br />

> Iš kairės į dešinę<br />

< < = > > = Iš kairės į dešinę<br />

= = ! = Iš kairės į dešinę<br />

& Iš kairės į dešinę<br />

^ Iš kairės į dešinę<br />

| Iš kairės į dešinę<br />

&& Iš kairės į dešinę<br />

|| Iš kairės į dešinę<br />

?: Iš kairės į dešinę<br />

= + = – = * = / * % = Iš dešinės į kairę<br />

, Iš kairės į dešinę<br />

26


Dabar pabandysime pasiaiðkinti anksèiau neminëtas operacijas.<br />

+ = – prideda deðinëje esantá kintamàjá prie kairëje<br />

esanèio kintamojo: a + = 2, tai atitinka a = a + 2.<br />

Analogiðkai atliekami ir tokie veiksmai: – =, * =.<br />

< = – maþiau arba lygu;<br />

= = – lygu;<br />

! = – nelygu;<br />

&& – loginis veiksmas reiðkiantis ir;<br />

|| – loginis veiksmas reiðkiantis arba;<br />

! – loginis veiksmas ne.<br />

Uþduotys<br />

1. Paraðykite programà, kuri pavaizduotø skaièiaus x nuo<br />

1 iki 10 vertæ, jo kvadratà, kubà ir 1/x:<br />

x x 2 x 3 1/x<br />

1 1 1 1<br />

2 4 8 0,50<br />

3 9 27 0,33<br />

.. .. .. ..<br />

10 100 1000 0,10<br />

2. ASCII kodø lentelë. Tai standartinë kompiuteryje naudojamø<br />

simboliø lentelë. Operatorius printf (”%4d %c”, 97,<br />

97) iðspausdina ekrane tokius simbolius: 97 a. Mat, pirmasis<br />

97 skaièius spausdinamas kaip sveikasis, o antrasis – kaip<br />

simbolis, paþymëtas numeriu 97. Iðspausdinkite visus 256 simbolius.<br />

3. Paraðykite programà, kuri paþymëtø skaièius nuo 1 iki<br />

16 deðimtainëje, aðtuntainëje, ðeðioliktainëje sistemose.<br />

4. Paraðykite programà, kuri papraðytø, kokio skaièiaus<br />

kvadratø sumà norite suþinoti. Pvz., 4 – 1*1 + 2*2 + 3*3 +<br />

4*4 = 30. Ekrane bus iðvesta 30.<br />

27


LOGINËS OPERACIJOS<br />

28<br />

Raktaþodþiai: if, else, switch, break, case, default<br />

Operacijos:<br />

> > =


Ðis operatorius kompiuteriui nurodo didinti kintamojo lin vertæ<br />

vienetu, jei klaviatûros simbolis yra nauja eilutë „\n”. Jei klaviatûros<br />

simbolis neatitinka naujos eilutës simbolio, tai toliau, vykdant<br />

operatoriø while, imamas kitas simbolis. Operatorius getchar<br />

( ) yra skirtas vienam simboliui ávesti ið klaviatûros. Vienam<br />

simboliui iðvesti naudojamas operatorius putchar ( ).<br />

EOF – tai „-1”. Paprastai automatiðkai tokiu simboliu yra<br />

pabaigiama byla.<br />

Ðiame pavyzdyje operatoriui if priklauso tik vienas veiksmas<br />

lin++, todël ðis veiksmas baigiamas kabliataðkiu. Jei<br />

operatoriui priklausytø daugiau veiksmø, juos reiktø atskirti<br />

skliaustais {}. Galima patobulinti programà, kad ji skaièiuotø<br />

simbolius ir eilutes:<br />

#include <br />

void main ( )<br />

{<br />

int ch;<br />

int lin = 0, sim = 0;<br />

while ((ch = getchar ( )) ! = EOF)<br />

{<br />

sim++;<br />

if (ch = = ‘\n’)<br />

lin++;<br />

}<br />

printf (”suskaièiavau %d eilutes ir %d simbolius \n”,<br />

lin, sim);<br />

}<br />

Operatoriaus if galimybes galima iðplësti panaudojus operatoriø<br />

else. Naudojant konstrukcijà if else, tikrinama ope-<br />

29


atoriaus if sàlyga ir, jei ji netenkinama, tuomet vykdomi<br />

else operatoriaus veiksmai:<br />

Jei nebûtø operatoriaus else, tai ið karto bûtø spausdinama.<br />

Po operatoriaus else galima vël kartoti operatoriø if. Tokiu<br />

bûdu galima patikrinti didesná sàlygø skaièiø.<br />

SÀLYGINËS OPERACIJOS<br />

Kai kurias C kalbos sàlygines komandas jau naudojome<br />

anksèiau, dabar susipaþinkime su visomis galimomis ðios kalbos<br />

sàlyginëmis operacijomis:<br />

30<br />

if<br />

n = 2*n;<br />

(n > 10) printf("%d \ n",n);<br />

else<br />

Tiesa<br />

n = 10*n;<br />

Operacija Reikðmë<br />

< maþiau<br />

< = maþiau arba lygu<br />

= = lygu<br />

> = daugiau arba lygu<br />

> daugiau<br />

! = nelygu<br />

Sàlyginës komandos naudojamos su if ir while operatoriais.<br />

Atkreipiame dëmesá – jokiu bûdu lyginimui negalima<br />

naudoti operatoriaus =, nes tai yra priskyrimo operatorius.<br />

Deja, sàlyginiø komandø negalima naudoti eilutëms lyginti.


Jei dirbama su trupmeniniais skaièiais, patartina naudoti tik<br />

< ir > lyginimo komandas.<br />

LOGINËS OPERACIJOS<br />

Daþnai tenka panaudoti ne tik sàlygines operacijas, bet ir<br />

logines. Pavyzdþiui, mums reikia suskaièiuoti, kiek byloje yra<br />

tuðèiø simboliø, t. y. tarpo simboliø, naujos eilutës ir tabuliacijos<br />

klaviðo.<br />

/*simboliø skaièius*/<br />

#include <br />

main ( )<br />

{<br />

int sim;<br />

int t = 0;<br />

}<br />

while ((sim = getchar( ))! = EOF)<br />

if (sim = =’ ‘ || sim = = ”\n” || sim = = ”\t”)<br />

t++;<br />

printf (”Ið viso yra %d tuðèiø simboliø”, t);<br />

return 0;<br />

Taigi || yra loginë komanda „arba”. C kalboje yra trys<br />

loginës komandos:<br />

Operacija Reikðmë<br />

&& ir<br />

|| arba<br />

! ne<br />

Paþiûrëkime, kaip jos vykdomos. Tarkime, turime du sàly-<br />

31


ginius operatorius a ir b:<br />

1. a&& b sàlyga bus teisinga ir vykdoma, kada bus teisingos<br />

a ir b sàlygos.<br />

2. a||b teisinga, jei yra teisinga a arba b sàlyga, arba teisingos<br />

abi sàlygos.<br />

3. !a teisinga, jei a sàlyga yra neteisinga.<br />

Paimkime keletà konkreèiø pavyzdþiø:<br />

5 > 2 && 4 > 7 – neteisinga, nes viena sàlyga nëra patenkinta.<br />

5 > 2 || 4 > 7 – teisinga, nes viena sàlyga yra patenkinta.<br />

!(4 > 7) – teisinga, nes 4 ne didesnis uþ 7.<br />

SÀLYGINË OPERACIJA: ?:<br />

Ði operacija – tai trumpas if – else operatoriaus uþraðymas.<br />

Pateiksime operatoriaus iðraiðkà absoliutinei skaièiaus<br />

reikðmei rasti:<br />

32<br />

x = (y < 0)? – y : y;<br />

Tai atitiktø uþraðymà:<br />

if (y < 0)<br />

x = –y;<br />

else<br />

x = y;<br />

OPERATORIUS SWITCH<br />

Jei reikia pasirinkti vienà galimà variantà ið eilës duomenø,<br />

tuomet nepatogu naudoti if–else konstrukcijà. Tada pra-


vartu naudotis operatoriumi switch. Pateiksime pavyzdá programos,<br />

kuri nuskaito raidæ ir nurodo ið tos raidës prasidedanèio<br />

gyvûno pavadinimà.<br />

/*gyvûnas*/<br />

void main ( )<br />

{<br />

char ch;<br />

printf (”Áveskite bet kokià raidæ, o að iðvesiu gyvûno pavadinimà<br />

ið Jûsø nurodytos raidës. \n”);<br />

printf (”Jei norite darbà nutraukti, áveskite # simbolá.\n”);<br />

while ((ch = getchar ( ))!=”#”)<br />

{<br />

if ( ch!=” ”) /*nelygu tarpo simboliui*/<br />

switch (ch)<br />

{<br />

case ”a”: printf (”avis, naminis gyvûnas.\n”);<br />

break;<br />

case ”b”: printf (” barsukas, laukinis gyvûnas.\n”);<br />

break;<br />

…<br />

default: printf (”tokio gyvûno neþinau.\n”);<br />

break;<br />

}<br />

else<br />

printf (”Jûs ávedëte tarpo klaviðà. Áveskite raidæ<br />

arba, norëdami baigti darbà, simbolá #”);<br />

}<br />

}<br />

33


Tikriausiai aiðku, kad paraðytoji programa nuskaito ið klaviatûros<br />

ávestà simbolá. Patikrina, ar tai ne tarpo simbolis arba<br />

pabaigos simbolis „#”. Jei sàlygos tenkinamos, tuomet<br />

ieðko switch operatoriuje nurodytos raidës ir veiksmø, kà<br />

toliau daryti su duomenimis. default – bus naudojama visiems<br />

anksèiau nenurodytiems atvejams; break skirtas iðeiti<br />

ið switch operatoriaus.<br />

Uþduotys<br />

1. Paraðykite programà, kuri tikrintø, ar ið klaviatûros ávestas<br />

skaièius yra teigiamas, ar neigiamas. Neigiamas skaièius<br />

turi bûti paverstas teigiamu ir iðvestas ekrane, tai praneðant,<br />

o teigiamas – tik praneðant, kad tai teigiamas skaièius.<br />

2. Paraðykite programà, kuri skaièiuotø nurodyto skaièiaus<br />

faktorialà.<br />

3. Paraðykite programà, kuri pateiktø meniu. Meniu bûtø<br />

galima pasirinkti: ar iðvesti nurodyto skaièiaus kubà, ar kvadratinæ<br />

ðakná, ar faktorialà.<br />

CIKLAI IR KITI PROGRAMOS VALDYMO BÛDAI<br />

34<br />

Raktaþodþiai: while, do, for, break, continue, goto<br />

Operacijos:<br />

+= – = * = / = % =<br />

Priminsime, kad ciklo while bendriausia uþraðymo forma<br />

yra:<br />

while (sàlyga)<br />

Operatorius (veiksmai, kurie bus atliekami)


Ðiame cikle turime nurodyti, kaip turi keistis á sàlygà<br />

áeinantis kintamasis. Kitaip ciklas bus begalinis, ir ið jo niekada<br />

neiðeisime.<br />

Ciklas for – jame ið karto nurodomos ciklo pradinës ir<br />

galinës sàlygos, ciklo atlikimo þingsnis.<br />

….<br />

for (a = 1; a < = 10; a++)<br />

printf (” man puikiai sekasi!”);<br />

….<br />

Ðios programos fragmento vykdymas: ekrane deðimt kartø<br />

pasirodys frazë „man puikiai sekasi!”.<br />

Pateikiame su ðiuo ciklo operatoriumi paraðytà programà,<br />

kuri skaièiuoja skaièiø kubus nuo 1 iki 6.<br />

/*kubai*/<br />

#include <br />

#include <br />

void main ( )<br />

{<br />

int a;<br />

}<br />

for (a = 1; a < = 6; a++)<br />

printf (”%5d %5d \n”, a, a*a*a);<br />

Jei á ciklà áeina ne vienas, o keletas sakiniø, tuomet jie turi<br />

bûti atskirti skliaustais {}. To nereikia, jei ciklui priklauso tik<br />

vienas sakinys.<br />

35


for ciklo pranaðumai:<br />

1. Sàlygos ir þingsniai uþraðomi ið karto.<br />

2. Þingsná galima ne tik didinti (a++), bet ir maþinti<br />

(a– –).<br />

3. Ciklo þingsná galima keisti bet kokiu nurodytu dydþiu:<br />

a + = 13 (a = a + 13).<br />

4. Galima naudotis ne tik skaièiais, bet ir simboliais. Naudojantis<br />

simboliais, jie nurodomi tarp kabuèiø:<br />

36<br />

...<br />

for (a = ”a”; a


…<br />

a = 2;<br />

for (n = 3;a < = 25;)<br />

a = a*n;<br />

…<br />

Tai bus vykdoma, kol a bus maþiau arba lygu 25.<br />

8. Galima nurodyti ne vienà, o kelias pradines sàlygas. Jos<br />

tarpusavyje turi bûti atskirtos kableliu.<br />

…<br />

for(a = 2, b = 0; b < 100; a* = 2)<br />

b + = a;<br />

…<br />

Kiti valdantieji operatoriai<br />

break, continue, goto<br />

Operatorius break naudojamas daugiausiai ið visø trijø operatoriø.<br />

Já jau sutikome while cikle, kuris baigiamas tik ðio<br />

operatoriaus dëka. Operatorius break tikrai netinka naudoti<br />

su if operatoriumi. Taèiau jei atsitinka taip, kad operatoriø<br />

break reikia naudoti, tuomet bûtina perþiûrëti paraðytos programos<br />

algoritmà, kad ðio operatoriaus nereikëtø.<br />

Operatorius continue gali bûti naudojamas visuose cikluose,<br />

iðskyrus switch. Jis skirtas perðokti kai kurias ciklo<br />

iteracijas. Ðie operatoriai geriausiai praverèia, kai reikia sutrumpinti<br />

if–else sàlygos veikimà.<br />

Operatorius goto yra prastas. Jis C kalboje nenaudojamas.<br />

Ðio operatoriaus naudojimas – prasto programavimo<br />

poþymis.<br />

37


MASYVAI<br />

Jau anksèiau minëjome, kas yra masyvas ir kaip já reikia<br />

apibrëþti. Dar kartà prie jo gráðime, kadangi programavimo<br />

procese jis yra svarbus. Pvz.,<br />

38<br />

float a[20];<br />

Kintamojo apraðymas reiðkia, kad turime masyvà a, kurá<br />

sudaro dvideðimt elementø. Pirmas masyvo elementas yra<br />

a[0], antras – a[1] ir t. t. Paskutinis masyvo elementas –<br />

a[19]. Kadangi masyvo tipas yra float, tai kiekvienas masyvo<br />

elementas irgi bus float tipo. Masyvai gali bûti bet kokio<br />

anksèiau nurodyto tipo. Masyvo uþpildymas ir jo elementø<br />

skaitymas atliekamas ciklu. Svarbu neuþmirðti, kad masyvo<br />

pirmas elementas yra a[0].<br />

…<br />

for (i = 0; i < = 19; i++) /*masyvo uþpildymas*/<br />

scanf (”%lf”, &a[i]);<br />

for (i = 0; i < = 19; i++)<br />

printf (”%f”, a[i]); /*masyvo elementø iðspausdinimas*/<br />

…<br />

Masyvø elementus galima lyginti, atlikti aritmetinius veiksmus:<br />

…<br />

if (a[i] > b)<br />

b = a[i];<br />


Jei masyvo i-tasis elementas didesnis uþ b, tuomet b kintamajam<br />

reikia priskirti i-tàjá masyvo elementà.<br />

Svarbu: masyvui uþpildyti nurodomas adresas: &a[i].<br />

Masyvo dydá galima apibrëþti pasinaudojus konstantomis:<br />

…<br />

#define MAX 45<br />

main ( )<br />

{<br />

int a[MAX];<br />

…<br />

}<br />

Uþduotys<br />

1. Paraðykite programà, kuri iðvestø daugybos lentelæ.<br />

2. Paraðykite programà, kuri leistø vartotojui uþpildyti masyvà<br />

ið 6 elementø. Uþpildyto masyvo elementus iðdëstykite<br />

didëjanèia tvarka ir iðveskite ekrane.<br />

3. Paraðykite programà, kuri sudëtø dviejø masyvø elementus<br />

(masyvai sudaryti ið 10 elementø; sudëtis turi bûti:<br />

pirmo masyvo pradþia sudedama su antro masyvo pabaiga)<br />

ir rezultatà suraðytø á treèià masyvà, o padalintus masyvo<br />

elementus sudëtø á ketvirtà masyvà. Ekrane turi bûti pavaizduoti<br />

pradiniai masyvai, jø sumos ir dalybos masyvai.<br />

KAIP TEISINGAI NAUDOTIS FUNKCIJOMIS?<br />

Raktaþodis: return<br />

Programuojant C kalba naudojamës funkcijomis. Anksèiau<br />

jau buvo pasinaudota printf ( ), scanf ( ), getch ( ), putchar<br />

(), strlen ( ) funkcijomis. Ðios funkcijos yra sisteminës, bet<br />

39


mes esame sukûræ ir savø funkcijø, pvz., main ( ). Programa<br />

visada prasideda komandomis (jos yra main ( ) funkcijoje),<br />

kuriomis galima kreiptis ir á kitas funkcijas. Dabar<br />

iðsiaiðkinkime, kaip patiems sukurti funkcijas, á kurias galëtø<br />

bûti nukreipta main ( ) funkcija ir kitos sukurtos funkcijos.<br />

Funkcija – tai savarankiðka programos dalis, skirta<br />

konkreèiam veiksmui atlikti. Pvz., funkcija printf ( ) iðveda<br />

informacijà ekrane. Naudojant funkcijas, nereikia dar kartà<br />

programuoti besikartojanèiø veiksmø. Jei programoje koká<br />

nors veiksmà reikia kartoti keletà kartø, tà veiksmà uþtenka<br />

apraðyti funkcija ir, reikalui esant, á jà kreiptis. Be to, ðià<br />

funkcijà galima naudoti ne tik vienoje programoje, bet ir<br />

kitose.<br />

Tarkime, norime paraðyti programà, kuri ávestø skaièiø<br />

rinkiná, já suskirstytø ir rastø vidutinæ reikðmæ. Minëtà<br />

programà galima uþraðyti taip:<br />

40<br />

...<br />

main ( )<br />

{<br />

float list[50];<br />

}<br />

readlist (list);<br />

sort (list);<br />

average (list);<br />

return 0;<br />

Aiðku, kad pagrindinë funkcija nukreipta á funkcijas<br />

readlist ( ), sort ( ) ir average ( ), kurios atlieka veiksmus, o<br />

pagrindinei funkcijai pateikia rezultatà. Naudojant pagalbines<br />

funkcijas, pagrindiná dëmesá galima skirti programos struktûrai


negaiðtant laiko jø detalëms.<br />

Apie funkcijas reikia þinoti, kaip jos turi bûti apraðomos,<br />

kaip á jas kreiptis ir kaip nurodyti ryðá tarp programos ir<br />

paraðytos funkcijos.<br />

PAPRASTOS FUNKCIJOS KÛRIMAS IR JOS<br />

PANAUDOJIMAS<br />

Paraðysime programà, kuri spausdintø firminá blankà ir<br />

sukursime naujà funkcijà, kuri brëþtø 65 simbolius „*”.<br />

/*firminio blanko virðus*/<br />

#define Name ”<strong>Vilniaus</strong> <strong>pedagoginis</strong> <strong>universitetas</strong>”<br />

#define Address ”Studentø 39”<br />

#define Vieta ”Vilnius”<br />

#include <br />

void starbar ( );<br />

void main ( )<br />

{<br />

starbar ( );<br />

printf (”%s\n”, Name);<br />

printf (”%s\n”, Address);<br />

printf (”%s\n”, Vieta);<br />

starbar ( );<br />

}<br />

/*funkcija starbar ( )*/<br />

#include <br />

# define Riba 65<br />

41


42<br />

void starbar ( )<br />

{<br />

int count;<br />

for (count = 1; count < = Riba; count ++)<br />

putchar (”*”);<br />

putchar (”\n”);<br />

}<br />

Programos veikimo rezultatas:<br />

*******************************************<br />

<strong>Vilniaus</strong> <strong>pedagoginis</strong> <strong>universitetas</strong><br />

Studentø 39<br />

Vilnius<br />

*******************************************<br />

Á funkcijà starbar ( ) mes kreipëmës ið funkcijos main ( ),<br />

nurodydami tik reikalingos funkcijos vardà. Kaip veikia programa:<br />

pirma, ji ið karto kreipiasi á starbar ( ) funkcijà, kuri<br />

paþymi simbolius, toliau main ( ) funkcija kreipiasi á sistemines<br />

funkcijas, kurios atspausdina tekstà ir galiausiai – vël á<br />

starbar ( ), kuri spausdina simbolius. Kuriant pagalbinæ funkcijà,<br />

ji raðoma pagal tokias paèias taisykles kaip ir main ( )<br />

funkcija. Èia abi funkcijos buvo uþraðytos á vienà bylà *.cpp.<br />

Paprastai geriau raðyti atskiras funkcijas á atskiras bylas, kurias<br />

bûtø galima panaudoti kitose programose.<br />

Mûsø paraðytoji programa nieko neturi gràþinti funkcijai main<br />

( ), todël priekyje buvo nurodomas jos tipas void. Jei programa<br />

turëtø gràþinti reikðmæ, reiktø nurodyti, kokio tipo reikðmæ funkcija<br />

gràþins, taip pat gràþinamo argumento reikðmæ: int starbar<br />

(int a); tai reikðtø, kad funkcija starbar ( ) gràþins sveikà skaièiø<br />

ir apdorojimui gaus taip pat sveikà skaièiø a. Tuomet sukurtos<br />

funkcijos viduje reikia pasinaudoti operatoriumi return, kuris<br />

sukurtai funkcijai nurodo, kà ji turi gràþinti.


Pasiaiðkinsime toliau pateiktà programà:<br />

/*absoliutinës reikðmës*/<br />

#include <br />

int abs (int x);<br />

void main ( )<br />

{<br />

int a = 10, b = 0, c = –22;<br />

int d, e, f;<br />

d = abs(a);<br />

e = abs(b);<br />

f = abs(c);<br />

printf (”%d %d %d\n”, d, e, f);<br />

}<br />

int abs (int x)<br />

{<br />

int y;<br />

}<br />

y = (x < 0)? – x : x;<br />

return y;<br />

Programos veikimo rezultatas:<br />

10 0 22<br />

Pagrindinë funkcija kreipiasi á kità funkcijà, kuri skaièiuoja<br />

skaièiaus modulá. Suskaièiavusi modulá return komanda<br />

pateikia rezultatà pagrindinei funkcijai, kuri pastaràjá pavaizduoja<br />

ekrane.<br />

43


GLOBALIEJI (IÐORINIAI) IR LOKALIEJI<br />

(VIETINIAI) KINTAMIEJI<br />

Kintamuosius mes apraðëme funkcijos viduje, todël tai buvo<br />

tos funkcijos lokalieji (vidiniai) kintamieji, kurie nebuvo<br />

þinomi kitoms funkcijoms. Todël vienai funkcijai perduoti kintamojo<br />

vertæ buvo naudojama komanda return.<br />

C kalboje daþnai tenka naudoti globaliuosius kintamuosius,<br />

kuriuos naudos keletas funkcijø. Jei kintamasis yra apibrëþtas<br />

ir vienoje, ir kitoje funkcijoje tuo paèiu vardu, já kompiliatorius<br />

vis tiek supranta kaip atskirà kintamàjá. Panagrinëkime<br />

programà, kuri sukeièia kintamøjø reikðmes:<br />

44<br />

/*kintamøjø sukeitimas*/<br />

#include <br />

#include <br />

int interchange (int *u, int *v);<br />

void main ( )<br />

{<br />

int x = 5, y = 10;<br />

printf (”esamos x = %d ir y = %d reikðmës\n”, x, y);<br />

interchange (&x, &y);<br />

printf (”sukeistos x = %d ir y = %d reikðmës \n”, x, y);<br />

}<br />

int interchange (int *u, int *v)<br />

{<br />

int a;<br />

a = *u;<br />

*u = *v;<br />

*v = a;


}<br />

return *u, *v;<br />

Ðioje programoje funkcija main ( ) siunèia ne kintamàjá, o<br />

kintamojo adresà &x, &y. Tuo tarpu funkcijos interchange<br />

() kintamieji apibrëþiami kaip rodyklës *u, *v. Rodyklë – tai<br />

kintamojo, esanèio nurodytu adresu, reikðmë, t. y. a = *u.<br />

Tai reiðkia kintamajam a priskirti x vertæ, nes ði funkcija<br />

gavo ne reikðmæ, bet adresà. Tokiu bûdu, naudojant lokaliuosius<br />

kintamuosius, vienai funkcijai galima perduoti kitos<br />

reikðmes.<br />

Globalieji kintamieji apibrëþiami prieð funkcijà main ( )<br />

naudojant extern komandà (extern – nurodo, kad tai bus<br />

iðorinis, visoms funkcijoms bendras kintamasis).<br />

Uþduotys<br />

1. Perraðykite meniu programà pasinaudodami savo sukurtomis<br />

funkcijomis skaièiaus kubui, kvadratinei ðakniai, faktorialui<br />

skaièiuoti.<br />

2. Paraðykite funkcijà, kuri, gavusi kintamøjø x ir y reikðmes,<br />

jas pakeièia jø suma ir skirtumu bei jas iðspausdina.<br />

3. Paraðykite atskiras funkcijas, kurias naudoja pagrindinë<br />

funkcija skaièiø sumai, sandaugai ir faktorialui skaièiuoti.<br />

REKURSINËS FUNKCIJOS<br />

Rekursinë funkcija – tai funkcija, kuri kreipiasi pati á<br />

save. Pasiaiðkinkime, kaip paraðyti funkcijà faktorialui skaièiuoti.<br />

Faktorialà galima apskaièiuoti dviem bûdais:<br />

n! = 1·2···(n-1)·n<br />

45


46<br />

arba<br />

n! = n·(n-1)!, 0!= 1.<br />

Antrasis faktorialo uþraðymo bûdas – faktorialo lygtis. Pagal<br />

pirmàjá apibrëþimà faktorialo skaièiavimo programà Jûs<br />

jau raðëte. Dabar pateiksime faktorialo skaièiavimo funkcijà<br />

pagal antàjá apibrëþimà:<br />

…<br />

int fact (int n)<br />

{<br />

if (n = 0) return 1;<br />

else return n*fact (n–1);<br />

}<br />

…<br />

Kaip matome, funkcija uþraðoma trumpiau ir nëra jokio<br />

ciklo. Ði funkcija kreipsis pati á save tol, kol nebus lygu nuliui.<br />

Rekursinës funkcijos naudingos, kai reikia programuoti<br />

veiksmus su neþinomu operacijø skaièiumi.<br />

Uþduotis<br />

1. Paraðykite programà, kuri ekrane uþraðo deðimt pirmøjø<br />

Fibonaèi skaièiø. Fibonaèi skaièiai tenkina tokià diskretinæ<br />

lygtá:<br />

f n = f n–1 + f n–2 , f 0 = 0, f 1 = 1. Ðiai lygèiai reikia paraðyti<br />

rekursinæ funkcijà.<br />

MASYVAI IR RODYKLËS<br />

Jau þinome, kas yra masyvai ir kaip apibrëþti statiná (apibrëþto<br />

dydþio) masyvà. Apibrëþto masyvo elementams gali-


ma ið karto priskirti reikðmes:<br />

#include <br />

#include <br />

int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,<br />

31};<br />

void main ( )<br />

{<br />

int i;<br />

for (i = 0; i < 12; i++)<br />

printf (” %d mënuo turi %d dienø. \n”, i+1, days[i]);<br />

}<br />

Ðiuo atveju masyvas apibrëþtas kaip iðorinis, todël paèioje<br />

funkcijoje jo apibrëþti nereikia. Galima ir nenurodyti masyvo<br />

elementø skaièiaus. Tuomet pats kompiliatorius suskaièiuos<br />

lauþtiniuose skliaustuose pateiktas reikðmes:<br />

int days [] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};<br />

void main ( )<br />

{<br />

int i;<br />

for (i = 0; i < sizeof (days) / sizeof (int); i++)<br />

printf (” %d mënuo turi %d dienø. \n”, i + 1,<br />

days [i]);<br />

}<br />

Ðiuo atveju pats kompiliatorius apibrëþë masyvo dydá. Cikle<br />

for norint nurodyti masyvo dydá mes funkcijos sizeof ( ) pa-<br />

47


galba masyvo dydá apskaièiuojame baitais. Kadangi masyvo<br />

elementai yra sveiko tipo kintamieji, kurie uþima du baitus<br />

kompiuterio atmintyje, tai norint gauti masyvo skaièiø, padalijame<br />

jo uþimamà vietà ið 2 ir gauname masyvo elementø<br />

skaièiø.<br />

Siunèiant masyvà funkcijai, elgiamasi taip pat kaip ir su<br />

kintamaisiais – naudojant rodykles ir adresus.<br />

Iki ðiol buvo naudotas tik vienmatis masyvas. Daþnai prireikia<br />

dvimaèiø arba trimaèiø masyvø. Pvz.,<br />

float rain [5][12];<br />

Èia apibrëþtas penkiø elementø masyvas, kurio kiekvienà<br />

elementà sudaro 12 elementø. Tokio tipo masyvà galima pavaizduoti<br />

taip:<br />

5<br />

48<br />

rain [0][0] rain [0][1]<br />

12<br />

rain [0][2]<br />

rain [1][0] rain [1][1]<br />

rain [1][2]<br />

rain [2][0]<br />

rain [0][3]<br />

Keièiant masyvo elementus, elgiamasi taip pat, kaip ir dirbant<br />

su vienmaèiu masyvu. Reikia pabrëþti, kad C kalbos<br />

masyvai yra labai paprasti, todël galima manyti, kad jø ið viso<br />

nëra.<br />

Jei masyvo dydis bus apskaièiuotas tik veikiant programai,<br />

tai masyvà reikia apibrëþti kaip rodyklæ:


....<br />

float *J0;<br />

....<br />

J0 = (float *) malloc (zz * sizeof (float));<br />

....<br />

Anksèiau pateiktame pavyzdyje masyvas ið pradþiø apibrëþtas<br />

kaip rodyklë, veikiant programai apskaièiuota, kiek<br />

reikës masyvo elementø zz. Tuomet funkcija malloc ( ) yra<br />

sukuriamas reikiamo dydþio masyvas. Primename, kad zz yra<br />

masyvo elementø skaièius, o sizeof (float) nurodo float tipo<br />

kintamøjø uþimamà vietà kompiuterio atmintyje baitais.<br />

ÁVESTIES IR IÐVESTIES BYLOS C KALBOJE<br />

Teks raðyti programas, kurioms duomenys bus imami ið<br />

bylos, o skaièiavimo rezultatai taip pat bus iðvesti byloje. Ið<br />

pradþiø pasiaiðkinsime paprastas bylos skaitymo funkcijas fopen<br />

( ), fclose ( ), getc ( ), putc ( ).<br />

Panagrinëkime programà, kuri skaito bylos test turiná ir já<br />

iðveda ekrane.<br />

#include <br />

void main ( )<br />

{<br />

FILE *in; /* apraðo nuorodà á bylà*/<br />

int ch;<br />

if ((in = fopen (”test”,”r”))! = NULL)<br />

/*atidaro bylà skaitymui ir tikrina ar yra tokia byla*/<br />

{<br />

49


50<br />

while ((ch= getc(in))!=EOF)<br />

putc (ch, stdout);<br />

/* iðveda bylà ekrane*/<br />

fclose (in); /*uþdaro bylà*/<br />

}<br />

else<br />

printf (”bylos atidaryti negalëjau”);<br />

}<br />

Bylos atidarymas: fopen ( )<br />

Funkcijai fopen ( ) reikia perduoti tris duomenis: 1) bylos<br />

pavadinimà; 2) nurodyti, kaip naudosime bylà:<br />

”r”: bylà skaitysime<br />

”w”: á bylà áraðysime duomenis<br />

”a”: papildysime bylà<br />

3) rodyklë á bylà:<br />

FILE *in;<br />

in = fopen (”test”, ”r”);<br />

Dabar in yra rodyklë á bylà „test”.<br />

Jei fopen ( ) negali atidaryti bylos, ji gràþina vertæ<br />

„NULL”.<br />

Bylos uþdarymas: fclose ( )<br />

Pateiktame pavyzdyje tai yra<br />

fclose (in);<br />

Atkreipiame dëmesá, kad jos argumentas yra rodyklë in,<br />

o ne byla test. Ði funkcija, jei bylà pavyko uþdaryti sëkmingai,<br />

gràþina 0, jei ne – „–1”.<br />

Bylos duomenø ávedimas ir iðvedimas: getc ( ) ir putc ( )


Ðios funkcijos veikia analogiðkai kaip ir funkcijos getchar<br />

( ) ir putchar ( ). Skirtumas tik tas, kad reikia praneðti, kokià<br />

bylà reikia naudoti. Todël getchar ( ):<br />

ch = getchar ( );<br />

reikia pakeisti:<br />

ch = getc (in);<br />

Analogiðkai putc ( ):<br />

putc (ch, out);<br />

skirta simbolio ch uþraðymui byloje, á kurià siunèia FILE<br />

tipo rodyklë out.<br />

Mûsø atveju buvo naudota stdout – tai rodyklë standartiniam<br />

iðvedimui.<br />

Bylos ávedimas – iðvedimas: fprintf ( ), fscanf ( ), fgets<br />

( ), fputs ( )<br />

Kintamojo ir informacijos iðvedimo skirtumas yra tik tas,<br />

kad iðvedant informacijà byloje reikia naudoti rodyklæ, kurios<br />

tipas yra FILE. Pvz:<br />

....<br />

FILE *out;<br />

...<br />

out = fopen (”rez.dat”, ”w”));<br />

....<br />

fprintf (out, ”\n j1= %f v2= %d ”, J11, v111);<br />

....<br />

Funkcijos fprintf ( ) ir fscanf ( ).<br />

Ðios funkcijos panaðios á funkcijas printf ( ) ir scanf ( ), tik<br />

joms reikalingas papildomas argumentas, rodantis siuntimà á<br />

bylà. Tai nurodoma paèioje pradþioje. Pvz.:<br />

51


52<br />

#include <br />

void main ( )<br />

{<br />

FILE *fi; /* apraðo nuorodà á bylà*/<br />

int age;<br />

if ((fi = fopen (”test”,”r”))!=NULL)<br />

{<br />

/*atidaro bylà skaitymui ir tikrina, ar yra tokia byla*/<br />

fscanf (fi, ”%d”, &age); /*fi rodo á test*/<br />

fclose (fi);<br />

fi = fopen (”data”,”a”); /*papildymas*/<br />

fprintf (fi, ”test is %d.\n”, age); /* fi nurodo data*/<br />

fclose (fi);<br />

}<br />

}<br />

Panaði yra ir funkcija fgets ( ), kuri nuo funkcijos gets ()<br />

skiriasi papildomu kintamuoju:<br />

/* bylà nuskaito eilutëmis*/<br />

#include <br />

#define MAXLIN 80<br />

main ( )<br />

{<br />

FILE *f1;<br />

char *string [MAXLIN];<br />

}<br />

f1 = fopen (”story”,”r”);<br />

while (fgets (string, MAXLIN, f1) !=NULL)<br />

puts (string);


Pirmas fgets ( ) funkcijos argumentas yra skaitomos eilutës<br />

padëtis. Èia ávedama ið bylos perskaityta informacija (ji<br />

bus áraðoma á simboliná masyvà).<br />

Antrasis argumentas – nurodo skaitomos eilutës ilgá. Treèiasis<br />

argumentas nurodo bylà, ið kurios skaitoma informacija.<br />

Skirtumas tarp gets ( ) ir fgets ( ) – gets ( ) keièia naujos<br />

eilutës simbolá á „\0”, o fgets ( ) iðlaiko ðá simbolá. Abi funkcijos<br />

bylos pabaigoje EOF gràþina reikðmæ „NULL”.<br />

Funkcija fputs ( ) atlieka panaðius veiksmus kaip ir funkcija<br />

puts ( ):<br />

fputs (”Tu teisus”, fileptr);<br />

perduoda eilutæ „Tu teisus” á bylà, kurià parodo nuoroda<br />

fileptr.<br />

SIMBOLINIØ EILUÈIØ PAKEITIMAS<br />

Daþnai perskaitytà simbolinæ eilutæ reikia pakeisti á atitinkamà<br />

skaitinæ vertæ. Tam yra naudojamos funkcijos atoi ( ) ir<br />

atof ( ). Pirmoji funkcija eilutæ paverèia sveikuoju skaièiumi,<br />

antroji – slankiojo kablelio skaièiumi. Ðiø funkcijø argumentas<br />

yra simbolinio tipo. Atvirkðtinës paskirties funkcijos: itoa<br />

() – sveiko tipo skaièiø paverèia eilute, ftoa ( ) – double<br />

tipo skaièiø paverèia eilute.<br />

Uþduotys<br />

1. Paraðykite programà gautoms knygoms inventorizuoti.<br />

Ávedami duomenys turi bûti áraðomi á atskirà bylà.<br />

2. Paraðykite programà, kuri nuskaitytø bylos duomenis.<br />

Ið pradþiø turi bûti sukurta byla, kurioje bûtø nurodyti kokie<br />

nors skaièiai, o nuskaièiusi bylos turiná pavaizduotø ekrane,<br />

53


patikrintø, ar nëra nuliø, o jei jie yra, juos iðtrintø, naujus<br />

skaièius áraðytø á naujà bylà.<br />

LITERATÛRA<br />

1. Blanskis J. ir kt. C++ praktikumas. – Kaunas : KTU,<br />

2001.<br />

2. Lipeikienë J. Programavimas C++ kalba. – Vilnius :<br />

<strong>VPU</strong> l-kla, 2002.<br />

3. Matulis A. C, C++ ir OOP. http://www.itpa.lt/baryon/<br />

CPP/LCpp.pdf<br />

4. Vidþiûnas A. C++ duomenø tipai ir struktûros. –<br />

Kaunas : Smaltija, 2000.<br />

5. Vidþiûnas A. C++ ir C++ Builder pradmenys. –<br />

Kaunas : Smaltija, 2002.<br />

6. Óýéò Ì., Ïðàòà Ñ., Ìàðòèí Ä., ßçûê Ñè. – Ìîñêâà :<br />

Ìèð, 1988.<br />

PRIEDAS<br />

54<br />

C kalbos raktaþodþiai<br />

Programos vykdymo raktaþodþiai:<br />

Ciklai:<br />

for while do<br />

Pasirinkimas ir sàlygos:<br />

if else switch case default<br />

Perëjimas:<br />

break continue goto<br />

Duomenø tipai:<br />

char int short long unsigned float double struct union


typedef<br />

Atminties klasës:<br />

auto extern register static<br />

Uþraðymo forma:<br />

while (sàlyga)<br />

operatorius;<br />

Programos vykdymo valdymas<br />

Operatorius while<br />

Operatorius kartojamas tol, kol sàlyga teisinga.<br />

Pavyzdþiai:<br />

while (n++ < 100)<br />

printf (”%d %d\n”, n, 2*n+1);<br />

while (fargo < 1000)<br />

{<br />

fargo = fargo + step;<br />

step = 2*step;<br />

}<br />

Operatorius for<br />

Uþraðymo forma:<br />

for (priskyrimas; sàlyga; þingsnis)<br />

operatorius;<br />

Operatorius vykdomas tol, kol tenkinama sàlyga.<br />

Pavyzdþiai:<br />

for (n = 0; n < 10; n++)<br />

printf (”%d %d\n”, n, n*2+1);<br />

55


56<br />

Uþraðymo forma:<br />

do<br />

operatorius<br />

while (sàlyga);<br />

Operatorius do while<br />

Operatorius vykdomas, kol tenkinama sàlyga.<br />

Pavyzdþiai:<br />

do<br />

scanf (”%d”, &num)<br />

while (num! = 20);<br />

Uþraðymo forma:<br />

1 bûdas<br />

if (sàlyga)<br />

operatorius<br />

Operatoriai if ir else<br />

Operatorius vykdomas, jei tenkinama sàlyga.<br />

2 bûdas<br />

if (sàlyga)<br />

operatorius 1<br />

else<br />

operatorius 2<br />

Jei sàlyga teisinga, vykdomas operatorius 1, jei klaidinga


– operatorius 2.<br />

3 bûdas<br />

if (sàlyga 1)<br />

operatorius 1<br />

else if (sàlyga 2)<br />

operatorius 2<br />

else<br />

operatorius 3<br />

Jei sàlyga 1 teisinga, tai vykdomas operatorius 1. Jei sàlyga<br />

1 klaidinga, o sàlyga 2 teisinga, vykdomas operatorius 2.<br />

Jei abi sàlygos klaidingos, vykdomas operatorius 3.<br />

Pavyzdþiai:<br />

if (a= = 4)<br />

printf (”tai arklys”);<br />

else if (a > 4)<br />

printf (”tai ne arklys”);<br />

else<br />

{<br />

a++;<br />

printf (”klaida”);<br />

}<br />

Operatorius switch<br />

Uþraðymo forma:<br />

switch (iðraiðka)<br />

{<br />

case 1 poþymis: operatorius 1<br />

case 2 poþymis: operatorius 2<br />

57


58<br />

}<br />

default : operatorius 3<br />

default nëra bûtinas.<br />

Pavyzdþiai:<br />

switch (raidë)<br />

{<br />

case ”a”: printf (”as”);<br />

case ”b”: ...<br />

case ”c”:printf (”taip”);<br />

default: printf (”nesiseka”);<br />

}<br />

Jei paimtas simbolis nëra nei a, nei b, nei c – tai vykdomas<br />

default operatorius.


Aušra Kynienė<br />

C kalbų <strong>ABC</strong><br />

Redagavo Reda Asakavičiūtė<br />

Maketavo D. Petrauskas<br />

SL 605. Tir. 150 egz. 3,75 sp. l. Uþsak. Nr. 04-091<br />

Iðleido <strong>Vilniaus</strong> <strong>pedagoginis</strong> <strong>universitetas</strong>, Studentø g. 39, LT–08106, Vilnius<br />

Maketavo ir spausdino <strong>VPU</strong> leidykla, T. Ðevèenkos g. 31, LT–03111, Vilnius<br />

Kaina sutartinë<br />

60

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!