Podstawy programowania 1 W2 id Nieznany

background image

1

Wykład 2

Typy i zmienne całkowite, reprezentacja danych

całkowitych, stałe całkowite

Typy rzeczywiste, inicjacja zmiennych

rzeczywistych

Typy i zmienne wskaźnikowe

Typ danej

to inaczej zbiór wartości jakie może przyjmować.

Typ danej determinuje również sposób jej przechowywania w
pamięci komputera i obszar jaki zajmuje (liczbę jednostek pamięci -
bajtów).
W języku C++ dostępne są

typy proste

i

strukturalne

.

Typy proste wykorzystuje się do tworzenia typów strukturalnych.

background image

2

Do kategorii prostych w języku C++ należą typy:

-

arytmetyczne całkowite i rzeczywiste,

-

wskaźnikowe,

W języku C++ występuje ponadto typ

referencyjny

.

Typy strukturalne mogą składać się z typów prostych i innych
typów strukturalnych. Typami strukturalnymi w języku C++ są:

-

tablice

,

-

struktury

,

-

unie

,

-

klasy

.

Typ danej jest pojęciem logicznym. Reprezentantem fizycznym
typu danej jest

zmienna

lub

obiekt

.

background image

3

Typy i zmienne całkowite

.

Typy całkowite w C++ są skończonymi, przeliczalnymi
podzbiorami zbioru liczb całkowitych. Zmienne typów
całkowitych

deklaruje

się w programach za pomocą słów

kluczowych (lub ich kombinacji):

char

typ znakowy

int

typ całkowity

long

typ tzw.

długich

liczb całkowitych

signed

liczby ze znakiem

short

typ tzw.

krótkich

liczb całkowitych

unsigned

liczby bez znaku

background image

4

Wymienione słowa kluczowe łączy się dla oznaczenia różnych

kombinacji cech zmiennych.

Przykłady:
char a

;

signed char a

;

- zmienna znakowa a reprezentuje liczbę ze

znakiem plus lub minus

short k, m, n

;

short int k, m, n

;

short signed k, m, n

;

short signed int k, m, n

;

- zmienne k, m, n są liczbami

całkowitymi

krótkimi

ze znakiem

unsigned short q, ilosc

;

unsigned short int q, ilosc

; - zmienne q, ilosc są liczbami

całkowitymi

krótkimi

bez

znaku

int K[20]
signed int K[20]

; - tablica K zawiera liczby całkowite ze

znakiem

background image

5

unsigned _jakosc

;

unsigned int _jakosc

;

- zmienna

_jakosc

jest liczbą

całkowitą bez znaku

long dlugosc, kat

;

long int dlugosc, kat

;

signed long int dlugosc, kat

;

- zmienne

dlugosc,

kat

są liczbami całkowitymi

długimi

ze znakiem

unsigned long szerokosc, x, y;

unsigned long int szerokosc, x, y

;

- zmienne

szerokosc, x, y

są liczbami całkowitymi

długimi

bez znaku

background image

6

Obszar zajmowany w pamięci oraz zakres wartości
zmiennych całkowitych zależą od sprzętu, systemu
operacyjnego, kompilatora, wreszcie typu wartości.

Przykładowo – w systemie programowania Borland C++

unsigned char

8 bitów

0

255

signed char

8 bitów

-128

127

unsigned int

16 bitów

0

65535

short signed int

16 bitów -32768

32767

signed int

16 bitów -32768

32767

long unsigned int

32 bity 0

4.294.967.295

long signed int

32 bity -2.147.483. 648

2.147.483.647

background image

7

Inicjowanie

zmiennych polega na przypisaniu im początkowej

wartości.

Kompilator podczas tłumaczenia programu źródłowego nadaje
zmiennym wartości nieokreślone (przypadkowe). Sytuacja ta często
prowadzi do trudnych do wykrycia błędów wykonania. Zapobiec
temu może

inicjowanie zmiennych

przed ich pierwszym użyciem.

W języku C++ można tego dokonać wraz z

deklaracją

zmiennej.

Ma ona następującą postać ogólną:

typ-całkowity identyfikator [=stała-odpowiedniego-typu]

(2.1)

Uwaga ! Dalej w wyrażeniach przedstawiających postać ogólną
składni będziemy używać "metasymbolu" [ ] dla oznaczenia części
zdania, która może, ale nie musi wystąpić. Metasymbol { } będzie
oznaczać część definicji, która może wystąpić wiele razy.

