860 likes | 1.03k Views
Podstawy Informatyki – Ćwiczenia – Język C Zajęcia 1: Organizacja. Michał Karbowańczyk mak@zsk.p.lodz.pl http://zskl.p.lodz.pl/~mak Pokój nr 14 (parter) Poniedziałek 10 – 11 Czwartek 16 – 17 Sobota 14 – 15 w weekendy zjazdowe Organizacja zajęć Dyscyplina, obecność Sposób zaliczenia.
E N D
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 1: Organizacja • Michał Karbowańczykmak@zsk.p.lodz.plhttp://zskl.p.lodz.pl/~makPokój nr 14 (parter)Poniedziałek 10 – 11Czwartek 16 – 17Sobota 14 – 15 w weekendy zjazdowe • Organizacja zajęć • Dyscyplina, obecność • Sposób zaliczenia
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 1: Organizacja • Przedmiot zajęć:Podstawy programowania w języku C • Dlaczego język C • Literatura drukowana – olbrzymi wybórZalecane nazwiska: Kernighan, Ritchie • Kursy online • Narzędzia: środowisko Dev-CPPhttp://bloodshed.net
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 1: Program zajęć • Rzut oka na program zajęć1: Organizacja2, 3: Struktura programu, włączanie bibliotek, funkcja main. Komentarze. Pojęcie zmiennej. Identyfikator. Podstawowe typy danych – int, float, char, bool. 4, 5: Deklaracja zmiennej i stałej. Operator podstawienia. Konwersje niejawne i ich skutki. Konwersje jawne. Operatory arytmetyczne.6, 7: Instrukcja warunkowa if / if … else. Operatory porównania i logiczne. Typowe błędy. Wyrażenie warunkowe.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 1: Program zajęć • Rzut oka na program zajęć – c.d. :8, 9: Pętla for. Tablice jednowymiarowe. Napisy. 10, 11: Pętle while i do…while. Bloki programu. Zakres i widoczność zmiennej. 12: Tablice dwuwymiarowe.13, 14: KOLOKWIUM, na którym wszyscy osiągają znakomite wyniki. 15: Omówienie wyników kolokwium
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 2: Pierwszy program #include <iostream.h> //Włączenie biblioteki iostream /* To jest program, który nic nie robi, ale jest potrzebny na ćwiczeniach PI. Autor: Michał Karbowańczyk, SZSK */ int main (int argc, char *argv[])// Tych parametrów nie będziemy używali { cout << "Hello world!" << endl; //wypisanie powitania return 0; //wartość przekazywana do systemu } • Proszę zwrócić uwagę na komentarze! • Włączanie bibliotek – dyrektywa #include • Wartości zwracane do systemu
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 3: Pojęcie zmiennej • Pojęcie zmiennej-> zmienna – obszar pamięci przechowujący informacje-> typ – sposób interpretacji zawartości pamięci-> identyfikator – nazwa umożliwiająca odwołanie się do zmiennej
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 3: Identyfikator • Składnia identyfikatora-> duże i małe litery, cyfry, znak podkreślnika-> litery wyłącznie z alfabetu angielskiego-> nie może zaczynać się od cyfry • -> nie może być słowem kluczowym-> duże i małe litery SĄ ROZRÓŻNIANE! Alfa jest innym identyfikatorem niż alfa -> identyfikator musi być unikatowy-> identyfikator musi mieć sens
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 3: Identyfikator • Proszę wskazać ewentualne błędy w poniższych identyfikatorach:a) Let’sgo b) hagirac) 15alfa d) returne) wartośćElementu f) wartosc_elementug) _underlined_identifier h) starry*identifierh) checkout_the_letter j) value(test)
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 3: Typy proste - liczbowe • Typ całkowity int-> wyraża liczby całkowite-> zakres : - (2^15) … 2^15-1 (- 32768 … 32767)-> odmiana unsigned: 0 … 2^16-1 (0 … 65535)-> odmiana long: -(2^31) … 2^31-1 (ok. -2 mld … 2 mld)-> odmiana unsigned long: 0 … 2^32-1 (ok. 4 mld) • Typ rzeczywisty float-> wyraża liczby rzeczywiste-> zakres: [+/-] 3.4e-38 … 3.4e38 • Typ rzeczywisty double-> wyraża liczby rzeczywiste-> zakres: [+/-] 1.7e-308 … 1.7e308-> odmiana long: [+/-] 3.4e-4932 … 1.1e4932
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 3: Typy proste • Typ znakowy char-> wyraża znaki, ale także liczby-> wartości liczbowe 0 … 127-> znaki ujęte w apostrofach, np. ‘A’-> wartości liczbowe odpowiadają kodom ASCII znaków-> ‘A’ – 65 ‘a’ – 97 ‘0’ - 48 • Typ logiczny bool-> wyraża wartości logiczne true i false.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 4: Deklaracja zmiennej • Najprostsza postać deklaracji zmiennej:typidentyfikator; • Przykład:int indeks;char tmp; • Tak zadeklarowana zmienna ma nieznaną z góry wartość. Prowadzi to często do trudnych do zdiagnozowania błędów w czasie wykonywania programu. Deklarując zmienną należy więc nadać jej wartość (zainicjalizować ją) float cisnieniePowietrza=0.0; • Zmienne deklarować można w każdym miejscu programu, jednak zaleca się grupowanie deklaracji na początku każdego bloku. • Każda deklaracja zmiennej powinna być opatrzona komentarzem!
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 4: Deklaracja zmiennej i stałej • Można zadeklarować więcej niż jedną zmienną tego samego typu używając jednej deklaracji.int a, b, c;char d, e, f=‘a’; // tylko zmienna f jest zainicjalizowana!float x=0.0, y=1.0, z=x; • Deklaracja stałej wyróżniana jest słowem const. Inicjalizacja stałej jest obowiązkowa.const int wspolczynnikAlfa=0;const float beta=1.0, gamma=-1.2e-3; • Po co stosujemy stałe? -> zwiększają czytelność programu -> ułatwiają modyfikacje programu
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 4: Operator podstawienia • Operator = jest nazywany operatorem przypisania lub podstawienia. Powoduje on przeniesienie wartości argumentu znajdującej się po jego prawej stronie (prawego operandu) do argumentu po jego lewej stronie (lewego operandu). • Kolejność działania operatora podstawienia: 1) oblicz wartość prawego operandu 2) dokonaj konwersji wartości, jeśli to potrzebne i możliwe 3) przepisz wartość do lewego operandu. • Przykład: a=2+3; 1) oblicz wartość wyrażenia 2 + 3 ( -> 5) 2) podstaw tą wartość do zmiennej a.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 4: Operator podstawienia • Wyrażenie z użyciem operatora podstawienia ma swoją wartość i można jej użyć w innym wyrażeniu, np.int a=0, b=0;a=2+(b=3+a);Jakie wartości mają teraz zmienne a i b ? • W szczególności możliwa jest deklaracja:float x, y, z=x=y=0.0;Wszystkie zmienne zostają zainicjowane wartością 0.0 • Lewy operand operatora przypisania musi być L-wartością.NIE są L-wartościami m. in. literały i wyrażenia arytmetyczne.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 4: Deklaracja zmiennej - ćwiczenie • Znajdź ewentualne błędy w poniższych deklaracjach:a) int a=0; b) int x; c) const int z;d) float a=0.0, b=1.0, c=a=3.0; e) int a_s;f) f: float; g) var t: integer;h) const char escape=17;
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 4: Konwersje niejawne i jawne • Jeżeli prawy operand ma inny typ niż lewy operand, operator przypisania próbuje automatycznie „przełożyć” wartość prawego operandu na typ lewego operandu, wykonuje więc konwersję. • Konwersję wykonywaną przez operator przypisania nazywamy niejawną, gdyż nie jest ona w żaden sposób zaznaczona w tekście programu. • Nie powinno się dopuszczać do występowania konwersji niejawnych. Jeśli zachodzi taka potrzeba, należy użyć konwersji jawnej w postaci: (typ_pożądany) wartość • Przykład:int a=0;float b=1.0;a=b; //konwersja niejawna - unikać!a=(int)b; //konwersja jawna
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 4: Dopuszczalne konwersje niejawne • Dopuszcza się pozostawienie konwersji niejawnych, jeśli z góry wiadomo, że konwersja nie spowoduje zmiany wartości wyrażenia, np: • Konwersja z typu całkowitego na typ całkowity o większym zakresieint i; long int li; unsigned int ui;Konwersje niedozwolone: i=li; i=ui; ui=i; ui=li;Konwersje dozwolone: li=i; li=ui; • Konwersja z typu rzeczywistego na typ rzeczywisty o większej precyzjifloat f; double d; long double ld;Konwersje niedozwolone: f=d; f=ld; d=ld;Konwersje dozwolone: ld=f; ld=d; d=f; • Konwersje między typem znakowym a całkowitym
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 4: Dopuszczalne konwersje jawne • Często potrzebne są konwersje pomiędzy typami całkowitymi i rzeczywistymi. Konwersje takie powinny być zapisywane jawnie. • Konwersja liczb rzeczywistych na całkowite daje w wyniku część całkowitą liczby rzeczywistej (żargonowo „obcięcie w dół”), np. (int)5.3 daje w wyniku 5. • Konwersja liczb całkowitych na rzeczywiste może być obarczona błędem wynikającym ze skończonej reprezentacji liczb rzeczywistych! • Konwersja nie jest L-wartością! Nieprawidłowy jest np. zapis:int a;(float)a=3.3;
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 4: Konwersje typu logicznego • Typ logiczny nie powinien być poddany konwersji zarówno jawnej, jak i niejawnej. Niestety, często programiści nie stosują się do tego zalecenia. • Konwersja liczby na typ logiczny daje w wyniku false, jeśli liczba ma wartość 0 lub 0.0; w przeciwnym wypadku daje w wyniku true. • Konwersja wartości false na wartość liczbową daje w wyniku 0 lub 0.0; konwersja wartości true daje w wyniku na ogół wartość 1 lub 1.0
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 5: Operatory arytmetyczne • + dodawanie - odejmowanie * mnożenie / dzielenie (lewego operandu przez prawy)% reszta z dzielenia (lewego operandu przez prawy) • Kolejność operatorów: zgodnie z regułami matematyki. • Operator % działa tylko na liczbach całkowitych.Operator / użyty na liczbach całkowitych daje wynik całkowity i jest to część całkowita dzielenia lewego operandu przez prawy.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 5: Operatory arytmetyczne a konwersje • Jeśli oba operandy są tego samego typu, wynik operatora arytmetycznego jest także tego typu. • Jeśli jeden operand jest typu rzeczywistego a drugi całkowitego, ten drugi jest poddany konwersji na typ rzeczywisty i wynik jest typu rzeczywistego. Ta konwersja powinna zostać zapisana jawnie. • Jeśli jeden operand jest typu rzeczywistego o większej precyzji a drugi rzeczywistego o mniejszej precyzji, ten drugi jest poddany konwersji na typ o większej precyzji i wynik jest tegoż typu. Ta konwersja może pozostać niejawna. • Jeśli jeden operand jest typu całkowitego o większym zakresie a drugi całkowitego o mniejszym zakresie, ten drugi jest poddany konwersji na typ o większym zakresie i wynik jest tegoż typu. Ta konwersja może pozostać niejawna.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 5: Operatory arytmetyczne - ćwiczenie • Obliczyć wartość wyrażeń. Jeśli w wyrażeniu powinna znajdować się konwersja jawna, wskazać to miejsce.int a=1, b=2, c=3;float x=1.0, y=2, z=3.0e0;a) b * c + a;b) b * (c + a);c) (b * c) + a;d) c/2;e) c/2.0;f) c%b;g) c%y;h) a+c/b-a;i) (a+c)/(b-a);j) (a+c)/(float)(b-a);
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 5: Inne operatory arytmetyczne • Operatory z jednoczesnym podstawieniem+= -= *= /= %=Przykład: a+=b; jest równoznaczne z a=a+b; • Operatory inkrementacji i dekrementacji (tylko dla liczb całkowitych!)++ zwiększenie o 1 -- zmniejszenie o 1UWAGA! Ma znaczenie z której strony operandu znajduje się operator ++ i --:int a=0, b=1, c=0, d=1;a=b++; //a jest równe 1, b jest równe 2c=++d; //c jest równe 2, d jest równe 2 • Ćwiczenie: obliczyć wyniki wyrażeń (podać wartość zmiennych):int a=1, b=2;float x=1.0, y=2.0;a) a+=b; b) a/=b--; c)a/=x++; d) a*=++b;e) x*=(float)a++; f) y-=y-1.0
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 6: Instrukcja warunkowa if • Instrukcja warunkowa if pozwala na wykonanie lub nie pewnego fragmentu programu w zależności od spełnienia lub nie pewnego warunku. • Najprostszy wariant instrukcji warunkowej:if (warunek) instrukcja; • warunek jest dowolnym wyrażeniem logicznym. • instrukcja jest wykonywanawtedy i tylko wtedy, gdy warunek ma wartość logiczną true.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 6: Operatory porównania. • Warunki najczęściej konstruuje się używając operatorów porównania: ==, !=, <, >, <=, >= • Operatory porównania == (równe) i != (różne) działają na każdym typie, przy czym po obu stronach operatora powinna być wartość tego samego typu. • Operatory < (mniejsze), > (większe), <= (mniejsze lub równe) i >= (większe lub równe) działają na wartościach liczbowych. • Operatory porównania dokonują konwersji tak samo jak operatory arytmetyczne, i powinno się unikać tych konwersji zgodnie z przedstawionymi poprzednio zasadami.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 6: Operatory porównania – typowe błędy • Istnienie automatycznych konwersji niejawnych umożliwia powstawanie bardzo popularnego w języku C i zarazem trudnego do wychwycenia błędu. • int a = 0;Wyrażenie:a == 2ma wartość logiczną falseWyrażenie:a = 2ma wartość logiczną true (dlaczego?) • Błąd powstał na skutek nie wpisanego znaku =.Jak się przed nim chronić?2 == a jest równoważne a == 22 = a jest błędem (dlaczego?)
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 6: Operatory porównania • Operatory porównania wykonywane są PO operatorach arytmetycznych, w związku z tym:4 < 2 + 3ma wartość logiczną true; najpierw policzona jest wartość wyrażenia po prawej stronie, a później dokonywane porównanie. • W bardziej skomplikowanych przypadkach nalezy posługiwać się nawiasami.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 6: Instrukcja warunkowa if - ćwiczenie • Dane są zmienne a i b typu całkowitego. Napisać fragment programu, który wypisze na ekranie słowo "tak", jeśli zmienna a jest podzielna przez b.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 6: Instrukcja warunkowa if • Składnia instrukcji warunkowej przewiduje wystąpienie pojedynczej instrukcji po wyrażeniu warunkowym. • W zapisieif (warunek)instrukcja1;instrukcja2;tylko wykonanie instrukcji1 jest warunkowane przez warunek. instrukcja2 jest wykonywana bezwarunkowo!
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 6: Instrukcja warunkowa if • Objęcie większej liczby instrukcji warunkiem jest możliwe dzięki zastosowaniu instrukcji blokowej jak w poniższym przykładzie:if (warunek){instrukcja1;instrukcja2;} • Częstym błędem jest postawienie średnika tuż po wyrażeniu warunkowym:if (warunek);instrukcja;Wbrew naszym intencjom instrukcja jest wykonywana bezwarunkowo!
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 7: Operatory logiczne • Operatory logiczne służą do budowania złożonych wyrażeń logicznych. • Operator negacji (przeczenia): !Operator iloczynu logicznego (logiczne 'i'): &&Operator sumy logicznej (logiczne 'lub'):|| • Operatory logiczne wykonywane są po operatorach porównania, zatem ma sens wyrażenie: a == 7 && b >= 9W bardziej skomplikowanych przypadkach nalezy stosować nawiasy. • Przykład: obliczyć wartość logiczną wyrażeń:((2 > 3) || (!(3.0 != 3.0e0))) && (true == false)(4 * 2 + 1 < 4 * 3) || ((9 – 2 + 2 * 5 < 67) && (1e3 != 1e2))
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 7: Instrukcja warunkowa if .. else • Klauzula else pozwala na wykonanie instrukcji wtedy i tylko wtedy, gdy warunek nie jest spełniony. • Przykład: if (0 == a % 2) cout << "Liczba jest parzysta";else cout << "Liczba jest nieparzysta"; • Zastosowanie w tym przypadku klauzuli else zamiast powtarzania instrukcji if zwiększa czytelność programu, a zmniejsza ryzyko popełnienia błędu.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 7: Instrukcja warunkowa if .. else • Połączenie klauzuli else z następną instrukcją if umożliwia skonstruowanie wielu wariantów, z których wykonany zostanie tylko jeden. • Przykład:if (a > 0) cout << "liczba dodatnia";else if (a < 0) cout << "liczba ujemna";else cout << "zero";
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 7: Instrukcja warunkowa - ćwiczenie • Zmienna g jest typu int i opisuje aktualną godzinę. Napisać ciąg instrukcji wypisujący na ekranie działanie człowieka, który je śniadanie o 8, obiad o 14 i kolację o 20, między śniadaniem a godziną 16 pracuje, między 17 a 22 odpoczywa, w pozostałe godziny śpi.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 7: Instrukcja warunkowa if • Instrukcje warunkowe można zagnieżdżać wewnatrz ich samych. Należy stosować tę technikę, aby jak najbardziej uprościć wyrażenia warunkowe. • Przykład:if (a==0 && b!=0 && c<1) instrukcja1;if (a==0 && b==0 && c<1) instrukcje2; • Oto równoważny fragment programu:if (a==0 && c<1) if (b!=0) instrukcje1;else instrukcje2;Efekt: 3 wyrażenia porównania zamiast 6 i tyleż mniej możliwości popełnienia błędu.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 7: Instrukcja warunkowa - ćwiczenie • Na pewnym wydziale studia zaoczne pracują według następującego schematu:Tydzień nieparzysty: sobota rano, niedziela po południuTydzień parzysty: sobota po południu, niedziela wcale Mając do dyspozycji zmienne: t oznaczającą numer tygodnia i d oznaczającą numer dnia, trzeba napisać ciąg instrukcji, który wypisze na ekranie na jaka porę należy pójść danego dnia, jeśli w ogóle trzeba.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 8: Instrukcja pętli for • Pętla for umożliwia wielokrotne wykonywanie instrukcji (fragmentu programu). • Ogólna postać pętli for jest następująca:for(wyrazeniePocz; warunekKont; wyrazenieKroku) instrukcja; • Przebieg wykonania petli jest następujący:1. Wykonaj wyrażenie początkowe;2. Jeśli warunek kontynuacji ma wartość false, opuść pętlę;3. Wykonaj instrukcję;4. Wykonaj wyrażenie kroku;5. Przejdź do 2.
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 8: Instrukcja pętli for • Przykład: Jakie liczby ukażą się na ekranie w wyniku wykonania poniższych instrukcji? • int i=13;...for (i=1; i<=5; i++) cout << i; • Programiści często stosują deklaracje zmiennej w wyrażeniu początkowym:for (float x=0.0, step=0.1; x <= 10.0; x += step) cout << (x*x);
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 8: Instrukcja pętli for • Wyrażenie początkowe może być puste:int i=-5;...for ( ; i<=5; i++) cout << i; • Warunek kontynuacji może być pusty i jest wtedy traktowany jak wartość true. Prowadzi to do nieskończonego zapętlenia:for (i=1; ; i++) //petla nieskonczona cout << i;for (i=1; true; i++) //jak wyzej cout << i;
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 8: Instrukcja pętli for • Podobnie jak w przypadku instrukcji if, aby wykonać wielokrotnie więcej niż jedną instrukcję, należy posłużyć się instrukcją blokową:int k;for (k=1; k <= 10; k++){ cout << "k=" << k << endl; cout << "1/k=" << 1/k << endl;} • Częstym błędem jest umieszczenie średnika po instrukcji for:char z;for (z='a'; z<='z'; z++); cout << z;
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 8: Instrukcja pętli for • Wyrażenie kroku może być puste:int i;for (i=1; i<=5; ){ i++; cout << i;}int i;for (i=1; i<=5; ){ cout << i; i++;} • Należy zwrócić uwagę na kolejność operacji!
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 8: Pętla for – typowe błędy • Warunek kontynuacji powinien być niezmienny przez cały czas wykonywania pętli, a zmiany parametrów pętli powinny odbywać się tylko w wyrażeniu kroku. • int i, j=0;for (i=0; i<=5; i++) cout << (i+=i/(i-4*i*0.5));for (i=10; i>j; i--) cout << (j = (i > j ? i - 1 : i + 1));
Podstawy Informatyki – Ćwiczenia – Język CZajęcia 8: Pętla for – ćwiczenie • Niech M i N będa pewnymi wartościami całkowitymi. Napisać fragment programu, który obliczy iloczyn wszystkich liczb całkowitych od M do N włącznie.