Język C część 1 Literatura [1] Brian W. Kernighan, Dennis M. Ritchie: Język ANSI C, Wydawnictwa Naukowo Techniczne, Warszawa 2003 [2] Anna Strudzioska-Walczak, Krzysztof Walczak, Nakuka programowania dla początkujących C++, Wydawnictwo W&W, Warszawa 2006 Zanim zaczniesz pisać Język C Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa Język C został napisany przez D. Ritchie go. Pierwszy okres rozwoju języka to lata 1969-1973. Początkowo język ten był przeznaczony do tworzenia oprogramowania systemowego (przy jego pomocy został napisany system operacyjny UNIX). W miarę upływu czasu stał się językiem ogólnego przeznaczenia. Język C jest uważany za język umożliwiający szybkie pisanie efektywnych programów. Łączy on w sobie zalety języków programowania strukturalnego wysokiego poziomu z zaletami niskiego poziomu języków asemblerowych. Struktura programu w C Nagłówek funkcji zawiera: typ zwracanego wyniku, nazwę funkcji i listę argumentów umieszczoną nawiasach okrągłych (argumenty oddziela się przecinkiem). Instrukcje składające się na kod funkcji umieszcza się w nawiasach klamrowych i. Para nawiasów klamrowych może służyd do grupowania instrukcji. Ciąg instrukcji umieszczony wewnątrz nawiasów klamrowych określany jest mianem instrukcji złożonej. Każda instrukcja musi byd zakooczona średnikiem ;. Średnika nie umieszcza się po zamykającym nawiasie klamrowym (są wyjątki). To średnik, a nie koniec linii, decyduje o tym gdzie kooczy się instrukcja. Sam średnik traktowany jest, jako instrukcja pusta. Nie można dzielid (przenosid do nowej linii) nazw zmiennych, funkcji i słów kluczowych. Komentarz w C++, to dowolnej długości tekst ograniczony znakami /* i */ Język C, Daniel Pociecha, danpoc@agh.edu.pl 1
Przykład 1 #include <stdio.h> printf("hello World!\n"); Preprocesor Przed uruchomieniem kompilatora zawsze jest wywoływany preprocesor, który przetwarza wiersze program rozpoczynające się znakiem #. Jest to dyrektywa preprocesora. #include jest to podstawowa dyrektywa preprocesora. Ma ona dwie postacie: #include <nazwa> plik nagłówkowy dostępny w systemie C #include nazwa plik zdefiniowany przez użytkownika Inne dyrektywy preprocesora wykorzystywane w plikach nagłówkowych to: #ifndef dowolna_nazwa #define dowolna_nazwa /* Zawartość pliku nagłówkowego dowolna_nazwa.h */ #endif Biblioteki standardowe <stdio.h> Standard Input/Output standardowe operacje wejścia/wyjścia <math.h> operacje matematyczne <stdlib.h> przydatne, najczęściej używane funkcje <string.h> operacje na łaocuchach znaków <time.h> funkcje obsługi czasu Funkcja main() Program w języku C składa się z funkcji, w ten sposób złożony problem, możemy podzielid na mniejsze, łatwiejsze do zakodowania i czytelniejsze fragmenty. Główną funkcją, od której rozpoczyna się wykonywanie programu jest funkcja main(). /* kod program */ Język C, Daniel Pociecha, danpoc@agh.edu.pl 2
Aby po zakooczeniu działania programu uzyskad informację o tym czy program wykonał się poprawnie, nadajemy funkcji main() typ int (integer liczba całkowita), a funkcję kooczymy poleceniem. Jeżeli program wykonał się poprawnie, funkcja main() zwraca wartośd 0. UWAGA! Program powinien byd zapisywany z wykorzystaniem wcięd tak, aby widad było strukturę poszczególnych instrukcji UWAGA! System zwraca uwagę na wielkośd liter. Return to nie to samo co: return Podstawowe typy danych void typ pusty - brak wartości char typ znakowy - jeden z podstawowych typów danych, mający na celu przechowywanie pojedynczego znaku tekstu. int liczba całkowita zakres: -32768 32767 unsigned int liczba całkowita zakres: 0 65535 long liczba całkowita zakres: - 2 miliardy 2 miliardy unsigned long liczba całkowita zakres: 0 4 miliardy float liczba rzeczywista zakres: 3.4 * E-38 3.4 * E38 double liczba rzeczywista zakres: bardzo duży long double liczba rzeczywista zakres: olbrzymi Typ rzeczywisty L = mantysa * 10 wykładnik Przykład zapisu: L = 15.67 L = 83.5E+3 Język C, Daniel Pociecha, danpoc@agh.edu.pl 3
Zmienne Zmienną w języku programowania nazywamy wielkośd, która może przechowywad wartośd należącą do pewnego zbioru nazywanego typem zmiennej. Zmienna jest jednoznacznie identyfikowana przez swoją nazwę. Każda zmienna w programie musi zostad wcześniej zadeklarowana, tzn. należy określid jej nazwę i typ wartości. Identyfikatorem (nazwą) nazywamy ciąg liter, cyfr i znaków podkreślenia, rozpoczynający się od litery lub znaku podkreślenia. Nazwami nie mogą byd słowa kluczowe, tj. słowa zastrzeżone używane w konstrukcjach języka. W dobrym zwyczaju jest nadawanie nazw zmiennym, odzwierciedlających ich znaczenie. Wartośd sumy pewnych elementów powinna nazywad się suma a nie np. 2_wdx. Wartośd zmiennej jest tym, co przechowujemy w obszarze pamięci określanym przez nazwę. W momencie deklaracji wartośd zmiennej lokalnej jest nieokreślona, zmienne globalne są inicjalizowane na zero. Do nadawania wartości zmiennej służy instrukcja przypisania. Przykłady deklaracji zmiennych i instrukcji przypisania Przykład 2 int a; int b = 2; float x, y; float z = 3.2; float suma; a = 10; x = y = 3.14; #include <stdio.h> float a, b, pole; printf("podaj długości boków prostokąta:\n"); printf("a = "); scanf("%f", &a); printf("b = "); scanf("%f", &b); pole = a * b; printf("pole = %5.2f\n", pole); Język C, Daniel Pociecha, danpoc@agh.edu.pl 4
Operacje wejścia wyjścia Komunikację użytkownika z programem zapewniają funkcje wejścia wyjścia. Umożliwiają one wyświetlanie komunikatów na ekranie komputera oraz wprowadzanie danych z klawiatury. printf("jakiś tekst\n"); Funkcja printf() znajduje się w bibliotece stdio.h. W cudzysłowach "" umieszczamy tekst, który chcemy wyświetlid na ekranie komputera. Znak znajdujący się po znaku \ jest traktowany w sposób specjalny, przykładowo: \n nowy wiersz \t tabulacja \b cofanie \f nowa strona \0 znak NUL scanf("%f", &a); Funkcja scanf() znajduje się w bibliotece stdio.h. Wyrażenie "%f" oznacza, że spodziewamy się liczby zmiennoprzecinkowej, a to nazwa zmiennej, natomiast & to wskaźnik (adres) do zmiennej a %f jest to tekst sterujący, narzucający formatowanie wprowadzanego bądź wyświetlanego tekstu, przykładowo: %d liczba dziesiętna %s tekst znakowy %e liczba zmiennoprzecinkowa notacja wykładnicza %f liczba zmiennoprzecinkowa notacja dziesiętna %6.2f co najmniej 6 znaków, z dwoma miejscami po kropce %3.0f co najmniej 3 znaki, bez części ułamkowej %.2f z dwoma miejscami po kropce %3d liczba dziesiętna zajmująca, co najmniej 3 znaki ZADANIE 1. Przekształd przykład 2 tak, by program liczył pole dowolnego trójkąta ZADANIE 2. Napisz program liczący pole i obwód koła (założyd π = 3.14). ZADANIE 3. Napisz program liczący pole i obwód trójkąta równobocznego, oraz promieo okręgu opisanego na tym trójkącie (R) i promieo okręgu wpisanego w ten trójkąt (r). Język C, Daniel Pociecha, danpoc@agh.edu.pl 5
Wyrażenia i operatory Operatory arytmetyczne * mnożenie / dzielenie + dodawanie - odejmowanie % reszta z dzielenia Operatory relacyjne < mniejszy <= mniejszy lub równy > większy >= większy lub równy == równy!= nierówny Operator przypisania = Operatory logiczne! negacja && koniunkcja alternatywa Operatory zwiększania i zmniejszania ++ zwiększ wartośd zmiennej o 1 -- zmniejsz wartośd zmiennej o 1 Przykładowo: x = ++a zwiększa wartośd a o 1 a następnie przypisuje do x x = a++ przypisz wartośd a do x a następnie zwiększ o 1 Wieloznakowe operatory przypisania += a += b; a = a + b; -= a -= b; a = a - b; *= a *= b; a = a * b; /= a /= b; a = a / b; %= a %= b; a = a % b; Język C, Daniel Pociecha, danpoc@agh.edu.pl 6
Przykład 3 #include <stdio.h> int a, b, wynik; printf("operatory relacyjne:\n"); a = 10; b = 2; wynik = a > b; printf("wynik a > b = %d\n\n", wynik); printf("operatory logiczne:\n"); a = 1; b = 0; wynik = a && b; printf("wynik a && b = %d\n", wynik); wynik = a b; printf("wynik a b = %d\n\n", wynik); printf("operatory zwiększania i zmniejszania:\n"); a = 100; wynik = a++; printf("wynik a++ = %d\n", wynik); wynik = ++a; printf("wynik ++a = %d\n\n", wynik); printf("wieloznakowe operatory przypisania:\n"); a = 10; a += 5; printf("wynik a += %d\n", a); a *= 2; printf("wynik a *= %d\n", a); Język C, Daniel Pociecha, danpoc@agh.edu.pl 7