Wst p do C i typy danych Elwira Wachowicz elwira@ifd.uni.wroc.pl 21 marca 2013 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 1 / 25
Typowy program w C Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 2 / 25
Prosty przykªad #include <stdio.h> int main(void) /* prosty program */ { int num; /* definiujemy zmienna o nazwie num */ num = 1; /* przypisujemy jej wartosc */ } printf("jestem prostym "); /* korzystamy z funkcji printf() */ printf("komputerem.\n"); printf("moja ulubiona liczba to %d, bo jest pierwsza.\n",num); return 0; Po wykonaniu dostaniemy: Jestem prostym komputerem. Moja ulubiona liczba to 1, bo jest pierwsza. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 3 / 25
Elementy programu Dyrektywy #include i pliki nagªówkowe Wª czaj pliki nagªówkowe (ang. include les) zawieraj ce informacje o funkcjach umieszczonych w dodatkowych bibliotekach. Funkcja main() Program w C zawsze zaczyna dziaªanie od funkcji main() zawsze musi istnie taka funkcja. Zwraca do systemu operacyjnego liczby caªkowite (int) i nie posiada»adnych argumentów (void). Komentarze Maj na celu uªatwienie zrozumienia programu. Mo»na dodawa w dowolnym miejscu. \* Ten komentarz mie±ci si w dwóch linijkach *\ Klamry: {... } Oznaczaj pocz tek i koniec funkcji. Wydzielaj bloki instrukcji w ramach jednej funkcji. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 4 / 25
Deklaracje zmiennych Instrukcje deklaracji nale» do najwa»niejszych elementów C. Odpowiadaj za rezerwacj obszaru w pami ci dla zmiennej w zale»no±ci od jej typu. Znak ±rednika jest cz ±ci instrukcji. W C wszystkie zmienne musz zosta zadeklarowane, zanim zostan u»yte. Nazwy zmiennych powinny by znacz ce. Mog zawiera : wielkie i maªe litery, cyfry oraz _. Maksymalna dªugo± nazwy zmiennej zale»y od kompilatora (ANSI C: 31 znaków). Nazwy prawidªowe samuraj cat1 Super_Extra _kcab Nazwy nieprawidªowe $Z]** 1cat Super-Extra don't Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 5 / 25
Powody deklarowania zmiennych Umieszczenie wszystkich zmiennych w jednym miejscu uªatwia zrozumienie sensu programu. Komentarze! Skªania do planowania, przed wpisywaniem programu. Jakie potrzebne informacje na wej±ciu? Co zwraca na wyj±ciu? Jaki sposób reprezentacji najlepszy? Pozwala unikn literówek we wpisywaniu nazw zmiennych. PROMIEN1 = 20.4; OBWOD = 6.28 * PROMIENl; Program w C nie skompiluje si, je±li wszystkie zmienne nie zostan zadeklarowane. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 6 / 25
Elementy programu c.d. Przypisanie Przypisanie zmiennej o danej nazwie jakiej± warto±ci. Mo»na t warto± zmienia wielokrotnie. Funkcja printf() Tekst w nawiasie przekazany z funkcji printf() do funkcji main(). Mo»e zawiera znaki steruj ce: \n przej±cie do nowej linii lub \t tabulator. Sekwencja %d: w którym miejscu i jak maj by wy±wietlane zmienne. Instrukcja zwrotu return Funkcja main() ma zwróci po wykonaniu si liczb caªkowit. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 7 / 25
Jaki powinien by program w C czytelny ªatwy do testowania i usuwania bª dów poprawny i niezawodny ªatwy do modykowania i rozszerzania przeno±ny defensywny spójny stylistycznie efektywny uniwersalny Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 8 / 25
Jak uczyni program czytelnym? Wybór znacz cych nazw zmiennych. Komentarze. Puste wiersze oddzielaj ce cz ±ci funkcji stanowi cych logiczn caªo±. Jedna instrukcja w jednej linijce kodu. int main( void ) { int cztery; cztery = 4 ; printf( "%d\n", cztery); return 0;} Wci cia instrukcji nale» cych do tej samej funkcji. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 9 / 25
Po polsku czy po angielsku? Konsekwentnie: albo po polsku albo po angielsku. Unika jednoczesnego u»ywania np. zmiennych Licznik i Counter, funkcji GetData i WczytajPlik czy nawet ReadPlik Mo»na przyj zasad, jak wybraª tªumacz ksi»ki Kernighanana i Ritchiego: zmienne po angielsku, komentarze po polsku. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 10 / 25
Nagªówki komentarzowe funkcji nazwa funkcji krótki opis operacji realizowanych przez funkcj lista argumentów funkcji i ich opis lista zmiennych zewn trznych, z których korzysta funkcja lista zmiennych zewn trznych modykowanych przez funkcj opis warto±ci zwracanej (ewentualnie informacje o bª dach wykonywania) Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 11 / 25
Nagªówki komentarzowe funkcji \*------------------------------------------- SearchInString FUNKCJA ZNAJDUJE Z CI GU LICZB WYST PIE CI GÓW SPEŠNIAJ CYCH WZÓR WYSZUKIWANIA ARGUMENTY: Text - ADRES CI GU PRZESZUKIWANEGO Image - ADRES WZORU WYSZUKIWANIA (DOPUSZCZA ZNAKI * I?) Status - PARAMETR PRZESZUKIWANIA - W_PRZOD, W_TYL - LITERY_WIELKIE, LITERY_MALE - CALE_WYRAZY (ZDEFINIOWANE W SEARCH.H) WARTO ZWRACANA: LICZBA ZNALEZIONYCH WYST PIE -------------------------------------------*/ int SearchInString (const char *Text, const char *Image, int Status) {... } Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 12 / 25
Komentarz nie powinien powtarza tego co opisano w kodzie: Counter++; /* ZWI KSZENIE ZMIENNEJ Counter o 1 */ Lepiej: Counter++; /* UAKTUALNIENIE LICZBY ZLICZANYCH DOKUMENTÓW */ Przy zªo»onych instrukcjach dobrze komentowa nawiasy klamrowe: while ( GetEmployee()!= 0 ) {... if ( EmployeeNumber!= 0 ) {... } /* if ( EmployeeNumber!= 0 ) */... } /* while ( GetEmployee()!= 0 ) */ Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 13 / 25
Nazywanie zmiennych i funkcji Nazwy zmiennych i funkcji powinny odzwierciedla ich sens nazwy o pokrywaj cym si zasi gu powinny ró»ni si w istotny sposób, np.: Source i Dist zamiast String1 i String2 nazwy nie powinny wygl da podobnie LastWord i LostWord counter i Counter WordCounter i Word_counter Index i Indeks Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 14 / 25
Wci cia nie wcina si deklaracji i denicji zewn trznych wcina si tre± funkcji i zagnie»d»enia bloków (for, if, do, while, switch) najlepiej dla wci przyj pozycj 2, 4 lub 8 while (Expr) while (Expr) while (Expr) { { { x = y; x = y; x = y;......... } } } Koniec bloków za gª boko......... } } }}} } } } } Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 15 / 25
Jak uczyni program czytelnym przykªad /* st_cale.c -- zmienia stopy na cale */ #include <stdio.h> int main(void) { int stopy, cale; } stopy = 2; cale = 12 * stopy; printf("%d stopy równaj si %d calom.\n", stopy, cale); return 0; Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 16 / 25
Wiele funkcji /* dwie_fun.c -- program wykorzystuje dwie funkcje w jednym pliku */ #include <stdio.h> void lokaj(void); /* Prototyp funkcji wedªug ANSi C */ int main(void) { printf("zawezw funkcj lokaja.\n"); lokaj(); printf("tak. Przynie± mi herbat i i zapisywalne CD-ROM-y.\n"); return 0; } void lokaj(void) /* pocz tek deklaracji funkcji */ { printf("pan wzywaª?\n"); } Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 17 / 25
Usuwanie bª dów Bª dy skªadniowe: nieprzestrzeganie zasad j zyka C. Analogiczne do bª du gramatycznego prawidªowe symbole w nieprawidªowym miejscu. Usuwanie: Nale»y uwa»nie przejrze kod ¹ródªowy. Zbada bª dy znalezione przez kompilator. Bª dy semantyczne: bª dy w znaczeniu, przy poprawnej skªadni. Kompilator nie potra wykry bª dów semantycznych. Znajdowanie: ledzenie dziaªania programu. Umieszczanie w programie dodatkowych instrukcji printf(), pozwalaj cych ±ledzi warto±ci wybranych zmiennych w kluczowych miejscach. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 18 / 25
Usuwanie bª dów przykªad /* niedobry.c -- program z bª dami */ #include <stdio.h> int main(void) ( int n, int n2, int n3; /* ten program zawiera kilka bª dów n = 5; n2 = n * n; n3 = n2 * n2; printf("n = %d, n do kwadratu = %d, n do sze±cianu = %d\n", n, n2, n3) return 0; ) Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 19 / 25
/* zloto.c -- warto± Twojego ci»aru w zªocie */ #include <stdio.h> int main(void) { float ciezar; /* ci»ar u»ytkownika */ float wartosc; /* warto± u»yrkownika w zªocie */ printf("czy jeste± wart tyle, co Twój ci»ar w zªocie?\n"); printf("sprawd¹my.\n"); printf("podaj swój ci»ar w kilogramach: "); /* pobranie danych od u»ytkownika */ scanf("%f", &ciezar); /* zakªadamy,»e cena zªota wynosi 4233 zª/uncj */ /* 32.151 to przelicznik kilograma na uncj troy */ wartosc = 4233.0 * ciezar * 32.151; } printf("twój ci»ar w zªocie jest wart %.2f zª.\n", wartosc); printf("z pewno±ci jeste± tyle wart/-a! W razie spadku cen zªota\n"); printf("jedz wi cej, aby utrzyma swoj warto±.\n); return 0; Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 20 / 25
Sªowa kluczowe typów danych Pierwotne sªowa C int long short unsigned char float double ANSI C signed void const volatile Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 21 / 25
Typy caªkowite a zmiennoprzecinkowe Liczba caªkowita nie posiada cz ±ci uªamkowej w przeciwie«stwie do zmiennoprzecinkowej. Liczby zmiennoprzecinkowe mog reprezentowa wi kszy zakres ni» liczby caªkowite. Przy niektórych dziaªaniach arytmetycznych na du»ych liczbach mo»liwa utrata dokªadno±ci. Liczby zmiennoprzecinkowe nie mog reprezentowa wszystkich liczb rzeczywistych przybli»enie. Dziaªania na liczbach zmiennoprzecinkowych pochªania zwykle wi cej czasu. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 22 / 25
Typ int Typ int jest liczb caªkowit ze znakiem (ang. signed integer ). Zakres zale»y od systemu, minimalny: 32768 do +32767. Deklaracja i inicjalizacja zmiennej int eligent; int lwy = 21; int tygrysy = 32, lamparty = 14; int konie, krowy = 84; /* poprawne, ale kiepski styl */ Inne typy caªkowite Typ short int lub short mo»e (lecz nie musi) zajmowa mniej pami ci ni» int. Pozwala zaoszcz dzi pami. Posiada znak. Typ long int lub long mo»e zajmowa wi cej pami ci ni» int wi ksze liczby caªkowite. Posiada znak. Typ unsigned int lub unsigned sªu»y do deklaracji zmiennych, które przyjmuj tylko warto±ci nieujemne. Przesuwa zakres liczb, np. dla dubajtowych na: 0 do 65535. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 23 / 25
Wy±wietlanie warto±ci typu int /* print1.c -- przedstawia niektóre wªa±ciwo±ci funkcji printf() */ #include <stdio.h> int main(void) { int dziesiec = 10; printf("wªa±ciwy sposób: "); printf("%d minus %d równa si %d\n", dziesiec, 2, dziesiec - 2); printf("bª dny sposób: "); printf("%d minus %d równa si %d\n", dziesiec); // brakuje dwóch argumentów return 0; } Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 24 / 25
Przepeªnienie zmiennych caªkowitych /* zaduzo.c -- przekracza maksymalny rozmiar int */ #include <stdio.h> int main(void) { int i = 2147483647; unsigned int j = 4294967295; printf("%d %d %d\n", i, i + 1; i + 2); printf("%u %u %u\n", j, j + 1; j + 2); return 0; } Wynik dziaªania tego programu: 2147483647-2147483648 -2147483647 4294967295 0 1 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Wst p do C i typy danych 21 marca 2013 25 / 25