Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Podstawy programowania w języku C i C++. Temat : Język C: typy danych, operatory i wyrażenia. Instrukcje wejścia, wyjścia. Przykłady programów. Cele nauczania:

Podobne prezentacje


Prezentacja na temat: "Podstawy programowania w języku C i C++. Temat : Język C: typy danych, operatory i wyrażenia. Instrukcje wejścia, wyjścia. Przykłady programów. Cele nauczania:"— Zapis prezentacji:

1 Podstawy programowania w języku C i C++. Temat : Język C: typy danych, operatory i wyrażenia. Instrukcje wejścia, wyjścia. Przykłady 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 się z podstawowymi typami danych w języku C, operatorami, instrukcjami wprowadzania danych (wejścia) i wyprowadzania wyników (wyświetlenie na ekranie). Umiejętność zastosowania instrukcji we/wy w prostych programach. Praktyczne wprowadzanie, uruchamianie i kompilacja programów z instrukcjami wejścia/wyjścia.. Cele operacyjne lub szczegółowe cele kształcenia Po zakończeniu lekcji uczeń będzie umiał: stosować podstawowe typy danych i operatory w C oraz wprowadzać dane i wyprowadzać wyniki

2 Część wstępna Część wstępna - organizacyjna: przywitanie, sprawdzenie obecności, wpisanie tematu lekcji. - 5 min Część merytoryczna Ogniwo 1. Uświadomienie uczniom celów – pogadanka - 2 min Celem zajęć jest zapoznanie się z podstawowymi typami danych w języku C, operatorami, instrukcjami wprowadzania danych (wejścia) i wyprowadzania wyników (wyjścia). Umiejętność zastosowania instrukcji we/wy w prostych programach. Po 2 lekcjach : uczeń uruchamia program Turbo C, wpisuje i uruchamia programy, stosując instrukcje we/wy.

3 Ogniwo 2Poznanie nowych faktów – pogadanka – 3 min Do programowania w każdym języku należy znać typy danych oraz metody wprowadzania danych oraz wyprowadzania wyników. W 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 rzeczywisty pojedynczej precyzji; double - typ rzeczywisty (zmiennopozycyjny) podwójnej precyzji. Dodatkowo występuje kilka kwalifikatorów: short i long, signed i unsigned. Są jeszcze inne typy danych jak: void (typ funkcji nie zwracającej wartości), enum (typ wyliczeniowy) oraz typ wskaźnikowy. Do wprowadzania danych w języku C i C++ służą funkcje getchar(), gets(), scanf(). W języku C++ instrukcja cin >> (strumień wejściowy cin i operator wejściowy >>) Do wyprowadzania – funkcje: puchar() – znak, puts() - łańcuch, printf() – uniwersalna funkcja. W języku C++ instrukcja cout << (strumień wyjściowy cout i operator wyjściowy <<)

4 Ogniwo 3. Kształtowanie pojęć, poznawanie, systematyzowanie wiedzy - 35 min 1 ) Przypomnienie podstawowych elementów języka C: Programy w C mają rozszerzenia plików C a w C++ rozszerzenie CPP. Po skompilowaniu program ma rozszerzenie EXE. Polecenia kończymy średnikiem. Kod funkcji umieszcza się w nawiasach klamrowych. Rozróżniane są w C duże i małe litery. Stałe oznaczamy zwykle dużymi literami. W definicji poprzedzone słowem const Komentarze typu /* … */ w C i C++ mogą być wielo-liniowe oraz typu // w jednej linii w C++ Program zawiera zawsze: funkcję main(). Na końcu funkcji main jest zwykle return 0;. Zwykle program zawiera nagłówek jako komentarz,, dyrektywy preprocesora, zwłaszcza #include, czasem #define – stałe i makroinstrukcje. Przed funkcją główną mogą być zadeklarowane lub zdefiniowane stałe, zmienne globalne oraz funkcje. Zmienna musi być zadeklarowana prze użyciem. Aby zatrzymać program, używamy funkcji getch();. Do czyszczenia ekranu służy funkcja clrscr();. 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 instrukcji rozdzielonych średnikami Instrukcje położone są 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 (nazwa stałych, zmiennych, funkcji). 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. Mogą zaczynać się od liter lub znaku _

5 2) Podstawowe typy danych w jezyku C W języku C każda zmienna ma swój typ, który musi być określony przed pierwszym użyciem. Istnieją wbudowane i zdefiniowane przez użytkownika typy danych. W języku C wyróżniamy następujące podstawowe wbudowane typy zmiennych. – char – typ znakowy - jednobajtowe liczby całkowite, służy do przechowywania znaków (1 Bajt); – int- liczby całkowite - typ całkowity, o długości domyślnej dla danej architektury komputera (2 B); – float – liczby rzeczywiste - typ zmiennopozycyjny (zwany również zmiennoprzecinkowym), reprezentujący liczby rzeczywiste (4 Bajty); – double – liczby rzeczywiste - typ zmiennopozycyjny podwójnej precyzji (8 B); Specyfikatory – signed, unsigned, short, long - słowa kluczowe, które zmieniają znaczenie – short - liczby całkowite krótkie – long - liczby całkowite długie – long double - liczby zmiennoprzecinkowe podwójnej precyzji długie

6 Specyfikatory – signed, unsigned, short, long Specyfikatory - 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 255 */ unsigned short c; unsigned long int d;

7 Typy zmiennych, zakresy, rozmiar, zapis Zapis liczb: dziesiętne, z kropką dziesiętną i ewentualnie E (postać m*10^c) ósemkowe z 0 na początku, szesnastkowe z 0x na początku.

8 Typ int - dla liczb całkowitych Typ int przeznaczony jest do liczb całkowitych. Liczby te możemy zapisać na kilka sposobów: System dziesiętny: np. 21; 13; 45; 156 System ósemkowy (oktalny): np. 010; 027. (Cyfry 0...7). Cyfra 8 nie jest dozwolona. Jeżeli chcemy użyć takiego zapisu musimy zacząć liczbę od 0 System szesnastkowy (heksadecymalny, cyfry 0...F), np. 0x10, 0xff. Aby użyć takiego systemu musimy poprzedzić liczbę ciągiem 0x Wielkość znaków w takich literałach nie ma znaczenia.

9 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 (apostrofach), by odróżnić je od łańcuchów tekstowych (pisanych w podwójnych cudzysłowach). Np. A, a, !, $ Pojedynczy cudzysłów ' zapisujemy '\'' a nul (czyli zero, które między innymi kończy napisy) tak: '\0'

10 Znaki specjalne – kody sterujące (escape sekwencje): '\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; np. \101 – litera K '\xhh' - liczba zapisana w systemie heksadecymalnym (szesnastkowym), gdzie 'hh' należy zastąpić 2-cyfrową liczbą w tym systemie, np. \x4B – litera K

11 Escape-sekwencje - sekwencje specjalne

12 3) Operatory i wyrażenia w języku C Operatory umożliwiają zapisywanie wyrażeń. Operatory matematyczne (arytmetyczne): +, -. *. /, % Operator przypisania =, np. a=5; 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; 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.

13 Wyrażenia, instrukcje Wyrażenia są zapisami operacji. Wyrażenie składa się ze stałych, zmiennych i łączących je operatorów. Kolejność wykonywania działań określają nawiasy oraz priorytet operatorów. Wyrażenie – wszystko co zwraca wartość. 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, arytmetycznych lub logicznych. Przykłady: 3.2; PI; a=a+b; x=y; x

14 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

15 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 jest operatorem jednoargumentowym, np. - -a; -(a+b); !a

16 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 ->

17 Najczęściej używane operatory:

18

