You are on page 1of 37

TRUMPAS VADAS PROGRAMAMVIM C IR C++

IVADAS C ir C++ programavimo kalba, tai galinga programavimo kalba, vis labiau naudojama visame pasaulyje. Dabar i kalba tai pagrindin profesional programavimo kalba, kuri skmingai vartojama tiek sistemins, tiek taikomosios rangos krimui. Pirm kart C kalb apra jos autoriai B.W.Karnighan ir D.M.Ritchie 1978 metais ileistoje knygoje C programavimo kalba. C kalbos variantas su klasmis pavadintas C++ kalba. i kalba buvo kaip instrumentas programuotojams praktikams. Be ios kalbos, yra ir kit programavimo kalb: Paskalis grietas programavimas, Beisikas jo sintaks artima angl kalbai. I esms C++ yra nauja programavimo kalba, pritaikyta sudting program sistem ir instrumentini programavimo priemoni krimui, panaudojant objektinio programavimo technologij. Taiau ioje kalboje isaugotas glaudus ryys ir su klasikine C kalba.

C ir C++ kalbos privalumai


C++ iuolaikin programavimo kalba. C ++ efektinga programavimo kalba. Ji leidia geriausiai inaudoti kompiuterinius resursus. C++ kalba paraytos programos yra kompaktikos ir greitai vykdomos. C ++ mobilioji programavimo kalba. Tai reikia, jei programa parayta ia kalba, ji gali bti lengvai, su nedideliais pataisymais arba visai be j, perkeliama kitas skaiiavimo sistemas, pvz.: i IBM kompiuterio perkelti programos veikim UNIX. C++ galinga ir lanksti programavimo kalba. Didel dalis galingos UNIX ir Windows operacins sistemos parayta C++ kalba. C++ kalba paraytos programos naudojamos fizikiniams ir techniniams udaviniams sprsti, taip pat naudojamos ir animacijai kurti. C ++ turi galimyb panaudoti eil valdanij konstrukcij, kurios paprastai asocijuojasi su asembleriu. Asemblerio programavimo kalba labai sudtinga (1pav.), tai skaiiai ir kodai, kuriuos suprasti ne specialistui sunku, kadangi ji raoma procesoriaus kalba (2 pav.). B8 23 01 MOV AX,0123 05 25 00 ADD AX,0025 8B D8 MOV BX,AX 03 D8 ADD BX,AX 8B CB MOV CX,BX 2B C8 SUB CX,AX 2B C0 SUB AX,AX 90 NOP CB RETF 1 pav. Asembleriu prayta programa. B8 23 01 05 25 00 8B D8 03 D8 8B CB 2B C8 2B C0 90 CB D0 A2 17 04 1F C3 1E 52 2E 8E 34 00 AE 1A 45 04 B4 41 CD 21 BA 94 04 B4 41 CD 21 5A E8 93 02 C6 06 44 04 00 1F C3 BA 87 80 E8 DA FF 0E 1F E9 AB F8 9C E8 9D FC 50 52 BA 78 81 E8 C9 FF 0E 1F E8 08 31 5A 58 9D 3D 41 00 75 03 E9 8F F8 E9

12 BA 8E 1E 3A D0 FE 06 44 04 06 57 1E 56 1E 06 1F BE 8D 87 26 C6 06 A3 E5 00 E8 EA F0 1F 72 1F 2 pav. Procesoriaus kalba. Asembleriu parayta programa yra labai didels apimties, nes kompiuteriui reikia aikinti kiekvien norim atlikti veiksm detaliai. inoma, programuojant asembleriu galima pasinaudoti visais kompiuterio resursais. Asembleris tai sistemini programuotoj kalba, kuri pilnai leidia panaudoti visus kompiuterio resursus. Fortranas puikiai suskaiiuoja sinus, taiau sunkiai pavaizduoja tak ekrane. C kalba tai aukto lygio programavimo kalba, kuri leidia panaudoti visus kompiuterio resursus kaip ir asembleris. iuo metu C kalba yra sistemini programuotoj kalba. C patogi kalba. Tai struktrin kalba, taiau ji nra labai grieta ir per daug nevaro programuotojo.

Programavimo procesas
Programos raymas yra gana ilgas procesas, kuris schematikai yra pavaizduotas 3 pav. Pirma, pasinaudojus turimu redaktoriumi, raomas programos tekstas. ia svarbu neapsirikti renkant programos tekst ir parinkti bylos vard, kurioje bus programa. Programos teksto byla *.cpp arba *.c (pirmasis C++ kalba, antrasis C). Toliau parayt program kompiliuojame, t.y. ms parayt program perraome kompiuterio kalba ir gauname objektin (*.obj) byl. Tai gali bti tik gabaliukas programos. Galiausiai, visus program gabaliukus sujungia vien *.exe byl kita programa, vadinama komponuotoju (linker). i programos dalis kartu traukia ir bibliotekines funkcijas. Taiau gautoji programa yra su klaidomis, todl j reikia derinti ir taisyti. Tai atliekama derintojo (Debugger) programos pagalba.

Programa .for .bas .pas .c .cpp

.obj .lib .asm .obj

Rezultatas .exe .com

Redaktorius Editor

Kompiliatorius Compiler

Komponuotojas Linker

Derintojas Debugger

3 paveikslas. Borlando kompiliatorius

Operacijos
Pabandykite suprasti, k daro i programa? #include <stdio.h> main ( ) /* paprasiausia programa*/ { int num; num = 1; printf ( A paprasta); printf (skaiiavimo maina. \n); printf (Mano mgstamiausias skaiius %d, todl, kad tai pirmas skaiius. \n, num); return 0; } Na jei manote, kad programa kak atspausdins ekrane, tai Js esate visikai teiss. Programos rezultatas: A paprasta skaiiavimo maina. Mano mgstamiausias skaiius 1, todl, kad tai pirmas skaiius. Paraytos programos apvalga #include <stdio.h> - program traukiama papildoma byla. i byla paprastai jau yra bet kuriame C kompiliatoriaus pakete. Programuotojai tai vadina programos antrate. i eilut net nra C kalbos operatorius. # - nurodo, kad programos vykdymui bus reikalinga pasinaudoti C kompiliatoriaus biblioteka. main ( ) funkcijos vardas. Programa, kuri yra parayta C kalboje, pradedama vykdyti nuo funkcijos main ( ). Todl C kalboje, visos paprograms gali turti vairius vardus, iskyrus valdanij. Paprogram tai atskira nepriklausoma programos dalis, kuri kreipiasi pagrindin funkcija. Skliausteliai po main ( ) nurodo, kad tai ne kintamasis, o funkcija. iuose skliaustuose gali bti nurodoma ios funkcijos grinama informacija. Kadangi nurodytoje programoje ms funkcija nieko neturi grinti, tai jie yra tuti. /* paprasiausia programa*/ - komentaras.

