Podstawy programowania w języku C WYKŁAD 1
Proces tworzenia i uruchamiania programów
Algorytm, program Algorytm przepis postępowania prowadzący do rozwiązania określonego zadania. Program zapis algorytmu i danych w konkretnym języku programowania. Generalnie, program realizuje przetwarzanie określonych danych wejściowych (podawanych przez użytkownika) w dane wyjściowe (wynik działania programu).
Algorytm, program Algorytmy + Struktury danych = Programy (tytuł książki Niklausa Wirtha)
Języki programowania Języki maszynowe poziom bitów (zer i jedynek). Języki asemblerowe - poziom rozkazów procesora. Języki wysokiego poziomu (np. Fortran, Pascal, C/C++, Java, C#) - poziom wysokopoziomowych konstrukcji niezależnych od konkretnego komputera.
Języki programowania Języki interpretowane kolejne instrukcje kodu programu są tłumaczone na kod maszynowy i bezpośrednio wykonywane. Przykłady: Perl, PHP Języki kompilowalne cały kod programu jest tłumaczony na kod maszynowy, który następnie może być wykonany. Przykłady: Pascal, C/C++, Java
Kompilacja do kodu maszynowego Przykłady: Pascal, C/C++
Kompilacja do kodu pośredniego Przykłady: Java, C#
Instrukcja goto goto instrukcja skoku w językach programowania powodująca przekazanie sterowania w inne miejsce programu. Miejsce skoku w instrukcji goto identyfikowane jest za pomocą numeru wiersza programu (najczęściej w językach interpretowanych) bądź etykiety (najczęściej w językach kompilowanych).
Programowanie strukturalne Programowanie strukturalne charakteryzuje się ściśle kontrolowanym przepływem sterowania. Dzięki programowaniu strukturalnemu kod programów jest bardziej czytelny i łatwiejszy w utrzymaniu.
Programowanie strukturalne W roku 1966, C. Böhm i G. Jocopini wykazali, że wszystkie programy dają się doprowadzić do równoważnej postaci, w której mogą być reprezentowane tylko przez trzy podstawowe struktury: sekwencje, instrukcje wyboru (warunkowe), powtórzenia (pętle).
Programowanie strukturalne W roku 1968, E.W. Dijkstra opublikował w czasopiśmie Communication of the ACM list uznający instrukcję skoku (goto) za szkodliwą (źle wpływającą na czytelność i niezawodność kodu) oraz proponujący usunięcie tej instrukcji ze wszystkich języków programowania.
Instrukcje strukturalne Sekwencja instrukcja 1 instrukcja 2 instrukcja n
Instrukcje strukturalne Instrukcja wyboru (warunkowa)
Instrukcje strukturalne Instrukcja powtórzenia (pętli)
Programowanie strukturalne Programowanie strukturalne dopuszcza zagnieżdżanie instrukcji umożliwiając hierarchiczną budowę programu. Głębokość zagnieżdżania struktur może być dowolna.
Język C Język stworzony przez Dennisa Ritchiego na początku lat 70-tych. Zaprojektowany został jako język programowania systemowego. Jest na tyle ogólnym językiem, że zbiór dostępnych narzędzi pozwalających na pisanie programów blisko współpracujących ze sprzętem okazał się przydatny w bardzo różnych zastosowaniach.
Język C Jest językiem wysokiego poziomu ale działa na takich samych obiektach jak komputer: znakach, liczbach i adresach w pamięci. Brak jest działań na złożonych obiektach: tekstach, zbiorach, listach, tablicach, itp. Brak jest instrukcji wejścia/wyjścia, wszystkie bardziej złożone operacje realizowane są jedynie przez odpowiednie funkcje. Każda implementacja języka C dostarcza standardową bibliotekę funkcji.
Język C Język C zajmuje wyróżnioną pozycję pomiędzy typowymi językami wysokiego poziomu a językami asemblerowymi. W języku C brak jest wielu reguł zabezpieczających programistę przed niepożądanymi pomyłkami.
Podstawowe typy danych w języku C Typ danej określa zbiór jej możliwych wartości oraz zestaw operacji, które można nad nimi wykonywać. Jednocześnie określa on rozmiar pamięci potrzebny do przechowywania danej oraz sposób zapisu danej.
Podstawowe typy danych w języku C short, int, long typy reprezentujące liczby całkowite ze znakiem, usigned short, unsigned int, unsigned long typy reprezentujące liczby całkowite bez znaku, float, double typy reprezentujące liczby rzeczywiste, char typ reprezentujący znaki.
Typ logiczny W języku C brak jest typu reprezentującego wartości logiczne. Wartość logiczna false (fałsz) reprezentowana jest przez wartość równą 0. Wartość logiczna true (prawda) reprezentowana jest przez wartość różną od 0.
Literały Literały całkowite liczby dziesiętne np.: 12, -34 liczby ósemkowe np.: 035, 0212 liczby szesnastkowe np.: 0x25, 0xA3B
Literały rzeczywiste Literały liczby pojedynczej precyzji (float) np. 1.2f, -3.45F liczby podwójnej precyzji (double) np. 1.2, -3.45, 0.1E2, 1.0E-10 Literały znakowe np. 'a', '&'
Zmienne Zmienna jest identyfikatorem, który podczas działania programu może przyjmować różne wartości ze zbioru określonego za pomocą typu. Każda zmienna używana w programie musi zostać zadeklarowana.
Zmienne Zmienna prosta jest zmienną, której można przypisać jedynie daną skalarną (niepodzielną). Deklaracja zmiennej prostej: typ nazwa; Przykład deklaracji: int a;
Zmienne Zmienna wskazująca (wskaźnik) jest zmienną, której można przypisać na inną zmienną określonego typu. Deklaracja zmiennej wskaźnikowej: typ* nazwa; Przykład deklaracji: int* a;
Operator przypisania Operator przypisania = służy do ustalenia wartości zmiennej. Przykład x=y oznacza, że wartość y przypisywana jest do zmiennej x.
Stałe Stałej nie można przypisać innej wartości w trakcie działania programu. Deklaracja zmiennej prostej: const typ nazwa; Przykład deklaracji: const int a=5;
Operatory arytmetyczne + dodawanie - odejmowanie * mnożenie / dzielenie % reszta z dzielenia ++ inkrementacja (zwiększanie o 1) - - dekrementacja (zmniejszanie o 1) - zmiana znaku liczby
Operatory logiczne && iloczyn logiczny (koniunkcja) suma logiczna (alternatywa)! negacja a b a && b a b!a false flase false false true false true false true true true false false true false true true true true false
Operatory bitowe Operatory bitowe działają na odpowiadających sobie bitach argumentów typu char lub int. & iloczyn suma ^ różnica symetryczna! negacja
Operatory przesunięć << przesunięcie argumentu w lewo o zadaną liczbę bitów >> przesunięcie argumentu w prawo o zadaną liczbę bitów
Operatory relacyjne == równy!= różny < mniejszy <= mniejszy lub równy > większy >= większy lub równy
Operatory wyłuskiwania i wskazywania * wyłuskanie (rezultatem jest obiekt wskazywany przez argument) & wskazanie (rezultatem jest wskazanie na obiekt dany przez argument)
goto etykieta Instrukcja skoku GOTO
Instrukcja warunkowa IF if (warunek) instrukcja Jeśli warunek jest prawdziwy (true), instrukcja zostaje wykonana i sterowanie przenoszone jest do kolejnych instrukcji po instrukcji warunkowej. Jeśli warunek nie jest prawdziwy (false), instrukcja nie zostaje wykonana, a sterowanie przenoszone jest bezpośrednio do kolejnych instrukcji po instrukcji warunkowej. instrukcja może być instrukcją złożoną { }.
Instrukcja warunkowa IF-ELSE if (warunek) instrukcja1 else instrukcja2 Jeśli warunek jest prawdziwy (true), tylko instrukcja1 zostaje wykonana i sterowanie przenoszone jest do kolejnych instrukcji po instrukcji warunkowej. Jeśli warunek nie jest prawdziwy (false), tylko instrukcja2 zostaje wykonana i sterowanie przenoszone jest do kolejnych instrukcji po instrukcji warunkowej. instrukcja1 oraz instrukcja2 mogą być instrukcjami złożonymi { }.
switch(selektor) { case wart_1: { instrukcja_1 break; } case wart_2: { instrukcja_2 break; } case wart_n: { instrukcja_n break; } default: { instrukcja_i } } Instrukcja wyboru SWITCH W zależności od wartości selektora wykonywana jest odpowiednia sekcja case. W przypadku gdy wartość selektora nie pasuje do żadnych wartości specyfikowanych przez sekcje case, wykonywana jest sekcja default.
Instrukcja iteracyjna (pętla) WHILE while (warunek) instrukcja Dopóki warunek jest prawdziwy (true), instrukcja jest wykonywana. Gdy warunek przestaje być prawdziwy (false) sterowanie przenoszone jest do kolejnych instrukcji po instrukcji WHILE. instrukcja może być instrukcją złożoną { }.
Instrukcja iteracyjna (pętla) DO-WHILE do { instrukcja } while (warunek); Pętla DO-WHILE działa podobnie jak pętla WHILE. Różnica polega na tym, że warunek jest testowany po wykonaniu instrukcji. W związku z tym instrukcja zostaje wykonana co najmniej jeden raz.
Instrukcja iteracyjna (pętla) FOR for (zm=pocz; zm<=koniec; modyfikacja zm) instrukcja pocz oraz koniec są wyrażeniami typu całkowitego. Zmiennej zm przypisywana jest wartość pocz. Dopóki wartość zmiennej jest mniejsza lub równa wartości koniec, instrukcja jest wykonywana. Za każdym razem wartość zm jest modyfikowana (np. zwiększana jest o 1). Gdy wartość zm staje się większa od wartości koniec sterowanie jest przenoszone do kolejnych instrukcji po instrukcji FOR. instrukcja może być instrukcją złożoną { }. modyfikacja zm
Instrukcje CONTINUE i BREAK Instrukcja continue powoduje przerwanie wykonywania bieżącej iteracji pętli i przejście do następnej iteracji. Instrukcja break powoduje przerwanie wykonywania bieżącej iteracji pętli i wyjście z pętli.
Wczytywanie danych scanf( %d, &zmienna); scanf( %f, &zmienna); scanf( %c, &zmienna); wczytywanie liczby całkowitej wczytywanie liczby rzeczywistej wczytywanie znaków
printf(zmienna); Wypisywanie danych
Struktura najprostszego programu w języku C void main( ) { //... instrukcje do wykonania... }
Komentarz blokowy: Komentarze w języku C /* to jest komentarz blokowy, który może zajmować wiele linii */ Komentarz liniowy: // to jest komentarz liniowy