19 Inne operatory: Operator przecinkowy (,), stosowany w instrukcjach cyklu for a także w wywołaniach funkcji. Para wyrażeń oddzielonych operatorem obliczana jest od lewej do prawej. Rezultatem jest wyrażenie po prawej stronie. Ogólny zapis: wyrażenie po lewej, wyrażenie po prawej Instrukcja for z operatorem przecinkowym: for (wyr1; wyr2; wyr3a; wyr3b) { instrukcje} np. int i, j; for(i=0; j=10; j>=0; i++; j--) {printf(\n %2i %2i %6.3f %6.3f, i, j, sqrt((double) i), sin((double) j)); } Przykład wywołania funkcji: f(a, b, (k=2, k+7), d) – wywołanie funkcji z 4 argumentami, trzeci ma wartość 9. Operatory wskazywania: & operator adresu, - adres zmiennej np. &count – adres zmiennej count * operator adresowania pośredniego,. operator składowej, -> operator wskaźnikowy składowej Operatory wejścia >> i wyjścia << w C++

20 Opis szczegółowy operatorów Operatory arytmetyczne OperatorDziałaniePrzykładWynik * Mnożeniea=2*5; /*1 0 */ / dzieleniea=a/10.0;/* 1.0 */ + dodawaniea=a+14;/* 15 */ - Odejmowaniea=a-5; // 10 %reszta z dzieleniac=10 % 3; // wynik = 1

21 Operatory relacyjne Do ustalania warunków przydają się także inne operatory, tzw. Operatory relacyjne większy = większy lub równy Operatory porównania = = równy != nierówny 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 )

22 Przykłady wyrażeń z operatorami porównania #include int main() { int a, b, wyn, k=1, m=2, n=3; a=10; b=3; wyn=a>b; cout << (m

23 Podejmowanie decyzji – operacje logiczne 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: 0 1

24 Operator przypisania i wieloznakowe operatory przypisania Instrukcją przypisania jest trójka elementów zapisana jako: identyfikator operator_przypisnia wyrażenie Identyfikator to np. nazwa zmiennej. Wyrażenie – dowolne wyrażenia OperatorZapis w CZnaczenie =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;

25 Wieloznakowe operatory przypisania Zapis skrócony postaci a #= b; gdzie # jest jednym z operatorów: +, -, *, /, &, |, ^, >. Ogólnie zapis a #= b; np. a+=b a=a+b; jest równoważny zapisowi a = a # b; a=a+b;

26 // Program wielop1.cpp – wieloznakowe operatory // przypisania #include #include int main() { int a = 1, b; cout << "Operatory przypisania wieloznakowe\n"; cout << "a= " << a << endl; a += 5; /* to samo, co a = a + 5; czyli 6 ; */ cout << "a+=5 czyli a=a+5 = " << a << endl; a /= a - 3; /* to samo, co a = a / (a - 3); czyli 6/(6-3)=3 */ cout << "a/=a-3 czyli a=a/(a-3) = " << a << endl; a +=1; // 4 cout << "a+=1 czyli a=a+1 = " << a << endl; a %= 2; /* to samo, co a = a % 2; 4%2 */ cout << "a%2 czyli a=a%2 = " << a << endl << endl;; a=10; cout << "Nowe a = " << a << endl; b= (a++, a+=10); // 21 cout << "b= (a++, a+=10) = " << b; // 21 cout << " bo a=a+10 = 20 i b=a++ = a+1 =21" << endl; getch(); } Wyniki Operatory przypisania wieloznakowe a= 1 a+=5 czyli a=a+5 = 6 a/=a-3 czyli a=a/(a-3) = 2 a+=1 czyli a=a+1 = 3 a%2 czyli a=a%2 = 1 Nowe a = 10 b= (a++, a+=10) = 21 bo a=a+10 = 20 i b=a++ = a+1 =21

27 Operatory unarne (jednoargumentowe) Operatory unarne – 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;

28 Operatory unarne a++, ++a - przykładowy program w C++ #include main() { int a=1, x, b; cout <<"Operatory zwiekszania i zmniejszania" << endl; cout << "a= " << a << endl; x=a++; cout << "x=a++ " << endl; cout << "x= " << x << " a= " << a << endl; x=++a; cout << "x=++a " << endl; cout << "x= " << x << " a= " << a << endl; b=10; cout << "\nb=" << b << endl; cout << "Wydruk b++ = " << b++ << endl; cout << "Wartosc b po wydruku =" << b << endl; cout << "++b = " << ++b << endl; getch(); } Wyniki Operatory zwiekszania i zmniejszania a= 1 x=a++ x= 1 a= 2 x=++a x= 3 a= 3 b=10 Wydruk b++ = 10 Wartosc b po wydruku =11 ++b = 12

29 #include main() { int i=5 ; printf("\n "); printf("\n i = %i ", i ); printf("\n i = %i ", ++i ); printf("\n i = %i ", i ); printf("\n i = %i ", i++); printf("\n i = %i ", i ); printf("\n i = %i ", --i ); printf("\n i = %i ", i ); printf("\n i = %i ", i--); printf("\n i = %i ", i ); printf("\n i = %i ", -i ); printf("\n "); getch(); } Wyniki i = 5 i = 6 i = 7 i = 6 i = 5 i = Program w C – operator jednoargumentowy ++, -- Instrukcja printf("\n i = %i", ++i); jest równoważna sekwencji instrukcji: i=i+1; printf("\n i = %i",i); Instrukcja printf("\n = %i", i++); jest równoważna sekwencji instrukcji: printf("\n i =%i",i); i=i+1;.

30 Rzutowanie, operator konwersji Zadaniem 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

31 /* Program konwn.c */ #include #define NL printf("\n"); int main() { int i; float f; double d; unsigned u; i = 42.7; printf("%i",i); NL; f = i; printf("%f",f); NL; d=f; printf("%f",d); NL; u=1; printf("%u",u); NL; f=4.2; printf("%f",f); NL; i=d; printf("%d",i); NL; getch(); } Wyniki Konwersja niejawna int 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*/ Konwersja jawna /* Przykład z poprzedniej strony */ #include #define NL printf("\n"); int main() { int m, n; n=10; m=n+ (int)1.2345; printf("%d",m); /* wynik 11 */ getch(); }

32 /* Program p35.c ( operator konwersji )*/ #include int main() { char c = 'k'; int i = 70; float f = ; printf("\n Wartosci poczatkowe: "); printf("\n c = \'%c\'; i = %i; f = %8.4f;", c,i, f); printf("\n "); printf("\n Konwersja Wynik "); printf("\n "); printf("\n (int) c %i ", (int) c ); printf("\n (float) c %f ", (float) c ); printf("\n (double) i %f ", (double) i ); printf("\n (char) i %c ", (char) i ); printf("\n (double) i+2000 %f ", (double) i+2000 ); printf("\n (int) f %i ", (int) f ); printf("\n sqrt((double) c) %f ", sqrt((double) c)); printf("\n "); getch(); return 1; } Wyniki Wartosci poczatkowe: c = 'k'; i = 70; f = ; Konwersja Wynik (int) c 107 (float) c (double) i (char) i F (double) i (int) f 345 sqrt((double) c)

33 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) */

34 Program z zastosowaniem operatora warunkowego - funkcja max /* C++ - Operator warunkowy - funkacja max */ #include void main() { int max(int, int); // deklaracja - zapowiedz funkcji max int a, b, m; char c; cout << "Program wyznacza max 2 liczb\n"; cout > a >> b; m=max(a,b); // wywolanie funkcji max cout << "Max liczb " << a << " i " << b << " wynosi " << m << endl; cout > c; } // Definicja funkcji max int max(int i, int j) { return i > j? i: j; }

35 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=8k = k+2 = 4+2=6i = i*5 = 2*5=10 (ostatni operand) wynik = wartość ostatniego operandu, czyli 10 // Program operprz1.cpp #include main() { int n=10, i=2, k=4, wynik; wynik=(n-=i, k+=2, i*=5); cout << wynik; // 10 getch(); }

36 /*Program opprz2.c operator przecinkowy ) */ #include #define RS 180.0/M_PI int main() { int i, j; double kat_rad; printf("Wartosc M_PI = %f RO[st]= %f\n",M_PI, RS); printf("\n i j[st] sqrt(i) sin(j)"); printf("\n "); for (i=0, j=90; j>=0; i++, j--) { kat_rad=(double)j*(M_PI/180.0); printf("\n %2i %2i %8.5f %6.5f",i,j, sqrt((double) i), sin(kat_rad)); /* argument w radianach */ } printf("\n "); getch(); return 0; } WYNIKI Wartosc M_PI = RO[st]= i j[st] sqrt(i) sin(j) ……………………………………