Komentarai tai pastabos, kurios padeda suprasti programos esm. Komentarai skirti tik programuotojui, kompiliatorius juos ignoruoja. Komentarus galima rayti toje pat eilutje kur ir nurodomos operacijos. { - funkcijos pradia. int num; - operatorius kintamojo tipui aprayti arba kitaip, tai paprasiausias raktinis odis. Nurodome, kad bus naudojamas kintamasis num, kuris bus sveikas skaiius (int). Programuojant yra btina nurodyti naudojam kintamj tip. Programa rayti pradedama nuo kintamj, kurie bus naudojami programoje, nurodant j tip. Kintamaisiais gali bti ne tik sveiki skaiiai, bet ir simboliai bei slankaus kablelio skaiiai. Kabliatakiu baigiamas rayti bet koks operatorius C kalboje. Kintamj tipai gali bti vairs. Pasirenkant kintamj vardus taip pat laikomasi tam tikr taisykli: kintamojo pavadinimas gali bti nuo vieno simbolio iki septyni. Kintamojo vardo pirmasis simbolis btinai turi bti raid, o sekantys skaiiai, didiosios ir maosios raids ir _ simbolis, kuris suprantamas kaip raid. Teisingi vardai Wiggly cat1 Hot_Tub _kcaB Klaidingi vardai $Z^** 1cat Hot-Tub dont

num = 1; - priskyrimo operatorius. = kintamajam num priskiria vienet. Apibrus kintamojo tip, kompiuterio atmintyje buvo iskirta kintamajam atminties vieta, o su priskyrimo operatoriumi, mes t viet upildme. is operatorius irgi baigiamas kabliatakiu. printf ( A paprasta); - ivedimo ekran operatorius. io operatoriaus pagalba ekrane atspausdinama fraz: A paprasta. printf( ) ivedimo ekran funkcija. Kad tai funkcija, rodo skliaustai. Simboli eilut esanti skliaustuose, perduodama funkcijai printf( ). i funkcija periri visus simbolius tarp kabui ir juos atspausdina. Tarp kabui raomi simboliai, tai funkcijai perduodami argumentai. \n nurodo kompiliatoriui kitos eiluts pradi. Tai simbolis, kuris atitinka vedimo klavio paspaudim. Simbolis \t atitinka tabuliacijos klavio paspaudim ir pan. %d nurodo kur ir kokiu formatu atspausdinti kintamojo num vert. % - nurodo, kad ioje vietoje turi bti spausdinamas skaiius, o d nurodo, kad spausdinamas skaiius turi bti deimtainje sistemoje. } pagrindins main( ) funkcijos pabaiga.

Paprastos programos struktra


Susipainsime su pagrindinmis taisyklmis raant program C kalba. Paprastai, program gali sudaryti viena ar keletas funkcij, kuri viena btinai turi vadintis main( ). Funkcij pradedame aprayti nuo antrats, po to seka paios funkcijos apraymas. Funkcijos struktros paprasiausia schema pateikta 4 pav.

Antrat #include<stdio.h> main( ) Pagalbins bibliotekos Funkcijos vardas ir argumentai

Funkcijos apraymas int num; num = 1; printf(%d tai skaiius.\n, num); Kintamojo apraymas Priskyrimo operatorius Funkcijos ikvietimo operatorius

4 paveikslas. Funkcijos struktra C kalboje.

Programuojant nereikt rayti visko vien eilut. Kompiliatorius, paraytoje programoje, tuias eilutes ignoruoja. Todl galima detaliai atskirti kiekvien funkcijos dal.

Pateiksime iek tiek sudtingesn program: #include <stdio.h> main( ) /* skaii daugyba*/ { int a, b; a = 6; b = 2 * a; printf( %d padauginus i dviej gausime %d. \n, a, b); return 0; } ios programos rezultatas: 6 padauginus i dviej gausime 12. Kaip matome, jei ekran reikia ivesti kelis kintamuosius, tai po kabui nurodomi i eils kintamieji, kuri vertes norime ivesti ekran. Uduotys 1. Paraykite program, kuri ivest ekran Js vard ir pavard. 2. Paraykite program, kuri ivest ekran Js ami, kai nurodyti Js gimimo metai.

Duomen ir kintamj tipai


Duomen ir kintamj tipai ir j raktini odi paaikinimas yra pateiktas 1 lentelje.

1 Lentel. Duomen Tipai ir j raktiniai odiai.

Raktiniai odiai: int, long, short, unsigned, char, float, double. int - jei kintamasis bus sveikas skaiius su enklu. long arba long int dideli sveiki skaiiai short arba short int nedideli sveikieji skaiiai unsigned int, unsigned long, insigned short gali bti nulis arba teigiamas sveikas skaiius char simbolinis kintamasis Skaiiai nuo 32768 iki 32767

float teigiamas ir neigiamas slankaus kablelio skaiius. double arba long float dvigubo tikslumo arba ilgas dvigubas skaiius

Skaiiai, didesni nei sveikieji

mogui skirtumas tarp sveiko skaiiaus ir slankaus kablelio skaiiaus, tai tik skirtingas uraymo bdas. Kompiuteriui tai i skaii uraymas kompiuterio atmint. Sveik skaii pavyzdiai: 2, -23, 2456. Tuo tarpu 3,14 arba 2/3 jau nra sveikieji skaiiai. Pagrindiniai i skaii skirtumai: 1. Sveiki skaiiai neturi trupmenins dalies, tuo tarpu slankaus kablelio skaiiai gali bti sveiki arba trupmeniniai. 2. Naudojant slankaus kablelio skaiius, galima apimti didesn skaii diapazon. 3. Veiksmai su trupmeniniais skaiiais atliekami ilgiau. Norint, kad ekrane bt atspausdintas sveikas skaiius, reikia rayti %d, simbolis - %c, slankaus kablelio skaiius - %f. Uduotys Studentas para program, kurioje gausu klaid. Suraskite jas. #include <stdio.h> main ( ) ( float g; h; float tax, rate; g = e21; tax = rate * g; )

Simbolins eiluts, funkcijos printf( ) ir scanf( )


iame skyriuje pabandysime isiaikinti, kaip reikia apibrti simbolines konstantas ir kaip dirbti su simbolinmis eilutmis. Pradioje pateiksime programos pavyzd ir pabandysime suprasti, k ji daro: /* dialogas*/ #define DENSITY 1200 /*mogaus kno tankis*/ #include<stdio.h> #include<conio.h> #include<string.h>

main ( ) { float weight, volume; int size, letters; char name[40]; clrscr(); printf(Labas! Koks Js vardas? \n); scanf( %s, name); printf(%s, kokia Js mas?\n, name); scanf(%f, &weight); size = sizeof( name); letters = strlen(name); volume = weight/DENSITY; printf(Nuostabu, %s, Js tris %2.2f kubiniai metrai.\n, name, volume); printf(Be to, Js vardas sudarytas i %d raidi, \n, letters); printf(ir jis kompiuterio atmintyje uima %d bait.\n, size); getch( ); return 0; } Programos veikimo rezultatas: Labas! Koks Js vardas? Viktorija Viktorija, kokia Js mas? 64 Nuostabu, Viktorija, Js tris 0.053 kbiniai metrai. Be to, Js vardas sudarytas i 9 raidi, Ir jo patalpinimas kompiuterio atmintyje uima 40 bait. Perirsime, kas gi naujo atsirado ioje programoje: 1. 2. 3. 4. 5. 6. ia buvo apibrtas masyvas, kuriame saugomas vartotojo vestas vardas. Vedant ir ivedant simbolin eilut buvo naudota ivedimo specifikacija %s. Buvo apibrta konstanta DENSITY. vesta vesties funkcija scanf( ), kuri nuskaito vedamus duomenis. vestos eiluts ilgiui nustatyti naudota funkcija strlen( ). Masyvo dydiui nustatyti panaudota nauja funkcija sizeof().

