plik


ÿþWykBady z podstaw programowania f& Jzyk C/C++ 2. Elementy jzyka i programu Zbiór znaków, jednostki leksykalne Tekst zródBowy programu komputerowego zapisany w dowolnym symbolicznym jzyku programowania jest cigiem znaków nale|cych do pewnego ustalonego zbioru. Zgodnie z ogólnie przyjtym standardem zbiory znaków dopuszczalne w programowaniu zawieraj si w tabeli ASCII (ang. American Standard Code for Information Interchange). Uwaga: Tabela ASCII ustala kodowanie standardowych znaków tekstu dostpnych we wikszo[ci wspóBczesnych systemów komputerowych. Ka|dy znak tekstu jest reprezen- towany przez jednobajtow liczb z przedziaBu 0..255. Kodowanie to stosowane jest do zapisu tekstu w postaci pliku na dysku lub w postaci danych w pamici operacyjnej komputera. Poni|ej zamieszczono list kodów podstawowych znaków tabeli ASCII o warto[ciach z zakresu 0..127. 1 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ Prawie wszystkie znaki z p/w listy mog by u|ywane w komentarzach programu, w staBych BaDcuchowych lub jako staBe znakowe, a wic w takich fragmentach tekstu zródBowego, które nie podlegaj translacji lub s bezpo[rednio zamieniane na kod wynikowy. W pozostaBych cz[ciach tekstu podlegajcych wBa[ciwej translacji zwykle mo|na u|ywa znacznie mniej znaków z p/w listy. Znaki przetwarzane przez translator zaliczamy do tzw. symboli terminalnych translatora; znaki te tworz alfabet jzyka. Alfabet jzyka nale|cego do rodziny C1 zawiera nastpujce znaki: 26 maBych liter a b c d e f g h i j k l m n o p q r s t u v w x y z 26 du|ych liter A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 10 cyfr 0 1 2 3 4 5 6 7 8 9 30 znaków graficznych ! # % ^ & * ( ) - _ = + ~ ' " : ; ? / | \ { } [ ] , . < > Z punktu widzenia leksyki jzyka tekst zródBowy dzieli si na minimaln ilo[ podcigów znaków, z których ka|dy stanowi jeden niepodzielny wyraz. Na przykBad cig znaków postaci 3.14 przedstawia liczb, czyli warto[ nume- ryczn, o ile jest poprzedzony i zakoDczony jakim[ znakiem nienumerycznym, np. spacj. Niepodzielne cigi znaków, które reprezentuj pojedynczy element programu, nazywamy jednostkami leksykalnymi lub leksemami, tokenami. 1 Rodzina ta obejmuje jzyk C90 oraz inne jzyki, które utworzono na jego podstawie, czyli przede wszystkim C++, ale równie| Java, C#. W dalszej cz[ci wykBadu opis podany dla jzyka C odnosi si równie| do pozostaBych jzyków tej rodziny. 2 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ We jzyku C oraz w innych wspóBczesnych jzykach symbolicznych wyró|niamy nastpujce grupy jednostek leksykalnych: literaBy - warto[ci czyste (staBe) identyfikatory - nazwy wBasne elementów programu sBowa kluczowe - nazwy predefiniowane (zastrze|one) biaBe spacje - cigi bez znaczenia, rozdzielaj inne wyrazy symbole operatorów - reprezentuj dziaBania, np. matematyczne: + - * / && || < > == <= >= separatory - jawne znaki interpunkcyjne sBu|ce jedynie do rozdzielania wyrazów lub podziaBu tekstu na bloki, np.: ; , ( ) { } LiteraBy Dowolne warto[ci staBe programu jawnie zapisane w kodzie zródBowym reprezentowane s przez literaBy. Ich warto[ wynika wprost z ich zapisu. W jzyku C wystpuje kilka grup literaBów ró|nicych si typem przedstawianej warto[ci: literaBy znakowe StaBa znakowa w jzyku C skBada si ze dowolnego jawnego znaku ASCII ujtego w apostrofy. Zamiast jawnego znaku pomidzy apostrofami mo|na umie[ci jego kod zapisany w postaci liczby. Uwaga: StaBe znakowe s w programie wynikowym reprezentowane przez liczby caBkowite zgodnie z kodowaniem przyjtym w systemie, dla którego translator tworzy program wynikowy. Zwykle jest to kod ASCII, ale mog to by inne kodowania. U|ycie staBych z jawnymi znakami zamiast ich kodów liczbowych powoduje zatem, |e program jest bardziej przeno[ny. 3 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ PrzykBady znaki alfanumeryczne:  A  c  7  0 znaki graficzne:  ^  *  @  \'  \  znaki o kodzie podanym ósemkowo:  \123  \201  \0 znaki o kodzie podanym szesnastkowo:  \x1B  \x30 Uwaga: Niektóre znaki w systemie s symbolami operacji i nie maj drukowalnej postaci, dlatego do ich zapisu w postaci staBe znakowej sBu|y specjalna konstrukcja leksykalna jzyka C zwana  sekwencj ucieczki (ang. escape sequences). Zapis ten rozpoczyna si od uko[nika  \ , po którym wystpuje odpowiedni znak, co daje symbol pewnej operacji systemowej. Tej samej konstrukcji u|ywa si równie| do zapisu znaków kolidujcych ze symbolami jzyka2 oraz do zapisu znaków w postaci kodów numerycznych. Zapis Symbol Opis \n NL przej[cie do nowej linii (new line) \t HT utworzenie tabulacji poziomej (horizontal tab) \v VT utworzenie tabulacji pionowej (vertical tab) \b BS skasowanie znaku na lewo (backspace) \r CR powrócenie do pocztku linii (carriage return) \f FF wysunicie strony (form feed) \a BEL generowanie sygnaBu dzwikowego (bell) \\ \ znak pojedynczego uko[nika (backslash) \' ' znak apostrofu \" " znak cudzysBowu \0 NUL znak o kodzie 0 (koniec BaDcucha) \ooo znak o kodzie ósemkowym \xhh znak o kodzie szesnastkowym 2 Symbol jzyka - pojedynczy znak alfabetu jzyka peBnicy w gramatyce jzyka szczególn rol, np. znak pocztku i koDca staBych znakowych i BaDcuchowych, a tak|e znak uko[nika jako znak pocztku omawianej p/w sekwencji ucieczki. 4 PDF created with pdfFactory Pro trial version www.pdffactory.com symbole operacji jzyka symbole kody numeryczne WykBady z podstaw programowania f& Jzyk C/C++ literaBy tekstowe (BaDcuchowe) StaBa tekstowa jest cigiem (BaDcuchem, ang. string) dowolnych znaków ASCII ujtym w cudzysBów, np.: "To jest stala tekstowa". W jzyku C ka|dy BaDcuch koDczy si niewidocznym znakiem o kodzie zero (NUL). StaBa tekstowa jest zatem reprezentowana przez tablic znaków zawierajc o jeden znak wicej ni| wynosi liczba widocznych elementów w jej zapisie. Np. staBa o zapsie "abcd" jest typu char[5], czyli jest tablic picioelementow. Uwaga: Symbole specjalne typu  escape char. mog by równie| u|ywane wewntrz staBych tekstowych m.in. w celu formatowania ich wydruku w urzdzeniu wyj[ciowym, np.: napis "Pierwszy\twiersz.\nDrugi\twiersz.\n" zostanie wy[wietlony na ekranie w nastpujcej postaci: Pierwszy wiersz. Drugi wiersz. _ literaBy caBkowite (staBopozycyjne) Liczba caBkowita jest cigiem cyfr o dBugo[ci ograniczonej przez mo|liwo[ci arytmetyczne jzyka (typy danych). Na pocztku zapisu liczby mo|e by znak minus lub plus. W kodzie ósemkowym liczba poprzedzona jest zerem i mo|e skBada si jedynie z cyfr od  0 do  7 . W kodzie szesnastkowym liczba poprzedzona jest przez symbol "0x" lub "0X" i mo|e zawiera litery od  a do  f lub od  A do  F . PrzykBady kod dziesitny: 716 -1726 +182561 kod ósemkowy: 023 07722 03213 0112 kod szesnastkowy: 0x635 0X3f7A 0xabcdef 0x54cd7 Uwaga: StaBe caBkowite, je[li mieszcz si w zakresie zmiennych typu int (patrz str. 11), s traktowane jako warto[ci typu int. W przypadku, gdy staBa nie mie[ci si w zakresie typu int ale mie[ci si w zakresie typu long lub te| na koDcu staBej dopisano liter  l - jest traktowana jako warto[ typu long. Je[li staBa nie mie[ci si w zakresie typu long - jest traktowana jako staBa zmiennoprzecinkowa typu double. StaBe bez znaku, czyli typu unsigned, konstruuje si dopisujc na koDcu staBej liter  u . 5 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ literaBy rzeczywiste (zmiennopozycyjne) StaBa rzeczywista skBada si z opcjonalnej cz[ci caBkowitej, znaku kropki dziesitnej, cz[ci uBamkowej oraz opcjonalnego zapisu wykBadnika. Cz[ uBamkowa jest staB caBkowit nie zawierajc znaków plus ani minus. Cz[ okre[lajca wykBadnik jest poprzedzona liter  e lub  E , po którym wystpuje liczba caBkowita. 2 Å" 10 10 5 Å" 10 -11 -1.6 Å" 10 +14 PrzykBady zapis wykBadniczy: 2e10 5E 11 -1.6e+14 zwykBy zapis: 3.1415  1.0 165.091 Uwaga: Wszystkie staBe rzeczywiste s typu double, chyba |e zostaBy zakoDczone znakiem  L , wtedy s traktowane jako warto[ci typu long double. Identyfikatory Identyfikator (nazwa) sBu|y do nazywania elementów wchodzcych w skBad programu, takich jak zmienne, typy, funkcje itp. Identyfikator jest cigiem znakowym skBadajcym si jedynie z liter, cyfr i znaku podkre[lenia  _ . Cig ten musi rozpocz si od litery lub znaku podkre[lenia. W jzyku C du|e i maBe litery nazw s rozró|niane. PrzykBady nazwy poprawne: i x1 X1 Wyrazy w nazwach zBo|onych zwykle oddziela si kresk. liczba _znak data_urodzenia NumerDomu Alternatywnie, kolejne wyrazy rozpoczyna si od du|ej litery. 6 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ nazwy niepoprawne: 2znak numer mieszkania Nazwa zBo|ona jako identyfikator xy@ nie mo|e zawiera spacji pomidzy wyrazami. __sin Uwaga: Nie nale|y u|ywa identyfikatorów majcych dwa znaki podkre[lenia obok siebie. Jakkolwiek nazwy takie s poprawne z punktu widzenia skBadni jzyka C, to mog by u|ywane przez twórców kompilatora do identyfikowania elementów biblioteki jzyka. SBowa kluczowe Niektóre identyfikatory s zastrze|one i sBu| do zapisu istotnych konstrukcji w danym jzyku, np. deklaracji, dlatego nazywane s sBowami kluczowymi. SBowa te nie mog by u|yte jako nazwy zmiennych, funkcji itp. Jzyk C zawiera nastpujce sBowa kluczowe: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while PozostaBe jzyki rodziny C mog mie dodatkowe sBowa kluczowe, np. w jzyku C++ wystpuj midzy innymi: bool true false class public protected private mutable explicit this. Uwaga: W wikszo[ci edytorów kodów zródBowych sBowa kluczowe danego jzyka s zapisane czcionk pogrubion lub wyró|nione innym kolorem. 7 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ Komentarze i biaBe spacje Komentarze sBu| do opisu kodu zródBowego programu, a ich tre[ jest ignorowana przez translator. Podobnie jak tzw. znaki biaBej spacji komentarze s sprowadzane przez translator do roli pojedynczego niejawnego separatora rozdzielajcego otaczajce go wyrazy. Wystpowanie takiego separatora w niektórych punktach programu mo|e by zatem niezbdne dla prawidBowego zapisu programu. W jzyku C/C++ wystpuj dwa rodzaje komentarzy: komentarz liniowy .... // komentarz na koDcu linii kodu zródBowego komentarz blokowy .... /* komentarz obejmujcy kilka linii tekstu */ .... ..../* komentarz wpisany w lini kodu */ .... W kodzie zródBowym midzy wyrazami jzyka mo|na wstawi dowoln liczb biaBych spacji, tzn. nastpujcych znaków: zwykBa spacja SPACE pozioma tabulacja HT nastpna strona FF pionowa tabulacja VT nowa linia NL Uwaga: We systemie DOS/Windows znak nowej linii  \n jest zastpowany przez dwa znaki: znak CR - powrót karetki, czyli przesunicie kursora do pocztku bie|cej linii, oraz znak LF - przej[cie kursora do nastpnej linii bez zmiany poBo|enia poziomego (s to znaki o kodach ASCII: 13 i 10). W systemach unixowych znak \n jest reprezentowany przez pojedynczy znak LF. 8 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ Konstrukcje skBadniowe Z punktu widzenia skBadni (syntaktyki) jzyka cig leksemów tekst zródBowy programu jest dzielony na podcigi przyjmujce posta spójnych logicznie zdaD. Zdania te jako konstrukcje skBadniowe zbudowane z jednostek leksykalnych sBu| do wyra|ania elementów i bardziej zBo|onych struktur programu, co dotyczy gBównie danych i operacji na nich wykonywanych. We wikszo[ci wspóBczesnych jzyków symbolicznych konstrukcje skBadniowe dzielimy na nastpujce grupy: dyrektywy  maj znaczenie jedynie dla translatora tekstu zródBowego, a zatem wpBywaj na proces tBumaczenia tekstu deklaracje - wprowadzaj nowe identyfikatory w tek[cie dla takich elementów programu, jak zmienne, typy, funkcje definicje  s to deklaracje, które tworz nowe elementy programu i jednocze[nie przypisuj im identyfikator instrukcje  stanowi zapis zasadniczej cz[ci algorytmów programu, s tBumaczone na rozkazy procesora. Typy danych i wyra|enia W przypadku wikszo[ci jzyków programowania o tzw. statycznej typizacji danych wymaga si, aby w programie dowolne elementy z danymi, podlegajcymi przetwarzaniu przez algorytm, posiadaBy jawnie okre[lony typ. Typ danych wyznacza zbiór ich dozwolonych warto[ci oraz list operacji, jakie mo|na w programie wykona na danych. Ka|dy literaB jako zapis czystej warto[ci posiada swój wBasny typ wynikajcy wprost z postaci zapisu. W przypadku pozostaBych elementów programu zwizanych z danymi typ nale|y okre[li w ich definicji. Podstawowe typy danych w jzyku C/C++ podano na nastpnej stronie wraz z odpowiednimi sBowami kluczowymi i zbiorami warto[ci. 9 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ bool typ logiczny (tylko w C++), { false , true } char typ znakowy, { ...  A ,  B ...  a ,  b ... } int typ caBkowity, { imin ... -2 , -1 , 0 , 1 , 2 ... imax } float typ rzeczywisty, { 0.0 , ±fmin ... 1.0 ... ±fmax } double typ rzeczywisty o podwójnej precyzji, { 0.0 , ±dmin ... 1.0 ... ±dmax } enum typ wyliczeniowy, reprezentowany przez warto[ci typu int Uwaga: Warto[ci skrajne w zbiorze warto[ci danego typu s zale|ne od konkretnej implementacji jzyka zwizanej z docelowym systemem. Na przykBad w [rodowisku jzyka Visual C++ przeznaczonego dla systemu Windows 32-bit (Win32) skrajne warto[ci typu int wynosz: imin = -2147483648, imax = 2147483647. Do zmiany cech p/w typów podstwowych stosujemy modyfikatory typu. Poni|ej podano odpowiednie sBowa kluczowe dla modyfikatorów wraz z opisem modyfikacji i typami, do których si to odnosi: signed warto[ ze znakiem ± (int , char) unsigned warto[ bez znaku (int , char) short liczba krótka/mniejsza (int) long liczba dBuga/wiksza (int , double) PrzykBady: unsigned long int dluga_liczba_calkowita_bez_znaku; long double dluga_liczba_rzeczywista; Niektóre kombinacje p/w sBów kluczowych s nadmiarowe i nie prowadz do nowego, zmodyfikowanego typu. Poni|ej podano list typów identycznych skBadniowo: int a" signed int short a" signed short int short int a" signed short int 10 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ long a" signed long int long int a" signed long int char a" signed char Uwaga: W jzyku C++ typy char, signed char i unsigned char traktowane s jako skBadniowo ró|ne. Jednak|e zakres warto[ci typu char jest identyczny z zakresem typu signed char lub unsigned char w zale|no[ci od kompilatora jzyka. Istnieje zatem 13 ró|nych typów podstawowych jzyka C. Poni|ej podano ich list, w której zamieszczono najkrótsz kombinacje odpowiednich sBów kluczowych oraz rozmiary i zakresy warto[ci charakterystyczne dla systemów 32 bitowych: Typ Rozmiar Zakres warto[ci unsigned char 8 bits 0 ÷ 255 char 8 bits -128 ÷ 127 enum 32 bits (zale|y od definicji) bool 8 bits false , true unsigned short 16 bits 0 ÷ 65,535 short int 16 bits -32,768 ÷ 32,767 unsigned int 32 bits 0 ÷ 4,294,967,295 int 32 bits -2,147,483,648 ÷ 2,147,483,647 unsigned long 32 bits 0 ÷ 4,294,967,295 long 32 bits -2,147,483,648 ÷ 2,147,483,647 float 32 bits 3.4 e-38 ÷ 3.4 e38 double 64 bits 1.7 e-308 ÷ 1.7 e+308 long double 80 bits 3.4 e-4932 ÷ 1.1 e+4932 Uwaga: Rozmiar i zakresy danych w p/w li[cie zostaBy podane dla systemów 32 bitowych (np. Win32). Zamiast p/w jawnych warto[ci granicznych mo|na u|y predefiniowanych staBych ze pliku standardowego <limits.h>, np. dla typu int ’! INT_MIN , INT_MAX , dla double ’! DBL_MIN, DBL_MAX itp. Uwaga: W jzyku Visual C++ typ long double jest ró|ny skBadniowo od double, ale posiada ten sam rozmiar i zakres warto[ci danych. 11 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ W zale|no[ci od typu na danych s wykonywane ró|ne operacje. W przypadku p/w typów podstawowych operacje przyjmuj posta na ogóB jedno- lub dwuargumentowych dziaBaD matematycznych reprezentowanych przez symbol operatora; dane podlegajce tym dziaBaniom nazywamy operandami. W programie zródBowym konstrukcj skBadniow w postaci cigu operatorów i ich operandów nazywamy wyra|eniem. Konstrukcja ta sBu|y do zapisu prostych i zBo|onych dziaBaD na danych, a jednocze[nie reprezentuje warto[ bdc rezultatem wykonania tych dziaBaD. W przypadku zBo|onych dziaBaD kolejno[ ich wykonywania zale|y od priorytetu operatora, ale mo|e by dowolnie zmieniona poprzez ujcie podwyra|eD w nawiasy okrgBe. PrzykBady Poni|ej podano w jzyku C przykBadowe wyra|enia o warto[ciach liczbowych typu caBkowitego int oraz rzeczywistego double. wyra|enia arytmetyczne proste: 2 + 3 , 10.3  5 , 2 * 3.14 , 7 / 2 == 3 , 7 % 2 == 1 , 7.0 / 2.0 == 3.5 wyra|enia arytmetyczne zBo|one: 2 * 3 + 4 == 10 , 2 * ( 3 + 4 ) == 14 W jzyku C++ mo|emy równie| poda nastpujce przykBadowe wyra|enia o warto[ciach typu logicznego bool. wyra|enia relacji: 0 > -1 , 0 < 1 , a <= b , x >= 0 , 5 == 5 , 5 != 6 wyra|enia logiczne: 0.5 < 1 && 0.5 > 0 , x > 0 || x == 0 , !(5==6) Uwaga: Podobne wyra|enia relacji i logiczne wystpuj równie| w C, ale ich warto[ci s typu caBkowitego int, przy czym w przypadku faBszu warto[ci jest zero, natomiast przypadek prawdy jest reprezentowany przez dowoln warto[ ró|n od zera. 12 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ Zmienne proste Przez pojcie zmiennej programu wynikowego rozumiemy pewien obszar w pamici komputera, w którym mog by przechowywane dane podlegajce przetwarzaniu przez program. Mog to by dane wprowadzane przez u|ytkownika programu na jego wej[ciu, umieszczone statycznie w pliku z kodem wynikowym lub powstajce w trakcie dziaBania programu jako rezultat jego algorytmów. Ka|da nowa zmienna wymaga osobnej definicji podanej w kodzie zródBowym. Definicja zmiennej zawiera informacje dotyczce jej atrybutów. Zmienne posiadaj nastpujce atrybuty: identyfikator zmiennej  jest unikaln nazw zmiennej w tek[cie zródBowym; po translacji tekstu jest zastpowany przez adres odpowiedniego obszaru pamici typ danych przechowywanych w zmiennej  okre[la rozmiar obszaru pamici dla zmiennej oraz jakie warto[ci mo|na wpisa do obszaru; dodatkowo wyznacza zbiór operacji, jakie mo|na wykona na zmiennej warto[ wpisana do zmiennej  mo|e si zmienia w trakcie dziaBania programu; w przypadku zmiennych ustalonych ich pocztkowa warto[ nie ulega zmianie. Fragment kodu obejmujcy definicje zmiennych lub deklaracje ich nazw nosi nazw zakresu. Zmienne zadeklarowane w zakresie programu (pliku zródBowego - poza funkcjami) nazywamy zmiennymi globalnymi, a ich czas istnienia w programie pokrywa si z czasem wykonywania programu  s to zmienne statyczne. Zmienne zadeklarowane w zakresie funkcji nosz nazw zmiennych lokalnych i zwykle istniej w programie jedynie w czasie wykonywania danej funkcji  s to zmienne automatyczne. Wszystkie dane programu posiadajce typ podstawowy przechowywane s w zmiennych prostych. 13 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ W jzyku C dla podanego typu definicja zmiennej prostej o podanej nazwie mo|e przyj jedn z trzech postaci: z nieokre[lon warto[ci pocztkow: typ nazwa; z jawn warto[ci pocztkow w postaci podanego wyra|enia: typ nazwa = wyra|enie; z niezmienn jawnie podan warto[ci pocztkow: const typ nazwa = wyra|enie; W przypadku definicji zmiennej z nieokre[lon warto[ci pocztkow warto[ zmiennej zale|y od zakresu definicji. Dla zmiennej lokalnej warto[ pocztkowa jest przypadkowa i zale|y od stanu pamici operacyjnej, natomiast dla zmiennej globalnej przyjmuje si, |e niejawna warto[ pocztkowa równa jest zero. Typ warto[ci wyra|enia podanego w definicji jako jawna warto[ pocztkowa zmiennej musi by zgodny z typem zmiennej podanym na pocztku definicji. Je|eli definicja poprzedzona jest sBowem kluczowym (specyfikatorem) const, to dotyczy tzw. zmiennej ustalonej, której warto[ nie mo|e ulec zmianie w trakcie dziaBania programu. Zmienne takie w programie mo|na jedynie u|ywa do odczytu ich warto[ci. Warto[ pocztkowa zmiennej ustalonej musi by jawnie podana w jej definicji. Zmienne nieustalone (zdefiniowane bez const) w programie mog by u|yte zarówno do odczytu ich warto[ci, jak i w celu zapisu nowej warto[ci, std ich warto[ mo|na dowolnie zmienia w nastpujcym po definicji kodzie programu. SBu|y do tego osobna instrukcja jzyka  instrukcja przypisania  zawierajca operator przypisania ( = ). 14 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ Ogólna posta instrukcji do przypisania warto[ci wyra|enia zmiennej o podanej nazwie jest nastpujca: Z lewej strony operatora przypisania mo|e wystpi zamiast nazwy zmiennej bardziej zBo|one wyra|enie, które równie| reprezentuje jak[ nieustalon zmienn. W ogólno[ci wyra|enie, które mo|e wystpowa w tym miejscu, nazywamy l-warto[ci. nazwa = wyra|enie; Wyra|enie z prawej strony mo|e by zarówno l-warto[ci, jak i przedstawieniem jakiej[ staBej. Wyra|enie staBe, zwane te| r-warto[ci, nie mo|e wystpowa z lewej strony operatora przypisania, a jedynie z prawej. PrzykBady int x; // utworzenie caBkowitej zmiennej 'x' z nieokre[lon warto[ci x = 10; // wpisanie nowej warto[ci do zmiennej x (x jest l-warto[c) int zmienna_z_wartpocz = 2*x+1; // odczytanie warto[ci ze x 15 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ const int stala_bez_wart; // bBd: brak warto[ci pocztkowej const int stala = 20; // caBkowita zmienna ustalona stala = 30; // bBd: nie mo|na modyfikowa zmiennej ustalonej, tj. r-warto[ci bool flaga; ; // zmienna logiczna flaga = true; // jedyne warto[ci to: true  prawda, false - faBsz char znak; // zmienna znakowa znak =  A ; // zmienna zwiera kod ASCII litery A, tj. warto[ 65 double liczba; // zmienna rzeczywista liczba = 1.2; enum {Pn,Wt,Sr,Cz,Pt,Sob,Nd} dzien; // zmienna wyliczeniowa dzien = Pn; // zmienna mo|e przechowywa jedynie p/w symbole dni tygodnia int numer_dnia = dzien; /* wyliczenia s reprezentowane przez zwykle liczby caBkowite: Pn ’! 0, Wt ’! 1, ... Nd ’! 6 */ Uwaga: Cig definicji zmiennych o identycznym typie, np.: int zmienna1; int zmienna2 = 10; int zmienna3 = 20; mo|na zastpi jedn zBo|on definicj: int zmienna1, zmienna2 = 10, zmienn3 = 30; Uwaga: Do wyznaczenia rozmiaru zmiennej (liczby bajtów zajmowanego miejsca w pamici operacyjnej) sBu|y operator sizeof. Rozmiar ten jest taki sam jak rozmiar typu zmiennej, np. w systemie Win32 mamy: int x = 10; cout << "rozmiar zmiennej: " << sizeof x << endl; // 4 cout << "rozmiar typu: " << sizeof(int) << endl; // 4 Zadeklarowan zmienn mo|na u|y w programie od punktu deklaracji jej nazwy a| do koDca bie|cego zakresu, w którym dana deklaracja wystpuje. Blok kodu rozcigajcy si od punktu deklaracji zmiennej do koDca zakresu tej deklaracji nosi nazw zasigu identyfikatora zmiennej. 16 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ PrzykBad void main() { int x = 10; cout << x << endl; cout << y << endl; // instrukcja bledna: // zmienna y nie zostala jeszcze zdef. int y = 20; // punkt deklaracji zmiennej y cout << y << endl; // uzycie prawidlowe return; // epilog funkcji y = 23; // kod martwy: modyfikacja zmiennej nie ma sensu } // koniec zasiegu identyfikatorow zmiennych Instrukcja powrotu return wykonujca epilog funkcji wyznacza wBa[ciwy, operacyjny koniec zasigu identyfikatorów. Od punktu wystpienia instrukcji return do skBadniowego koDca ich zasigu (koDca zakresu funkcji) wci| istnieje mo|liwo[ u|ycia identyfikatorów, jednak|e operacje z tym zwizane stanowi kod martwy i nie zostan wykonane w trakcie dziaBania programu. W programach obok zakresu globalnego programu i lokalnego funkcji do deklaracji nowych nazw zmiennych mo|na wyró|ni dodatkowy fragment kodu w postaci osobnej grupy lub bloku instrukcji. Utworzenie w programie osobnego bloku kodu stanowicego nowy zakres dla deklaracji zmiennych odbywa si za pomoc instrukcji grupujcej (zBo|onej). W jzyku C instrukcja grupujca przyjmuje posta: { ..... kod zródBowy ..... } Instrukcja grupujca wyznacza wewntrz funkcji nowy zakres do deklarowania nazw zmiennych - zakres ten jest zakresem podrzdnym w stosunku do zakresu funkcji. 17 PDF created with pdfFactory Pro trial version www.pdffactory.com WykBady z podstaw programowania f& Jzyk C/C++ Czas istnienia zmiennych automatycznych o zakresie instrukcji grupujcej ograniczony jest do czasu wykonywania tej instrukcji. Instrukcje grupujce mo|na dowolnie zagnie|d|a. W programie zakresy tworz nastpujc hierarchi zagnie|d|eD: zakres globalny ’! zakres funkcji ’! zakresy instrukcji grupujcych. W danym zakresie nie mo|na definiowa ró|nych zmiennych o tych samych nazwach. Jzyk C dopuszcza jednak identyczno[ nazw zmiennych zdefiniowanych w zagnie|d|onych zakresach. Nazwy zmiennych zdefiniowanych wewntrz jakiego[ zakresu przysBaniaj identyczne nazwy dla zmiennych z zakresu nadrzdnego. Mówimy, |e dany identyfikator w swoim zasigu jest widoczny, gdy nie jest przysBonity przez identyczn nazw z zakresu podrzdnego. Widoczno[ identyfikatora zmiennej mo|e by zatem ograniczona i mo|e nie pokrywa si z zasigiem tego identyfikatora. PrzykBad void main() { // zmienne z zakresu funkcji main int x=10; int y=20; cout << y << endl; // 20 int y=25; // bBd: redeklaracja nazwy zmiennej { // zmienne z zakresu podrzdnego int z=30; int y=40; // przysBania zmienna  y z zakresu main cout << y << endl; // 40 x=11; // odnosi si do zmiennej nieprzysBonitej y=21; z=31; cout << y << endl; // 21 } // koniec zakresu instrukcji grupujcej cout << y << endl; // 20 y=25; // odnosi si do zmiennej  y z zakresu main z=35; // bBd: zmienna  z przestaBa istnie } // koniec zakresu funkcji main 18 PDF created with pdfFactory Pro trial version www.pdffactory.com

Wyszukiwarka

Podobne podstrony:
w08 PodstPrzy roznor
KOMUNIKACJA PODSTPSYCH WYK2
podstprog01
w02 PodstPrzy zycie
podstpr
w04 PodstPrzy proddekomp
w07 PodstPrzy krajobrazy
podstprog07
podstprog04
podstprog10
podstprog09
w05 PodstPrzy cykle
podstprog06
w06 PodstPrzy klimat

więcej podobnych podstron