background image

8

Przykłady deklaracji i inicjacji zmiennych znakowych:

char litera_A=65;

wartość dziesiętna kodu znaku A

char bubel=‘B’;

znak B

char Nowa_Linia=‘\n’;

znak sterujący - przejście do

następnej linii

char odstep16=‘\x20’;

znak o kodzie szesnastkowym 20 -

odstęp (spacja)

char odstep10=‘\32’;

znak o kodzie dziesiętnym 32 –

spacja

Zmiennym typu znakowego (char) nadaje się wartości (również

początkowe) podając wartość dziesiętną kodu znaku lub znak ujęty w
apostrofy.

Znaki sterujące

oraz znaki wykorzystywane przez język

C/C++ są kodowane w postaci \litera-lub-znak. Można również podać
wartość szesnastkową lub ósemkową kodu ASCII znaku.

background image

9

Znaki sterujące w C++

Sekwencja

Wartość

hex

Nazwa

znaku

Funkcja

\a

07

BEL

sygnał dźwiękowy

\b

08

BS

cofnięcie kursora i usunięcie znaku

\f

0C

FF

wysunięcie strony (ang. Form Feed)

\n

0A

LF

przesunięcie o 1 wiersz w dół (ang. Line
Feed
)

\r

0D

CR

przesunięcie kursora na poczatek linii (ang.
Carriage Return
)

\t

09

HT

tabulator poziomy

\v

0B

VT

tabulator pionowy

\\

5C

lewy ukośnik

\'

27

apostrof

\"

22

cudzysłów

\?

3F

znak zapytania

background image

10

Aby zainicjować zmienne typów int i long int należy

po znaku równości podać

liczbową stałą całkowitą

.

Może nią być:
· stała dziesiętna,
· stała ósemkowa (rozpoczynająca się od cyfry 0),
· stała szesnastkowa (rozpoczynająca się znakami 0x).

W podanym dalej przykładzie programu występują

deklaracje zmiennych całkowitych, ich inicjacje oraz
wywołania funkcji wyprowadzania do standardowego
urządzenia wyjściowego - monitora

.

background image

11

/* Przyklad programu, w ktorym wystepuja inicjacje zmiennych

calkowitych i wyswietlanie ich wartosci */

#include <conio.h>

//Wiersze nr 3 i 4

#include <stdio.h>
int main
(void)

// 5

{

char xA=65, mY='y';

// 7

unsigned int x=12101, y=0121, z=0xfa;

// 8

short signed int q=-23409, r=11206;

// 9

unsigned long dluga=234UL;

// 10

signed long int po_co=-567L;

// 11

clrscr();

// 12

printf("\n Liczby: \n wartosc xA = %c \n wartosc mY = %c",

xA, mY);

// 13 i 14

printf("\n wartosc x = %u \n wartosc y = %o \n wartosc z = %x",

x, y, z);

// 15 i 16

printf("\n wartosc q = %d \n wartosc r = %d", q, r);

// 17

printf("\n wartosc dluga = %lu \n po_co = %ld", dluga, po_co);

// 18

getch();

// 19

clrscr();
return 0;

// 21

}

background image

12

Pierwsze 2 wiersze tekstu stanowią komentarz (łańcuch znaków pomiędzy /* i */ ).
Wiersze 3 i 4 - dyrektywy

include