scanf( ) ir printf( ) funkcij viduje vesta ir norima ivesti informacija raoma tarp kabui, kurios nurodo eiluts pradi ir pabaig. Simbolins eiluts vedimui panaudotas masyvas tai kompiuterio atmintyje iskirta vieta, kurioje greta vienas kito patalpinama tarpusavyje logikai susijusi vienodo tipo informacija (5 pav.).

\0

5 paveikslas. Eiluts idstymas masyve. Kiekvienas masyvo elementas uima 1 bait. \0 C kalboje ymi eiluts pabaig. Pateiktame pavyzdyje yra apibrtas 40 element masyvas, kiekviename masyvo elemente galima patalpinti vien simbol. Lautiniai skliaustai rodo, kad name kintamasis yra masyvas, kuris turi 40 element, o char nurodo, kad element tipas yra simbolinis: char name[40]; Simbolis %s nurodo funkcijai printf( ) spausdinti simbolin eilut. Funkcija scanf( ) skaito simbolius i klaviatros, kol sutinka tarpo, tabuliacijos klavio ir vedimo klavio simbol. Duomen vedimui arba nuskaitymui C kalboje yra ir daugiau funkcij, pvz.: gets( ), getchar( ). Raant programas, danai tenka susidurti su konstantomis, kuri nuolat prireikia skaiiavimuose. Todl konstantos yra apibriamos pradioje #define, po to nurodomas konstantos vardas ir po tarpo nurodoma konstantos reikm. Jei tai simbolin konstanta, tai jos reikm nurodoma kabutse: #define DENSITY 1200 - skaitin konstanta. #define PHRAISE tai ir a simbolin konstanta. Programoje kiekvienoje vietoje, kur bus sutiktos nurodytos konstantos, j viet i karto bus raytos konstant verts. Funkcijos scanf( ) ir printf( ) vedimo ir ivedimo funkcijos. Norint, kad ios funkcijos ivest arba vest kintamj, reikia nurodyt kintamj format. emiau pateikti ivedimo/vedimo formatai ir ivedamos/vedamos informacijos tipas: Formatas %d %c %s %e %f %g %u %o %x Ivedamos/vedamos informacijos tipas deimtainis sveikas skaiius vienas simbolis simboli eilut slankaus kablelio skaiius, ivedimas eksponentiniu formatu slankaus kablelio skaiius, deimtaininis ivedimas naudojama vietoj f ir e, jeigu jis yra trumpesnis deimtainis sveikas skaiius be enklo atuntains sistemos skaiius be enklo eioliktains sistemos skaiius be enklo

Galima tarp % ir simbolio nurodyti skaiius: %4d spausdinamam skaiiui skirti 4 simboliai, pildoma i deins kair

___5 %4.5f - skaiius po taku nurodo ivedimo tikslum, t.y. kiek skaii po kableliu ivesti ekran %ld atitinka long duomen tip. %-10d ivedimui skirta 10 simboli, spausdinama bus i kairs dein. raant duomenis i klaviatros, kaip matme scanf( ) funkcijoje nurodant kintamj, kuriam bus priskirta nuskaityta vert naudojamas simbolis &. is simbolis reikia rodykl kintamj arba kitaip, kintamojo adres. Jei kintamasis apibrtas *p, tai rodykl j bus p; jei kintamasis apibrtas p, tai rodykl j bus &p. Uduotys 1. Paraykite programa, kuri paklaust Js vardo, pavards, gimimo met. Po to ivest Js ami, suskaiiuot raides ir pasakyt kiek vietos uima Js duomenys. 2. Suraskite klaidas: define B oi-oi define X 10 main( ) { int age; char name; printf(Koks Tavo vardas?); scanf(%s, name); printf(nuostabu, %c, kiek jums met?\n, name); scanf(%f, age); xp = age +X; printf(%s! Jums tikriausiai %d ?\n, B, xp); }

Operacijos, iraikos ir operatoriai


Ciklas tai eil veiksm, kurie yra kartojami. /*bat dydis*/ #define OFFSET 7.64 #define SCALE 0.325 main ( ) {

/* perskaiiuoja bat dyd pdos dyd ciliais*/ float shoe, foot; printf(Bat dydis pdos dydis\n); shoe = 3.0; while (shoe<18.5) { foot = SCALE*shoe + OFFSET; printf(%13.2f %16.2f coliai\n, shoe, foot); shoe = shoe + 1.0; } printf(jei Jums i avalyn tinka, neiokite j. \n); return 0; } Programos veikimo rezultatas: Bat dydis pdos dydis 3,01 8,61 coliai 4,0 8,94 coliai .. .. 17,0 13,16 coliai 18,0 13.49 coliai jei Jums i avalyn tinka, neiokite j. while ciklo darbas: slyg, kuri turi bti tenkinama nurodoma skliaustuose. Kol i slyga shoe<18,5 bus tenkinama, tol ciklas bus vykdomas. Pradinis rezultatas shoe=3.0 tenkinamas, tai tuomet apskaiiuojamas pdos dydis, jis atspausdinamas ir shoe kintamojo vert padidinama vienetu: shoe = shoe +1.0;. Ciklo pradi ir pabaig ymi riestiniai skliaustai: {}. Tarp j esantys operatoriai kartojami tol, kol ciklo slygos yra tenkinamos. Kai slyga netenkinama, tai ieinama i ciklo ir vykdoma sekanti komanda: printf( ). i program galima pakeisti, jei vietoj SCALE verts paraysime 1.8, o vietoj OFFSET 32.0, gausime program kuri temperatr i celcijaus skals perveda farenheitus.

Pagrindins operacijos
Pagrindins operacijos yra skirtos aritmetiniams veiksmams. 1. Priskyrimo operacija: = C kalboje is enklas nereikia lygu, jis reikia, kad kakokiam kintamajam turi bti priskirta vert: Bmw = 2003;

