1 Sprawy organizacyjne 1. Zasady zaliczenia przedmiotusamodzielne wykonanie zadanego programu oraz odpowiedź na pytania dotyczące szczegółów implementacji i wprowadzenie na bieżąco drobnych zmian, kolokwium 2. Kontakt 3. Podręcznik Grębosz J., Symfonia C++, Oficyna Kallimach, Kraków, 1999
2 Wprowadzenie do programowania1. Dlaczego C? 2. Na jakie wynagrodzenie może liczyć programista Polska Reszta świata
3 Pierwszy program w C (1) Uruchom program Dev-C++ (C:\Dev-Cpp\devcpp.exe) Utwórz nowy projekt – menu File\New\Project... Wybierz opcje „C Project”, „Console Application” i wpisz nazwę projektu.
4 Pierwszy program w C (2) 4. Zapisz projekt na dysku.5. Napisz program: 6. Wybierz z menu opcje Execute\Compile & Run lub naciśnij F9. 7. Zapisz program pod zaproponowaną nazwą.
5 Typy danych Nazwa Wielkość w bajtach Zakres wartości char 1-128 do 127 unsigned char 0 do 255 short 2 do unsigned short 0 do long 4 do unsigned long 0 do int unsigned int float 1.2*10-38 do 3.4*1038 double 8 2.2* do 1.8*10308 bool true lub false
6 Najczęściej używane operatory (1)Znaczenie Przykład Operatory arytmetyczne + Dodawanie x=y+z; - Odejmowanie x=y-z; * Mnożenie x=y*z; / dzielenie x=y/z; Operatory przypisania = Przypisanie x=10; += Dodanie i przypisanie x+=10; -= Odjęcie i przypisanie x-=10; *= Mnożenie i przypisanie x*=10; /= Dzielenie i przypisanie x/=10; &= Iloczyn bitowy i przypisanie x&=0x02; |= Suma bitowa i przypisanie x|=0x02;
7 Najczęściej używane operatory (2)Znaczenie Przykład Operatory relacyjne = = Równy if(x= =10) {...} != Różny od if(x!=10) {...} < Mniejszy od if(x<10) {...} > Większy od if(x>10) {...} <= Mniejszy lub równy if(x<=10) {...} >= Większy lub równy if(x=>10) {...} Operatory logiczne && Iloczyn logiczny (koniunkcja) if(x&&0xFF) {...} || Suma logiczna (alternatywa) if(x||0xFF) {...}
8 Najczęściej używane operatory (3)Znaczenie Przykład Operatory jednoargumentowe * Wyłuskanie (dereferencja) int x = *y & Adres obiektu (referencja) int* x = &y ~ Negacja bitowa x= ~0x02 ! Negacja logiczna if(!valid){...} ++ Inkrementacja x++; -- Dekrementacja x--;
9 Instrukcje warunkowe (1)Składnia instrukcji warunkowych if: if(warunek) {blok instrukcji} 2. if(warunek) else {alternatywny blok instrukcji} if(warunek 1) {blok instrukcji 1} else if(warunek 2) {blok instrukcji 2} else{alternatywny blok instrukcji}
10 Instrukcje warunkowe (2)Składnia instrukcji switch: switch(wyrażenie) { case wyrażenie_stałe1: insrukcje1; case wyrażenie_stałe2: insrukcje2; case wyrażenie_stałe3: insrukcje3; ... default: instrukcje4; }
11 Instrukcje warunkowe (3)Przykład 1 Przepisz i uruchom poniższy program: #include
12 Instrukcje warunkowe (4)Przykład 2 Przepisz i uruchom poniższy program: #include
13 Pętle (1) Pętla for for(poczatek; koniec; przyrost) { instrukcje }Przykład: #include
14 Pętle (2) Pętla while while(warunek) { instrukcje }#include
15 Pętle (3) Pętla do-while do { instrukcje } while(warunek);#include
16 Pętle (4) Pętla do-while do { instrukcje } while(warunek);#include
17 Pętle (5) Zadanie 1. Napisz program wykorzystujący pętle wypisujący kolejno wartości 21, 22, 23, ..., 220. Zadanie 2. Napisz program wypisujący wartości funkcji sin i cos w przedziale od 0 do 360 stopni z krokiem 45 stopni. Wskazówki: Funkcje sin() i cos() przyjmują argumenty w radianach. Wartość liczby pi można obliczyć np. jako 4.0*atan(1.0).
18 Instrukcja break (1) Instrukcja break użyta wewnątrz pętli powoduje wyjście z najbardziej zagnieżdżonej pętli. Przykład: #include
19 Instrukcja break (2) Instrukcja break użyta w instrukcji switch powoduje wyjście z tej instrukcji. #include
20 Instrukcja continue Instrukcja continue może być użyta tylko wewnątrz instrukcji pętli. Powoduje przejście do instrukcji sprawdzającej warunek. #include
21 Czas istnienia i zasięg widoczności (1)Zmienne lokalne deklarowane są w obrębie bloku. Do zmiennych tego rodzaju można odwoływać się tylko w obrębie bloku, wewnątrz którego zostały one zadeklarowane. Przykład: int main(int argc, char *argv[]) { auto int i; register char j; static long k; system("PAUSE"); return 0; }
22 Czas istnienia i zasięg widoczności (2)zmienne lokalne można deklarować w trzech klasach pamięci: auto, static i register, zmienne automatyczne (klasy auto) tworzone na stosie w momencie rozpoczęcia wykonywania bloku, a usuwane natychmiast po zakończeniu wykonywania bloku, zmienne automatyczne nie zachowują wartości pomiędzy poszczególnymi wykonaniami bloku, zmienne rejestrowe (klasy register) zachowują się jak zmienne automatyczne, ale są przechowywane w rejestrach procesora lub w szybkiej pamięci, a nie na stosie. Czas dostępu do takiej zmiennej jest krótszy niż do zmiennej automatycznej, zmienne rejestrowe nie posiadają adresu, nie można dla nich używać operatora &, zmienne statyczne (klasy static) przechowywane są w obszarze pamięci programu. Są tworzone w momencie tworzenia programu, a kasowane w momencie jego zakończenia, zmienne statyczne nie zmieniają wartości między kolejnymi wykonaniami bloku, pamięć, w której umieszczane są zmienne automatyczne i rejestrowe ma zawsze przypadkową wartość, - pamięć, w której umieszczane są zmienne statyczne jest zerowana przed uruchomieniem programu.
23 Czas istnienia i zasięg widoczności (3)Zmienne globalne są deklarowane poza jakimkolwiek blokiem i mogą być użyte w dowolnym miejscu w programie po ich deklaracji. Tworzone są w obszarze danych programu w momencie jego uruchomienia i usuwane w momencie zakończenia. Pamięć, w której umieszczane są zmienne globalne jest zerowana przed uruchomieniem programu.
24 Czas istnienia i zasięg widoczności (4)REGUŁA PRZESŁANIANIA - Zasięgiem zmiennych lokalnych jest blok, w którym są zadeklarowane, - Zasięgiem zmiennych globalnych jest część pliku od miejsca deklaracji do końca pliku, - Jeśli w zasięgu zmiennej zostanie zadeklarowana zmienna o tej samej nazwie, to nowa zmienna staje się dostępna, a zmienna pierwotna przestaje być widoczna, czyli zostaje zasłonięta, - zmienna zasłonięta zaczyna być ponownie widoczna, gdy kończy się zasięg zmiennej zasłaniającej.
25 Czas istnienia i zasięg widoczności (5)REGUŁA PRZESŁANIANIA Przykład: #include
26 Modyfikator const Modyfikator constZmienna z modyfikatorem const może zostać zainicjalizowana w momencie tworzenia za pomocą operatora przypisania. Użycie modyfikatora sprawia, że zmienna jest taktowana jako zmienna tylko do odczytu. Przykład: #include
27 Funkcje (1) Funkcja to wyróżniona część programu realizująca ściśle określone zadanie. Funkcje składają się z nagłówka i ciała. Nagłówek funkcji typ_wartsoci nazwa_funkcji(parametry_formalne) Przykłady: long silnia(int n); void drukuj(char a, int d); int fi_przelicz_harmonogram(int har_id); Parametry formalne określają wartości przekazywane do funkcji w momencie jej wywołania. Parametry można przekazywać przez wartość lub przez referencję. Przy przekazanie parametru przez wartość w momencie wywołania funkcji tworzona jest zmienna lokalna o podanej nazwie i do niej jest kopiowana wartość parametru. W momencie zakończenia wykonania funkcji zmienne związane z parametrami przestają istnieć. Zmiana wartości parametrów wewnątrz funkcji nie powoduje zmiany wartości w funkcji wywołującej.
28 Funkcje (2) - ciało funkcji składa się z dowolnej ilości deklaracji i instrukcji, - każdy parametr musi mieć oddzielną specyfikacje typu, Przykład: long potega(int podstawa, int wykladnik){} /*dobrze*/ long potega(int podstawa, wykladnik){} /*BŁĄD!*/ wywołanie funkcji składa się z nazwy funkcji i ewentualnych wyrażeń oddzielonych przecinakami ujętych w okrągłe nawiasy, np. potega(3,4). Na podstawie podanych wyrażeń przed wywołaniem funkcji zostają obliczone jej parametry aktualne.
29 Funkcje (3) - ciało funkcji składa się z dowolnej ilości deklaracji i instrukcji, - każdy parametr musi mieć oddzielną specyfikacje typu, Przykład: long potega(int podstawa, int wykladnik){} /*dobrze*/ long potega(int podstawa, wykladnik){} /*BŁĄD!*/ wywołanie funkcji składa się z nazwy funkcji i ewentualnych wyrażeń oddzielonych przecinakami ujętych w okrągłe nawiasy, np. potega(3,4). Na podstawie podanych wyrażeń przed wywołaniem funkcji zostają obliczone jej parametry aktualne.
30 Funkcje (4) INSTRUKCJA return;Powoduje wyjście z aktualnie wykonywanej funkcji. Instrukcja może wystąpić w dowolnym miejscu w ciele funkcji. Instrukcja return może wystąpić z wyrażeniem lub bez wyrażenia. Jeśli podano wyrażenie, to jego wartość przed wyjściem z funkcji jest obliczana i zwracana. Przykład: long silnia(int n) { long wynik; int i; if (n <= 0) return 1; wynik = 1; for (i = 1; i <= n; i ++) wynik *= i; return wynik; }
31 Funkcje (5) Przykład: #include
32 Funkcje (6) Zadanie 3. Zmodyfikuj funkcję long potega(int, int) tak, aby pokazywała poprawnie wartości liczby podniesionej do zerowej potęgi.
33 Lista częstych błędów 1) syntax error at end of inputBrak zamykającego nawiasu 2) undefined reference to XXXXX Brak zdefiniowanej zmiennej lub funkcji XXXXX Błąd w słowie kluczowym lub w nazwie funkcji 3) syntax error before "YYYY" Brak znaku ";" przed słowem YYYY 4) missing terminating " character Brak zamknięcia cudzysłowu
34 Funkcje printf (1) Funkcja printf służy do zapisywania danych w standardowym strumieniu wyjściowym. Funkcja zwraca liczbę wyświetlonych znaków. int printf(char * Format [, wartość, ...]); Funkcja analizuje na początku pierwszy argument i na jego podstawie wypisuje kolejne wartości. Ilość wartości musi być zgodna z przekazanym formatem. Format składa sie z tekstu i informacji o koniecznych konwersjach. Informacje o konwersji zaczynają się znakiem "%". Przykłady: printf("Witaj świecie\n"); /*Witaj świecie*/ printf("20 %% 10 = 0"); /*20 % 10 = 0*/
35 Funkcje printf (2) Przykłady: Określanie konwersji:d - akceptuje parametr typu całkowitego i wykonuje konwersję do zapisu całkowitego ze znakiem, u - akceptuje parametr typu całkowitego i wykonuje konwersję do zapisu całkowitego bez znaku, o - akceptuje parametr typu całkowitego i wykonuje konwersję do zapisu całkowitego bez znaku w systemie ósemkowym, u - akceptuje parametr typu całkowitego i wykonuje konwersję do zapisu całkowitego bez znaku w sytemie szesnastkowym, f - akceptuje wartość typu float lub double i wykonuje konwersję do postaci [-]ddd.ddd, E - akceptuje wartość typu float lub double i wykonuje konwersję do postaci liczby zmienneprzecinkowej postaci [-]d.ddd+|-dd, c - akceptuje i wypisuje pojedynczy znak, s - akceptuje string (char*), p - akceptuje wskaźnik (void *) i wypisuje go w postaci szesnastkowej Przykłady: printf("%d+%d = %d\n", 5, 5, 5+5); /* 5+5 = 10 */ printf("Jestes %d. gosciem na tej stronie",234 ); /*Jestes 234. gosciem na tej stronie*/
36 Funkcje printf (3) Polskie znaki \ + kod znaku Kody znaków polskich:206 - ć 210 - ł 230 - ś 242 - ó 245 - ą 251 - ę 253 - ź 276 - ż 344 - ń
37 Funkcje scanf int printf(char * Format [, wartość, ...]);Funkcja scanf odczytuje dane ze standardowego strumienia wejściowego, wykonuje ich konwersję w zależności od podanego formatu i zachowuje rezultat w podanym miejscu w pamięci int printf(char * Format [, wartość, ...]); Funkcja scanf analizuje Format i na podstawie informacji zawartych w tym tekście, odczytuje ze standardowego strumienia wejściowego wartości. Ilość wartości musi być zgodna z przekazanym formatem. Kody konwersji są analogiczne jak w funkcji printf Przykład 1.: int i; scanf("%d", &i); Przykład 2.: char tytul[50]; scanf("%[^\n]", tytul);
38 Zadanie Zadanie 4. Napisz program obliczający średnią podanych liczb.Napisz program obliczający pole i obwód prostokąta, trójkąta, koła i trapezu o podanych przez użytkownika wymiarach. W programie utwórz funkcje zwracające wymagane wartości.