37 Priorytety operatorów, kolejność wykonywania działań: Nawiasy mają najwyższy priorytet. Mnożenie i dzielenie mają pierwszeństwo przed dodawaniem i odejmowaniem. Dzielenie jest równoprawne z mnożeniem. W przypadku jednakowego priorytetu operatorów o priorytecie decyduje kolejność ich występowania w wyrażeniu – od lewej do prawej strony.

38 4) Instrukcje wejścia i wyjścia w języku C: Wejście i wyjście programu Do podstawowych funkcji języka C, umożliwiających komunikację z otoczeniem należą: dla operacji wyjścia: putchar, puts, printf; dla operacji wejścia: getchar, gets, scanf; W DOS, wyniki wysyłane na ekran mogą być przy pomocy znaku potoku wysłane do pliku lub na drukarkę. Np. program.exe > Wynik.txt do pliku, usunięcie istniejącego program.exe >> wyniki.txt do pliku – dopisanie do istniejącego program.exe > PRN na drukarkę

39 Przykład programu z instrukcjami we/wy /* Program wczytuj1.c */ #include int main() { int a, b, c; char nazw[15]; clrscr(); puts("Wprowadzanie danych w jezyku C"); puts("Podaj wartosci 3 zmiennych calkowitych oddzielone spacja: "); scanf("%d %d %d", &a, &b, &c); // uwaga! – znaki & dla liczb printf("Wprowadzone liczby: a= %d b= %d c= %d", a,b,c ); // bez & printf("\nPodaj swoje nazwisko: "); scanf("%s",nazw); printf("\nNazywasz sie %s ",nazw); getch(); return 0; }

40 4.1) Operacje wyjścia – wyświetlania wyników na ekranie 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). Wyświetla na ekranie wartość pojedynczego znaku: – literał znakowy, np. puchar(H); } – Stałą typu char: np. const char INITIAL = 'H'; // stała putchar(INITIAL); – zmienną typu char: char litera; // deklaracja zmiennej litera=G; // definicja zmiennej puchar(litera);

41 Funkcja putchar() – programy do wprowadzania znaku /* Program litznak.c - literał znakowy */ #include main() { puchar(H); } /* Program stalachar.c */ #include #include #define INIT 'A //stała main() { const char INITIAL = 'H'; // stała putchar(INIT); putchar(INITIAL); putchar('\n'); getch(); } /* Program zmchar.c */ #include main() { char litera; // deklaracja zmiennej litera=G; // definicja zmiennej puchar(litera); putchar('\n'); }

42 Kody sterujące Kody sterujące: kod nowego wiersza: \n np. puchar(\n); kod tabulacji: \t kod powrotu karetki \r Kod cofania \b kod wysunięcia strony \f kod dzwonka\a putchar(\a); lub \007 Znaki specjalne: \ – wyświetla apostrof, \ – cudzysłów, \\ - backslash, \007 – dzwonek /* Program dzwonki.c */ #include #define BELL 7 #define DZWONEK '\007' void main() { int a, b, c; putchar ('\a'); getch(); putchar('\007'); getch(); putchar('\7'); getch(); putchar('\x7'); getch(); putchar(DZWONEK); getch(); putchar(BELL); getch(); }

43 Funkcja puts() - wyświetla na ekranie łańcuch znaków. 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. puts (parametr); Parametr – informacja, którą chcemy wyświetlić musi być określonego typu: Literał znakowy: np. puts("Jak leci?"); Stała znakowa: #define KOMUNIKAT "Jak sie masz?" puts(KOMUNIKAT); Zmienna łańcuchowa: char pozdrowienie[] = "Dzien dobry"; Przykład: /* Program puts1.c */ #include #include #define KOMUNIKAT "Jak sie masz?" int main(){char pozdrowienie[] = "Dzien dobry"; puts("Jak leci?");puts(KOMUNIKAT); puts(pozdrowienie); getch();return 0; }

44 Funkcja puts() – program przykładowy /* Program puts1a.c */ #include #define NOWA_LINIA putchar('\n') main() { char napis[] = "ABCDEFGHIJKLMNOPQRS..."; /* wyprowadzanie pojedynczych linii tekstu przy pomocy funkcji puts */ puts("Program z funkcja puts"); puts("\n\n"); NOWA_LINIA; puts(napis); NOWA_LINIA; puts("To jest praktyczna funkcja"); puts("\066\067\x2B\x2A itd."); getch(); } Wynik Program z funkcja puts ABCDEFGHIJKLMNOPQRS... To jest praktyczna funkcja 67+* itd.

45 Funkcja printf() - uniwersalna Funkcje puts() i puchar() mogą wyświetlić tylko jedną rzecz: łańcuch znaków lub znak i nie mogą wyświetlić wartości liczbowych. Funkcja printf() jest bardziej uniwersalna. Może wyświetlić dane dowolnego typu i współpracować z wieloma argumentami. Wyprowadza wynik przetwarzania w różnych formatach. printf (łańcuch_sterujący, lista _danych_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. /* Przykład: getchar1.c */ #include #include int main(void) { int inicjal; puts("Podaj swoj inicjal "); inicjal=getchar(); putchar(inicjal); putchar('\n'); printf("Twoj inicjal to %c. Jego kod ASCII: %i ",inicjal, inicjal); getch(); }

46 Ciąg formatujący Najprostszy zapis ciągu formatującego: %Litera, gdzie litera wskazuje typ danych: %d liczby całkowite, %u liczby całkowite bez znaku, %f liczby dziesiętne typu float lub double, %e liczby dziesiętne wykładnicze, %g – liczby dziesiętne w najkrótszym zapisie, %c – znak, %s – łańcuch %x – zmienna typu int szesnastkowe, %o – zmienna typu int w postaci ósemkowej 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). #include #include main(){ int k = 21101; /* liczba dziesietna */ printf(" %s %d %s", "Zapis liczby ", k, " w rożnych formatach \n "); printf("\nk(_10) = %i k(_8) = %o k(_16) = %X ", k, k, k ); getch(); } Wynik: Zapis liczby w roznych formatach k(_10) = k(_8) = k(_16) = 526D

47 Formaty realizowane przez funkcję printf (znaki typu w łańcuchach formatujących)

48 Przykład 1 z printf() - program printf1.c ze zmiennymi /* printf1.c */ include #include void main(void) { float f = 0.521; int i = -123; unsigned int u = 24; char c = 'A'; char napis[] = "Zmienne - funkcja printf()\n\n"; printf(napis); printf("Zmienne: f = %f, i = %i, u = %u, c = %c \n", f, i, u, c); printf("Zmienna f = %f, a zmienna i jest rowna %d \n", f, i); printf("Zmienna u w zapisie szesnastkowym jest rowna %x \n", u); printf("natomiast w zapisie osemkowym jest rowna %o \n", u); printf("Zmienna f w formacie \%f = %f \n",f); printf("Zmienna f w formacie \%.3f = %.3f \n",f); printf("Zmienna f w formacie \%6.3f = %6.3f \n", f); printf("Zmienna f w formacie \%-6.3f = %-6.3f \ n", f); printf("Zmienna f w formacie \%06.3f = %06.3f \n", f); printf("Zmienna f w formacie \%+6.3f = %+6.3f \n", f); printf("Zmienna f w formacie \%10.4f = %10.4f \n",f); getch(); } Wyniki: Zmienne - funkcja printf() Zmienne: f = , i = -123, u = 24, c = A Zmienna f = , a zmienna i jest rowna -123 Zmienna u w zapisie szesnastkowym jest rowna 18 natomiast w zapisie osemkowym jest rowna 30 Zmienna f w formacie %f = Zmienna f w formacie %.3f = Zmienna f w formacie %6.3f = Zmienna f w formacie %-6.3f = Zmienna f w formacie %06.3f = Zmienna f w formacie %+6.3f = Zmienna f w formacie %10.4f =