Toks uraas reikia, kad kintamajam bmw priskirta vert 2003., t.y. kintamojo vardas bmw, kintamojo vert 2003. Pairkime pavyzd: i=i+1;. Matematiniu poiriu tai yra visika nesmon, o C kalboje tai reikia, kad reikia paimti kintmj vardu i ir jo vert padidinti vienetu. Trumpai tai galima urayti: i++ , tai tas pats kaip ir i=i+1. 2. Sumavimo operacija: + + - sudedami du dydiai, esantys i kairs ir deins operatoriaus puss. Pvz.: printf(%d, 4+20); ekran bus ivesta - 24. Sumuojami dydiai gali bti ir kintamieji ir konstantos. 3. Atimties operacija: Atima kintamj vertes arba konstant vertes: i kairs enklo puss stovinio kintamojo verts atimama deinje enklo pusje stovinio kintamojo vert. 4. enklo pakeitimo operacija: Pakeiia kintamojo enkl prieingu. 5. Daugybos operatorius:* Sudaugina kintamuosius ar konstantas. Specialaus operatoriaus kvadratui C kalboje nra. 6. Dalybos operatorius: / Kairje pusje esanio kintamojo vert prie operatori yra dalinama i kintamojo verts, esanios u operatoriaus deinje pusje. emiau pateiktos programos pavyzdys pademonstruos kaip atliekama dalybos operacija ir kuo skiriasi sveik skaii dalyba nuo dalybos su slankaus kablelio skaiiumi. /*dalybos pavyzdiai*/ ... main( ) { printf(sveik skaii dalyba: 5/4 tai %d \n, 5/4); printf(sveik skaii dalyba: 6/3 tai %d \n, 6/3); printf(slankiuoju kableliu: 7.0/4.0 tai %2.2f \n, 7.0/4.0);

return 0; } Programos veikimo rezultatas: sveik skaii dalyba: 5/4 tai 1 sveik skaii dalyba: 6/3 tai 2 slankiuoju kableliu: 7.0/4.0 tai 1.75 7. Dalybos pagal modul operatorius: % Jei turime ura 13 % 5 tai rezultatas bus 3: 13 galima urayti 2*5 +3, ir liekana yra 3, kuris ir yra operatoriaus veikimo rezultatas. 8. Didinimo ir mainimo operatoriai: ++ ir - ++ - padidina kintamojo vert 1, o - - sumaina vert 1. i operatori vykdymo yra galimi keli variantai. Tai priklauso nuo to, kur ie operatoriai raomi: prie funkcij ar po jos. Veikimo rezultatas tas pats, tik verts pakeitimo laikas skirtingas. Paanalizuokime emiau pateikt program: /* sumavimas*/ main( ) /*operatoriaus raymas i kairs ir i deins*/ { int a=1, b=1; int aplus, plusb; aplus=a++; /* plusb=++b; printf(a aplus b plusb); printf(%3d %5d %5d %5d \n); return 0; } Programos veikimo rezultatas: A aplus b plusb 2 1 2 2 Abiej kintamj verts padidjo vienetu, taiau kintamajam aplus a vert buvo priskirta prie padidinim: kintamajam priskirta sena vert a ir tik po to a vert padidinama; o plusb po padidinimo: kintamojo vert padidinama, o tik po to ta vert priskiriama naujam kintamajam. Analogikai veiksmai atliekami ir su mainimo operatoriumi: --. emiau pateiktoje lentelje pateikiamos C kalbos operacijos ir j atlikimo tvarka. 2 Lentel. Aritmetiniai veiksmai ir j atlikimo vyresnikumas.

Aritmetiniai veiksmai + Prie kairje pusje stovinio kintamojo pridedama deinje stovinio kintamojo vert I kairje stovinio kintamojo atimama deinje stovinio kintamojo vert Pakeiia deinje pusje io enklo stovinio kintamojo enkl * Sudaugina kintamuosius / Kairje pusje esant kintamj padalina i deinje pusje esanio kintamojo % Iveda liekan skaiiaus, kai dalinama kairje io operatoriaus stovinio kintamojo vert i deinje io operatoriaus pusje esanio kintamojo verts ++ Kintamojo vert padidina vienetu -Kintamojo vert sumaina vienetu Veiksmai (idstyti veiksm atlikimo Kaip vykdoma operacija tvarka) () {} -> . I kairs dein ! ~ ++ -- - * & sizeof( ) I deins kair */% I kairs dein +I kairs dein << >> I kairs dein < <= > >= I kairs dein = = != I kairs dein & I kairs dein ^ I kairs dein | I kairs dein && I kairs dein || I kairs dein ?: I kairs dein = += -= *= / * %= I deins kair , I kairs dein Dabar pabandysime pasiaikinti nemintas anksiau operacijas. += - prideda deinje esant kintamj prie kairje esanio kintamojo: a+=2, tai atitinka a=a+2. Analogikai atliekami ir sekantys veiksmai: -=, *=. <= - maiau arba lygu. == - lygu != - nelygu && - loginis veiksmas reikiantis ir. || - loginis veiksmas reikiantis arba. ! loginis veiksmas ne.

Uduotys 1. Paraykite program, kuri atspausdint skaiiaus x nuo 1 iki 10 vert, jo kvadrat, kub ir 1/x: x x2 x3 1/x 1 1 1 1 2 4 8 0,50 3 9 27 0,33 .. .. .. .. 10 100 1000 0,10 2. ASCII kod lentel. Tai standartin kompiuteryje naudojam simboli lentel. Operatorius printf("%4d %c", 97, 97) atspausdina ekrane tokius simbolius: 97 a. Mat, pirmasis 97 skaiius spausdinamas, kaip sveikasis, o antrasis - kaip simbolis, paymtas numeriu 97. Atspausdinkite visus 256 simbolius. 3. Paraykite program, kuri atspausdint skaiius nuo 1 iki 16 deimtainje, atuntainje, eioliktainje sistemose. 4. Paraykite program, kuri paprayt kokio skaiiaus norite suinoti kvadrat sum. Pvz.:4 1*1+2*2+3*3+4*4=30. ekran bus ivesta 30.

Logins operacijos
Raktiniai odiai if , else, switch, break, case, default Operacijos > >= <= < == != && || / :?

Operatorius if
Pasiaikinsime paprasiausi program: /*eilui skaiiavimas*/ #include <stdio.h> void main( ) { int ch; int lin=0;

while((ch = getchar( )) !=EOF) if (ch = = \n) lin++; printf(suskaiiavau %d eilutes\n, lin); } Pagrindin darb ioje programoje atlieka operatorius: if (ch = = \n) lin++; is operatorius nurodo kompiuteriui didinti kintamojo lin vert vienetu, jei i klaviatros paimtas simbolis yra nauja eilut \n. Jei i klaviatros paimtas simbolis neatitinka simbolio nauja eilut, tai toliau vykdant operatori while imamas sekantis simbolis. Operatorius getchar( ) yra skirtas vieno simbolio vedimui i klaviatros. Vieno simbolio ivedimui naudojamas operatorius putchar( ). EOF, tai -1, kas atitinka bylos pabaig. Paprastai automatikai tokiu simboliu yra pabaigiama byla. iame pavyzdyje, operatoriui if priklauso tik vienas veiksmas lin++, todl is veiksmas baigiamas kabliatakiu. Jei operatoriui priklausyt daugiau veiksm, juos reikt atskirti {} skliaustais. Galima patobulinti program, kad ji skaiiuot simbolius ir eilutes: #include <stdio.h> void main( ) { int ch; int lin=0, sim=0; while((ch = getchar( )) !=EOF) { sim++; if (ch = = \n) lin++; } printf(suskaiiavau %d eilutes ir %d simbolius \n, lin, sim); } Operatoriaus if galimybes galima iplsti panaudojus operatori else. Naudojant konstrukcij if else, tikrinama operatoriaus if slyga ir jei ji netenkinama, tuomet vykdomi else operatoriaus veiksmai:

Taip (true) if
(n>10)

n=2*n;

printf(%d\n,n)

else (ne) n=10*n;

Jei nebt operatoriaus else, tai i karto bt vykdomas spausdinimas. Po operatoriumi else galima vl kartoti operatori if. Tokiu bdu galima patikrinti didesn slyg skaii.

Slygins operacijos
Kai kurias slygines komandas mes jau naudojome anksiau, dabar susipainsime su visomis galimomis slyginmis operacijomis C kalboje. Operacija < <= == >= > != Reikm maiau maiau arba lygu lygu daugiau arba lygu daugiau nelygu

Slygins komandos naudojamos su if ir while operatoriais. Atkreipiame dmes - jokiu bdu lyginimui negalima naudoti operatoriaus =, nes tai yra priskyrimo operatorius. Deja, slygines komandas negalima naudoti eilui lyginimui. Jei dirbama su trupmeniniais skaiiais, patartina naudoti tik < ir > lyginimo komandas.

Logins operacijos
Danai tenka panaudoti ne tik slygines operacijas, bet ir logines. Pavyzdiui, mums reikia paskaiiuoti, kiek byloje yra tui simboli, t.y. tarpo simboli, naujos eiluts ir tabuliacijos klavio. /*simboli skaiius*/ #include<stdio.h>

main( ) { int sim; int t=0; while ((sim=getchar( ))!=EOF) if(sim= = || sim = =\n || sim = = \t) t++; printf(I viso yra %d tui simboli, t); return 0; } Taigi, || tai login komanda arba. C kalboje yra trys logins komandos: Operacija Reikm && ir || arba ! ne Pairkime kaip jos vykdomos. Tarkime turime du slyginius operatorius a ir b. 1. a&& b, slyga bus teisinga ir vykdoma, kada bus teisingos a ir b slygos. 2. a||b teisinga, jei yra teisinga a arba b slyga, arba bus teisingos abi slygos. 3. !a teisinga, jei a slyga yra neteisinga. Paimsime kelet konkrei pavyzdi: 5>2 && 4>7 neteisinga, nes viena slyga nra patenkinta. 5>2 || 4>7, teisinga, nes viena slyga yra patenkinta. !(4>7), teisinga, nes 4 ne didesnis u 7.

Slygin operacija: ?:
i operacija, tai trumpas if else operatoriaus uraymas. Pateiksime operatoriaus iraik skaiiaus absoliutins verts radimui: x=(y<0)? y : y; tai atitikt uraym: if(y<0) x=-y; else x=y;

Operatoriai switch ir break.


