
Drogi Czytelniku, właśnie trzymasz w rękach nowe wydanie książki zaliczanej do klasyki literatury informatycznej. Napisana przez autorów języka ANSI C w najlepszy możliwy sposób przedstawia arkana tego języka. A co można powiedzieć o samym języku? To też klasyka. To język wymagający systematyczności i skupienia, ale dający w zamian wiele możliwości i świetne wyniki. To najczęściej nauczany język programowania - jego znajomość stanowi znakomity fundament do poznania kolejnych, bardziej złożonych języków. Mimo swojego zaawansowanego wieku jest on ceniony i w wielu dziedzinach wciąż niezastąpiony.
Dzięki tej książce zdobędziesz kompletną wiedzę na temat języka C. Poznasz wszystkie dostępne typy, operatory i wyrażenia. Nauczysz się sterować wykonywaniem programu oraz wykorzystywać funkcje. Ponadto dogłębnie poznasz coś, co sprawia początkującym programistom najwięcej problemów - wskaźniki. Następnie zapoznasz się także z funkcjami wejścia i wyjścia. Dowiesz się, jak uzyskać dostęp do plików, formatować dane wyjściowe oraz obsługiwać błędy. Książka ta jest bogata w przykłady, a każdy z nich został przetestowany przez autorów. "Język ANSI C. Programowanie. Wydanie II" to niezastąpiona pozycja na półce każdego studenta informatyki, pasjonata programowania i zawodowca. Wraz z książką został wydany zeszyt zawierający rozwiązania do wszystkich zawartych w niej ćwiczeń.
- Zmienne i wyrażenia arytmetyczne w języku C
- Kompilowanie kodu
- Wykorzystanie preprocesora języka C
- Typy i operatory
- Metody sterowania wykonywaniem programu
- Wykorzystanie funkcji
- Struktura programu
- Zasada działania wskaźników
- Struktury danych
- Operacje wejścia i wyjścia
- Zastosowanie rekurencji
Poznaj tajniki języka C!
Przedmowa (7)Przedmowa do pierwszego wydania (9)
Wstęp (11)
Rozdział 1. Wprowadzenie (15)
- 1.1. Pierwsze kroki (16)
- 1.2. Zmienne i wyrażenia arytmetyczne (18)
- 1.3. Instrukcja for (24)
- 1.4. Stałe symboliczne (26)
- 1.5. Znakowe operacje wejścia-wyjścia (26)
- 1.6. Tablice (34)
- 1.7. Funkcje (36)
- 1.8. Argumenty - przekazywanie jako wartość (40)
- 1.9. Tablice znaków (41)
- 1.10. Zmienne zewnętrzne i zakres zmiennych (44)
- 2.1. Nazwy zmiennych (49)
- 2.2. Typy danych i ich rozmiar (50)
- 2.3. Stałe (51)
- 2.4. Deklaracje (54)
- 2.5. Operatory arytmetyczne (55)
- 2.6. Operatory porównania i logiczne (56)
- 2.7. Konwersja typów (57)
- 2.8. Inkrementacja i dekrementacja (61)
- 2.9. Operatory bitowe (63)
- 2.10. Operatory i wyrażenia przypisania (65)
- 2.11. Wyrażenia warunkowe (67)
- 2.12. Priorytety operatorów i kolejność wykonywania obliczeń (68)
- 3.1. Instrukcje i bloki (71)
- 3.2. if-else (72)
- 3.3. else-if (73)
- 3.4. switch (75)
- 3.5. Pętle while i for (76)
- 3.6. Pętla do-while (80)
- 3.7. break i continue (81)
- 3.8. goto i etykiety (82)
- 4.1. Funkcje - podstawy (86)
- 4.2. Zwracanie wartości innych niż int (89)
- 4.3. Zmienne zewnętrzne (92)
- 4.4. Zakres (98)
- 4.5. Pliki nagłówkowe (100)
- 4.6. Zmienne statyczne (101)
- 4.7. Zmienne rejestrowe (102)
- 4.8. Struktura blokowa (103)
- 4.9. Inicjalizacja (104)
- 4.10. Rekurencja (105)
- 4.11. Preprocesor języka C (107)
- 5.1. Wskaźniki i adresy (113)
- 5.2. Wskaźniki i argumenty funkcji (115)
- 5.3. Wskaźniki i tablice (118)
- 5.4. Arytmetyka adresów (121)
- 5.5. Wskaźniki znakowe i funkcje (124)
- 5.6. Tablice wskaźników, wskaźniki do wskaźników (128)
- 5.7. Tablice wielowymiarowe (131)
- 5.8. Inicjalizacja tablic wskaźników (134)
- 5.9. Wskaźniki a tablice wielowymiarowe (134)
- 5.10. Argumenty wiersza poleceń (135)
- 5.11. Wskaźniki do funkcji (140)
- 5.12. Rozbudowane deklaracje zmiennych i funkcji (143)
- 6.1. Struktury - podstawy (149)
- 6.2. Struktury i funkcje (151)
- 6.3. Tablice struktur (154)
- 6.4. Wskaźniki do struktur (158)
- 6.5. Struktury cykliczne (odwołujące się do siebie) (161)
- 6.6. Wyszukiwanie w tabelach (166)
- 6.7. typedef (168)
- 6.8. union (170)
- 6.9. Pola bitowe (172)
- 7.1. Standardowe operacje wejścia-wyjścia (175)
- 7.2. printf - formatowanie danych wyjściowych (178)
- 7.3. Listy argumentów o zmiennej długości (180)
- 7.4. scanf - formatowane dane wejściowe (181)
- 7.5. Dostęp do plików (185)
- 7.6. stderr i exit - obsługa błędów (188)
- 7.7. Wierszowe operacje wejścia-wyjścia (189)
- 7.8. Inne funkcje (191)
- 8.1. Deskryptory plików (196)
- 8.2. Niskopoziomowe operacje wejścia-wyjścia - odczyt i zapis (197)
- 8.3. open, creat, close, unlink (198)
- 8.4. lseek - dostęp swobodny (201)
- 8.5. Przykład - implementacja fopen i getc (202)
- 8.6. Przykład - listy zawartości katalogów (206)
- 8.7. Przykład - mechanizm alokacji pamięci (211)
- A.1. Wprowadzenie (217)
- A.2. Konwencje leksykalne (217)
- A.3. Zapis składni (221)
- A.4. Identyfikatory obiektów (222)
- A.5. Obiekty i L-wartości (224)
- A.6. Konwersje (225)
- A.7. Wyrażenia (228)
- A.8. Deklaracje (241)
- A.9. Instrukcje (257)
- A.10. Deklaracje zewnętrzne (261)
- A.11. Zakres i wiązanie (264)
- A.12. Przetwarzanie wstępne (266)
- A.13. Gramatyka (273)
- B.1. Wejście i wyjście: <stdio.h> (282)
- B.2. Wykrywanie klas znaków: <ctype.h> (291)
- B.3. Ciągi znakowe: <string.h> (291)
- B.4. Funkcje matematyczne: <math.h> (293)
- B.5. Funkcje narzędziowe: <stdlib.h> (294)
- B.6. Diagnostyka: <assert.h> (297)
- B.7. Listy argumentów o zmiennej długości: <stdarg.h> (298)
- B.8. Skoki odległe: <setjmp.h> (298)
- B.9. Sygnały: <signal.h> (299)
- B.10. Data i godzina: <time.h> (300)
- B.11. Ograniczenia określane przez implementację: <limits.h> i <float.h> (302)
Skorowidz (309)