49 Przykład 2 z printf() /* Program printf2.c */ #include void main(void) { float f = 0.521; int i = -123; unsigned int u = 24; char c = 'A'; printf("Zmienna f = %f, a zmienna i jest rowna %d.\n", f, i); printf("Zmienna c = %c, a zmienna u jest rowna %u.\n", c, u); printf("Zmienna u w zapisie szesnastkowym jest rowna %x, \n", u); printf("natomiast w zapisie osemkowym jest rowna %o.", u); } Wyniki: Zmienna f = , a zmienna i jest równa Zmienna c = A, a zmienna u jest równa 24. Zmienna u w zapisie szesnastkowym jest równa 18, natomiast w zapisie ósemkowym jest równa 30.

50 Przykład 3 z printf() /* program printf3.c */ #include void main(void) { float f = 0.521; printf("Zmienna f = %6.3f \n", f); // dosunięcie do prawej strony – razem 6 znaków printf("Zmienna f = %-6.3f \n", f); // dosunięcie do lewej strony – razem 6 znaków printf("Zmienna f = %06.3f \n", f); // 0 z przodu printf("Zmienna f = %+6.3f \n", f); // znak + z przodu getch(); } Wynik Zmienna f = Zmienna f = Zmienna f =

51 Przykład 4 z printf() #include #define PI #define PROMIEN 3.3 #define WYSOKOSC 44.4 main() { double promien, wysokosc, objetosc; promien = PROMIEN; wysokosc = WYSOKOSC; objetosc = PI * promien * promien * wysokosc; printf("\nObjetosc walca = %f", objetosc); printf("\nObjetosc walca = %E", objetosc); printf("\nObjetosc walca = %g", objetosc); printf("\nObjetosc walca = %15.10f", objetosc); printf("\nObjetosc walca = %25.20f", objetosc); } Wyniki: Objetosc walca = Objetosc walca = E+03 Objetosc walca = Objetosc walca = Objetosc walca =

52 Wyprowadzanie danych w języku C++: cout << Polecenie cout z operatorem wyjścia <<, czyli cout << W C++ poza powyższymi istnieje dodatkowy sposób wyprowadzania informacji wszystkich typów: Instrukcja cout << wyświetla wartości literałów, stałych i zmiennych bez konieczności korzystania ze specyfikatorów formatowania. Do wykorzystania polecenia cout należy w dyrektywie #include wyspecyfikować plik iostream.h Polecenie cout języka C++ #include cout << lista_danych; // np. cout << "Masz " << wiek << "lat " << \n; cout << łańcuch; // cout << "Cześć, nazywam się Jan Nowak. My się znamy " cout << nazwa_stałej; // char nazwisko[]=Jan Nowak; cout << nazwisko; cout << nazwa_zmiennej; // cout << wiek;

53 4.2) Operacje wejścia wprowadzanie danych w C i C++ 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

54 getchar() Wejście oznacza wprowadzanie danych do komputera na użytek programu. Wprowadzane dane są przypisywane zmiennym. 1) Wprowadzenie znaku z klawiatury: Funkcja getchar() - int getchar(void) Wczytuje pojedynczy znak z klawiatury. Przy wprowadzaniu można korzystać z typu char lub int. Syntaktycznie postać funkcji jest następująca: c = getchar(); gdzie c jest typu char. /* Przykład: getchar1.c - funkcja getchar() */ #include #include int main(void) { int inicjal; puts("Podaj swoj inicjal "); inicjal=getchar(); putchar(inicjal); putchar('\n'); printf("Twoj inicjal to %c. Jego kod ASCII: %i",inicjal, inicjal); getch(); }

55 getchar() – przykład programu Po każdym wywołaniu funkcja getchar() pobiera ze strumienia znaków następny znak i wraca z jego zawartością. Zawartością zmiennej jest następny znak z wejścia. /* Program getchar3.c - czyta i wypisuje wprowadzone znaki aż do naciśnięcia końca pliku Ctrl Z */ #include /* przepisz wejście na wyjście */ main() { int c; c = getchar(); /* przeczytaj znak */ while (c != EOF) /* dopóki znak nie jest znakiem konca pliku (Ctrl Z) */ { putchar(c); /* wypisz przeczytany znak */ c=getchar(); /* przeczytaj następny znak */ }

56 Funkcja gets() - char *gets(char *s); Funkcja gets() wprowadza łańcuch ze standardowego wejścia stdin do zmiennej s. Parametrem funkcji jest nazwa zmiennej. Kolekcjonuje łańcuch znaków zakończonych znakiem nowej linii (Enter) i podstawia do zmiennej s. Znak nowej linii jest zastąpiony przez znak null \0 w zmiennej s. Przykład funkcji z gets() – wprowadzenie imienia /* Program gets1.c */ #include int main(void) { char imie[21]; // deklaracja tablicy znaków – tekst na 20 zn., ostatni 21 to znak końca \0 printf("Podaj swoje imie "); gets(imie); // wprowadzenie imienia printf("Twoje imie to %s, imie); // wyświetlenie imienia return 0; } // Uwaga! Po uruchomieniu Alt F5 – ekran wyników. W zmiennej łańcuchowej jedna ostatnia komórka jest rezerwowana na ogranicznik łańcucha \0. Dlatego można wprowadzić o jeden znak mniej niż zadeklarowano.

57 Wersja druga programu wczytywania danych z gets /* Program wczytuj2.c */ #include int main() { int a, b, c; char nazw[15]; clrscr(); puts("Wprowadzanie danych w jezyku C"); puts("Podaj swoje nazwisko "); gets(nazw); puts("Podaj wartosci 3 zmiennych calkowitych oddzielone spacja: "); scanf("%d %d %d", &a,&b,&c); printf("Wprowadzone liczby: a= %d b= %d c= %d",a,b,c); printf("\nNazywasz sie %s ",nazw); getch(); return 0; }

58 Funkcja scanf() – uniwersalne wejście Funkcja scanf() – prototyp: int scanf(const char *format[, address,...]); scanf(łańcuch_sterujący, lista_danych); Skanuje (śledzi, czyta) i formatuje dane wprowadzone ze standardowego wejścia. Funkcja scanf() służy do odczytu wprowadzonych danych z klawiatury Jest to uniwersalny sposób na wprowadzanie do komputera informacji wszelkiego typu. Funkcja śledzi (skanuje) klawiaturę, badając, czy został naciśnięty jakiś klawisz, potem interpretuje dane wejściowe zgodnie ze specyfikatorami formatowania. Podobnie jak printf(), funkcja scanf() dopuszcza wiele argumentów – można wprowadzać dane liczbowe, łańcuchowe i znakowe typu char. Parametr funkcji scanf() składa się z łańcucha sterującego i listy danych. W funkcji scanf() specyfikatory nazywamy znakami konwersji. Lista danych zawiera zmienne, jakie będą przyjmować wartości wejściowe. Łańcuch sterujący zawiera specyfikatory formatowania, takie same jak w funkcji printf():

59 Specyfikatory formatowania %d – wprowadza liczbę całkowitą, %u – liczbę całkowitą bez znaku, %f – liczba rzeczywista typu float, %c – znak, %s – łańcuch, %o - liczba ósemkowa, %x – liczba szesnastkowa, %e – liczba w zapisie wykładniczym, %g – liczba dziesiętna w najkrótszym zapisie. Wzorzec konwersji określa typ zmiennej, którą wpiszemy z klawiatury lub wypiszemy na ekranie.