Jei reikia pasirinkti vien galim variant i eils duomen, tuomet nepatogu naudoti ifelse konstrukcij. Daugeliu toki atveju pravartus yra operatoriaus switch panaudojimas. Pateiksime programos pavyzd, kuri nuskaito raid ir iveda i tos raids prasidedanio gyvno pavadinim. /*gyvnas*/ void main( ) { char ch; printf(veskite bet koki raid, o a ivesiu gyvno pavadinim i Js nurodytos raids. \n); printf(Jei norite darb nutraukti, veskite # simbol.\n); while((ch = getchar( ))!=#) { if( ch!= ) /*nelygu tarpo simboliui*/ switch(ch) { case a: printf(avis, naminis gyvnas.\n); break; case b: printf( barsukas, laukinis gyvnas.\n); break; default: printf(tokio gyvno neinau.\n); break; } else printf(Js vedte tarpo klavi. veskite raid arba norint nutraukti darb simbol #); } } Tikriausiai aiku, kad paraytoji programa nuskaito i klaviatros vest simbol. Patikrina, ar tai ne tarpo simbolis arba pabaigos simbolis #. Jei slygos tenkinamos, tuomet ieko swicht operatoriuje nurodytos raids ir veiksm, k toliau daryti su duomenimis. default bus naudojama visiems anksiau nenurodytams atvejams. break, skirtas ijimui i swicht operatoriaus. Uduotys

1. Paraykite program, kuri tikrint ar i klaviatros vestas skaiius yra teigiamas ar neigiamas. Neigiamas skaiius turi bti paverstas teigiamu ir ivestas ekran, praneant tai, o teigiamas tik praneant, kad tai teigiamas skaiius. 2. Paraykite program, kuri skaiiuot nurodyto skaiiaus faktorial. 3. Paraykite program, kuri pateiktu meniu. Meniu bt galima pasirinkti: ar ivesti nurodyto skaiiaus kub, ar kvadratin akn, ar faktorial.

Ciklai ir kiti programos valdymo bdai


Raktiniai odiai While, do, for, break, continue, goto Operacijos += -= *= /= %= Priminsime, kad ciklo while bendroji uraymo forma yra: while( slyga) Operatorius (veiksmai, kurie bus atliekami) io ciklo viduje turime nurodyti kaip turi keistis slygoje einantis kintamasis. Kitaip, ciklas bus begalinis ir i jo niekada neieisime. Ciklas for: jame i karto nurodomos ciklo pradins ir galins slygos, ciklo atlikimo ingsnis. . for(a=1; a<=10; a++) printf( man puikiai sekasi!); . ios programos fragmento vykdymas ekrane deimt kart pasirodys fraz man puikiai sekasi!. Pateiksime su iuo ciklo operatoriumi parayt program, kuri skaiiuoja skaii nuo 1 iki 6 kubus. /*kubai*/ #include<stdio.h> #include <conio.h> void main( )

{ int a; for(a=1; a<=6; a++) printf(%5d %5d \n, a, a*a*a); } Jei cikl eina ne vienas, o keletas operatori, tuomet jie turi bti atskirti {} skliaustais. To nereikia, jei ciklui priklauso tik vienas operatorius. for ciklo privalumai: 1. Slygos ir ingsniai uraomi i karto. 2. Galima ingsn ne tik didinti (a++), bet ir mainti (a--). 3. Galima ciklo ingsn keisti bet kokiu nurodytu dydiu: a+=13 (a=a+13). 4. Galima dirbti ne tik su skaiiais, bet ir su simboliais. Dirbant su simboliais, jie nurodomi tarp kabui: ... for( a = a; a<= z; a++) printf(simbolis %c atitinka %d skaii.\n, a, a); ... 5. for ciklo viduje galima naudoti aritmetinius veiksmus: ... for(a=1; a*a*a<=216; a++) printf(%5d %5d \n, a, a*a*a); 6. ingsniui keisti galima panaudoti koki norime algebrin iraik. 7. Galima palikti ciklo apraymo vietas tuias, svarbu, kad negalima praleisti kabliatakio. for(; ; ) printf(pakibau\n); is ciklas bus vykdomas be galo ilgai, kadangi tuia slyga yra visada teisinga. a=2; for(n=3;a<=25;) a=a*n; bus vykdoma iki a bus maiau arba lygu 25.

8. Galima nurodyti ne vien, o kelias pradines slygas. Jos tarpusavyje turi bti atskirtos kableliu. for(a=2,b=0; b<100; a*=2) b+=a; Kiti valdantieji operatoriai break, continue, goto Operatorius break naudojamas daugiausiai i vis trij operatori. J jau sutikome cikle while, i kurio ieinama tik io operatoriaus dka. is operatorius tikrai netinka su if operatoriumi. Jei taip atsitinka, kad jis reikalingas, tuomet btina perirti paraytos programos algoritm, kad nereikt naudoti io operatoriaus. Operatorius continue gali bti naudojamas visuose cikluose iskyrus switch. ie operatoriai geriausiai praveria, kai reikia sutrumpinti if-else slygos veikim. Operatorius goto pats prasiausias. Jo nedera naudoti C++ kalboje. io operatoriaus naudojimas prasto programavimo poymis.

Masyvai
Jau anksiau minjome kas yra masyvas ir kaip j reikia apibrti. Dar kart grime prie j, kadangi jie yra svarbs programavimo procese. Pvz.: float a[20]; kintamojo apraymas reikia, kad turime masyv a, kur sudaro dvideimt element. Pirmas masyvo elementas yra a[0], antras a[1] ir t.t. Paskutinis masyvo elementas a[19]. Kadangi masyvo tipas yra float, tai kiekvienas masyvo elementas irgi bus float tipo. Masyvai gali bti bet kokio anksiau nurodyto tipo. Masyvo upildymas ir jo element skaitymas atliekamas ciklo pagalba. Svarbu neumirti, kad masyvo pirmas elementas yra a[0]. for(i=0; i<=19; i++) /*masyvo upildymas*/ scanf(%lf, &a[i]); for(i=0; i<=19; i++) printf(%f, a[i]); /*masyvo element atspausdinimas*/ Masyv elementus galima lyginti, atlikti aritmetinius veiksmus:

if(a[i]> b) b = a[i]; Jei masyvo i-tasis elementas didesnis u b, tuomet b kintamajam priskirti i-tj masyvo element. Svarbu: upildymui nurodomas masyvo adresas: &a[i]. Masyvo dyd galima apibrti pasinaudojus konstantomis: #define MAX 45 main( ) { int a[MAX]; } Uduotys 1. Paraykite program, kuri ivest daugybos lentel. 2. Paraykite program, kuri leist vartotojui upildyti masyv i 6 element. Upildyto masyvo elementus iriuokite didjania tvarka ir iveskite ekran. 3. Paraykite program, kuri sudt dviej masyv elementus (masyvai sudaryti i 10 element ir sudtis turi bti: pirmo masyvo pradia sudedama su antro masyvo pabaiga) ir rezultat surayt trei masyv, o padalintus masyvo elementus sudt ketvirt masyv. ekran turi bti ivesti pradiniai masyvai bei j sumos, bei dalybos masyvai.

Kaip teisingai naudotis funkcijomis


Raktinis odis return Programavimas C++ kalba paremtas funkcij naudojimu. Mes jau naudojome funkcijas printf( ), scanf( ), getch( ), putchar( ), strlen( ). ios funkcijos yra sistemins, bet mes esame sukr ir sav funkcij main( ). Programos vykdymas visada prasideda komandomis, kurios yra main( ) funkcijoje, kuri gali kreiptis ir kitas funkcijas. Dabar isiaikinsime kaip patiems sukurti funkcijas, kurias galt kreiptis main( ) funkcija ir kitos sukurtos funkcijos.

Funkcija tai savarankika programos dalis, skirta konkreiam veiksmui atlikti. Pvz.: funkcija printf( ) - iveda informacij ekran. Naudojant funkcijas, nereikia dar kart programuoti besikartojanius veiksmus. Jei programoje kok nors veiksm reikia kartoti kelet kart, tai utenka t veiksm aprayti funkcija ir reikalui esant kreiptis t funkcij. Be to, i funkcij bus galima naudoti ne tik vienoje programoje, bet ir kitose programose. Tarkime, norime parayti program, kuri: vest skaii rinkin, j iriuot ir rast vidutin vert. Mint program galima urayti sekaniai: ... main ( ) { float list[50]; readlist(list); sort(list); average(list); return 0; } Aiku, kad pagrindin funkcija kreipiasi funkcijas readlist( ), sort( ) ir average( ), kurios atlieka joms nurodytus veiksmus ir pagrindinei funkcijai grina rezultat. Naudojant pagalbines funkcijas, galima pagrindin dmes skirti programos struktrai negaitant laiko j detalms. K reikia inoti apie funkcijas? Aiku, kaip jas reikia aprayti, kaip jas kreiptis ir kaip nurodyti ry tarp programos ir paraytos funkcijos.

Paprastos funkcijos krimas ir jos panaudojimas


Paraysime program, kuri spausdint firmin blank ir sukursime nauj funkcij, kuri brt 65 simbolius*. /*firminio blanko virus*/ #define Name Kolegija #define Address Student 39 #define Vieta Klaipeda #include <stdio.h> void starbar( ); void main ( ) { starbar( ); printf(%s\n, Name);

printf(%s\n, Address); printf(%s\n, Vieta); starbar( ); } /*funkcija starbar( )*/ #include <stdio.h> # define Riba 65 void starbar( ) { int count; for(count=1; count<=Riba; count++) putchar(*); putchar(\n); } Programos veikimo rezultatas: ******************************************* Kolegija Student 39 Klaipeda ******************************************* funkcij starbar( ) mes kreipms i funkcijos main( ), nurodydami tik reikalingos funkcijos vard. Kaip veikia programa: pirma, ji ikarto kreipiasi starbar( ) funkcij, kuri atspausdina simbolius, toliau main( ) funkcija kreipiasi sistemines funkcijas, kurios atspausdina tekst ir galiausiai vl starbar( ), kuri atspausdina simbolius. Kuriant pagalbin funkcij, ji raoma pagal tokias paias taisykles kaip ir main ( ) funkcija. ia abi funkcijos buvo uraytos vien *.cpp byl. Paprastai, geriau rayti atskiras funkcijas atskiras bylas, kurias bt galima panaudoti kitose programose. Ms paraytoji programa neturi nieko grinti main ( ) funkcij, todl priekyje buvo nurodomas jos tipas void. Jei programa turt grinti vert, reikt nurodyti kokio tipo vert funkcija grins ir grinamo argumento vert: int starbar(int a); tai reikt, kad funkcija starbar( ) grins sveik skaii ir gaus apdorojimui taip pat sveik skaii a. Tuomet sukurtos funkcijos viduje reikia pasinaudoti operatoriumi return, kuris nurodo sukurtai funkcijai k ji turi grinti. Pasiaikinsime emiau pateikt program: /*absoliutins verts*/ #include<stdio.h> int abs (int x); void main( ) { int a=10, b=0, c=-22;

int d, e, f; d= abs(a); e=abs(b); f=abs(c); printf(%d %d %d\n, d, e, f); } int abs(int x) { int y; y=(x<0)? x: x; return y; } Programos veikimo rezultatas: 10 0 22 Pagrindin funkcija kreipiasi kit funkcij, kuri skaiiuoja skaiiaus modul. Suskaiiavusi modul return komanda graina rezultat pagrindinei funkcijai, kuri gautj rezultat iveda ekran.

