Język C 1. Brian W. Kernighan, Dennis M. Ritchie - prz
Transkrypt
Język C 1. Brian W. Kernighan, Dennis M. Ritchie - prz
Literatura – Język C 1. Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C, WNT, Warszawa 1998. 2. Andrzej Zalewski, Programowanie w językach C i C++ z wykorzystaniem pakietu Borland C++, Nakom, Poznań 1998. 3. Stephen Prata, Język C szkoła programowania, Wydawnictwo Robomatic, Wrocław 1999. 4. A. Drozdek, D. Simon, Struktury danych w języku C, WNT Warszawa 1996. 5. Alfred V. Aho, Jeffrey D. Ullman, Wykłady z informatyki z przykładami w języku C, Helion Gliwice 2003 Język C został stworzony w 1972 roku przez Denisa Ritchie’go. Zalety języka C: 1. elastyczne struktury sterowania 2. strukturalny format 3. zwięzły kod źródłowy – niewielki programów 4. przenośność na inne komputery. rozmiar Wady języka C: 1. elastyczność języka C wymaga większej odpowiedzialności od programisty, 2. konieczność korzystania ze wskaźników pociąga za sobą możliwość trudnych do wytropienia pomyłek, 3. zwięzłość języka C, połączona z bogactwem operatorów, pozwala tworzyć kod źródłowy charakteryzujący się niezwykłym wprost zawikłaniem. Cechy użytkowe języka C: 1. wydajność: • C jest językiem potrafiącym wykorzystać możliwości tkwiące we współczesnych komputerach, • programy w języku C odznaczają się niewielką objętością i dużą szybkością działania, • język C charakteryzuje wysoki stopień precyzji, utożsamianej zwykle z asemblerem, • programy w języku C można tak konstruować, aby osiągnąć albo największą prędkość, albo największą oszczędność pamięci. 2. przenośność: • programy w języku C napisane na jednej platformie systemowej mogą być uruchamiane na innych natychmiast lub po minimalnych modyfikacjach (oprócz fragmentów realizujących bezpośredni dostęp do urządzeń sprzętowych). 3. moc i elastyczność: • większa część systemu operacyjnego UNIX jak również wiele kompilatorów i interpretatorów zostało napisane w języku C. 4.ukierunkowanie na programistę: • język C oferuje dostęp do sprzętu i pozwala na operowanie na poszczególnych bitach pamięci, • udostępnia bogaty wybór operatorów pozwalających wyrażać się w zwięzły sposób, jest mniej rygorystyczny niż PASCAL, • przetwarzanie różnych form zadań wykonuje się w języku C o wiele prościej, • większość implementacji języka C zawiera duży zbiór przydatnych funkcji. Siedem etapów programowania: 1. określenie celów programu: • myślenie w kategoriach ogólnych (nie określonego języka programowania), • jakie dane są potrzebne, • jakie zadanie obliczeniowe, • inne operacje, jakie program musi wykonać, • informacje, jakie musi przedstawić użytkownikowi 2. projektowanie programu: • określenie sposobu reprezentacji danych w programie, • wybranie metod, które zostaną użyte do ich przetwarzania. 3. pisanie kodu: • implementacja projektu programu na kod źródłowy. 4. kompilacja kodu źródłowego na maszynowy: • kompilacja – kompilator przetwarza kod źródłowy na przejściowy (obiektowy), • linkowanie – linker łączy kod przejściowy z kodem startowym, który służy jako interfejs między programem a systemem operacyjnym oraz kodem funkcji bibliotecznych. 5. uruchomienie programu plik wykonywalny jest programem, który można uruchomić pod DOS-em, UNIX-em. 6. testowanie i usuwanie błędów Okazje do popełniania błędów: • niewłaściwie opracowany projekt, • błędnie zaimplementowane dobre pomysły, • przeoczenie nieoczekiwanych danych wejściowych, • nieprawidłowe użycie języka C, • popełnienie błędu w pisowni, • umieszczenie nawiasu w niewłaściwym miejscu. Błędy kompilacji (pisowni) – sygnalizuje kompilator. Błędy wykonania – poszukiwanie przy pomocy debuggera. 7. modyfikacja programu • wykrycie niewielkiego błędu przy intensywnym wykorzystywaniu programu, • lepsza metoda jakiejś czynności, • rozszerzenie o jakąś przydatną funkcję lub przystosowanie do użytku na innym komputerze. /*Program p1.c /*Obliczanie objetosci walca /*Kompilator: Turbo C 2.0 */ */ */ #include <stdio.h> void main() { float promien, wysokosc, objetosc; promien = 3.3; wysokosc =44.4; objetosc = 3.1415926* promien * promien * wysokosc; printf(”Objetosc walca = %f”,objetosc); } Objetosc walca = 1519.010254 /*p2.c*/#include<stdio.h> void main(){float r,h,v;r=3.3;h=44.4;v=3.1415926*r*r*h;printf(”V=%f”,v);} V=1519.010254 Zestaw znaków języka C: • • • • • duże litery alfabetu łacińskiego (od A do Z) małe litery alfabetu łacińskiego (od a do z) cyfry (od 0 do 9) znaki specjalne ! * + \ ” < # ( = | { > % ) ~; } / ^ - [ : , ? & _ ] ‘ . znaki dodatkowe jak @ ,$ uwzględniane w łańcuchach znaków lub w komentarzach • kombinacje znaków, jak np. \b, \n, \t tzw. Escape-sekwencje reprezentuje jeden znak Słowa zastrzeżone (słowa kluczowe, zarezerwowane) – wybrane słowa o szczególnym dla danego języka znaczeniu, nie wolno ich używać jako np. nazw zmiennych. 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 Niektóre kompilatory rozpoznają część, albo i wszystkie, z następujących ”niestandardowych” słów zastrzeżonych: ada far near asm fortran pascal entry huge Podstawowe typy danych: Typy podstawowe: int reprezentuje liczbę całkowitą char reprezentuje pojedynczy znak (np. literę alfabetu) float reprezentuje liczbę rzeczywistą (pojedynczej precyzji) double reprezentuje liczbę rzeczywistą (podwójnej precyzji) Modyfikatory: short long signed unsigned oznacza liczbę krótką oznacza liczbę długą oznacza liczbę ze znakiem oznacza liczbę bez znaku Możliwy do zadeklarowania zestaw typów danych: char, unsigned char int, unsigned , signed , short, unsigned short, long, unsigned long float, double, long double Typy danych elementarnych, zakresy wartości oraz reprezentacja maszynowa (kompilator Turbo 2.0) Typ 1. znak(bajt) char unsigned char 2. liczba całkowita short unsigned short int unsigned int long unsigned long Zakres wartości -128 .. 127 0 .. 255 -32768 .. 32767 0 .. 65535 -32768 .. 32767 0 .. 65535 -2147483648 .. 2147483648 0 .. 4294967295 3. liczba rzeczywista float -3.4E38 .. –3.4E-38,0,3.4E-38 ..3.4E38 double -1.7E308 .. –1.7E-308,0,1.7E-308 ..1.7E308 long double -1.1E4932 .. –3.4E-932,0,3.4E-4932 ..1.1E4932 Reprezentacja 1 bajt 1 bajt 2 bajty 2 bajty 2 bajty 2 bajty 4 bajty 4 bajty 4 bajty 8 bajtów 10 bajtów Stałe w języku C 1. stałe całkowitoliczbowe: • dziesiętne zestaw znaków: 0 1 2 3 4 5 6 7 8 9 + • ósemkowe zestaw znaków: 0 1 2 3 4 5 6 7 + - (pierwszym znakiem jest zero) • szesnastkowe zestaw znaków: 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F + - (pierwszymi znakami są zero i małe lub duże x- 0x, 0X) 2. stałe rzeczywiste zestaw znaków: 0 1 2 3 4 5 6 7 8 9 . + - e E 3. stałe znakowe Pojedyncze znaki ujęte w apostrofy. Zestaw znaków: • cały repertuar „widocznych” znaków ASCII • escape-sekwencje NAJWAŻNIEJSZE ESCAPE-SEKWENCJE Sekwencja znaków \a \b \t \v \n \f \r \” \’ \? \\ \0 Wartość ASCII Znaczenie 7 8 9 11 10 12 13 34 39 63 92 0 Sygnał dźwiękowy (BEL) Cofnięcie o 1 znak (BS) Tabulacja pozioma(HT) Tabulacja pionowa (VT) Nowa Linia (LF) Nowa strona (FF) Powrót karetki(CR) Cudzysłów Apostrof Znak zapytania Kreska ukośna (backslash) Znak pusty (null) 4. stałe łańcuchowe Ciąg dowolnych znaków ujętych w cudzysłowy. 5. stałe symboliczne Jest to nazwa zastępująca łańcuch znaków #define NAZWA tekst /*Program p3.c /*Obliczanie objetosci walca /*Kompilator: Turbo C 2.0 /*Stałe symboliczne */ */ */ */ #include <stdio.h> #define PI 3.1415926 #define PROMIEN 3.3 #define WYSOKOSC 44.4 #define WYNIK printf(”Objetosc walca = %f”,objetosc) void main() { float promien, wysokosc, objetosc; promien =PROMIEN; wysokosc =WYSOKOSC; objetosc =PI * promien * promien * wysokosc; WYNIK; } Objetosc walca = 1519.010254