60 Tabela: deklaracje zmiennych określonego typu, wzorce konwersji, przykłady Typ zmiennejDeklaracjaWzorzec Postać funkcji scanf() Postać funkcji printf() liczba całkowitaint A%dscanf("%d",&A);printf("Liczba A wynosi: %d",A); liczba rzeczywistafloat B%fscanf("%f",&B);printf("Liczba B wynosi: %f",B); ciąg znakówchar *C%sscanf("%s",&C);printf("Łańcuch ma postać: %s",C); pojedynczy znakchar D%cscanf("%c",&D);printf("Znak D to: %c",D); /* Program kalk1.c – prosty kalkulator, dane liczby całkowite*/ #include int main() /* funkcja główna */ { int a,b; /* deklaracja zmiennych całkowitych a i b */ int suma,roznica,iloczyn; float iloraz; /* deklaracje zmiennych */ clrscr(); /* kasowanie ekranu */ printf("Prosty kalkulator\n"); /* nagłówek */ printf("\nPodaj liczbe a: "); scanf("%d",&a); /* wczytanie liczby a */ printf("Podaj liczbe b: "); scanf("%d",&b); /* wczytanie liczby b */ suma=a+b; roznica=a-b; iloczyn=a*b; /* obliczenia */ iloraz=(float)a/(float)b; /* operator rzutowania w dzieleniu */ printf("\nWyniki dzialan:\n"); printf("\nSuma: %d ",suma); printf("\nRoznica: %d ",roznica); printf("\nIloczyn: %d ",iloczyn); printf("\nIloraz: %f ",iloraz); getch(); return 0 ; }

61 Program kolo.c na pole i obwód koła /* program kolo.c oblicza obwod i pole koła o promieniu podanym */ #include #define PI #define NL printf("\n"); int main() { /* deklaracja zmiennych */ const double pi= ; float r, o, p; /* promień koła, obwod, pole */ clrscr; puts("Program oblicza obwod i pole kola"); printf("PI=%f pi=%f M_PI=%f",PI, pi, M_PI); printf("\nPodaj promien kola: "); scanf("%f",&r);/* wczytaj r z klawiatury */ NL; /* nowa linia */ o=2.0*PI*r; /* obwod */ p=PI*r*r; /* pole */ printf("Obwod kola o promieniu %.3f = %8.3f",r,o ); NL; printf("Pole tego kola = %8.3f", p); /* wypisz pole koła */ NL; getch();/* czeka na naciśniecie klawisza */ return 0; }

62 Instrukcje wejścia cin >> i wyjścia cout << w C++ W języku C++ cin jest strumieniem wejściowym, a cout strumieniem wyjściowym. Do wstawienia danych do strumienia wyjściowego stosujemy operator >. Wprowadzanie danych w języku C++ - polecenie cin z operatorem wejścia >>, czyli cin >> argumenty; np. cin >> a >> b; Wyprowadzanie danych – polecenie cout z operatorem wyjścia <<, czyli cout << argumenty; np. cout << " Wyniki: " << a << b << endl; Przykładowy program: // Program wewycpp.cpp #include void main() { int a, b, c; cout > a; cout > b; cout << "a = " << a << " b = " << b << endl; getch(); }

63 Ogniwo 4. Przechodzenie od teorii do praktyki: lekcja 2 – ok. 10 min Uruchomienie programu TC, ustalenie środowiska (katalogi z danymi i wynikami) Uruchomienie okienka linii poleceń i przejście do katalogu roboczego Wprowadzanie programów w Turbo C i uruchamianie: edycja, kompilacja (Alt F9), korekta błędów (ewentualny Help), uruchamianie (Ctrl F9), oglądanie wyników (Alt F5). Wykorzystanie innych edytorów do wprowadzenia programów: Notatnik, Notepad, Dev V++. Kompilacja przy pomocy BCC32: BCC32 program.c Zasada wprowadzania programów: – Wprowadzenie szkieletu programu: #include Int main() { } – wprowadzanie treści programu w nawiasach main { } – Wprowadzanie kolejnych linii programu i bieżąca kontrola – kompilacja i poprawa błędów oraz zapisywanie programu (Save)

64 Przykładowe programy / * Program daneos1.c - dane osobowe */ #include int main(void) /* funkcja glowna, brak argumentow, zwraca typ calkowity int */ { char imie[20]; /* deklaracja tablicy znakow – łańcuch – tekst na 19 znaków */ int i; /* deklaracja zmiennej całkowitej i */ printf("\nPodaj swoje imie "); /* wydruk napisu na ekran,\n – nowa linia */ gets(imie); /* wprowadzenie imienia */ puts("Ile masz lat? "); /* wydruk napisu – funkcja puts() */ scanf("%d",&i); /* wprowadzenie lat */ printf("\n%s ma %d lat.",imie, i); /* wyświetlenie imienia i lat */ return 0; /* funkcja glowna zwraca 0 – pomyślny koniec */ }

65 Prosty kalkulator – liczby rzeczywiste /* Program kalk2.c */ #include int main() /* funkcja glowna */ { float a,b; /* deklaracja zmiennych rzeczywistych a i b */ float suma,roznica,iloczyn; float iloraz; /* deklaracja zmiennej rzeczywistej */ clrscr(); /* kasowanie ekranu */ printf("Prosty kalkulator\n"); printf("\nPodaj liczbe a: "); scanf("%f",&a); /* wczytanie liczby a */ printf("Podaj liczbe b: "); scanf("%f",&b); /* wczytanie liczby b */ printf("\nLiczba wprowadzona a = %f ",a); printf("\nLiczba wprowadzona b = %f ",b); /* c.d - obliczenia */ suma=a+b; roznica=a-b; iloczyn=a*b; iloraz=a/b; /* Wydruk wynikow */ printf("\nWyniki dzialan:\n"); printf("\nSuma: %f ",suma); printf("\nRoznica: %f ",roznica); printf("\nIloczyn: %f ",iloczyn); printf("\nIloraz: %f ",iloraz); getch(); /* czeka na naciśniecie klawisza */ return 0 ; }

66 Ogniwo 5Nabywanie umiejętności: - lekcja min Wprowadzanie i uruchamianie oraz analiza kolejnych prostych programów oraz bardziej zawansowanych programów. Wprowadzanie praktyczne programów z nowymi pojęciami : – typy danych, – operatory, – instrukcje wejścia i wyjścia.

