Download as pdf or txt
Download as pdf or txt
You are on page 1of 20

Informatyka

Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

Wykªad 2
Typy danych
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

Co ju» omówili±my

• Podstawowe elementy j¦zyka C


• Komentarze: /* */ - wiele linii, // - pojedyncza linia
• #include <> lub " " - dodawanie plików nagªówkowych
• Funkcje
• ±rednik ;
• nawiasy (), {}
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

Program
1 /* Opis programu */
2 # include < stdio .h > // Komendy preprocesora rozpoczynaja sie z \#
zauwaz brak srednika ";"
3
4 void fun2 () ; // deklaracja prototypu funkcji fun2
5
6 void fun1 () // definicja funkcji fun1
7 {
8 printf (" Witam 1!\ n ")
9 }
10
11 int main () // Funkcja glowna ( musi byc )
12 {
13 fun1 () ;
14 printf (" Witam z funkcji glownej !\ n "); // \n powoduje przejscie do
nastepnej linii
15 fun2 () ;
16 return 0;
17 }
18
19 void fun2 () // definition of fun2
20 {
21 printf (" Witam 2!\ n ")
22 }
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY


Typ danych
Wszystko dzieje si¦ w pami¦ci komputera

Nasz program przetwarza dane, wszystko co robi lub u»ywa


przechowywane jest w pami¦ci komputera. Podstawowe typy danych
pozwalaj¡ na deklaracj¦ zmiennych oraz przydzielenie niezb¦dnych
±rodków (przestrzeni w pami¦ci).

Plan na dzi±:
• Proste typy danych z przykªadami.
• Operacje arytmetyczne.
• Operatory (nadrz¦dno±¢).
• Zabawa ze znakami.
• Wy±wietlanie warto±ci zmiennych z u»yciem printf()
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

Wybrane typy danych w j¦zyku C

• U»ywane do deklaracji zmiennych lub denicji funkcji.


• Okre±lenie rozmiaru zajmowanego przez zmienne w pami¦ci
komputera.
• Potrzebne deskryptory typu do wy±wietlania z u»yciem printf().
• Ograniczamy zainteresowania do liczb caªkowitych, rzeczywistych,
znaków, warto±ci logicznych (boolean) oraz ... typu void
• Rozmiar zdeniowany dla danego typu danych mo»e by¢ ró»ny w
zale»no±ci od implementacji (32bit vs 64bit), nale»y u»y¢ sizeof()
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY


Liczby caªkowite
int, unsigned int, long int, long long int, unsigned long long int

• 4 6 842 -6 2 1024 - liczby caªkowite


• 4.8 3.141592 1.- liczby niecaªkowite - uwaga na kropk¦
• sªowo kluczowe int
• 2 lub 4 Bajty (B)
• −2, 147, 483, 648 − 2, 147, 483, 647
• Deskryptory typu potrzebne dla printf():
• %d %i - signed integer (%li %ld dla long)
• %o - Octal integer.
• %x %X - Hex integer.
• %u - unsigned integer.
• 012 w reprezentacji oktalnej
• 0x10 w reprezentacji hexadecymalnej (szesnastkowej)
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

int

1 # include < stdio .h >


2
3 int main ()
4 {
5 printf (" Storage size for int : % ld B \ n" , sizeof ( int ) );
6 int a =032;
7 int b =0 x23 ;
8 int c =23;
9 int d = -1;
10 printf ("a =%d , b =% d , c =%d , d =% d \n" , a, b, c, d);
11 printf ("a =%x , b =% x , c =%x , d =% x \n" , a, b, c, d);
12 printf ("a =%o , b =% o , c =%o , d =% o \n" , a, b, c, d);
13 printf ("a =%u , b =% u , c =%u , d =% u \n" , a, b, c, d);
14 }
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

int arithmetic

1 # include < stdio .h >


• a + b dodawanie
2
3 int main ()
• a - b odejmowanie
4 { • a * b mno»enie
5 int a =5 , b =4;
6 printf ("%d +% d =% d\n " , a , b , a+ b); • a / b dzielenie
7 printf ("%d -% d =% d\n " , a , b , a -b);
8 printf ("%d *% d =% d\n " , a , b , a* b); • a % b reszta z dzielenia
9 printf ("%d /% d =% d\n " , a , b , a/ b);
10 printf ("%d /% d =% d\n " , b , a , b/ a); uwaga 1: Aby wy±wietli¢ % trzeba
11 printf ("%d %%% d =% d\ n" , a , b , a %b) ; u»y¢ %%
12 }
uwaga 2: Wynik ma taki sam typ int
jak argumenty!
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY


Liczby rzeczywiste zmiennoprzecinkowe
oat, double, long double

4.8 3.141592 1.0 0.5 -3.14 2. - liczby rzeczywiste


oat double
• sªowo kluczowe oat • sªowo kluczowe double
• 4B (pojedyncza precyzja!) • 8B (podwójna precyzja!)
• 1.2 · 10−38 do 3.4 · 1038 • 2.3 · 10−308 do 1.7 · 10308
• 6 miejsc po przecinku (kropce) • 15 miejsc po przecinku (kropce)
• Deskryptory typu: • Deskryptory typu:
• %f • %lf

• %e %E - notacja naukowa.
• %g %G - podobnie jak %e lub %E.
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

oat and double

1 # include < stdio .h >


2 # include < math .h > // biblioteka matematyczna
3
4 int main ()
5 {
6 printf (" Rozmiar pamieci do przechowania typu float : % ld B \n " ,
sizeof ( float )) ;
7 printf (" Rozmiar pamieci do przechowania typu double : % ld B \ n" ,
sizeof ( double ) );
8 float a = 4.0 * atan (1.0) ; // liczba PI
9 double b = 4.0 * atan (1.0) ; // liczba PI
10 printf ("a =%f , a =% e , a =%E , a =% g , a =% G\n " , a , a , a , a , a) ;
11 printf ("b =%f , b =% e , b =%E , b =% g , b =% G\n " , b , b , b , b , b) ;
12 a = 6.0221 e4 ;
13 b = 6.0221 e4 ;
14 printf ("a =%f , a =% e , a =%E , a =% g , a =% G\n " , a , a , a , a , a) ;
15 printf ("b =% lf , b =%e , b =%E , b =%g , b =% G\ n" , b , b , b , b , b );
16 }
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

arytmetyka oat i double

1 # include < stdio .h >


2
• a + b dodawanie
3 int main ()
4 {
• a - b odejmowanie
5 double a =5.0 , b =4.0; • a * b mno»enie
6 printf ("% lf +% lf =% lf \n" , a, b, a+b );
7 printf ("%lf -% lf =% lf \n" , a, b, a -b ); • a / b dzielenie
8 printf ("% lf *% lf =% lf \n" , a, b, a*b );
9 printf ("% lf /% lf =% lf \n" , a, b, a/b ); uwaga 1: Wynik jest tego samego
10 printf ("% lf /% lf =% lf \n" , b, a, b/a );
11 } typu oat lub double jak
argumenty!
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY


Znaki
char

• 'a' 'b' 'c' '1' etc.


• lub heksadecymalna reprezentacja w kodzie ASCI, np.: '\x15' '\x9c'
• sªowo kluczowe char
• 1B
• "a" to nie jest 'a' ! "a" to 'a' oraz '\0' - znak null
• Deskryptory typu: %c
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

char

1 # include < stdio .h >


2
3 int main ()
4 {
5 printf (" Rozmiar pamieci dla char : % ld B \ n" , sizeof ( char ));
6 char a = 'a ';
7 printf ("a =% c \ n" , a);
8 printf ("a =% d \ n" , a);
9 a = '\ x15 ';
10 printf ("a =% c \ n" , a);
11 printf ("a =% d \ n" , a);
12 a = " R";
13 printf ("a =% c \ n" , a);
14 printf ("a =% d \ n" , a);
15 a = 'R ';
16 printf ("a =% c \ n" , a);
17 printf ("a =% d \ n" , a);
18 a = '\0 ';
19 printf ("a =% c \ n" , a);
20 printf (" 11 %c 11 % c 11 %c 11 \ n" , '\0 ' , '\ x00 ' , '\ x30 ');
21 printf (" 11 %d 11 % d 11 %d 11 \ n" , '\0 ' , '\ x00 ' , '\ x30 ');
22 }
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY


bool
To be full of bool? To be false or true?

• reprezentuje warto±¢ logiczn¡


• wprowadzone w standardzie C99
• potrzeba #include <stdbool.h>
• true lub false
• sªowo kluczowe bool
• 1B lub tak samo jak int (zale»nie od platformy)
• nie ma deskryptora typu, mo»na u»y¢ %d
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

bool

1 # include < stdio .h >


2 # include < stdbool .h >
3
4 int main ()
5 {
6 printf (" Rozmiar przechowywania dla bool : % ld B \ n" , sizeof ( bool ) )
;
7 bool a = true ;
8 printf ("a =% d\n " , a );
9 a = false ;
10 printf ("a =% d\n " , a );
11
12 // Dla dociekliwych studentow :
13 a = true ;
14 printf ("a =% s \ n" , a ? " true " : " false ");
15 a = false ;
16 printf ("a =% s \ n" , a ? " true " : " false ");
17 }
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

void

Gdy nie ma dost¦pnej warto±ci


• Funkcje, które niczego nie zwracaj¡ (brak return) s¡ typu void
• Funkcje, które akceptuj¡ brak argumentów akceptuj¡ void
• Mo»na stworzy¢ wska¹nik (co to jest wska¹nik?) do void - wskazuje
adres, ale nie okre±la typu zmiennej - wi¦cej pó¹niej ...
• sªowo kluczowe void
• 1B (?) - nie ma rozmiaru it has no size (nie mo»na zadeklarowa¢
zmiennej w postaci void a)
1 # include < stdio .h >
2
3 int main ()
4 {
5 printf (" Rozmiar void : % ld B \ n" , sizeof ( void )); // nie powinno
dzialac , dziala w gcc
6 void a ; // nie mozna
7 printf (" % d \n " , a );
8 }
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

Operacje na zmiennych

Przypisanie warto±ci:
1 int a ,b; // deklaracja dwoch zmiennych typu int
2 a =35; // przypisanie do a wartosci 35
3 b =6; // przypisanie do b wartosci 6

Wyra»enie arytmetyczne:
1 a=a +b; // wykonanie dodawania w przestrzeni tymczasowej oraz
przypisanie wyniku do wartosci a
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

Przypisanie

Kiedy u»ywamy '=' warto±¢ po prawej stronie przypisywana jest do tego


co wyst¦puje po lewej stronie znaku. To niekoniecznie oznacza równo±¢!
W pierwszej kolejno±ci okre±lana jest warto±¢ po prawej stronie a
nast¦pnie warto±¢ ta jest kopiowana do lewej strony. Typ danych po lewej
i prawej powinien by¢ ten sam a mieszania typów nale»y unika¢.
1 double x1 =6.28;
2 int a = 2
3 a = x1 ; // utrata danych skoro a =6!
4 x1 =a;

Istnieje jawny sposób zmiany typu: rzutowanie.


1 double x1 =6.28;
2 int a = 2;
3 a = ( int ) x1 ; // utrata danych , ale brak ostrzezenia
4 x1 =( double ) 2/3; // x1 nie jest zerem
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY


Pierwsze«stwo operatorów
Te które ju» znamy

1 () nawiasy
2 + - unarne plus/minus: (-1)
3 * / % binarne operatory a*b
4 - + binarne operatory a+b
1 -5 * 3 + 4 * 5. / 2.
2 (( -5) *3) +(4*5) /2.
Informatyka
Informatyka II

WARSAW UNIVERSITY OF TECHNOLOGY

Operatory inkrementacji/dekrementacji

Operatory inkrementacji/dekrementacji s¡ operatorami unarnymi, które


zmieniaj¡ warto±¢ zmiennej o 1.
Mog¡ mie¢ form¦ postx lub prex.
1 a ++ // postfix
2 a --
3 ++ a // prefix
4 --a

1 int a = 1;
2 int b = a ++; // zachowuje 1+ a ( czyli 2) do a
3 // zwraca wartosc a ( czyli 1)
4 // Po tej linii b == 1 i a == 2
5 a = 1;
6 int c = ++ a ; // zachowuje 1+ a ( czyli 2) do a
7 // wraca wartosc a ( czyli 2)
8 // Po tej linii c == 2 i a == 2

You might also like