1 Podstawy programowania. Język C i C++– podstawy Temat: 1Podstawy programowania. Język C i C++– podstawy Temat: 1. Język C: edycja i kompilacja programów. Ogólna struktura i budowa programu. 2.Podstawowe elementy języka C - słowa kluczowe języka, instrukcje podstawowe. Przykłady prostych programów. Cele nauczania: Podstawowe zasady programowania. Praktyczna znajomość elementów programowania w języku C/C++ Docelowo : Opracowanie algorytmu wybranego zadania geodezyjnego i przedstawienie go w postaci schematu blokowego. Opracowanie programu w wybranym języku programowania Wykonanie dokumentacji programu . Szczegółowe dla lekcji: Zapoznanie z uruchamianiem i obsługą środowiska programistycznego Turbo C, pisaniem programu i jego kompilacją. Ogólna budowa i postać programu w języku C. Słowa kluczowe. Instrukcje podstawowe. Cele operacyjne lub szczegółowe cele kształcenia Po zakończeniu lekcji uczeń będzie umiał: - uruchomić Turbo C, założyć plik i wpisać treść programu, skompilować i uruchomić program - opisać ogólną budowę programu w C, rozpoznawać słowa kluczowe i wymienić instrukcje podstawowe
2 Zintegrowane środowiska programistyczneDo tworzenia programów można wykorzystywać zintegrowane środowiska programistyczne jak: firmy Borland: Turbo C, Borland C, Borland C++ Builder Microsoft Visual C++, Dev C++, CodeBlocks KDevelop (Linux) do KDE, Eclipse
3 Pisanie kodu programu w C (.C) lub C++ (.CPP)Do edycji pliku programu (rozszerzenie C lub CPP) można użyć dowolnego edytora tekstowego zapisującego pliki w postaci czystego kodu ASCII, typu Notatnik (Notepad.exe) , Edit lub lepiej Notepad ++ czy ConTEXT, które pozwalają sprawdzać składnię i podkolorowują odpowiednio tekst po wybraniu języka.
4 Kompilacja programów przy pomocy BCC32Do kompilacji można użyć środowiska programistycznego Borland C++ Compiler 5.5 – program BCC32.exe. Kompilator ten jest darmowy, generuje 32-bitowy kod dla Windows, zawiera tylko niezbędne narzędzia uruchamiane z linii poleceń, jest prosty w instalacji i konfiguracji. Najlepiej zainstalować w C:\BCC55. W katalogu tym są podkatalogi: BIN, INCLUDE, LIB, HELP, EXAMPLES. Pliki konfiguracyjne w katalogu C:\BCC55\BIN: BCC32.cfg i ILINK32.cfg Zawartość plików konfiguracyjncych: Plik BCC32.cfg -I"c:\Bcc55\include -L"c:\Bcc55\lib„ Plik ILINK32.cfg - składa się z jednej linii: -L"c:\Bcc55\lib" Kompilacja programów przy pomocy BCC32.EXE: Bcc32 plik_programu.c lub bcc32 plik_programu.cpp – w linii poleceń po skopiowaniu pliku programu do katalogu C:\BCC55\BIN lub z dowolnego miejsca na dysku po dopisaniu do zmiennej PATH w wierszu poleceń: PATH=%PATH%;C:\BCC55\BIN
5 Najprostszy wykonywalny program C:Plik program1.c int main(void) { return 0; } Kompilacja: BCC32 program1.c Wynik program1.exe
6 Analiza programu program1.cProgram ten składa się tylko z bezparametrowej funkcji głównej int main(void), inaczej int main(), której wartość jest typu całkowitego (int). Ciało funkcji zbudowane jest z instrukcji, które powinny znaleźć się w bloku wyznaczonym nawiasami kwadratowymi. Funkcja ta zwraca wartość 0 za pomocą instrukcji return. Skompiluje się również program w postaci: main() { } void main() { } void main(void) { }
7 Ogólna struktura programu w C/C++
8 Ogólna budowa programu w języku CCechą języka C/C+ jest możliwość budowy programu z wielu modułów. Modułem może być każdy zbiór zawierający poprawny kod źródłowy. Program w C zbudowany jest z funkcji. Każda z funkcji może posiadać parametry oraz określony typ wartości. Aby można było wygenerować kod wynikowy programu (w DOS zbiór .EXE), w jednym i tylko w jednym z modułów musi się znaleźć funkcja główna main(), od której rozpocznie się wykonywanie programu. Moduł zawierający funkcję main() nazywa się modułem głównym.
9 Pierwszy przykładowy program hello.c/* Komentarz: plik hello.c */ #include
10 Wersja programu hello w C++ plik hello.cpp//Program hello.cpp - komentarz jednowierszowy w C++ #include
11 Ogólna postać programu w języku C/* Nagłówek programu - komentarz: (nazwa, autor, data, kompilator, uwagi itp. ) komentarz wielo-linowy lub jednoliniowy // */ // komentarz w jednej linii – do końca linii – w C++ #include (preprocesor - włączenia tekstowe) //np. #include
12 Objaśnienia – nagłówek, #include, #define, zmienne globalne, funkcjeW nagłówku komentarze: nazwa programu, autor, nazwa kompilatora, uwagi odnośnie kompilowania, linkowania, wykonania Sekcja #include
13 Funkcja main() W programie definiujemy główną funkcję main(), uruchamianą przy starcie programu, zawierającą właściwy kod. Definicja funkcji zawiera, oprócz nazwy i kodu, także typ wartości zwracanej i argumentów pobieranych. Typem zwracany przez funkcję jest int (Integer), czyli liczba całkowita (w przypadku main() będzie to kod wyjściowy programu). W nawiasach umieszczane są argumenty funkcji, tutaj zapis (void) oznacza ich pominięcie. Funkcja main() jako argumenty może pobierać parametry linii poleceń, z jakimi program został uruchomiony, i pełną ścieżkę do katalogu z programem. Kod funkcji umieszcza się w nawiasach klamrowych { i }. Wszystkie polecenia kończymy średnikiem. return; określa wartość jaką zwróci funkcja (tu program). Liczba zero zwracana przez funkcję main() oznacza, że program zakończył się bez błędów; błędne zakończenie często (choć nie zawsze) określane jest przez liczbę jeden. Funkcję main() kończymy nawiasem klamrowym zamykającym.
14 Środowiska programistyczne BorlandTurbo C lub Borland C to zintegrowane pakiety składające się z następujących części: edytora - służy on do pisania i poprawiania programów; kompilatora - zamienia on plik źródłowy na instrukcje wykonywane przez komputer; debuggera - umiejscawia i usuwa on usterki w programie oraz pozwala śledzić wykonywanie programu krok po kroku.
15 Turbo C Turbo C – program TC.EXE (zwykle w katalogu C:\TC\BIN lub C:\Turbo\Bin) Uruchamiamy TC.EXE. Otwieramy istniejący plik – File, Open – wskazujemy plik lub piszemy treść programu i zapisujemy, np. p1.c Kompilujemy program ALT C, Build lub Alt F9. Utworzony zostanie plik p.exe Uruchamiamy program ALT R lub CTRL F9. By zobaczyć wyniki, należy przejść do ekranu użytkownika: Alt W – Menu Windows, User Screen lub bezpośrednio: Alt F5. Pomoc w TURBO C: Alt H; Np. ALT H, Index, wpisujemy szukane słowo Menu - F10
16 Okno Turbo C++ ver. 1.01
17 Menu programu TC.EXE File – Plik: opcje: New – Nowy, Open – Otwórz, Save – Zapisz, Save as – Zapisz jako, Save All – zapisz wszystko, Change dir – zmień katalog, DOS Shell – okno DOS (exit – wyjście), Quit – wyjście Edit - edycja Search– szukaj Run – uruchom, np. Ctrl F9 Compile: kompiluj: Compile Alt F9 – kompiluj, F-9 Make – utwórz, Link – linkuj, Build All – zbuduj wszystko, Information – informacja, Remove messages – usuń komunikaty (wiadomości) Debug - debugowanie Project - projekt Options - opcje Window – okno – np. Alt F5 – ekran użytkownika Help – pomoc Help, Index, wpisujemy szukane słowo, np. void i naciskamy Enter
18 Okno TC – program do wpisania i uruchomienia na pole prostokątaWynik programu
19 Listingi programu w C – wersja Turbo C i Dev C++/* Plik PolPros2.c */ #include
20 Niektóre skróty klawiszoweF2 - zapamiętanie edytowanego programu (z rozszerzeniem .c lub cpp) F3 – otwarcie programu istniejącego pliku programu (C lub CPP) Alt-F9 - kompilacja programu F9 – make – tworzy program wykonywalny, kompiluje program do pliku .EXE kompilując tylko zmienione pliki Ctrl-F9 - uruchomienie skompilowanego programu: (z ewentualną kompilacją) Alt-F5 - przełącza na wirtualny ekran użytkownika (i z powrotem) Alt-X - wyjście z systemu TC F4 - Go to cursor - wykonuje program aż do linijki zawierającej kursor, po czym zatrzymuje się i czeka na dalsze polecenia; F7 - Trace Into - wykonuje bieżącą instrukcję programu, jeśli jest to wywołanie procedury, to przechodzi do pierwszego wiersza tej procedury; F8 - Step Over - wykonuje bieżącą instrukcję programu, jeśli jest to wywołanie procedury, to wykonuje ją w całości;
21 Wydawanie poleceń, skróty klawiszowe w TCmyszą - poprzez kliknięcie na odpowiednim wyrazie menu, a następnie na odpowiedniej komendzie; klawiaturą - wciskamy kombinację Alt i pierwszą literę wyrazu w menu, następnie wciskamy wyróżnioną literę komendy. Np. Alt F – menu File – Plik Alt E – menu Edit – edycja Alt R – menu Run – Uruchom Alt C – menu Compile – Kompilacja Alt O – menu Options – Opcje Alt D – menu Debug – debugowanie Alt P – menu Project, Alt W – Window, Alt H - Help klawiszem skrótowym - wciskamy klawisz lub kombinację klawiszy, która znajduje się obok komendy lub w pasku z klawiszami.
22 Podstawowe informacje o języku C i C++Język programowania – zapis algorytmu w postaci zrozumiałej dla człowieka. Program źródłowy – tekst: zbiór słów, cyfr, znaków – rozszerzenie C lub CPP Słowa zastrzeżone - kluczowe, m.in. auto, break, case, char, class, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, private, register, return, short, signed, sizeof, static, struct, switch, try, typedef, unsigned, void, while (czasem też inne, zależy od kompilatora) Łańcuchy znaków muszą być ograniczone przy pomocy cudzysłowia, np. ”Ala ma kota”, ”Podaj nazwisko: ”. Mogą zawierać spacje. Liczby dziesiętne mogą zawierać kropkę a nie przecinek, np Mogą być zapisane w postaci wykładniczej, z literą E, np. 2.83E+3 (czyli 2.83*10^3) Każde polecenie programu musi kończyć się średnikiem. W jednej linii może być kilka poleceń ale to nie jest zalecane W pisaniu programów rozróżniane są duże i małe litery - np. w main() Komentarze tworzymy przy pomocy znaków /* wielowierszowy */ lub // jednoliniowy np. /*To jest komentarz może być wieloliniowy */ // to komentarz w jednym wierszu
23 Podstawowe elementy języka Czestaw znaków (litery, cyfry, znaki specjalne: ! * + \ " < # ( = | { > % ) ~ ; } / ^ - [ : , ? & _ ] ' ) nazwy i słowa zastrzeżone (np. auto break case char const goto if int long register unsigned void volatile while) typy danych (np. int, char, float, doble) stałe (np. 121, 23L, 021, 0x12, 25L, ‘a’, const int a=10; ) zmienne i tablice (np. float zm1, zm2; double tab[10];) deklaracje (np. int i, j; double k; char znak; int main() ) Operatory i wyrażenia. Wyrażenie - to co zwraca element, np. 3.2, a=a+b; k==m; y=x=a+b; b=a[j+1]; Operatory m.in. matematyczne: +, -, *, /, %; przypisania =, ++, --, Instrukcje - fragmenty tekstu programu powodujące jakąś czynność komputera podczas wykonywania programu, np. p=a*b; printf("Pole=%f",p); k=funkcja_d(5, 6, 17.33);
24 Pojęcia podstawowe Słowo Kluczowe – zastrzeżone – nie można wykorzystać jako nazwy zmiennych lub stałych Stałe i zmienne to określone miejsca w pamięci komputera. Utworzenie stałej lub zmiennej to przypisanie do jej identyfikatora określonego adresu pamięci, pod którym znajduje się wartość stałej lub zmiennej Stała - jest to pewna wartość przypisana znakowi/wyrazowi której nie można zmienić np. #define PRAWDA 1 const PI= ; const string NI = ”Nowak Adam”; Jako stałą należy również traktować liczbę, literę a także ciąg znaków w cudzysłowach. Np. 7 to stała, której wartość wynosi 7. Zmienna - nazwa (identyfikator) reprezentująca określony typ danych. W chwili rozpoczęcia pracy programu zmienna powinna posiadać nadaną wartość początkową (nie powinna być przypadkowa). Np. int liczba1; /* deklaracja zmiennej liczba1 */ long i=25L; float s=123.16E10; char a=‘a’;/* definicje zmiennych */ liczba1=21; // inicjacja zmiennej liczba1 W trakcie pracy programu wartości zmiennych ulegają zwykle zmianom. Należy przewidzieć zakres zmienności tych zmiennych.
25 Instrukcje podstawowe języka C:#include – dołączenie pliku nagłówkowego, podstawowy #include
26 /* Program daneos1.c - dane osobowe*/#include
27 /* Program kalk1.c - początek*/ #include
28 Przykład struktury programu z zastosowaniem wielu instrukcji podstawowych/* Program strukt.pr.c – Przykład struktury programu */ /* Naglowek - komentarz wieloliniowy w C i C++ */ // jednolinowy w C++ /* Program Nazwa.c Autor: Nazwisko Imie. Data: Kompilator Turbo C 1.01 Uwagi: Struktura ogolna programu /* /* preprocesor: #include - wlaczenia tekstowe bibliotek i #define - stale makroinstrukcje */ #include
29 Wyniki programu struktpr.c
30 Szablon programu dla ucznia – dane wpisane w #define/* Program Szablon.c */ /* #include - włączenia tekstowe bibliotek */ #include
31 Operatory i wyrażenia Operatory umożliwiają zapisywanie wyrażeń.Operatory matematyczne: +, -. *. /, % Operator przypisania =, np. a=5; Dwa przypisania naraz: x=y=10; (najpierw y=10, potem x=y czyli 10) Operator łączenia, np. int x, y, z; Operator inkrementacji: ++ i dekrementacji --, np. i++; --j; Wyrażenie jest kombinacją stałych, zmiennych i operatorów. Np. float a, b, pole; a=10.0; b=5.0; pole=a*b;
32 Szablon programu do obliczeń geodezyjnych/* zmienne globalne - stale, zmienne */ const double pi= ; const double rograd= , rostop= ; /* Ro[grad]=200/PI, Ro[stopn]=180/PO const char szkola[]="Sztygarka"; /* Przykladowa funkcja - deklaracja */ float suma1(float l1, float l2); /* ========== Funkcja glowna * ======== */ int main() { clrscr(); printf("Program: %s \n",PROGRAM); KRESKA2; puts(NAZWISKO); puts(KLASA); puts(SZKOLA); KRESKA; printf(" [grad]=%f[rad]",KATRAD(rograd)); /* -- dalszy kod programu, głównego */ KONIEC; getch(); return 0; } /* =========== Funkcje - definicje ======= */ float suma1(float l1, float l2) /* Definicja funkcji */ return(l1+l2); /* Schemat programu do obliczeń geodezyjnych */ /* Program Nazwa.c */ /* preprocesor: #include - wlaczenia tekstowe bibliotek */ #include
33 /* Program daneuczn.c – dane ucznia */puts(NAZWISKO); puts(KLASA); puts(szkola); KRESKA; printf("\nPodaj swoj ulubiony przedmiot (jeden wyraz): "); gets(przedmiot); /* wprowadzenie imienia */ printf("Wprowadz swoj inicjal: "); c1=getchar(); printf("Podaj rok urodzenia: "); scanf("%d",&rok_urodz); /* wprowadzenie roku */ printf("Twoja srednia ocena "); scanf("%f",&ocena); /* wprowadzenie roku */ printf("Twoj inicjal: "); TAB; putchar(c1); NL; printf("\n %s ma %d lat.",NAZWISKO, (ROK-rok_urodz)); /* wyświetlenie imienia i lat */ printf("Srednia ocena z przedmiotu %s = %.1f ",przedmiot, ocena); KONIEC; getch(); return 0; } float suma_float(float l1, float l2) { return(l1+l2); /* Program Nazwa.c */ /* preprocesor: #include - wlaczenia tekstowe bibliotek i #define - stale makroinstrukcje */ #include
34 Wyniki programu daneucz.c
35 Przykład prostego programu na obliczenie pola kołaZad. Obliczyć pole koła o promieniu Algorytm: Pole koła wyraża się S =Pi*r*r 1) Wersja najprostsza include
36 3) Pole koła – wprowadzenie promienia i formatowanie wydruku/* program polkola3.c */ /* dyrektywy załączajace tzw. nazwane pliki */ #include
37 4) Pole koła w języku C++. Funkcja// Polkola4.cpp #include
38 Pole prostokąta 1) dane wpisane w programie/* polepros1.c - boki a i b w programie */ void main(void) { float a, b; /* deklarujemy zmienne przechowujące boki prostokąta */ float pole; /* deklarujemy zmienną zawierającą wynik obliczeń */ a = 5; b =10; /* przypisujemy im wartości */ pole = a * b; /* obliczamy pole prostokąta (tu równe 50) */ printf("Pole = %f",pole); /* wydruk */ getch(); /* czeka na klawisz */ }
39 Pole prostokąta 2) dane w programie, funkcja przed main()/* polepros2.c - z funkcja /* #include
40 Pole prostokąta 3) dane wprowadzone, funkcja na końcu/* ppros3.c - z funkcja */ #include
41 Pole prostokąta 4) wprowadzanie danych, funkcja* ppros4.c - z funkcja i wprowadzaniem danych */ #include
42 Wyświetlenie czasu C++ - program w Dev C++// Program czas.cpp w jezyku C++ - wyświetlenie czasu - komentarz w C++ #include
43 Podsumowanie 1 – podstawy programowania w CSą w C 2 rodzaje komentarzy /* wielowierszowy w C i C++ */ i jednowierszowy w C++ // - i można w nich pisać uwagi, pomijane przez kompilator. Aby zatrzymać pracę programu, używamy funkcji getch();. Do czyszczenia ekranu służy funkcja clrscr();. Na końcu funkcji main jest zwykle return 0;. W tekście możemy używać tzw. znaków specjalnych, np. przejście do następnej linii \n. Program składa się z ciągu rozdzielonych średnikami instrukcji położonych pomiędzy słowami kluczowymi { i } Instrukcje mogą zawierać wyrażenia oraz wywołania funkcji. Wyrażenia składają się ze stałych, operatorów i identyfikatorów. Identyfikatory są nazwami obiektów składających się na program. Mogą one zawierać litery, cyfry i znaki podkreślenia, nie mogą jednak zaczynać się od cyfr.
44 Podstawowe elementy języka Czestaw znaków (litery, cyfry, znaki specjalne: ! * + \ " < # ( = | { > % ) ~ ; } / ^ - [ : , ? & _ ] ' ) nazwy i słowa zastrzeżone (np. auto break case char const goto if int long register unsigned void volatile while) typy danych (np. int, char, float, doble) stałe (np. 121, 23L, 021, 0x12, 25L, ‘a’, const int a=10; ) zmienne i tablice (np. float zm1, zm2; double tab[10];) deklaracje (np. int i, j; double k; char znak; int main() ) Wyrażenia - to co zwraca element, np. 3.2, a=a+b; k==m; y=x=a+b; b=a[j+1]; Instrukcje - fragmenty tekstu programu powodujące jakąś czynność komputera podczas wykonywania programu, np. p=a*b; printf("Pole=%f",p); k=funkcja_d(5, 6, 17.33);
45 Zestaw znaków C: Litery małe i duże języka łacińskiego (angielskiego)cyfry 0..9 znaki specjalne: ! * + \ " < # ( = | { > % ) ~ ; } / ^ - [ : , ? & _ ] ' . oraz znak odstępu (spacja)
46 Nazwy i słowa zastrzeżone (kluczowe, zarezerwowane)Nazwy służą do identyfikowania elementów programu (stałych, zmiennych, funkcji, typów danych, itd.). Nazwa składa się z ciągu liter i cyfr, z tym, że pierwszym znakiem musi być litera. Znak podkreślenia traktowany jest jako litera. W języku C rozróżniane są duże i małe litery w identyfikatorach. Użycie odstępu w nazwie jest niedozwolone. Niektóre implementacje rozpoznają w nazwie do 8 znaków, inne więcej (do 32)
47 Słowa zastrzeżone Słowa zastrzeżone są to słowa o szczególnym znaczeniu dla języka, których nie wolno używać programiście np. jako nazw zmiennych. Standardowy zestaw znaków zastrzeżonych języka C: auto break case char const goto if int long register unsigned void volatile while Niektóre kompilatory mają niektóre lub cześć z następujących słów kluczowych ada asm entry far fortran huge near pascal Niektóre kompilatory mogą mieć też inne słowa zastrzeżone
48 Podstawowe typy danych i rozmiary danychW języku C występuje tylko kilka podstawowych typów danych: char - jeden bajt, zdolny pomieścić 1 znak int - typ całkowity float - typ zmiennopozycyjne pojedynczej precyzji double - typ zmiennopozycyjny podwójnej precyzji Dodatkowo występuje kilka kwalifikatorów stosowanych z tymi podstawowymi typami. Kwalifikatory short i long odnoszą się do obiektów całkowitych
49 Typy, opis, zakres wartości i reprezentacja danych
50 ZMIENNE i STAŁE, TYPY ZMIENNYCH, DEKLARACJE, OPERATORY, WYRAŻENIAZmienne i stałe są podstawowymi obiektami danych, jakimi posługuje się program. Deklaracje wprowadzają potrzebne zmienne oraz ustalają ich typy i ewentualnie wartości początkowe. Operatory określają co należy z nimi zrobić. Wyrażenia wiążą zmienne i stałe, tworząc nowe wartości.
51 Stałe, zmienne Deklaracje służą do określenia struktury danych programu. Instrukcje programu oddzielamy za pomocą średnika Program powinien być zapisywany z wykorzystaniem wcięć. Podstawowymi obiektami programu są stałe i zmienne. Stała to jakaś konkretna, niezmienna wartość, którą posługujemy się używając konkretnej nazwy symbolicznej, np. const float PI= ; Każde wystąpienie nazwy-stałej w programie zostanie podczas kompilacji zastąpione wartością. Stałe definiuje się za pomocą słowa kluczowego const Zmienna jest wielkością, która może się zmieniać. Posługujemy się nią korzystając z nazwy symbolicznej zwanej też identyfikatorem, np. float r; Możliwe jest definiowanie wielu zmiennych tego samego typu w jednej linii, wystarczy je wtedy rozdzielić przecinkami. KAŻDA ZMIENNA PRZED UŻYCIEM W PROGRAMIE MUSI BYĆ WCZEŚNIEJ ZADEKLAROWANA.
52 Stałe W języku C występują następujące rodzaje stałych:stałe całkowitoliczbowe dziesiętne – znaki 0..9, +., - np ósemkowe – znaki 0..7, +, -; 0 na początku, np szesnastkowe – znaki 0 .. F, +, -; 0x lub 0X na początku, np. 0x, 0X1234 stałe rzeczywiste, - znaki 0.9, +, -, E, e, np E12, 1.2e-3 stałe znakowe - pojedyncze znaki ASCII ograniczone apostrofami, np. ‘A’ ‘#’ ‘’ (spacja) Escape sekwencje, np. \n (nowa linia), \” – cudzysłów, \b - dźwięk łańcuchy znaków - ciąg znaków ograniczony znakami cudzysłowu, np. "Wynik = " "Linia nr 1\nLinia nr2” "A + B = „
53 Stałe całkowitoliczbowe
54 Stałe rzeczywiste Stałe rzeczywiste, zwane zmiennoprzecinkowymi reprezentują liczby dziesiętne. Dozwolony zestaw znaków: E e (E lub e reprezentuje podstawę systemu tj. 10) Uwagi: 1.2*10^-3 można zapisać 1.2E-3 lub 1.2e-3. Stałe rzeczywiste zawierają albo kropkę dziesiętną (np ), albo wykładnik e (np. 1e-2) albo jedno i drugie. Typem stałej zmiennopozycyjnej jest double, chyba, że końcówka stanowi inaczej. Występująca na końcu litera f lub F oznacza obiekt typu float, a litera l lub L - typu long double. Przykłady: E e-5 2e8
55 Deklaracja i inicjalizacja zmiennych rzeczywistychPrzykłady int i, j; /* deklaracja */ float s=123.16e10; /* liczba *10^16 */ i=10; /*inicjalizacja */ double x=10.; /*definicje: deklaracja i inicjacja */ long double x=.12398; double xy= ;
56 Stałe znakowe Stała znakowa jest liczbą całkowitą;Taką stałą tworzy jeden znak ujęty w apostrofy, np. 'x'. Są to więc pojedyncze znaki zamknięte dwoma apostrofami. Zestaw dowolnych widocznych znaków ASCII. Wartością stałej znakowej jest wartość kodu znaku w maszynowym zbiorze znaków. Np. wartością stałej '0' jest liczba 48 - liczba nie mająca nic wspólnego z numeryczną wartością 0. Pewne znaki niegraficzne mogą być reprezentowane w stałych znakowych i napisowych przez sekwencje specjalne, takie jak \n (znak nowego wiersza). Przykłady: 'A' '#' ' ' char a='a';
57 Escape-sekwencje - sekwencje specjalne
58 Stałe napisowe - napisy, łańcuchy znaków (stałe łańcuchowe)Stała napisowa lub napis jest ciągiem złożonym z zera lub więcej znaków, zawartym między znakami cudzysłowu, np. "Jestem napisem". Przykłady: "Wynik = " " + 2 mln $" "Linia nr 1\nLinia nr2" "" "A + B = " Łańcuchy mogą zawierać escape-sekwencje. Łańcuchem pustym są same cudzysłowy . Łańcuch w sposób niejawny jest zakończony znakiem nul czyli \0. Dlatego np. stała znakowa 'K' nie jest równoważna łańcuchowi "K".
59 Łańcuch znaków Łańcuch znaków (napis) można traktować jako tablicę złożoną ze znaków, uzupełnioną na końcu znakiem '\0' Taka reprezentacja oznacza, że praktycznie nie ma ograniczenia dotyczącego długości tekstów. Programy muszą jednak badać cały tekst, by określić jego długość, np. strlen(s) ze standardowej biblioteki. Przykład: Napis "Katowice”, który może być zadeklarowany jako tablica jednowymiarowa, której elementami są znaki, np. char napis[] = "Katowice";
60 Deklaracja i inicjalizacja łańcuchówPrzykłady Char tekst[] = "Katowice” unsigned char teKst[30]= "Taki sobie teKst" char s[10]="\n\fAndrzej\x60"; char str[20]={'\n','\f', 'A', 'n', 'd', 'r', 'z', 'e', 'j', '\x60', '\0'}; char *str1 = "Programowanie w języku C/C++";
61 Stałe wyliczeniowe (enumeration constant)Stałe wyliczeniowe tworzą zbiór stałych o określonym zakresie wartości. Wyliczenie jest listą wartości całkowitych, np. enum boolean {NO, YES}; Pierwsza nazwa na liście wyliczenia ma wartość 0, następna 1 itd., chyba że nastąpi jawnie podana wartość. Przykłady: enum KOLOR {CZERWONY, NIEBIESKI, ZIELONY, BIAŁY, CZARNY} enum KOLOR {red=100, blue, green=500, white, black=700}; red przyjmie wartość 100, blue 101, green 500, white 501, black 700
62 Stałe symboliczne - makrodefinicjeStała symboliczna jest nazwą przedstawiającą inną stałą - numeryczną, znakową lub tekstową. Definicję stałej symbolicznej umożliwia instrukcja #define: #define NAZWA tekst gdzie NAZWA jest nazwą stałej symbolicznej, a tekst jest związanym z tą nazwą łańcuchem znaków Przykłady: Makrodefinicje proste: #define identyfikator
63 Makrodefinicje parametryczne#define identyfikator(idPar1, idPar2,...) ciąg_jedn_leksykalnych Np. #define ILORAZ(a,b) ((a)/(b)) //- makrodefinicja ILORAZ - parametry w nawiasach! #define SUMA(a,b) ((a)+(b)) W trakcie kompilacji nazwy stałych symbolicznych są zastąpione przez odpowiadające im łańcuchy znaków. Ułatwia to parametryzację programu, a także umożliwia zastępowanie często niewygodnych w pisaniu sekwencji programu, tworzenie makrodefinicji, tworzenie własnych dialektów języka, czy nawet języków bezkompilatorowych (na bazie kompilatora C).
64 /* Przykład zastosowana pseudoinstrukcji #define - Program p8.c */#include
65 Zmienne Zmienną nazywamy nazwę (identyfikator) reprezentującą określony typ danych. Zmienna jest to pewien fragment pamięci o ustalonym rozmiarze, który posiada własny identyfikator (nazwę) oraz może przechowywać pewną wartość, zależną od typu zmiennej. W chwili rozpoczęcia pracy programu zmienna powinna posiadać nadaną wartość początkową (nie powinna być przypadkowa). W trakcie pracy programu wartości zmiennych ulegają zwykle zmianom. Należy przewidzieć zakres zmienności tych zmiennych. W języku C wszystkie zmienne muszą być zadeklarowane przed ich użyciem, zwykle na początku funkcji przed pierwszą wykonywaną instrukcją. Deklaracja zapowiada właściwości zmiennych. Deklaracja składa się ona z nazwy typu i listy zmiennych, jak np. int fahr, celsius;
66 Zmienne c.d. W języku C oprócz podstawowych typów: char, short, int, long, float, double występują także tablice, struktury, unie, wskaźniki do tych obiektów oraz funkcje zwracające ich wartości. W przypadku zmiennych należy zwrócić uwagę na 2 zasadnicze rzeczy: (przykład poniżej – program p9.c) nadanie wartości początkowej oszacowanie zakresu zmienności Zmienne mogą być automatyczne oraz zmienne globalne - zewnętrzne. Zmienne automatyczne pojawiają się i znikają razem z wywołaniem funkcji. Zmienne zewnętrzne to zmienne globalne, dostępne przez nazwę w dowolnej funkcji programu. Zmienna zewnętrzna musi być zdefiniowana dokładnie jeden raz na zewnątrz wszystkich funkcji - definicja przydziela jej pamięć.
67 /. Obliczanie objetosci walca - zmienne p9. c. / #include
68 Deklaracje Deklaracje umożliwiają wyspecyfikowanie grup zmiennych określonego typu. Większość kompilatorów dopuszcza nadanie wartości początkowej zmiennej w deklaracji (inicjalizację). Wszystkie zmienne muszą być zadeklarowane przed użyciem. W deklaracji określa się typ, a następnie wymienia jedną lub kilka zmiennych tego typu, np. int lower, upper; char c, line[1000]; W deklaracjach można nadawać zmiennym wartości początkowe, np. char esc='\'; int i=0; float eps=1.0e-5; int limit=MAXLINE+1; Jeśli zmienna nie jest automatyczna, to jej wartość początkową nadaje się tylko raz - jakby przed rozpoczęciem programu; jej inicjatorem musi być wyrażenie stałe. Zmiennym automatycznym jawnie określone wartości początkowe nadaje się za każdym razem przy wywołaniu funkcji lub przy wejściu do zawierającego je bloku. Zmiennym zewnętrznym i statycznym przez domniemanie nadaje się wartość pocztkowa zero. Zmienne automatyczne bez jawnie określonej wartości poczatkowej mają wartości przypadkowe (śmiecie). Kwalifikator const mówi, że wartość zmiennej będzie stała, np. const double e= ; const char mas[]="Uwaga:";
69 Wyrażenia Wszystko co zwraca wartość jest wyrażeniem.Wyrażeniem może być samodzielny element, np. liczba, stała, zmienna. Może to być też kombinacja w/w elementów połączonych znakami operatorów, np. arytmetycznych lub logicznych. Przykłady: PI a=a+b; x=y; x
70 Instrukcje Instrukcje są to fragmenty tekstu programu (zwykle linie), które powodują jakąś czynność komputera w trakcie wykonywania programu. Instrukcje można podzielić na grupy: Instrukcje obliczające wartości wyrażeń, np. a=b+c; Każda taka instrukcja musi być zakończona średnikiem Instrukcje grupujące (złożone) - ograniczone klamrami { }, np. { a=3; b=2.2; p=a*b; printf("Pole=%f",p);} Instrukcje sterujące, warunkowe: if, if…else, switch, while, do…while, for Instrukcje wywołania funkcji: funkcja(parametry_akualne); Np. int funkcja_d(int a, int b, float c); //deklaracja funkcji, gdzieś definicja int k; k=funkcja_d(5, 6, 17.33); //wywołanie funkcji
71 /* Program kalk1.c - początek*/ #include
72 Objaśnienia do programu kalkulatorTyp int (integer) oznacza, że zmienna może przyjmować wartości całkowite z zakresu +/ Jeżeli zamierzamy używać w programie dużych liczb wtedy zamiast typu int używamy typu long. Kompilator już wie, że w kodzie programu będą pojawiać się zmienne a i b i wie ile pamięci musi zarezerwować na ich przechowanie. Następnie wypisujemy na ekranie komunikat, który prosi nas o wpisanie liczby. Program zatrzyma się w tym miejscu i będzie czekał dotąd, aż napiszemy liczbę i zatwierdzimy je ENTERem. Funkcja scanf() służy do odczytu wprowadzonych danych z klawiatury Wzorzec konwersji określa typ zmiennej, którą wpiszemy z klawiatury lub wypiszemy na ekranie.
73 Zmienne typów liczbowych mogą przyjmować wartości tylko z określonych przedziałów liczbowych.
74 Prosty kalkulator – liczby rzeczywiste/* Program kalk2.c */ #include
75 Podsumowanie 2 – liczby, zmienne, komunikatyAby wczytać liczbę należy użyć funkcji scanf w postaci: scanf("wzorzec",&zmienna); Aby wypisać wczytaną w ten sposób liczbę należy użyć funkcji printf, która służy do wypisywania komunikatów. Postać funkcji: printf("Komunikat wzorzec",zmienna); W funkcji scanf zawsze przed nazwą zmiennej używamy znaku &, a nie robimy tego przy używaniu funkcji printf. Zmienna służy do przechowania danych, których wartość ustala się w trakcie działania programu i może być zmieniana. Każda zmienna musi być zadeklarowana przed jej użyciem jako zmienna odpowiedniego typu: int, float, char itp. Do wypisywania komunikatów służy funkcja printf, lub puts a do wczytywania zmiennych funkcja scanf. Do poprawnego użycia obu funkcji należy znać podstawowe wzorce konwersji: %d, %f, %s.
76 Operacje na znakach i łańcuchach znakówTypy znakowe: - deklaracja char zmienna; pojedynczy znak: char znak; np. char zn1=‘a’; char litera; litera = ‘F’; łańcuch znaków (napis, słowo) char *napis; np. char *str1=„Programowanie”; char napis[n]; np. char linia[80]; gets(linia); char imie[20]; scanf("%s",imie); np.char napis[]="Tekst”, np. char pozdrowienie="Jak się masz” Wzorzec konwersji przy wyświetleniu lub wczytywaniu zmiennej typu char %c dla pojedynczego znaku (łańcucha jednoznakowego) np. char znak1; scanf("%c",&znak1); %s dla łańcucha dłuższego niż 1 znak np. char slowo2[20]; scanf("%s",slowo2);
77 /* Program znaki1.c */ #include
78 Przypisanie wartość zmiennej znakowej i napisomPrzypisać wartość zmiennej jednoznakowej możemy na kilka sposobów: w apostrofach: zmienna='a'; poprzez przypisanie kodu znaku: zmienna=97; poprzez wczytanie znaku z klawiatury funkcją scanf(): scanf("%c",&zmienna); Przypisanie wartości do zmiennej dla łańcucha znaków dłuższego niż jeden znak odbywa się podobnie jak w pierwszym przypadku, z tą jednak różnicą, że zamiast apostrofów ' należy używać cudzysłowia " char slowo3[]="Adam"; // definicja
79 Program, który podaje kod wciśniętego przez nas klawisza i znak kodu/* Program, kodkl1.c - podaje kod wciśniętego przez nas klawisza i znak kodu */: #include
80 Odczytanie długości łańcucha znaków – strlen(lancuch)/* dluglanc.c */ #include
81 Inne funkcje operujące na łańcuchach: strlwr, strupr, strcat, strrv, streset – z biblioteki string.hstrcat() - łączy dwa łańcuchy, strcmp() - porównuje dwa łańcuchy rozróżniając małe i duże litery, strlwr() i strupr() - zamienia w danym łańcuchu duże litery na małe i odwrotnie, strrev() - odwraca kolejność znaków w łańcuchu, strset() - wypełnia łańcuch danym znakiem. /* znaki5.c - operacje na tekstach */ #include
82 Podsumowanie 3 –znaki, łańcuchy znakówZmienne liczbowe mogą zawierać się w pewnych zakresach, których nie można przekraczać. Deklaracja zmiennej znakowej: char znak; a zmiennej łańcuchowej: char *slowo; Wartość zmiennej znakowej można przypisać w programie poprzez umieszczenie znaku w apostrofach lub przez napisanie jego kodu. Wartość zmiennej łańcuchowej można przypisać w programie poprzez umieszczenie napisu w cudzysłowie. Zmienne znakowe i łańcuchowe można wczytywać z klawiatury używając funkcji scanf() i odpowiednich wzorców konwersji: %s dla ciągu znaków i %c dla pojedynczego znaku. Każdy znak posiada swój kod ASCII. Kod ASCII mają również znaki nie przedstawione na klawiaturze komputera. np. ß, ö. Łańcuch, który wygląda jak liczba nie jest liczbą. Istnieją funkcje, które potrafią przekonwertować łańcuch liczbowy do postaci liczby. Mając dany łańcuch, możemy odczytać dowolny jego znak używając nawiasów kwadratowych. Pierwszy wpisany znak ma numer 0, a nie 1. Każdy ciąg kończy znak '\0'. Długość łańcucha można ograniczyć przy deklaracji, np.: char slowo[10]; Łańcuchy można ze sobą porównywać, łączyć, odwracać w nich kolejność liter, zmieniać małe litery na duże i odwrotnie, a także przeszukiwać, kopiować na siebie itp. Nazwy funkcji, które to wykonują zawsze zaczynają się na 'str' (z angielskiego: string).
83 Wejście i wyjście programuDo podstawowych funkcji języka C, umożliwiających komunikację z otoczeniem należą: dla operacji wejścia: getchar, gets, scanf; dla operacji wyjścia: putchar, puts, printf W DOS, wyniki wysyłane na ekran mogą być przy pomocy znaku potoku wysłane do pliku lub na drukarkę. Np. p11 > Wynik.txt (do pliku) p11 > PRN (na drukarkę) Funkcja putchar: int putchar(int) Funkcja wysyła pojedynczy znak na zewnątrz (do standardowego strumienia wyjściowego stdout, standardowo na ekran) . Funkcja (makro) zwraca wartość wypisanego znaku lub EOF (jako sygnał błędu).
84 Przykład programu z funkcją putchar#include
85 Funkcja puts Funkcja puts: int puts(const char *s);Wysyła łańcuch s do standardowego strumienia wyjściowego (stdout) i dołącza znak końca wiersza. W przypadku powodzenia operacji wartość jest nieujemna, w przeciwnym wypadku EOF. /* Program puts1.c */ #include
86 Funkcja printf() Funkcja printf() wyprowadza wynik przetwarzania w różnych formatach. printf (łańcuch, lista argumentów); lub inaczej printf(ciag_formatujący, lista parametrów); Ciąg formatujący jest zwykłym ciągiem znaków do wyświetlenia na ekranie. Jednak niektóre znaki mają funkcję specjalną i nie zostaną one po prostu wyświetlone. Takim właśnie znakiem jest znak % . Gdy funkcja printf() go napotka to wie, że po nim wystąpi określenie rodzaju argumentu i formatu jego wyświetlenia na ekranie. Ogólnie ciąg formatujący ma zapis : % [flagi] [szerokość] [precyzja] [modyfiktor wielkości] typ_parametru Tylko "typ_parametru" musi wystąpić po znaku % , natomiast parametry podane w nawiasach kwadratowym są opcjonalne i może ich w ogóle nie być (tak jest w przedstawionym przykładzie). /* Przykłąd 1 z printf() - Program printf1.c */ #include
87 Formaty realizowane przez funkcję printf() (znaki typu w łańcuchach formatujących)
88 Przykład 2 programu z printf()/* Program printf2.c &/ #include
89 Przykład 3 z printf() Wynik /* program printf2.c */#include
90 Przykład 3 z printf() #include
91 Funkcja getchar() int getchar(void)Funkcja odczytuje znak ze standardowego strumienia wejściowego (stdin) i zwraca go po dokonaniu konwersji bez rozszerzenia znakowego. Funkcja przy każdym wywołaniu podaje następny znak z wejścia lub EOF, gdy napotkała koniec pliku. W przypadku błędu lub końca zbioru wartością funkcji jest EOF. Stała symboliczna EOF jest zdefiniowana w nagłówku
92 Zmienne Zmienne służą do tego, aby zapamiętać sobie tymczasową wartość (którą potem można zmienić w każdej chwili według potrzeby). Dane w programie umieszczane są w postaci tzw. zmiennych. Zmienna jest to pewien fragment pamięci o ustalonym rozmiarze, który posiada własny identyfikator (nazwę) oraz może przechowywać pewną wartość, zależną od typu zmiennej. Deklaracja zmiennych typ nazwa_zmiennej; Oto deklaracja zmiennej o nazwie “wiek” typu “int” czyli liczby całkowitej: int wiek; Zmiennej w momencie zadeklarowania można od razu przypisać wartość (inicjalizować): int wiek = 16; W języku C zmienne deklaruje się na samym początku bloku (czyli przed pierwszą instrukcją). Język C nie inicjalizuje zmiennych lokalnych. Oznacza to, że w nowo zadeklarowanej zmiennej znajdują się śmieci - to, co wcześniej zawierał przydzielony zmiennej pamięci. Aby uniknąć ciężkich do wykrycia błędów, dobrze jest inicjalizować (przypisywać wartość) wszystkie zmienne w momencie zadeklarowania.
93 Zasięg zmiennej Zmienne globalne - obejmujące zasięgiem cały program – mogą być dostępne dla wszystkich funkcji programu Deklaruje się je przed wszystkimi funkcjami programu: Zmienne globalne, jeśli programista nie przypisze im innej wartości podczas definiowania, są inicjalizowane wartością 0. Zmienne lokalne – o zasięgu obejmującym pewien blok. Zmienne, które funkcja deklaruje do “własnych potrzeb” nazywamy zmiennymi lokalnymi. Nasuwa się pytanie: “czy będzie błędem nazwanie tą samą nazwą zmiennej globalnej i lokalnej?”. Otóż odpowiedź może być zaskakująca: nie. Natomiast w danej funkcji da się używać tylko jej zmiennej lokalnej. Tej konstrukcji należy, z wiadomych względów, unikać. int a=1; /* zmienna globalna */ int main() { int a=2; /* to już zmienna lokalna */ printf("%d", a); /* wypisze 2 */ }
94 Stałą deklaruje się z użyciem słowa kluczowego const: Stałe Stała pozostanie taka sam w trakcie przebiegu programu. Nadaje się jej wartość w czasie pisania programu a nie w czasie działania. Stała, różni się od zmiennej tym, że nie można jej przypisać innej wartości w trakcie działania programu. Stałą deklaruje się z użyciem słowa kluczowego const: const typ nazwa_stałej=wartość; Dobrze jest używać stałych w programie, ponieważ unikniemy wtedy przypadkowych pomyłek a kompilator może często zoptymalizować ich użycie (np. od razu podstawiając ich wartość do kodu). Przykład: const int WARTOSC_POCZATKOWA=5; int i=WARTOSC_POCZATKOWA; WARTOSC_POCZATKOWA=4; /* tu kompilator zaprotestuje */ int j=WARTOSC_POCZATKOWA;
95 Stałe symboliczne Stała symboliczna jest nazwą zastępującą ciąg znaków #define NAZWA tekst Np. #define PI #define MIEJSCOWOSC Sosnowiec #define WYNIK printf(("Pole=%d\f %”,pole1) #define WZOR1 (a*b)
96 Typy zmiennych, rzutowanie:Określając typ zmiennej przekazuje się kompilatorowi informację, ile pamięci trzeba zarezerwować dla zmiennej, a także w jaki sposób wykonywać na nim operacje. Jeśli potrzebujemy w pewnym miejscu programu innego typu danych to stosujemy rzutowanie. W takim wypadku stosujemy konwersję (rzutowanie) jednej zmiennej na inną zmienną float a = 7.0 / 2; /* float a = 7 / 2 da wynik 3; */ float b = (float)1000 * 1000 * 1000 * 1000 * 1000 * 1000; // rzutowanie printf("%f\n", a); Istnieją wbudowane i zdefiniowane przez użytkownika typy danych.
97 Podstawowe typy zmiennychW języku C wyróżniamy następujące podstawowe typy zmiennych. char – typ znakowy - jednobajtowe liczby całkowite, służy do przechowywania znaków; int- liczby całkowite - typ całkowity, o długości domyślnej dla danej architektury komputera; float – liczby rzeczywiste - typ zmiennopozycyjny (zwany również zmiennoprzecinkowym), reprezentujący liczby rzeczywiste (4 bajty); double – liczby rzeczywiste - typ zmiennopozycyjny podwójnej precyzji (8 bajtów); short - liczby całkowite krótkie long - liczby całkowite długie long double - liczby zmiennoprzecinkowe podwójnej precyzji długie Typ int przeznaczony jest do liczb całkowitych.
98 Liczby całkowite można zapisać na kilka sposobówSystem dziesiętny: np. 21; 13; 45; 156 System ósemkowy (oktalny): np. 010; (Cyfry 0 ..7) Cyfra 8 nie jest dozwolona. Jeżeli chcemy użyć takiego zapisu musimy zacząć liczbę od 0. System szesnastkowy (heksadecymalny), np. 0x10, 0xff. Aby użyć takiego systemu musimy poprzedzić liczbę ciągiem 0x. Wielkość znaków w takich literałach nie ma znaczenia.
99 Typ float dla liczb zmiennoprzecinkowychTen typ oznacza liczby zmiennoprzecinkowe czyli ułamki. Istnieją dwa sposoby zapisu: System dziesiętny, np , (z kropką dziesiętna) System "naukowy" – wykładniczy, np. 6e2 (czyli 6 * 102 ) 3.4e-3 (czyli 3.4 * 10(-3_ Typ double dla liczb zmiennoprzecinkowych Double - czyli "podwójny" - oznacza liczby zmiennoprzecinkowe podwójnej precyzji. Oznacza to, że liczba taka zajmuje zazwyczaj w pamięci dwa razy więcej miejsca niż float (np. 64 bity wobec 32 dla float), ale ma też dwa razy lepszą dokładność. Domyślnie ułamki wpisane w kodzie są typu double. Możemy to zmienić dodając na końcu literę "f": 1.4f (znaczy float), 1.4 (znaczy double)
100 Typ char dla znaków Jest to typ znakowy, umożliwiający zapis znaków ASCII. Może też być traktowany jako liczba z zakresu Znaki zapisujemy w pojedynczych cudzysłowach (czasami nazywanymi apostrofami), by odróżnić je od łańcuchów tekstowych (pisanych w podwójnych cudzysłowach). Np. ‘A’, ‘a’, ‘!’, ‘$’ Pojedynczy cudzysłów ' zapisujemy '\'' a null (czyli zero, które między innymi kończy napisy) tak: '\0'
101 Inne znaki specjalne '\a' - alarm (sygnał akustyczny terminala) '\b' - backspace (usuwa poprzedzający znak) '\f' - wysuniecie strony (np. w drukarce) '\r' - powrót kursora (karetki) do początku wiersza '\n' - znak nowego wiersza '\"' - cudzysłów '\'' - apostrof '\\' - ukośnik wsteczny (backslash) '\t' - tabulacja pozioma '\v' - tabulacja pionowa '\?' - znak zapytania (pytajnik) '\ooo' - liczba zapisana w systemie oktalnym (ósemkowym), gdzie 'ooo' należy zastąpić trzycyfrową liczbą w tym systemie '\xhh' - liczba zapisana w systemie heksadecymalnym (szesnastkowym), gdzie 'hh' należy zastąpić dwucyfrową liczbą w tym systemie, np. ‘\xAFF’
102 Specyfikatory – signed, unsigned, short, longSpecyfikatory - słowa kluczowe, które postawione przy typie danych zmieniają jego znaczenie. signed – liczba ze znakiem i unsigned – nieujemna (bez znaku) short i long są wskazówkami dla kompilatora, by zarezerwował dla danego typu mniej lub więcej pamięci. Mogą być zastosowane do dwóch typów: int i double (tylko long), mając różne znaczenie. Jeśli przy short lub long nie napiszemy, o jaki typ nam chodzi, kompilator przyjmie wartość domyślną czyli int. Przykłady: signed char a; /* zmienna a przyjmuje wartości od -128 do 127 */ unsigned char b; /* zmienna b przyjmuje wartości od 0 do */ unsigned short c; unsigned long int d;
103 Wyrażenia i operatory - Odejmowanie a=a-5; // 10Wyrażenia są zapisami operacji, jakie mają być wykonane. Wyrażenie składa się ze stałych, zmiennych i operatorów. Kolejność wykonywania działań określają nawiasy i priorytet operatorów. Najważniejsze operatory: Operator Działanie Przykład Wynik * Mnożenie a=2*5; /*1 0 */ / dzielenie a=a/10.0; /* 1.0 */ + dodawanie a=a+14; /* 15 */ - Odejmowanie a=a-5; // 10 % reszta z dzielenia c=10 % 3; // wynik = 1
104 Operatory Do wykonania obliczeń zmieniających dane w informacje, niezbędne są operatory. Operator to symbol mówiący komputerowi, jak ma przetwarzać dane. Operatory, z punktu widzenia liczby argumentów dzielimy na dwuargumentowe i jednoargumentowe. a op b - op jest operatorem 2-argumentowym, np. a+b; a*b; a/b; a%b; op a - op jest operatorem jednoargumentowym, np. -a; -(a+b); !a
105 Operatory można pogrupować wg cech funkcjonalnych na grupy:operatory arytmetyczne: +, -, *, /, % (dzielenie modulo - reszta) operatory porównania – relacyjne: ==, !=, <, >, <=. >+ operatory logiczne: && (and), || (or), ! (not) operatory bitowe operatory przypisania: =, += (a=+b a=a+b), -=, *=, /+, %=… operatory unarne inkrementacji i dekrementacji: ++, -- (np. x++, x--, ++x, --x) operatory rozmiaru: sizeof(obiekt) operatory konwersji: (nazwa typu) wyrażenie operator warunkowy: Op1 ? Op2: Op3; operator przecinkowy: Op1, Op2, ..., Opn operatory wskazywania ->
106 Przykład programu do wydania reszty - ilość banknotów 20-, 10-, 5- i 1- dolar./* change.c */ #include
107 Operatory relacyjne (relacji i porównania)W języku C i C++ występują następujące operatory porównania: Wykonują one odpowiednie porównanie swoich argumentów i zwracają jedynkę jeżeli warunek jest spełniony lub zero jeżeli nie jest. Operatory relacji: > >= < <= (mają ten sam priorytet) Operatory przyrównania: == (równe) != (różne) (priorytet niższy) Operator Znaczenie < Mniejszy (relacja) <= Mniejszy lub równy > Większy >= Większy lub równy (relacja) == Równy (porównanie) != Nierówny (porównanie)
108 Przykłady wyrażeń z operatorami porównania#include
109 Podejmowanie decyzji – operacje logiczne! Negacja – not logiczne nie && - Koniunkcja - and – logiczne i || - Alternatywa - or – logiczne lub Przykład: int main() { int a, b, c, d; a=1; b=0; c = a&&b; // 0; d = a||b; // 1 cout << c << endl << d; return 0; } Wynik: 1
110 Operator przypisania i wieloznakowe operatory przypisaniaInstrukcją przypisania jest trójka elementów zapisana jako: identyfikator operator_przypisnia wyrażenie Identyfikator to np. nazwa zmiennej. Wyrażenie – dowolne wyrażenia Operator Zapis w C Znaczenie = a=b; a=b // przypisanie zwykłe += a=+b; a-a+b; // 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; != a=!b; a=a!b; ~= a=~b; a=a~b;
111 Wieloznakowe operatory przypisaniaZapis skrócony postaci a #= b; gdzie # jest jednym z operatorów: +, -, *, /, &, |, ^, << , >>. Ogólnie zapis a #= b; jest równoważny zapisowi a = a # b;
112 Wyniki Operatory przypisania wieloznakowe a= 1 a+=5 czyli a=a+5 = 6// Program wielop1.cpp #include
113 Operatory unarne (jednoargumentowe)inkrementacji ++ // zwiększenie o 1, typu x=a++; // postinkrementacja. Najpierw przypisanie do x wartości a, potem zwiększenie a o 1 x= ++a; // preinkrementacja Najpierw zwiększenie a o 1 , potem przypisanie a do x dekrementacji -- // zmniejszenie o 1, typu x=i- - // postdekrementacja (przypisanie i zmniejszenie a) x=--i // predekrementacja (zmniejszenie a i przypisanie) minus jednoargumentowy np. a=-b;
114 Przykładowy program w C++#include
115 Program w C – operator jednoargumentowy#include
116 Rzutowanie, operator konwersjiZadaniem rzutowania jest konwersja danej jednego typu na daną innego typu. Konwersja może być niejawna (domyślna konwersja przyjęta przez kompilator) lub jawna (podana explicite przez programistę). Przykłady konwersji niejawnej: int i = 42.7; /* konwersja z double do int */ float f = i; /* konwersja z int do float */ double d = f; /* konwersja z float do double */ unsigned u = i; /* konwersja z int do unsigned int */ f = 4.2; /* konwersja z double do float */ i = d; /* konwersja z double do int */ Operator konwersji (rzutowania) pozwala na jawne przekształcenie typów danych Zapis operatora konwersji (nazwa typu) wyrażenie Np. int m, n; n=10; m=n+(int) ; Wyrażenie jest przekształcane wg reguł dla typu określonego przez nazwę typu. Operator rzutowania służy do jawnego wymuszenia konwersji
117 Wyniki 42 Konwersja niejawnaint i = 42.7; /* konwersja z double do int 42 */ float f = i; /* konwersja z int do float */ double d = f; /* konwersja z float do double */ unsigned u = i; /* konw. z int do unsigned int 42*/ f = 4.2; /* konwersja z double do float 4.2*/ i = d; /* konwersja z double do int 42*/ /* Program konwn.c */ #include
118 Wyniki Wartosci poczatkowe: /* Program p35.c ( operator konwersji ) */#include
119 Operator warunkowy ? Operator warunkowy ?Wyrażenie z użyciem operatora warunkowego: Op1 ? Op2: Op3; wyrażenie_warunkowe ? wyrażenie_na_tak: wyrażenie_na_nie; Operator warunkowy (?:) pozwala zapisać w bardziej zwartej formie pewne konstrukcje programowe wymagające użycia instrukcji if. Np. z = (a>b)? a:b; /* z=max(a,b) */
120 Program z zastosowaniem operatora warunkowego - funkcja max/* C++ - Operator warunkowy - funkacja max */ #include
121 Operator przecinkowy/wyliczeniowy, (koma)Wyrażenie wyliczeniowe ma postać: Op1, Op2, ..., Opn gdzie Opi, (i=1..n) są operandami dowolnych typów. Opracowanie tego wyrażenia polega na obliczeniu wartości kolejnych operandów, począwszy od Op1, a skończywszy na Opn. Typ i wartość całego wyrażenia określa operand Opn. W C++ wynik wyrażenia wyliczeniowego jest l-wartością. Poprawne jest więc wyrażenie: (a+=b, c-=d, c*=a)++. Przykład: int n=10, i=2, k=4, wynik; wynik=(n-=i, k+=2, i*=5): W wyniku obliczenia powyższego wyrażenia zmienne uzyskają następujące wartości: n = n-i = 10-2=8 k = k+2 = 4+2=6 i = i*5 = 2*5=10 (ostatni operand) wynik = wartość ostatniego operandu, czyli 10 // Program operprz1.cpp #include
122 Operator przecinkowy – przykładowy programOperator przecinkowy stosowany jest m.in. w instrukcjach for, np. do sterowania równoległego 2 indeksami, a także w wywołaniach funkcji. Stosując wyrażenia wyliczeniowe w wywołaniach funkcji należy pamiętać o użyciu nawiasów, np.: func(i, (i+=k, k++), j); - funkcja otrzymuje tylko 3 parametry.
123 /*Program opprz2.c operator przecinkowy ) */#include
124 Biblioteki, procedura, funkcjaBiblioteki (moduły) - zapisane są w nich różne funkcje i procedury do użycia w programie. Funkcja - jest to podobnie jak procedura, pewien wyraz, który nie dość że coś wykona to również zwróci nam rezultat tego co zrobił, przykładowymi funkcjami są: pierwiastkowanie, sinus, cosinus. Zwracaną wartością niekoniecznie musi być liczba może to być również inny rodzaj zmiennych.
125 Typy całkowite czyli zbiory, których elementami są wyłącznie liczby całkowite.Nazwa typu Zakres Ilość bajtów unsigned char 0..255 1 short int unsigned short 2 int long 4 unsigned long
126 Typy rzeczywiste Nazwa typu Zakres Znaczące cyfry - liczba cyfr Format- rozmiar float -3.4E E-38, 3.4E E38 11-12 4 Bajty double 1.7E E308 15-16 8 B long double 3.4E E4932 19-20 80-bitowy 10 B
127 Typy bool, char, string TYP LOGICZNY - bool- typ ten może przyjmować jedynie dwie wartości: true (prawda) – 1 lub false (fałsz) - 0 #include
128 Najważniejsze typy dostępne w C i C++Nazwa Znaczenie Zakres wartości Przykład int (short int) liczba całkowita ze znakiem -3276S -14574 float liczba rzeczywista -1.1*10E E1038 el7 char znak znaki o kodach 0.255 'a' string napis (łańcuch, ciąg znaków) ciąg do 255 znaków ‘’Napis’’ bool wartość logiczna prawda (true) lub fałsz (false) false unsigned int słowo 56412 bajt 127 unsigned char 0.255 long długa liczba całkowita ze znakiem S double długa liczba rzeczywista -1.7E *E308 -1.8e+234 long double bardzo długa liczba rzeczywista -3.4E E4932 4.5e2345
129 Wyrażenia i operatory Wyrażenia są zapisami operacji, jakie mają być wykonane. Wyrażenie składa się ze stałych, zmiennych i operatorów. Kolejność wykonywania działań określają nawiasy i priorytet operatorów. Najważniejsze operatory: Operator Działanie Przykład Wynik * Mnożenie a=2*5; /*1 0 */ / dzielenie a=a/10.0; /* 1.0 */ + dodawanie a=a+14; /* 15 */ Odejmowanie a=a-5; // 10 % reszta z dzielenia c=10 % 3; // wynik = 1
130 Instrukcja przypisaniaInstrukcja przypisania - służy do przypisania zmiennym wartości. Jest postaci: zmienna:=wyrażenie; Przykład: /* Program przypis1.c */ #include
131 Instrukcje wejścia Do wczytywania danych stosuje się instrukcje getchar(), gets(), scanf() w C i C++ oraz cin >> w C++ Funkcja gets() służy do wczytania pojedynczej linii. Np. char linia[80]; gets(linia); getchar umożliwia wprowadzenie pojedynczego znaku Np. char znak; znak=getchar(); putchar(znak); scanf() to uniwersalna funkcja do wprowadzania wszelkiego typu informacji. Składa się z łańcucha sterującego i listy danych. scanf(„lancuch_sterujacy”,lista_danych); Np. float ilosc; scanf(„%f”,&ilosc); Łańcuch sterujący zawiera specyfikatory formatowania – jak będą interpretowane dane wejściowe. Specyfikatory formatowania: %d – wprowadza liczbę całkowitą, %u – liczba bez znaku, %f – liczba float, %e – liczba w systemie wykładniczym, %g – liczba dziesiętna w najkrótszym zapisie, %c – dana znakowa char, %s – łańcuch znaków, %o – liczba ósemkowa, %x – liczba szesnastkowa
132 Przykład programu z instrukcjami we/wy/* Program wczytuj1.c */ #include
133 Wersja druga programu wczytywania danych z gets/* Program wczytuj2.c */ #include
134 Program na pole i obwód koła/* program kolo.c oblicza obwod i pole koła o promieniu podanym */ #include
135 Instrukcja złożona - grupującaInstrukcję złożoną można porównać z nawiasami w arytmetyce. Umożliwia zgrupowanie wielu instrukcji i traktowanie jako jednej. Czasem jest niezbędna przy korzystaniu z rozkazów strukturalnych takich jak: if … then else czy do …while Ma postać: { {ciąg_instrukcji_oddzielonych_średnikami} } Np. a=3; b=10; Trzy powyższe instrukcje są traktowane jako jedna.
136 Preprocesor, dyrektywy, funkcje biblioteczne CPreprocesor przetwarza wiersze programu rozpoczynające się znakiem #. Taki wiersz nazywamy dyrektywą preprocesora. Podstawową dyrektywą jest #include, umożliwiająca dołączenie do programu pliku o podanej nazwie. Ma 2 postacie: #include
137 Operatory relacyjne Do ustalania warunków przydają się także inne operatory, tzw. Operatory relacyjne = = równy < mniejszy > większy <= mniejszy lub równy >= większy lub równy != nierówny
138 Instrukcja warunkowa if... then... [else...]Pozwala na wykonanie lub zaniechanie wykonania pewnych czynności, w zależności od konkretnego warunku logicznego. Instrukcja ma następującą składnię: if (warunek) instrukcja; np. if (x>30) y=20; If (warunek) {instrukcja_1; instrukcja_2; … instrukcja_N;} np. if (min
139 Przykłady programów z if/* Program If1. c */; #include
140 Operatory logiczne: && (and), || (or), ! (not)Mogą one przyjmować wartości true czyli 1 lub 0 czyli false Za ich pomocą możemy skonkretyzować nasz warunek. Np. if (warunek1) && (warunek2) instrukcja; Operator &&(koniunkcja) sprawia, że instrukcja zostanie wykonana tylko w przypadku gdy spełnione są oba warunki. Gdybyśmy zastąpili go operatorem || (alternatywa), to wystarczyłby tylko jeden spełniony. Drugi przypadek if (! Warunek) instrukcja; W tym przypadku instrukcja będzie wykonana jeśli warunek nie jest spełniony (ma wartość false). Do tego właśnie służy operator ! (czyli negacja).
141 /* program rowkwadr.cpp */#include
142 switch - instrukcja wyboruInstrukcja switch jest wykorzystywana kiedy zachodzi konieczność podjęcia kilku decyzji, gdy wykonanie różnych części programu jest uzależnione od stanu pewnej zmiennej. Podstawą podjęcia decyzji jest wyrażenie typu całkowitego, znakowego lub logicznego Instrukcja switch ma postać: switch (zmienna lub wyrażenie) { case wartosc_1: Instrukcje_1; break; // break nie musi być case wartosc_N: Instrukcje_N; break; default Instrukcje_domyslne; }
143 Instrukcja wyboru switch .. case – przykład programu// Program Miesiace.cpp - podaje nazwe miesiaca na podstawie jego numeru #include
144 Instrukcje iteracyjne Organizacja obliczeń cyklicznychInstrukcje iteracyjne służą do wielokrotnego wykonywania pewnych sekwencji instrukcji i zazwyczaj są one nazywane po prostu pętlami. Instrukcja while - dopóki Warunek wykonuj Instrukcję; Składnia: while (wyrazenie) instrukcja; Instrukcja do while – powtarzaj Instrukcję dopóki Warunek Składnia: do instrukcja while (wyrazenie); Instrukcja for: np. dla i od 1 do N - dla i=W1 do W2 wykonuj Instrukcję For (i=W1; i
145 Instrukcja while Instrukcja ma postać: while (warunek) instrukcja;Powoduje wykonywanie instrukcji tak długo, dopóki spełniony jest warunek Warunek jest najczęściej dowolnym wyrażeniem porównania, które powinno w wyniku dać wartość logiczną (true lub false). Można posłużyć się tutaj operatorami relacyjnymi: ==, !=, <, >, <=, >= Instrukcja wykonywana jest tak długo, dopóki warunek ma wartość true.
146 Przykład programu z while – suma 6 podanych liczb// Program Suma6.cpp; Oblicza sumę 6 podanych liczb #include
147 Program z do … while // Program ilosc.cpp wyznacza długość ciągu liczb zakończonych 0 #include
148 Instrukcja for Instrukcja jest wygodna, gdy z góry można określić liczbę powtórzeń. Postać instrukcji: Dla zmienna=wart_pocz do wart_konc do instrukcja; W zapisie w C najczęściej for (wart_pocz; zmienna
149 Programy z for /* Program for1.cpp Wydruk cyfr od 1 do 5 */#include