67 Ogniwo 6. Utrwalenie wiadomości i umiejętności – pod koniec drugiej lekcji: 5 min Podstawowe typy danych: char, int, float, long double specyfikatory long, signed, unsigned, short, long. Zapis liczb dziesiętnych, ósemkowych, szesnastkowych, znaków, kody sterujące (\n, \t, \f, \a – BEL, \r, \0 – nul, \ itd.) Operatory: arytmetyczne, zwiększania i zmniejszania, relacyjne :, >=, ==, !=, logiczne (!, && - and, || - lub), przypisania =, wieloznakowe operatory przypisania (a#=b; czyli a=a#b; np. a+=b; odpowiada a=a+b:), operator rozmiaru sizeof, operator konwersji (typ) wyrażenie, np. (float) (21/10); operator warunkowy wyr_warunkowe ? wyr_na_tak: wyr_na_nie ( np. z = (a>b)? a:b; /* z=max(a,b) */ Instrukcje wejścia wyjścia: Wyświetlenie na ekranie: puchar(znak) – znak, puts(napis) - łańcuch znaków, printf(łańcuch formatu, argumenty); Wyprowadzanie wyników w C++: cout > zmienna

68 Podsumowanie – wejście, wyjście, liczby, zmienne, wzorce konwersji Aby 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.

69 Ogniwo 7. Sprawdzenie osiągnięć: Pytania kontrolne: Wymień podstawowe typy danych w C Najważniejsze operatory. Priorytet operatorów arytmetycznych Najważniejsze funkcje do wprowadzania danych do programu i wyprowadzanie wyników Uniwersalne funkcje do wprowadzania i wyprowadzania wyników w C Funkcje wprowadzania i wyprowadzania wyników w C++ Jak wczytujemy liczbę przy pomocy scanf – znak &? Czy znak & występuje w funkcji printf? Podstawowe wzorce konwersji: %d, %f, %c, %s – do czego stosujemy?

70 Przykładowe programy do wprowadzania /* Obliczanie objetosci walca - zmienne - dane w programie p9.c */ #include #define PI #define PROMIEN 3.3 #define WYNIK printf("Objetosc walca = %f", objetosc) #define NL printf("\n"); main() { float promien, wysokosc, objetosc; int i; promien = PROMIEN; objetosc = PI * promien * promien * wysokosc; /* uwaga nie zainicjowana zmienna wysokosc */ WYNIK; /* wydruk wyniku */ i=40000; printf("\ni = %i ", i); wysokosc=10; NL; /* ustalenie zmiennej wysokosc i nowa linia */ objetosc = PI * promien * promien * wysokosc; WYNIK; /* wynik prawidlowy */ getch(); }

71 Pole koła – wprowadzenie promienia i formatowanie wydruku /* program polkola3.c */ /* dyrektywy załączajace tzw. nazwane pliki */ #include /* funkcja glowna */ main() { const float PI= ; /* stala */ float r, p; clrscr(); /* kasowanie ekranu - okreslone w conio.h */ puts("Obliczenie pola kola o promieniu r "); /* Napis na ekranie */ printf("Podaj r => "); scanf("%f",&r); /* wczytanie r */ p=PI*r*r; /* obliczenie pola - wyrazenie */ printf("Pole kola o promieniu %.0f = %7.3f\n",r, p); /* wydruk */ getch(); /* czeka na nacisniecie klawisza - w stdio.h */ } Kompilacja programu: BCC32 polkola3.c lub Alt F9 w TC

72 Pole koła w języku C++. Funkcja // Polkola4.cpp w C++ #include float pole_kola(float r) // funkcja - definicja { float p; p = * r * r; return p; // zwraca pole } void main(void) { float a, p; cout > a; p = pole_kola(a); cout << "Pole kola wynosi: " << p << endl; getch(); }

73 Banknoty do wydania – program change.c /* Program change.c */ #include main() { int amount, twenties, tens, fives, ones, r20, r10; printf("Wprowadz kwote do wydania: "); /* Wprowadzenie kwoty do wydania */ scanf("%d", &amount); twenties= amount/20; /* banknoty 20-dolarowe */ r20=amount % 20; /* r20 reszta pozostała po 20-ch*/ tens= r20/10; /* ilość banknotów 10-dolarowych */ r10=r20 % 10; /* r10 reprezentuje resztę po 10-ch */ fives= r10 / 5; /* banknoty 5-dolarowe */ ones = r10 % 5; /* reszta - dolarówki */ putchar('\n'); printf("By przekazac %d wydaj banknoty: \n", amount); printf("%d dwudziestki\n", twenties); printf("%d dziesiatki\n", tens); printf("%d piatki \n", fives); printf("%d pojedyncze (s)\n", ones); }

74 Program z printf() – printf4.c /* Program printf4.c */ #include #define PI #define PROMIEN 3.3 #define WYSOKOSC 44.4 main() { double promien, wysokosc, objetosc; promien = PROMIEN; wysokosc = WYSOKOSC; objetosc = PI * promien * promien * wysokosc; printf("\nObjetosc walca = %f", objetosc); printf("\nObjetosc walca = %E", objetosc); printf("\nObjetosc walca = %g", objetosc); printf("\nObjetosc walca = %15.10f", objetosc); printf("\nObjetosc walca = %25.20f", objetosc); } Wyniki: Objetosc walca = Objetosc walca = E+03 Objetosc walca = Objetosc walca = Objetosc walca =

75 /* Program Szablon1.c */ /* #include - włączenia tekstowe bibliotek */ #include /* prawie zawsze np. do printf() */ #include /* np. do getch() */ #include /* #define - stale makroinstrukcje */ #define PROGRAM "program.c" #define NAZWISKO "Nowak Jan" #define ROK 2011 #define SZKOLA "Sztygarka" #define KLASA "2BG" #define NL printf("\n"); #define TAB putchar('\t'); #define PI #define KRESKA puts(" ") #define KRESKA2puts("================"); #define KONIEC puts("\n\nNacisnij cos ") /* zmienne globalne - stale, zmienne */ const double pi= ; const char szkola[]="Sztygarka"; /* Przykladowa funkcja - deklaracja */ float suma1(float l1, float l2); /* ========== Funkcja główna * ======== */ int main() { clrscr(); printf("Program: %s \n",PROGRAM); KRESKA2; puts(NAZWISKO); puts(KLASA); puts(SZKOLA); KRESKA; /* -- dalszy kod programu głównego */ /* */ KONIEC; getch(); return 0; } /* =========== Funkcje - definicje ======= */ float suma1(float l1, float l2) /* Definicja funkcji */ { return(l1+l2); } Szablony programu dla ucznia – dane wpisane w #define

76 /* Program Szablon2.c */ /* #include - włączenia tekstowe bibliotek */ #include /* prawie zawsze np. do printf() */ #include /* np. do getch() */ #include /* #define - stale makroinstrukcje */ #define PROGRAM "program.c" #define NAZWISKO "Nowak Jan" #define ROK 2011 #define SZKOLA "Sztygarka" #define KLASA "2GBA" #define NL printf("\n"); #define TAB putchar('\t'); #define PI #define KRESKA puts(" ") #define KRESKA2 puts(==============="); #define KONIEC puts("\n\nNacisnij cos ") #define KATRAD(g) ((g)/(ROG)) /* zmienne globalne - stale, zmienne */ const double pi= ; const char szkola[]="Sztygarka"; float suma1(float l1, float l2); /*Przykladowa funkcja - deklaracja */ /* ==== Funkcja główna * ======== */ int main() { float a, b; clrscr(); printf("Program: %s \n",PROGRAM); KRESKA2; puts(NAZWISKO); puts(KLASA); puts(SZKOLA); KRESKA; puts("Obliczenie sumy 2 liczb"); printf("\nPodaj liczbe a => "); scanf("%f", &a); printf("\nPodaj liczbe b => "); scanf("%f", &b); printf("Suma %f + %f = %f",a, b, suma1(a,b)); KONIEC; getch(); return 0; } /* Definicja funkcji */ float suma1(float l1, float l2) { return(l1+l2); }

77 /* Program strukt.pr.c – Przykł. 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 /* prawie zawsze c C, np. do printf() */ #include /* np. do getch() */ #include #define NL printf("\n"); #define PI #define R 10.0 #define KRESKA puts(" ") /* zmienne globalne - stale, zmienne */ const float KURS_USD= 3.40, KURS_EURO= 4.50; float suma_float(float l1, float l2); /* zapowiedź funkcji */ float pole_kola(double r) /* definicja funkcji */ { double pole, pole1; pole=PI*r*r; puts("\nFunkcja pole_kola()"); printf("\Pole z PI =%f",pole); pole1=M_PI*r*r; printf("\nPole z M_PI =%f ",pole1); NL; NL; return pole1; } int main() { int a, b=3, suma, reszta; float kw_zl, kw_usd; clrscr(); puts("Struktura programu w C - przyklad\n"); KRESKA; puts("Naglowek"); puts("Preprocesor - #include, #define"); puts("Zmienne globalne i prototypy funkcji lub definicje funkcji"); puts("Funkcja main()"); puts("Funkcje - definicje"); NL; KRESKA; puts("Przyklady wynikow"); NL; puts("Funkcja glowna"); NL; a=10; kw_zl=10; kw_usd=kw_zl/KURS_USD; suma= suma_float(a,b); reszta=a%b; printf("Suma %d + %d = %d \n",a,b,suma); printf("Suma = %f",( )); NL; printf("Reszta z dzielenia %d przez %d = %d ",a,b,reszta); NL; NL; printf("Kwota %.2f PLN = %.2f USD ",kw_zl, kw_usd); NL; printf("Pole kola o promieniu %f = %f ",R, pole_kola(R)); NL; getch(); return 0; } float suma_float(float l1, float l2) /* definicja funkcji */ { return(l1+l2); } Przykład struktury programu z zastosowaniem wielu instrukcji podstawowych

78 /* Schemat programu do obliczeń geodezyjnych */ /* Program Szablgeo.c */ /* preprocesor: #include - wlaczenia tekstowe bibliotek */ #include /* prawie zawsze c C, np. do printf() */ #include /* np. do getch() */ #include /* #define - stale makroinstrukcje */ #define PROGRAM "program.c" #define NAZWISKO "Nowak Jan" #define ROK 2011 #define SZKOLA "Sztygarka" #define KLASA "2BG" #define NL printf("\n"); #define TAB putchar('\t'); #define PI #define ROG #define ROS= ; #define KRESKA puts(" ") #define KRESKA2puts("============================="); #define KONIEC puts("\n\nNacisnij cos ") #define KATRAD(g) ((g)/(ROG)) #define KATGRAD(r) ((r)/(ROS)) /* 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); } Szablon programu do obliczeń geodezyjnych

79 /* Program Daneuczn.c */ /* preprocesor: #include - wlaczenia tekstowe bibliotek i #define - stale makroinstrukcje */ #include /* prawie zawsze c C, np. do printf() */ #include /* np. do getch() */ #include #define PROGRAM "program.c" #define NAZWISKO "Nowak Jan" #define ROK 2011 #define KLASA "2BG" #define NL printf("\n"); #define TAB putchar('\t'); #define PI #define KRESKA puts(" ") #define KRESKA2 puts("========================="); #define KONIEC puts("\nNacisnij cos ") /* zmienne globalne - stale, zmienne */ const int klasa = 2; int main() { char c1; char przedmiot[20], szkola[]="Sztygarka"; int rok_urodz; float ocena; clrscr(); printf("Program: %s \n",PROGRAM); KRESKA2; 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 */ KRESKA; printf("Twoj inicjal: "); TAB; putchar(c1); NL; printf("\n %s ma %d lat.",NAZWISKO, (ROK-rok_urodz)); /* wyświetlenie imienia i lat */ NL; printf("Srednia ocena z przedmiotu %s = %.1f ",przedmiot, ocena); NL; KRESKA; KONIEC; getch(); return 0; } float suma_float(float l1, float l2) { return(l1+l2); } /* Program daneuczn.c – dane ucznia */

80 Pole prostokąta - dane w programie, funkcja przed main() /* polepros2.c - z funkcja /* #include float PoleProstokata(float bok1, float bok2) /* definicja funkcji (/ { /* w tym miejscu bok1 jest równy 5, natomiast b jest równe 10 */ float wynik; wynik = bok1 * bok2; return wynik; } void main(void) { float a, b, p; a = 5; b = 10; /* zmienne */ p= PoleProstokata(a, b); /* wywolanie funkcji */ printf("Pole prostokata o bokach %f i %f = %f ", a, b, p); getch(); }