preprocesora (poprzedza je znak #); polecają one

dołączyć w tym miejscu do tekstu programu pliki nagłówkowe

conio.h

oraz

stdio.h

. W

plikach tych znajdują

się

definicje

stałych

i symboli oraz

prototypy funkcji

odpowiedzialnych za obsługę konsoli (plik

conio.h

) oraz standardowego wejścia-wyjścia

(plik

stdio.h

). Znaki

< >

ograniczające nazwy tych plików oznaczają, że kompilator

powinien szukać tych zbiorów w specjalnym katalogu o nazwie INCLUDE stanowiącym
podkatalog katalogu, gdzie zlokalizowane są wszystkie elementy języka C/C++.
Ograniczniki

" "

nazw plików nagłówkowych polecają kompilatorowi szukać tych zbiorów

w bieżącej kartotece (tzw. katalogu roboczym).
Wiersz 5 zawiera deklarację (nagłówek) funkcji głównej

main

.

W wierszu 7 znajdują się deklaracje i inicjacje zmiennych całkowitych typu

char

.

Zmienną

xA

zainicjowano wartością dziesiętną kodu dużej litery A (wartość 65), a zmienną

mY

- znakiem y (wewnątrz maszyny jest on przechowywany jako liczba o wartości

dziesiętnej 121).
W wierszu 8 zadeklarowano i nadano wartości początkowe zmiennym

x

,

y

,

z

typu

całkowitego bez znaku; zmiennej x nadano wartość dziesiętna 12101, zmiennej

y

- wartość

81 zapisaną w postaci ósemkowej jako 0121; zmienna

z

będzie mieć wartość

odpowiadającą liczbie dziesiętnej 250; w wyrażeniu inicjującym wartość tą zapisano w
postaci szesnastkowej jako 0xfa.

background image

13

Wiersz 9 - deklaracja i inicjacja zmiennych

q

oraz

r

typu całkowitego krótkiego ze

znakiem. Nadano im wartości początkowe właściwe dla ich typów.

W wierszu 10 znajduje się deklaracja i inicjator zmiennej całkowitej długiej bez znaku

dluga

- nadano jej wartość początkową 234. Litery UL sygnalizują kompilatorowi, że

powinien on zapisać tą daną w pamięci w postaci właściwej dla typu

unsigned long

.

Zapobiega to ewentualnej zmianie sposobu zapisu w czasie wykonywania programu

.

W wierszu 11 zadeklarowano i zainicjowano zmienną całkowitą

po_co

typu

signed long

int

.

W wierszu 12 znajduje się

wywołanie funkcji standardowej clrscr()

; jej

prototyp

znajduje się w pliku nagłówkowym

conio.h

, a jej zadaniem jest oczyszczenie ekranu

monitora ze zbędnych napisów (pochodzacych np.

z poprzednio wykonywanego

programu) i ustawienie kursora w lewym górnym rogu.

Wiersze 13 - 18 zawierają wywołania funkcji standardowej

printf

odpowiedzialnej za

obsługę wyjścia z programu.

Funkcja

printf

obsługuje tzw.

wyjście formatowane

. Jest to funkcja o zmiennej liczbie

argumentów. Pierwszym jej argumentem musi być

łańcuch znaków

zawierający znaki

wyświetlane na ekranie oraz tzw.

kody formatujące

, które określają sposób

przedstawiania

danych

(sposób

tłumaczenia

wyświetlanych

danych

z

zapisu

wewnętrznego, zero-jedynkowego, na postać czytelną dla człowieka). Kolejne argumenty
tej funkcji to nazwy zmiennych wyprowadzanych.

background image

14

Wywołanie funkcji

printf

w wierszu 13 i 14 spowoduje wyświetlenie napisu

Liczby:.

W

następnym wierszu pojawią się nazwy zmiennych

xA

oraz

mY

i ich wartości (znaki A

oraz y). Kody formatujące są zastępowane wartościami zmiennych użytych jako
kolejne argumenty funkcji. Kod formatujący

%c

jest właściwy dla danych typu

char

.

Kod

%u

oznacza konwersję na postać zewnętrzną liczby całkowitej bez znaku.

Kod

%o

jest właściwy dla wartości w postaci ósemkowej, a kod

%x

odpowiada

zmiennym o wartościach w postaci szesnastkowej (wiersz numer 15).

Ciąg znaków

%d

wykonuje konwersję na postać zewnętrzną liczb dziesiętnych (w tym

przypadku chodzi o liczby całkowite krótkie ze znakiem).

Wiersz 18 wyświetla wartości zmiennych

dluga

oraz

po_co

; na ekranie będą

poprzedzone napisami odpowiednio

wartosc dluga =

oraz

po_co =

. Kod

formatujący

%lu

odpowiada konwersji liczby całkowitej długiej bez znaku, a łańcuch

%ld

oznacza polecenie konwersji liczby całkowitej ze znakiem

W wierszu 19 wywołano funkcję

getch

, która "czeka" na wpisanie do bufora klawiatury

dowolnego znaku, a następnie odczytuje i zwraca wartość jego kodu. Efektem jest
"zatrzymanie" działania komputera do momentu naciśnięcia dowolnego klawisza. W ten
sposób możemy odczytać z ekranu wyniki działania programu.

Instrukcja

return 0

kończy działanie programu i powoduje powrót do systemu

operacyjnego z kodem błędu o wartości 0.

Prototyp

funkcji

printf

znajduje się w pliku nagłówkowym

stdio.h

.

background image

15

Typy rzeczywiste są nieciągłymi podzbiorami zbioru liczb rzeczywistych. Ich rodzaje i
zakresy wartości są następujące

:

Typ/słowo kluczowe

Rozmiar w

bitach

Zakres od

Zakres do

float

32

3,4*10

-

-38

3,4*10

38

double

64

1,7*10

-308

1,7*10

308

long double

80

3,4*10

-4932

1,1*10

4932

Kilka przykładów deklaracji i inicjacji zmiennych rzeczywistych:

float blad = -12.3e-2;

zmienna blad ma wartość początkową
0,123

double x, y = 18., z = .11e11;

x

- nieokreślona, y - wartość 18, z -

wartość 0,11*10

11

long double r_dluga = -0.304e-607L;

r_dluga

- wartość -0,304*10

-607

typu

long double

float xc = 16.099e+32F;

xc

- wartość 16,099*10

32

background image

16

Wartości zmiennych rzeczywistych są standardowo przechowywane w

postaci właściwej dla typu

double

- podobnie jak w przypadku liczb

całkowitych, litery

F

,

f

,

L

,

l

umieszczane po liczbie w miejscu jej inicjacji

zapobiegają wykonywaniu konwersji.

W języku C/C++ można deklarować i używać zmienne, które zamiast

właściwej danej zawierają adres obszaru pamięci, najczęściej miejsca
przechowywania właściwej danej. Obszar ten może być interpretowany jako
zmienna określonego typu. Zmienna zawierająca adres innej zmiennej nosi
nazwę

zmiennej wskaźnikowej

lub krócej

wskaźnika

.

Zmienna, której adres zapisany jest w zmiennej wskaźnikowej to

zmienna

wskazywana

.

Wskaźniki w języku C++ są wygodnym i często używanym mechanizmem;

umożliwiają:
tworzenie i przetwarzanie tzw.

dynamicznych struktur danych

,

zarządzanie blokami pamięci, łańcuchami znaków i tablicami,
przekazywanie parametrów do i z funkcji.

background image

17

/* Przyklad uzycia i dzialania zmiennych wskaznikowych */

#include <stdio.h>
#include <conio.h>
int main
(void)
{

char znak = 'y', *w_znak = &znak;

// w_znak - wskaznik, adres zmiennej znak

int numer = 113, *w_numer = &numer;

// w_numer - adres zmiennej numer

double rzecz = 13.077e21, *w_rzecz = &rzecz;

// w_rzecz - adres zmiennej rzecz

clrscr();
printf
("\n Wartosci zmiennych wskazywanych: \n %c, %d, %f",

znak, numer, rzecz);

*w_znak = 'A';
*w_numer = 251;
*w_rzecz = -11.11e2;

printf("\nNowe wartosci zmiennych wskazywanych:\n %c, %d, %f",

znak, numer, rzecz);

getch();
clrscr
();
return 0;

}

background image

18

Wynik działania programu:

Wartosci pierwotne zmiennych wskazywanych:

y, 113, 13077000000000000800000.000000
Nowe wartosci zmiennych wskazywanych:
A, 251, -1111.000000


Wyszukiwarka

Podobne podstrony:
podstawy programowania java id Nieznany
Podstawy programu FDS id 368033 Nieznany
podstawa programowa Wf id 36613 Nieznany
Materialy dla studentow W2 id 2 Nieznany
podstawy zarzadzania wyklady id Nieznany
3 Podstawy obl inzynierskich id Nieznany (2)
Nowy folder Przyklady do w2 id Nieznany
narodowy program zdrowia 2 id 3 Nieznany
cw 2 programowanie procesu id 1 Nieznany
Podstawowe czlony dynamiczne id Nieznany
Program socjoterapeutyczny id 3 Nieznany
programowanie niskopoziomowe id Nieznany
Podstawy Programowania 03 Zlozo Nieznany
MOO programowanie kwadratowe id Nieznany
podstawy makroekonomii 14str id Nieznany
Podstawy pielegniarstwa cz3 id Nieznany

więcej podobnych podstron