Typy danych i formatowanie Elwira Wachowicz elwira@ifd.uni.wroc.pl 28 marca 2013 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 1 / 16
Sªowa kluczowe typów danych Pierwotne sªowa C int long short unsigned char float double ANSI C signed void const Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 2 / 16
Korzystanie ze znaków: typ char Do przechowywania znaków sªu»y typ char. To typ caªkowity: przechowuje kody ASCII. (Np. liter A reprezentuje kod 65.) Deklarowanie zmiennych typu char: char t; char akter, yzma; Inicjalizacja: char kot; /* deklarujemy zmienn typu char */ kot = 'T' /* OK! */ kot = T /* NIE! Uznaje T za zmienn */ kot = "T" /* NIE! Uznaje T za ªa«cuch */ Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 3 / 16
Sekwencje steruj ce Sekwencja Znaczenie \a Alarm np. d¹wi k. \b Znak cofania: kursor o jeden znak w lewo. \f Wysuni cie strony: kursor na pocz tek nast pnej strony. \n Nowa linia. \r Powrót karetki: kursor na pocz tek tej samej linii. \t Tabulator poziomy. \v Tabulator pionowy \\ Lewy uko±nik \. \' Apostrof '. \ Cudzysªów. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 4 / 16
Wy±wietlanie znaków /* znakkod.c -- wy±wietla znak i odpowiadaj cy mu kod */ #include <stdio.h> int main(void) { char ch; } printf("wpisz jaki± znak.\n"); scanf("%c", &ch); /* u»ytkownik podaje znak */ printf("kod znaku %c to to %d.\n", ch, ch); return 0 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 5 / 16
Liczby zmiennoprzecinkowe Liczba Notacja naukowa Notacja wykªadnicza 1000000000 = 1.0 10 9 = 10e9 123000 = 1.23 10 5 = 1.23e5 322.56 = 3.2256 10 2 = 3.2256e2 0.000056 = 5.6 10 5 = 5.6e 5 Wedªug ANSI C: Zmienna typu float: co najmniej 6 cyfr znacz cych i zakres co najmniej od 10 37 do 10 +37. Zmienna typu double: co najmniej 10 cyfr znacz cych i ten sam zakres co float. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 6 / 16
Deklarowanie zmiennych zmiennoprzecinkowych i ten sam zakres co float float pawel, gawel; double trouble; float planck = 6.63e-34; Staªe zmiennoprzecinkowe: -1.56E+12 2.87e-3 3.14159.2 4e16.8E-5 100. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 7 / 16
Wy±wietlanie warto±ci zmiennoprzecinkowych /* pokaz_fl.c -- wyswietla warto± typu float na dwa sposoby */ #include <stdio.h> int main(void) { float wartosc = 32000.0; } printf("%f mo»na tak»e zapisa %e\n", wartosc, wartosc); return 0; Wynik dziaªania programu: 32000.0 mo»na tak»e zapisa 3.200000e+004 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 8 / 16
Ša«cuchy znakowe i formatowanie wej±cie/wyj±cie /* rozmowa.c -- wscibski, ale i pouczaj cy program */ #include <stdio.h> #include <string.h> /* potrzebne do prototypu strlen() */ #define GESTOSC 998.5 /* g sto± czªowieka w kg/m3 */ int main(void) { float waga, objetosc; int rozmiar, litery; char imie[40]; /* imi jest tablic 40 znaków */ } printf("cze±, jak masz na imi? \n"); scanf("%s", imie) printf("%s, ile wynosi Twoja waga w kilogramach? \n", imie); scanf("%f", &waga); rozmiar = sizeof imie; litery = strlen(imie); objetosc = waga / GESTOSC; printf("a wi c, %s, Twoja obj to± to %4.4f m^3.\n", imie, objetosc); printf("poza tym, Twoje imi skªada si z %d liter.\n", litery); printf("i mam %d bajtów, aby je przechowa.\n", rozmiar); return 0; Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 9 / 16
Ša«cuchy znakowe i tablice Ša«cuch znakowy: ci g skªadaj cy si z jednego lub wi cej znaków. Przykªad: "Czuªem si jak pies na ªa«cuchu." Znak zerowy: znak o kodzie ASCII równym 0, oznacza koniec ªa«cucha. Tablica: uporz dkowany ci g danych jednego typu. char imie[40]; Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 10 / 16
Korzystanie z ªa«cuchów /* chwal_1.c -- wykorzystuje ªa«cuchy */ #include <stdio.h> #define POCHWALA "Ach, jakie wspaniaªe imi!" int main(void) { char imie[40]; } printf("jak masz na imi?\n"); scanf("%s", imie); printf("witaj, %s, %s\n", imie, POCHWALA); return 0; Przebieg dziaªania: Jak masz na imi? Janek Scalak Witaj, Janek. Ach, jakie wspaniaªe imi! Uwaga: scanf() dziaªa, dopóki nie napotka znaku niedrukowanego typu spacja, tabulator lub znak nowej linii. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 11 / 16
Funkcja strlen() /* chwal_2.c -- wykorzystuje ªa«cuchy */ #include <stdio.h> #include <string.h> /* potrzebne do prototypu strlen() */ #define POCHWALA "Ach, jakie wspaniaªe imi!" int main(void) { char imie[40]; } printf("jak masz na imi?\n"); scanf("%s", imie); printf("witaj, %s, %s\n", imie, POCHWALA); printf("twoje imi skªadaj ce si z %d liter, zajmuje %d komórek pami ci.\n", strlen(imie), sizeof imie); printf("pochwaªa skªada si z %d liter ", strlen(pochwala)); printf("i zajmuje %d komórek pami ci.\n", sizeof POCHWALA); return 0; Przebieg dziaªania: Jak masz na imi? Elwira Witaj, Elwira, Ach, jakie wspaniaªe imi! Twoje imi skªadaj ce si z 6 liter, zajmuje 40 komórek pami ci. Pochwaªa skªada si z 28 liter i zajmuje 29 komórek pami ci. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 12 / 16
Staªe Staªe symboliczne: W wyra»eniach wygodniej korzysta z nazwy ni» liczb (np.: pi zamiast 3.14159). Šatwiej zmieni warto± staªej w jednym miejscu w programie. Gdy zdeniowana w nagªówku, w czasie kompilacji jest podstawiana warto±. #define NAZWA wartosc Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 13 / 16
Staªe standardowe Pliki nagªówkowe limits.h i float.h zawieraj denicje zakresów liczb typów caªkowitych i zmiennoprzecinkowych. printf("maksymalna warto± typu int w tym systemie = %d", INT_MAX); Staªa Znaczenie CHAR_BIT Rozmiar typu char w bitach SHRT_MAX Maksymalna warto± typu short SHRT_MIN Minimalna warto± typu short USHRT_MAX Maksymalna warto± typu unsigned short INT_MAX Maksymalna warto± typu int INT_MIN Minimalna warto± typu int UINT_MAX Maksymalna warto± typu unsigned int LONG_MAX Maksymalna warto± typu long ULONG_MAX Maksymalna warto± typu unsigned long FLT_MANT_DIG Rozmiar mantysy typu float FLT_DIG Minimalna liczba dziei tnych cyfr znacz cych dla typu float FLT_MIN_10_EXP Minimalny ujemny wykªadnik typu float (podstaw jest 10) FLT_MAX Maksymalna dodatnia warto± typu float FLT_EPSILON Ró»nica mi dzy 1.00 a najmniejsz warto±ci typu float wi ksz od 1.00 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 14 / 16
Funkcja printf() Ogólna posta instrukcji printf(): printf(ªa«cuch-steruj cy, element1, element2,...) Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 15 / 16
Ša«cuch steruj cy Specykator Dane wyj±ciowe %c Pojedynczy znak %d Dziesi tna liczba caªkowita ze znakiem %e Liczba zmiennoprzecinkowa w notacji z liter e %E Liczba zmiennoprzecinkowa w notacji z liter E %f Liczba zmiennoprzecinkowa w zapisie dziesi tnym %g Równowa»ny %e, gdy wykªadnik mniejszy ni» 4 lub wi kszy/równy dokªadno±ci, inaczej %f %E Jak wy»ej, tyle»e z E %o Ósemkowa liczba caªkowita bez znaku %p wska¹nik %s Ša«cuch znakowy %u Dziesi tna liczba caªkowita bez znaku %x Szesnastkowa liczba caªkowita, cyfry szesnastkowe maª liter (0f) %X Szesnastkowa liczba caªkowita, cyfry szesnastkowe du» liter (0F) %% Wy±wietla znak procentu Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Typy danych i formatowanie 28 marca 2013 16 / 16