81 Pole prostokąta - dane wprowadzone, funkcja na końcu /* ppros3.c - z funkcja */ #include float PoleProstokata(float bok1, float bok2); /* zapowiedz funkcji */ /* funkcja glowna */ int main(void) { float a, b, p; puts("Obliczenie pola prostokata o bokach a i b "); printf("Podaj a i b oddzielone spacja: "); scanf("%f %f",&a, &b); /* wywolanie funkcji na obliczenie pola */ p= PoleProstokata(a, b); printf("Pole prostokat o bokach %f i %f = %f ", a, b, p); getch(); return 0; } float PoleProstokata(float bok1, float bok2) /* definicja funkcji */ { /* w tym miejscu bok1 jest równy a, natomiast bok2 jest równy b */ float wynik; wynik = bok1 * bok2; return wynik; }

82 Pole prostokąta - wprowadzanie danych, funkcja * ppros4.c - z funkcja i wprowadzaniem danych */ #include float PoleProstokata(float bok1, float bok2); /* zapowiedz funkcji */ /* funkcja glowna */ int main() { float a, b, p; puts("Obliczenie pola prostokata o bokach a i b "); printf("Wprowadz a "); scanf("%f", &a); /* wprowadzenia a */ printf("Wprowadz b "); scanf("%f", &b); /* wprowadzenia b */ p= PoleProstokata(a, b); /* wywolanie funkcji z parametrami a i b */ printf("Pole prostokat o bokach %f i %f = %10.2f \n", a, b, p); printf("\nNacisnij cos "); getch(); /* czeka na znak */ return 0; } /* Funkcja - definicja */ float PoleProstokata(float bok1, float bok2) { /* w tym miejscu bok1 jest równy a, natomiast bok2 jest równy b */ float wynik; wynik = bok1 * bok2; return wynik; }

83 Wyświetlenie czasu C++ - program w Dev C++ // Program czas.cpp w jezyku C++ - wyświetlenie czasu - komentarz w C++ #include using namespace std; int main(int argc, char *argv[]) { int a; time_t czas; do { cout << "1 - Wyswietl aktualny czas" << endl; cout << "2 - Zakoncz program" << endl; cout > a; if (a == 1) { time(&czas); cout << ctime(&czas); } }while (a != 2); cout << "Do zobaczenia" << endl; system("PAUSE"); return EXIT_SUCCESS; }

84 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

85 Stałe symboliczne - makrodefinicje Stał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 #define PI #define TRUE 1 #define FALSE 0 #define NAPIS1 Siemianowice #define IMIE "Andrzej" // (puts(IMIE) rozwija w tekst puts("Andrzej") #define IMIE_I_NAZWISKO IMIE+"Zalewski" #define WCZYTAJ_IOSTREAM_H #include

86 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).

87 /* Przykład zastosowana pseudoinstrukcji #define - Program p8.c */ # include #define PI #define PROMIEN 3.3 #define WYSOKOSC 44.4 #define WYNIK printf("Objetosc walca = %f", objetosc) main() { float promien, wysokosc, objetosc; promien = PROMIEN; wysokosc = WYSOKOSC; objetosc = PI * promien * promien * wysokosc; WYNIK; getch(); }

88 Podsumowanie – liczby, zmienne, komunikaty Aby 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.

89 Operacje na znakach i łańcuchach znaków Typy 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);

90 /* Program znaki1.c */ #include main (void) { char znak1,znak2,znak3; //deklaracja znaków char slowo1[10], slowo2[15]; char slowo3[]="Adam"; // definicja clrscr(); // czyszczenie ekranu znak1='a'; // inicjalizacja zmiennej znak1 znak2=102; // znak w postaci kodu dziesiętnego ASCII - litera f printf("Podaj znak3: "); scanf("%c",&znak3); // podajemy jakiś znak printf("\nPodaj slowo1: "); scanf("%s",slowo1); // wpisujemy słowo 1 printf("\nPodaj slowo2: "); scanf("%s",slowo2); // wpisujemy słowo 2 printf("\nZmienne zawieraja znaki: "); printf("znak1 (a), znak2 (102), znak3 (wprowadzony): %c %c %c ",znak1,znak2,znak3); printf("\noraz slowa: "); printf("slowo1, slowo2, slowo3: %s %s %s ",slowo1, slowo2, slowo3); getch(); return 0 ; }

91 Przypisanie wartość zmiennej znakowej i napisom Przypisać 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

92 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 main (void) { char znak; int kod; clrscr(); printf("Wciśnij znak na klawiaturze: \n"); scanf("%c",&znak); printf("Kod wciśniętego znaku to: %d \n",znak); printf("Podaj kod znaku: \n"); scanf("%d",&kod); printf("Znak o podanym kodzie to: %c \n",kod); getch(); return 0 ; }

93 Odczytanie długości łańcucha znaków – strlen(lancuch) /* dluglanc.c */ #include main (void) { int dlugosc; char *lancuch; clrscr(); lancuch="Adam Nowak"; dlugosc=strlen(lancuch); printf("Lancuch '%s' ma: %d znaków \n",lancuch, dlugosc); printf("Pierwsza litera łańcucha to: %c \n",lancuch[0]); printf("Ostatnia litera łańcucha to: %c \n",lancuch[dlugosc-1]); getch(); return 0 ; }