Globalieji (ioriniai) ir lokalieji (vietiniai) kintamieji


Paprastai, kintamuosius mes aprame funkcijos viduje, todl tai buvo tos funkcijos lokalieji (vidiniai) kintamieji, kurie nebuvo inomi kitoms funkcijoms. Todl vienai funkcijai perduoti kintamojo vert buvo naudojama komanda return. C++ kalboje danai tenka naudoti globaliuosius kintamuosius, kuriuos naudos keletas funkcij. Jei kintamasis yra apibrtas ir vienoje ir kitoje funkcijoje tuo paiu vardu, j kompiliatorius vis tiek supranta kaip atskir kintamj. Pairkime program, kuri sukeiia kintamj vertes: /*kintamuju sukeitimas*/ #include <stdio.h> #include <conio.h> int interchange(int *u, int *v); void main( ) { int x=5, y=10; printf("esamos x= %d ir y= %d verts\n", x, y); interchange(&x, &y);

printf("sukeistos x= %d ir y= %d verts \n", x, y); } int interchange(int *u, int *v) { int a; a= *u; *u= *v; *v= a; return *u, *v; } ioje programoje main( ) funkcija siunia ne kintamj, o kintamojo adres &x, &y. Tuo tarpu funkcijos interchange( ) kintamieji apibriami kaip rodykls *u, *v. Rodykl tai nurodytu adresu kintamojo vert, t.y a= *u tai reikia kintamajam a priskirti x vert, nes i funkcija gavo ne vert, bet adres. Tokiu bdu, naudojant lokaliuosius kintamuosius, galima perduoti vienai funkcijai kitos vertes. Globalieji kintamieji apibriami prie main( ) funkcij naudojant extern komand (extern nurodo, kad tai bus iorinis, visoms funkcijoms bendras kintamasis).
Uduotys

1. Perraykite meniu program pasinaudodami savo sukurtomis funkcijomis skaiiaus kubui, kvadratinei akniai, faktorialui skaiiuoti. 2. Paraykite funkcij, kuri gavusi kintamj x ir y vertes, jas pakeiia j suma ir skirtumu bei atspausdina jas. 3. Paraykite atskiras funkcijas, kurias naudoja pagrindin funkcija skaii sumai, sandaugai ir faktorialui skaiiuoti.

Rekursija Rekursins funkcijos


Rekursin funkcija tai funkcija, kuri kreipiasi pati save. Vaizdumo dlei, pasiaikinsime kaip parayti funkcij faktorialui skaiiuoti. Faktorial galima apskaiiuoti dviem bdais: n!=12(n-1)n arba n!=n(n-1)!, 0!=1.

Antrasis faktorialo uraymo bdas, tai yra faktorialo lygtis. Pagal pirmj apibrim faktorialo skaiiavimo program Js jau rate. Dabar paraysime faktorialo skaiiavimo funkcij pagal antj apibrim: int fact(int n) { if (n = 0) return 1; else return n*fact(n-1); } Kaip matome, funkcijos uraymas sutrumpja ir ia nra jokio ciklo. i funkcija kreipsis pati save tol, kol n bus lygus 0. Rekursins funkcijos naudingos, kai reikia programuoti veiksmus su neinomu operacij skaiiumi. Uduotis 1. Paraykite program, kuri urao ekrane deimt pirmj Fibonai skaii. Fibonai skaiiai tenkina toki diskretin lygt: fn= fn-1+fn-2, f0=0, f1=1. Pagal i lygt reikia parayti rekursin funkcij.

Masyvai ir rodykls
Jau inome, kas yra masyvai ir kaip apibrti statin (apibrto dydio) masyv. Apibrto masyvo elementams galima i karto priskirti vertes: #include <stdio.h> #include <conio.h> int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; void main( ) { int i; for(i=0; i<12; i++) printf(" %d mnuo turi %d dien. \n", i+1, days[i]); } iuo atveju masyvas apibrtas kaip iorinis, todl paioje funkcijoje jo apibrti nereikia. Galima ir nenurodyti masyvo element skaiiaus. Tuomet pats kompiliatorius suskaiiuos lautiniuose skliaustuose pateiktas vertes:

int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; void main( ) { int i; for(i=0; i<sizeof(days)/sizeof(int); i++) printf(" %d mnuo turi %d dien. \n", i+1, days[i]); } iuo atveju pats kompiliatorius apibr masyvo dyd. Cikle for norint nurodyti masyvo dyd mes sizeof( ) funkcijos pagalba suskaiiuojame masyvo dyd baitais. Kadangi masyvo elementai yra sveiko tipo kintamieji, kurie uima du baitus kompiurio atmintyje, tai norint gauti masyvo skaii, mes padalinome masyvo uimam viet i 2 ir gauname masyvo element skaii. Siuniant masyv funkcijai, elgiamasi taip pat kaip ir su kintamaisiais naudojant rodykles ir adresus. Iki iol buvo naudotas tik vienmatis masyvas. Danai prireikia dvimai arba trimai masyv. Pvz.: float rain[5][12]; ia apibrtas penki element masyvas, kurio kiekvieno element sudaro 12 element. Vaizdiai tokio tipo masyv galima pavaizduoti taip: 12

rain[0][0]

rain[0][1]

rain[0][2]

rain[0][3]

rain[1][0]

rain[1][1]

rain[1][2]

rain[2][0]

Keiiant masyvo elementus elgiamasi taip pat kaip ir dirbant su vienmaiu masyvu. Norisi pabrti, kad C kalboje masyvai yra labai paprasti. Jie yra tokie prasti, kad yra ymiai geriau galvoti, kad j nra i viso. Jei masyvo dydis bus suskaiiuotas tik programos eigoje, tai masyv reikia apibrti kaip rodykl:

.... float *J0; .... J0 =(float *) malloc (zz * sizeof (float)); .... Aukiau pateiktame pavyzdyje, pradioje masyvas apibrtas kaip rodykl, programos eigoje apskaiiuota, kiek reiks masyvo element zz. Tuomet, malloc( ) funkcijos pagalba yra sukuriamas reikiamo dydio masyvas. Primename, kad zz masyvo element skaiius, o sizeof(float) nurodo float tipo kintamj uimam viet kompiuterio atmintyje baitais.

vesties ir ivesties bylos C kalboje


