C KALBŲ ABC - VPU biblioteka - Vilniaus pedagoginis universitetas
C KALBŲ ABC - VPU biblioteka - Vilniaus pedagoginis universitetas
C KALBŲ ABC - VPU biblioteka - Vilniaus pedagoginis universitetas
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