94 Inne funkcje operujące na łańcuchach: strlwr, strupr, strcat, strrv, streset – z biblioteki string.h /* znaki5.c - operacje na tekstach */ #include main (void) { char *lancuch1, *lancuch2, *lancuch3; char znakwyp='x'; // znak wypełniający clrscr(); puts("Operacje tekstowe\n"); lancuch1="Janusz"; lancuch2="Kowalski"; printf("Lancuch1 to: %s \n",lancuch1); printf("Lancuch2 to: %s \n",lancuch2); printf("\nZmieniamy duze litery na male: \n"); strlwr(lancuch1); printf("Lancuch1 wyglada teraz tak: %s \n",lancuch1); printf("\nZmieniamy male litery na duze: \n"); strupr(lancuch2); printf("Lancuch2 wyglada teraz tak: %s \n",lancuch2); printf("\nLaczymy dwa lancuchy: \n" ); lancuch3=strcat(lancuch1,lancuch2); printf("Lancuch3 wyglada teraz tak: %s \n",lancuch3); printf("\nOdwracamy kolejnosc znakow w lancuchu: \n" ); strrev(lancuch3); printf("Lancuch3 wyglada teraz tak: %s \n",lancuch3); printf("\nWypelniamy lancuch znakiem 'x':\n" ); strset(lancuch3,znakwyp); printf("Lancuch3 wyglada teraz tak: %s \n",lancuch3); getch(); return 0 ; } strcat() - łą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.

95 Podsumowanie – znaki, łańcuchy znaków 1.Zmienne liczbowe mogą zawierać się w pewnych zakresach, których nie można przekraczać. 2.Deklaracja zmiennej znakowej: char znak; a zmiennej łańcuchowej: char *slowo; 3.Wartość zmiennej znakowej można przypisać w programie poprzez umieszczenie znaku w apostrofach lub przez napisanie jego kodu. 4.Wartość zmiennej łańcuchowej można przypisać w programie poprzez umieszczenie napisu w cudzysłowie. 5.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. 6.Każdy znak posiada swój kod ASCII. 7.Kod ASCII mają również znaki nie przedstawione na klawiaturze komputera. np. ß, ö. 8.Łańcuch, który wygląda jak liczba nie jest liczbą. Istnieją funkcje, które potrafią przekonwertować łańcuch liczbowy do postaci liczby. 9.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 Każdy ciąg kończy znak '\0'. 11.Długość łańcucha można ograniczyć przy deklaracji, np.: char slowo[10]; 12.Ł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).

96 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 */ }

97 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)

98 Biblioteki, procedura, funkcja Biblioteki (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.

99 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 int main(){ bool b = false; b = true; } TYP ZNAKOWY - CHAR - typ ten przyjmuje dowolny pojedynczy znak o kodach ASCII (0..255) np. znak A czy ! W C łańcuchy reprezentuje się jako tablice znaków char slowo[dlug] a operacje na nich wykonuje z użyciem wskaźników. W C++ oprócz tradycyjnych ciągów znaków w stylu C istnieje w bibliotece standardowej klasa std::string. Ukrywa ona niewygodne aspekty używania napisów w stylu C: zarządzanie pamięcią, określanie długości, łączenie napisów, wstawianie, usuwanie i inne manipulacje na napisie. Dodatkowo pozbyto się problemu znaku kończącego - znak o kodzie \0.

100 Preprocesor, dyrektywy, funkcje biblioteczne C Preprocesor 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 i #include nazwa Nazwa w nawiasach kwadratowych oznacza plik nagłówkowy dostępny w systemie C, natomiast w cudzysłowie plik zdefiniowany przez użytkownika. W C istnieje duża biblioteka funkcji standardowych, czyli dostępnych bezpośrednio w systemie. Zawarte są w tzw. modułach. Moduły biblioteczne dołącza się przez instrukcję #include. Standardowo dołączamy stdio.h w C a iostream.h w C++ Procedura clrscr() zawarta w module conio.h umożliwia wyczyszczenie ekranu. W math.h zdefiniowane jest np. M_PI (czyli PI) Dyrektywa #define, np. #define NMAX 20 definiuje stałą NMAX o wartosci 20.

101 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 0) c=b+2; else c=b-3; If (warunek) {instrukcja_1; instrukcja_2; … instrukcja_N;} else {instrukcja_A; instrukcja_B; … instrukcja_Z;}

102 Przykłady programów z if /* Program If1. c */; #include int main() { int a; cout 0 "; cin >> a; if (a<0) return 1; //wyjscie awaryjne z systemu cout << "OK"; getch(); return 0; // wyjscie normalne } /* Program If2. c */; #include int main() { int a; cout 0 ==> "; cin >> a; if (a<0) cout << "a < 0"; else cout =0 "; getch(); return 0; }

103 if - 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).

104 /* program rowkwadr.cpp */ #include int main() { float a, b, c, delta; clrscr(); cout << "Program oblicza pierwiastki rownania kwadratowego." << endl; cout << "Podaj wspolczynniki: " << endl; cout >a; cout > b; cout > c; delta=b*b-4*a*c; if (a !=0) { if (delta<0) cout << "Delta ujemna - brak rozwiazan.\n" ; else if (delta==0) cout << "x= " << (-b+sqrt(delta))/(2*a); else if (delta>0) { cout << "x1= " << (-b+sqrt(delta))/(2*a) << endl; cout << "x2= " << (-b-sqrt(delta))/(2*a) << endl; } else { if ((a==0) && (b==0)) cout << "Rownanie ma nieskonczenie wiele rozwiazan."; else if ((a==0) && (b!=0)) { cout << "Rwnanie o podaneych wspolczynnikach jest liniowe.\n"; cout << "jego pierwiastek jest rowny: " << -c/b << endl; } getch(); return 0; }

105 switch - instrukcja wyboru Instrukcja 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; }

106 Instrukcja wyboru switch.. case – przykład programu // Program Miesiace.cpp - podaje nazwe miesiaca na podstawie jego numeru #include int main() { int miesiac; // numer miesiąca w roku cout << "Podaj numer miesiaca w roku: "; cin>> miesiac; switch (miesiac) { // switch case 1: cout << "Styczen"; break; case 2: cout << "Luty"; break; case 3: cout << "Marzec"; break; case 4: cout << "Kwiecien"; break; case 5: cout << "Maj"; break; case 6: cout << "Czerwiec"; break; case 7: cout << "Lipiec"; break; case 8: cout << "Sierpien"; break; case 9: cout << "Wrzesien"; break; case 10: cout << "Pazdziernik"; break; case 11: cout << "Listopad"; break; case 12: cout << "Grudzien"; break; default: cout << "Numer nie poprawny"; } // switch getch(); return 0; }

107 Instrukcje iteracyjne Organizacja obliczeń cyklicznych Instrukcje 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

108 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.

109 Przykład programu z while – suma 6 podanych liczb // Program Suma6.cpp; Oblicza sumę 6 podanych liczb #include int main() { int i; float suma, x; i=1; // Nadanie wartości początkowej i - licznik suma=0; // Nadanie wartości początkowej suma cout << "Program oblicza sume podanych 6 liczb " << endl; while (i<=6) { // while cout > x; suma=suma+x; cout << "\Aktualna suma=" << suma << endl; i++; } // while cout << "\nSuma koncowa =" << suma << "\nNacisnij Enter" << endl; getch(); return 0; }

110 Program z do … while // Program ilosc.cpp wyznacza długość ciągu liczb zakończonych 0 #include int main() { int dlug, liczba, suma=0; clrscr(); cout << "Wprowadzaj liczby, 0 koniec \n"; dlug=0; do { cin >> liczba; dlug = ++dlug; suma=suma+liczba; } while (liczba!=0); cout << "Dlug. ciagu wynosi " << --dlug << endl; // 0 nie wliczamy – odejmujemy 1 cout << "Suma ciagu wynosi " << suma << endl; getch(); }

111 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

112 Programy z for /* Program for1.cpp Wydruk cyfr od 1 do 5 */ #include int main() { int i; for (i=1; i<= 5; i++) cout << i << endl; getch(); return 0; } /* Program for2.cpp Wydruk cyfr od 5 do 1 */ #include int main() { int i; for (i=5; i>= 1; i--) cout << i << endl; getch(); return 0; }


Pobierz ppt "Podstawy programowania w języku C i C++. Temat : Język C: typy danych, operatory i wyrażenia. Instrukcje wejścia, wyjścia. Przykłady programów. Cele nauczania:"

Podobne prezentacje


Reklamy Google