Danai teks rayti programas, kurios duomenis ims i bylos ir skaiiavimo rezultatus irgi ives byl. Pasiaikinsime pradioje paprastas bylos skaitymo funkcijas fopen( ), fclose( ), getc( ), putc( ). Pairsime program, kuri skaito bylos test turin ir j iveda ekran. #include<stdio.h> void main( ) { FILE *in; /* aprao rodykl byl*/ int ch; if ((in=fopen("test","r"))!=NULL) /*atidaro byl skaitymui ir tikrina ar yra tokia byla*/ { while((ch= getc(in))!=EOF) putc(ch, stdout); /* iveda byl ekran*/ fclose(in); /*udaro byl*/ } else printf("bylos atidaryti negaljau"); } Bylos atidarymas: fopen( ) Funkcijai fopen( ) reikia perduoti tris duomenis: 1) bylos pavadinim; 2) nurodyti kaip naudosime byl: r: byl skaitysime w: byl raysime duomenis a: papildysime byl

3) rodykl byl: FILE *in; in=fopen(test, r); Dabar in yra rodykl byl test. Jei fopen( ) negali atidaryti bylos, ji grina vert NULL. Bylos udarymas: fclose( ) Ms pavyzdyje: fclose(in); Atkreipiame dmes, jos argumentas yra rodykl in, o ne byla test. i funkcija, jei byl pavyko udaryti skmingai, grina 0, jei ne -1. Bylos duomen vedimas ir ivedimas: getc( ) ir putc( ) ios funkcijos veikia analogikai funkcijoms getchar( ) ir putchar( ). Skirtumas tik tas, kad reikia praneti koki byl reikia naudoti. Todl getchar( ): ch =getchar( ); reikia pakeisti: ch = getc(in); Analogikai putc( ): putc(ch, out); skirta simbolio ch uraymui byl, kuri siunia rodykl out tipo FILE. Ms atveju buvo naudota stdout tai rodykl standartin ivedim. Bylos vedimas ivedimas: fprintf( ), fscanf( ), fgets( ), fputs( ) Kintamojo ir informacijos ivedimo skirtumas yra tik tas, kad ivedant informacij byl reikia naudoti rodykl, kurios tipas yra FILE. Pvz: .... FILE *out; ... out = fopen("rez.dat", "w")); .... fprintf (out, "\n j1= %f v2= %d ", J11, v111); .... Funkcijos fprintf( ) ir fscanf( ). ios funkcijos dirba panaiai kaip ir funkcijos printf() ir scanf(), tik joms reikalingas papildomas argumentas, rodantis siuntim byl. Tai nurodoma paioje pradioje. Pvz.:

#include<stdio.h> void main( ) { FILE *fi; /* aprao rodykl byl*/ int age; if((fi =fopen("test","r"))!=NULL) { /*atidaro byl skaitymui ir tikrina ar yra tokia byla*/ fscanf(fi, %d, &age); /*fi rodo test*/ fclose(fi); fi=fopen(data,a); /*papildymas*/ fprintf(fi, test is %d.\n, age); /* fi nurodo data*/ fclose(fi); } } Panaiai yra ir su funkcija fgets( ), kuri nuo gets( ) skiriasi papildomu kintamuoju: /* nuskaito byl eilutmis*/ #include<stdio.h> #define MAXLIN 80 main() { FILE *f1; char *string[MAXLIN]; f1=fopen(story,r); while(fgets(string, MAXLIN, f1) !=NULL) puts(string); } Pirmas fgets( ) funkcijos argumentas yra skaitomos eiluts padtis. ia bus vedama perskaityta i bylos informacija (bus raoma simbolin masyv). Antrasis argumentas nurodo skaitomos eiluts ilg. Treiasis argumentas nurodo byl, i kurios bus skaitoma informacija. Skirtumas tarp gets( ) ir fgets( ) gets( ) keiia naujos eiluts simbol \0, o fgets( ) ilaiko simbol. Abi funkcijos sutik bylos pabaig EOF, grina vert NULL. fputs( ) daro panaius veiksmus puts( ) funkcij: fputs(Tu teisus, fileptr); perduoda eilut Tu teisus byl, kuri nurodo rodykl fileptr.

Simbolini eilui pakeitimas


Danai perskaityt simbolin eilut reikia pakeisti atitinkam skaitin vert. Tam yra naudojamos funkcijos atoi( ) ir atof( ). Pirmoji funkcija eilut paveria sveiku skaiiumi, antroji slankiojo kablelio skaiiumi. i funkcij argumentas yra simbolinio tipo. Atvirktins paskirties funkcijos: itoa( ) sveiko tipo skaii paveria eilute, ftoa( ) double tipo skaii paveria eilute. Uduotys 1. Paraykite program, skirt gaut knyg inventorizacijai. vedami duomenys turi bti raomi atskir byl. 2. Paraykite program, kuri nuskaityt i bylos duomenis: pradioje turi bti sukurta byla, kurioje bt nurodyti kokie nors skaiiai. Nuskaiiusi, atspausdint bylos turin ekran, patikrint ar nra nuli, jei yra, juos itrint ir naujus skaiius rayt nauj byl.

PRIEDAS Raktiniai C kalbos odiai


Programos vykdymo raktiniai odiai: Ciklai: for while do Pasirinkimas ir slygos: if else switch case default Perjimas: break continue goto Duomen tipai: char int short long unsigned float double struct union typedef Atminties klass: Auto extern register static

Programos vykdymo valdymas


Operatorius while Uraymo forma: while ( slyga) operatorius; Operatorius kartojamas tol, kol slyga teisinga. Pavyzdiai: while(n++<100) printf(%d %d\n, n, 2*n+1); while( fargo<1000) { fargo = fargo + step; step = 2*step; } Operatorius for Uraymo forma: for(priskyrimas; slyga; ingsnis) operatorius; Operatorius vykdomas tol, kol tenkinama slyga. Pavyzdiai: for(n=0;n<10;n++) printf(%d %d\n, n, n*2+1); Operatorius do while Uraymo forma: do operatorius while(slyga); Operatorius vykdomas, kol tenkinama slyga. Pavyzdiai: do scanf(%d, &num) while(num!=20);

Operatoriai if ir else Uraymo forma:


1 BDAS

if(slyga) operatorius Operatorius vykdomas, jei tenkinama slyga. 2 bdas if(slyga) operatorius1 else operatorius2 Jei slyga teisinga, vykdomas operatorius1, jei klaidinga operatorius2. 3 bdas if(slyga1) operatorius1 else if(slyga2) operatorius2 else operatorius3 Jei slyga1 teisinga, tai vykdomas operatorius1. Jei slyga1 klaidinga, o slyga2 teisinga, vykdomas operatorius2. Jei abi slygos klaidingos, vykdomas operatorius3. Pavyzdiai: if(a= = 4) printf(tai arklys); else if(a>4) printf(tai ne arklys); else { a++; printf(klaida); }

Operatorius switch Uraymo forma: switch (iraika) { case 1poymis: operatorius1 case 2poymis: operatorius2 default : operatorius3 } default nra btinas Pavyzdiai: switch(raid) { case a: printf(as); case b: case c:printf(taip); default: printf(nesiseka); } Jei paimtas simbolis nra nei a, nei b, nei c tai vykdomas default operatorius.

You might also like