Laboratorium 1: Podstawy języka c. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Podobne dokumenty
2 Przygotował: mgr inż. Maciej Lasota

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Zmienne, stałe i operatory

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

1 Podstawy c++ w pigułce.

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

C++ wprowadzanie zmiennych

Podstawy programowania C. dr. Krystyna Łapin

Programowanie strukturalne i obiektowe

Podstawy i języki programowania

Odczyt danych z klawiatury Operatory w Javie

Programowanie strukturalne. dr inż. Tadeusz Jeleniewski

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

1 Podstawy c++ w pigułce.

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

dr inż. Jarosław Forenc

Podstawy programowania w języku C

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Laboratorium 2: Pętle i instrukcje warunkowe. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

Podstawy Programowania Podstawowa składnia języka C++

Języki i paradygmaty programowania

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Wyrażenia arytmetyczne

Podstawy programowania w języku C i C++

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Wstęp do Programowania, laboratorium 02

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Języki i metodyka programowania. Wprowadzenie do języka C

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Część 4 życie programu

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

( wykł. dr Marek Piasecki )

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

INFORMATYKA Studia Niestacjonarne Elektrotechnika

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

3. Instrukcje warunkowe

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Wstęp do programowania

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

I. Podstawy języka C powtórka

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Powtórka algorytmów. Wprowadzenie do języka Java.

Powtórka algorytmów. Wprowadzenie do języka Java.

Operatory, wyrażenia i typy proste

Język C zajęcia nr 11. Funkcje

1. Wypisywanie danych

MATERIAŁY DO ZAJĘĆ II

Struktura pliku projektu Console Application

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Programowanie komputerowe. Zajęcia 1

Język ludzki kod maszynowy

Cw.12 JAVAScript w dokumentach HTML

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

operator zmiany znaku operatory mnożenia, dzielenia, dzielenia modulo operatory dodawania, odejmowania

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak:

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Podstawy i języki programowania

dr inż. Jarosław Forenc

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Mikrokontroler ATmega32. Język symboliczny

Podstawy Programowania.

IX. Wskaźniki.(3 godz.)

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

1. Wprowadzanie danych z klawiatury funkcja scanf

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Podstawy programowania skrót z wykładów:

Podstawy programowania. Wykład 2 Zmienne i obsługa wejścia/wyjścia. Krzysztof Banaś Podstawy programowania 1

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

JAVAScript w dokumentach HTML (1)

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

I - Microsoft Visual Studio C++

Spis treści JĘZYK C - OPERATORY BITOWE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Transkrypt:

Laboratorium 1: Podstawy języka c dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 12 października 2017

1. Wprowadzenie Instrukcja zawiera informacje o podstawowych konstrukcjach w języku c. Część pierwsza wyjaśnia w jaki sposób mogą być umieszczane komentarze w kodzie programu. W części drugiej opisano sposób deklarowania zmiennych oraz podano informacje na temat podstawowych typów danych. Część trzecia poświęcona jest operatorom dostępnym w języku c. Część czwarta traktuje o instrukcjach warunkowych. Ostatnia część dotyczy funkcji umożliwiających komunikację z użytkownikiem. 2. Komentarze Język c udostępnia trzy sposoby tworzenia komentarzy w kodzie źródłowym. Pierwszy z nich polega na umieszczeniu treści komentarza między znakami /* i */. Taki komentarz może obejmować wiele wierszy i uznawany jest przez każdy standard języka c. Komentarzy tego typu nie wolno zagnieżdżać. Drugi sposób został zapożyczony z języka c++ i wprowadzony w standardzie iso c99. Taki komentarz rozpoczyna się od znaków // i kończy się wraz z końcem wiersza. Trzeci rodzaj komentarza stosowany jest rzadko, zazwyczaj tam, gdzie nie możemy zastosować komentarza pierwszego typu. Ten komentarz związany jest z instrukcjami preprocesora. Listing 1 pokazuje sposób tworzenia takich komentarzy. #if 0 Tak wygląda trzeci rodzaj komentarzy w języku C. Jak widać, taki komentarz może obejmować wiele wierszy kodu. /* A nawet można w nim zagnieżdżać komentarze pierwszego rodzaju. */ #endif Listing 1: Komentowanie kodu z użyciem instrukcji preprocesora 3. Zmienne W języku c zmienne są deklarowane według następującego schematu: typ_zmiennej nazwa_zmiennej; Zmienne zadeklarowane na zewnątrz funkcji main() są zmiennymi globalnymi. Tabela 1 zawiera informacje na temat podstawowych typów danych w języku c. Domyślnie typy int, long int, short int Nazwa Rozmiar (w bajtach) Wartości int 4 liczby całkowite short int 2 liczby całkowite long int 8 liczby całkowite char 1 znaki lub liczby całkowite float 4 liczby zmiennoprzecinkowe double 8 liczby zmiennoprzecinkowe long double 12 liczby zmiennoprzecinkowe Tabela 1: Podstawowe typ danych w języku c oraz char przechowują liczby ze znakiem. Możemy je przekształcić na typy przechowujące wyłącznie liczby naturalne umieszczając przed ich nazwą słowo kluczowe unsigned. Istnieje komplementarne do niego słowo signed, ale zazwyczaj się go nie stosuje. Rozmiar poszczególnych typów danych zależny jest od platformy sprzętowej dla której są pisane i kompilowane programy. Dane z tabeli dotyczą 32 i 64-bitowych komputerów klasy pc. W ogólnym przypadku rozmiar typu zmiennej możemy zbadać za pomocą operatora sizeof. Większość kompilatorów pozwala na samodzielne użycie słów kluczowych 1

long i short do określenia typu zmiennej i w takim przypadku zmienna przechowuje liczby całkowite. Oprócz wymienionych w tabeli 1 typów w języku c stosowany jest również typu void, ale nie służy on do deklarowania zmiennych, z wyjątkiem wskaźników, które będą opisane w innych instrukcjach. Używany jest także w funkcjach, które będą przedmiotem innych zajęć. Ciekawostką jest to, że operator sizeof podaje wielkość typu void jako jeden bajt, ale próba kompilacji programu zawierającego zmienną typu void kończy się komunikatem błędu, który podaje, że wielkość zmiennej jest nieokreślona. 4. Operatory W tym punkcie opisane zostaną podstawowe operatory używane w języku c. Jeden z nich został już wymieniony w poprzednim punkcie. Jest to operator wyznaczający rozmiar zmiennej na podstawie jej nazwy lub nazwy jej typu, czyli sizeof. Wartość przez niego zwracana jest liczbą naturalną. Operatorem jest również, oznaczana w języku c znakiem =, instrukcja przypisania. Dzięki temu można użyć jej tak, jak pokazuje listing 2. int a, b, c; a=b=c=4; //Zmiennym a, b i c przypisywana jest wartość 4. Listing 2: Przykład użycia instrukcji przypisania Tabele 2, 3, 4 oraz 5 zawierają informacje na temat operatorów odpowiednio: arytmetycznych, bitowych, logicznych i relacyjnych. Operatory Opis działania ++, -- Jednoargumentowe operatory inkrementacji i dekrementacji. Mogą być stosowane zarówno przed, jaki i po argumencie np. ++a; (preinkrementacja), a++ (postinkrementacja), --a; (predekrementacja), a--; (postdekrementacja). Operatory te zwracają wartość zmiennej. Różnica między wersją post, a pre polega na sposobie jej zwracania (patrz wyjaśnienie w tekście). +, - Operatory te mogą być dwuargumentowe, i wtedy oznaczają dodawanie i odejmowanie, lub jednoargumentowe. W tym ostatnim przypadku operator - oznacza zmianę znaku wartości zmiennej, a + nie ma żadnego efektu. *, / Operatory mnożenia i dzielenia. Uwaga: Jeśli argumentami operatora dzielenia są liczby (wyrażenia) całkowite, to i wynik jest liczbą całkowitą, niezależnie od tego w jakiej zmiennej go zapiszemy. % Operator modulo - reszta z dzielenia. W języku c działa on również dla liczb ujemnych. Tabela 2: Operatory arytmetyczne Jeśli w wyrażeniu operator dwuargumentowy użyty jest z tą samą zmienną, do której ma być przypisany wynik, to język c pozwala na skrócony zapis takiego wyrażenia. Listing 3 zawiera kilka przykładów. 2

int a=2, b=2; b+=a; //Zamiast b=b+a; b-=a; //Zamiast b=b-a; b*=a; // Zamiast b=b*a; b/=a; // Zamiast b=b/a; b%=a; // Zamiast b=b%a; Listing 3: Skrócony zapis wyrażeń dla dwuargumentowych operatorów arytmetycznych Listing 4 ilustruje różnice między działaniem operatorów inkrementacji i dekrementacji w wersjach post i pre. int a=4, b; b=++a; //Po wykonaniu: zmienna b ma wartość 5, zmienna a ma wartość 5. b=a++; //Po wykonaniu: zmienna b ma wartość 4, zmienna a ma wartość 5. b=--a; //Po wykonaniu: zmienna b ma wartość 3, zmienna a ma wartość 3. b=a--; //Po wykonaniu: zmienna b ma wartość 4, zmienna a ma wartość 3. a++; //Po wykonaniu: zmienna a ma wartość 5. ++a; //Po wykonaniu: zmienna a ma wartość 5. a--; //Po wykonaniu: zmienna a ma wartość 3. --a; //Po wykonaniu: zmienna a ma wartość 3. Listing 4: Operatory inkrementacji i dekrementacji Operatory Opis działania, &, Operatory sumy bitowej (or), iloczynu bitowego (and) oraz bitowej różnicy symetrycznej (xor). ~ Jednoargumentowy operator negacji bitowej. >>, << Operatory przesunięcia bitowego w prawo i w lewo. Uwaga: W języku c operatory te działają także dla liczb ujemnych, w szczególności przesunięcie w prawo liczby ujemnej daje w wyniku liczbę ujemną - najstarszy bit uzupełniany jest jedynką, zgodnie z kodem U2. Tabela 3: Operatory bitowe Dla operatorów bitowych też można stosować zapis skrócony, podobny do tego zaprezentowanego w listingu 3. Patrząc na tabele 3 i 4 łatwo zauważyć, że operatory sum i iloczynów bitowych i logicznych są bardzo podobne w zapisie. Aby uniknąć pomyłek zapamiętać zasadę mnemotechniczną jaką zaproponował 3

Operatory Opis działania, && Operatory sumy logicznej (or) i iloczynu logicznego (and).! Jednoargumentowy operator negacji logicznej. Tabela 4: Operatory logiczne Bruce Eckel: Bity są małe, więc operatory bitowe potrzebują tylko jednego znaku do zapisu. W przypadku operatorów logicznych można również stosować skrócony zapis wyrażeń, podobny do tego, jaki zaprezentowano w listingu 3. W standardach języka c poprzedzających iso c99 nie wprowadzono osobnego typu logicznego, zatem wszystkie wartości różne od zera są traktowane jako prawda, a równe zero jako fałsz. Od wprowadzenia wyżej wymienionego standardu dostępny jest typ bool, razem z wartościami true i false, ale dopiero po włączeniu pliku nagłówkowego stdbool.h. Sposób kodowania prawdy i fałszu nie uległ zmianie. W złożonych wyrażeniach z użyciem operatorów logicznych stosowane jest tzw. skracanie obliczeń. Ilustruje je listing 5. Uzasadnienie wyników pokazanych wyrażeń jest następujące: operator && daje w wyniku prawdę, wtedy i tylko wtedy, gdy oba jego argumenty są prawdziwe. Jeśli więc pierwszy argument jest fałszywy, to całość wyrażenia musi być fałszywa, a więc wartość drugiego argumentu nie jest już wyznaczana. W przypadku operatora uzasadnienie jest podobne: daje on fałsz wtedy i tylko wtedy, gdy oba jego argumenty są fałszywe, więc jeśli pierwszy jest prawdziwy, to drugi już nie jest sprawdzany. int a=0,b=0; (a=0)&&(b=4); //Obie zmienne mają wartość 0 po wykonaniu wyrażenia. (a=4)&&(b=3); //Po wykonaniu wyrażenia zmienna a ma wartość 4, // a zmienna b wartość 3. (a=0) (b=0); //Obie zmienne mają wartość 0 po wykonaniu wyrażenia. (a=3) (b=4); //Po wykonaniu wyrażenia zmienna a ma wartość 3, //a zmienna b wartość 0. Listing 5: Skrócone obliczenia Operatory Opis działania ==,!= Operator porównania i operator różne. Pierwszy daje w wyniku wartość większą od zera (prawdę), jeśli oba argumenty są takie same, drugi jeśli są różne. <, >, <=, >= operatory mniejsze, większe, mniejsze lub równe, większe lub równe Tabela 5: Operatory relacyjne Niniejsza instrukcja nie zawiera informacji na temat priorytetów operatorów. Można je znaleźć w innych źródłach. Warto jednak nadmienić, że podobnie jak w wyrażeniach matematycznych, w języku c możemy zmienić kolejność działań za pomocą nawiasów okrągłych. Niektóre operacje matematyczne są przeprowadzane za pomocą funkcji dostępnych po włączeniu pliku nagłówkowego math.h. Tabela 6 zawiera informacje o niektórych elementach dostępnych za jego pośrednictwem. 5. Operator trójargumentowy Ogólna postać operatora trójargumentowego jest następująca: warunek?instrukcja_1:instrukcja_2; 4

Operatory Opis działania sin(x), cos(x), tan(x) Sinus, kosinus i tangens. Uwaga: Kąt (zmienna x) jest podawany w radianach. pow(x,y) Liczy potęgę x y. sqrt(x) Liczy pierwiastek kwadratowy z x. m_pi Stała π. Nie jest ona dostępna w standardzie iso c99, ale w rozszerzeniu gnu c. Tabela 6: Funkcje i stałe z biblioteki math.h Jeśli warunek stojący przed znakiem zapytania jest prawdziwy, to operator zwraca wartość wyrażenia stojącego bezpośrednio za pytajnikiem, w przeciwny przypadku, wartość wyrażenia stojącego za dwukropkiem. Warunek przed pytajnikiem może składać się z mniejszych warunków połączonych dowolnymi operatorami, choć najczęściej używa się relacyjnych i logicznych. W takim przypadku nazywamy go warunkiem złożonym. Uwaga: język c dopuszcza użycie w warunku instrukcji przypisania =, która podobna jest w zapisie do operatora porównania ==. Te operatory działają w odmienny sposób i dosyć często użycie przypisania zamiast porównania jest pomyłką programisty. Czasem jednak jest to efekt zamierzony, bo taki zapis może okazać z pewnych względów wygodny. Listing 6 zawiera instrukcję operator? użyty do wybrania największej z dwóch wartości zmiennych. W tym zapisie warunek ma postać a>b instrukcja przypisania jest użyta poza warunkiem i służy do nadania zmiennej max wartości zwróconej przez operator trójargumentowy. int a=5, b=4, max; max=(a>b)?a:b; Listing 6: Operator trójargumentowy 6. Komunikacja z użytkownikiem Oprócz poznanej w poprzedniej instrukcji funkcji puts() do komunikacji z użytkownikiem mogą służyć funkcje scanf i printf, dostępne także po włączeniu pliku nagłówkowego stdio.h. Funkcja scanf() pozwala użytkownikowi wprowadzić wartość z klawiatury, którą zapamiętuje we wskazanej zmiennej. Listing 7 pokazuje przykład użycia takiej funkcji. int a; scanf("%d",&a); Listing 7: Funkcja scanf() Funkcja ta przyjmuje (co najmniej) dwa argumenty. Pierwszym jest tzw. ciąg formatujący, który określa jak ma być traktowana wartość wprowadzona przez użytkownika za pośrednictwem klawiatury. Drugi argument jest adresem zmiennej, do której wartość ma być wprowadzona. Ares ten uzyskiwany jest za pomocą operatora wyłuskania (&), który zapisywany jest tym samym symbolem, co operator iloczynu bitowego. Kompilator rozpoznaje taki zapis po tym, że operator wyłuskania jest jednoargumentowy, 5

a operator iloczynu logicznego dwuargumentowy. Tabela 7 zawiera opis kilku przykładowych ciągów formatujących. Ciąg formatujący Opis %d Liczba całkowita typu int. %ld Liczba całkowita typu long int. %u Liczba naturalna typu unsigned int. %c Znak. %f Liczba zmiennoprzecinkowa typu float. %lf Liczba zmiennoprzecinkowa typu double. Tabela 7: Ciągi formatujące dla funkcji scanf() Funkcja printf() pozwala wypisać na ekranie wartości zmiennych. Podobnie jak scanf() wymaga użycia ciągów formatujących (tabela 8), które określają jak wartość ma być wypisana na ekranie. Dodatkowo pozwala na użycie znaków sterujących (tabela 9). Listing 8 zawiera kilka przykładów użycia funkcji printf(). Ciąg formatujący Opis %d Liczba całkowita typu int. %ld Liczba całkowita typu long int. %u Liczba naturalna typu unsigned int. %c Znak. %f Liczba zmiennoprzecinkowa typu double lub float. Może zawierać dodatkowe informacje o formatowaniu np. %.3f - wartość będzie wypisana z dokładnością do trzech miejsc po przecinku. %lf Liczba zmiennoprzecinkowa typu double. Podobnie jak wyżej, może zawierać dodatkowe informacje o formatowaniu. %Lf Liczba zmiennoprzecinkowa typu long double. Podobnie jak wyżej, może zawierać dodatkowe informacje o formatowaniu. %e, %E Liczba zmiennoprzecinkowa typu double lub float w notacji wykładniczej, np. 3e-9, jeśli użyte jest pierwsze formatowanie, lub 3E-9, jeśli drugie. %le, %le Liczba zmiennoprzecinkowa typu double w notacji wykładniczej, np. 3e-9, jeśli użyte jest pierwsze formatowanie, lub 3E-9, jeśli drugie. %Le, %LE Liczba zmiennoprzecinkowa typu long double w notacji wykładniczej, np. 3e-9, jeśli użyte jest pierwsze formatowanie, lub 3E-9, jeśli drugie. %x, %X Liczba naturalna zapisana w kodzie szesnastkowym, np. a5, jeśli użyte jest pierwsze formatowanie, lub A6, jeśli użyte jest drugie formatowanie. %o Liczba naturalna w kodzie ósemkowym. Tabela 8: Ciągi formatujące dla funkcji printf() 6

Znak sterujący Opis \n Znak nowego wiersza. \r Znak początku wiersza. \\ Znak \ (wypisanie na ekranie). \" Znak ". \t Tabulator Tabela 9: Znaki sterujące dla funkcji printf() int a=4, b=5; printf("%d",a); //Wypisanie wartości zmiennej a. printf("%d\n",a); //Wypisanie wartości zmiennej a i przejście do następnego //wiersza. /* * Funkcja printf() potrafi wypisywać bardziej złożone komunikaty. * W tych komunikatach ciągi formatujące są zastępowane wartościami zmiennych. */ printf("zmienna \"a\" ma wartość: %d\n",a); printf("zmienna \"a\" ma wartość: %d, a zmienna \"b\" ma wartość: %d\n",a,b); Listing 8: Przykłady użycia funkcji printf() 7. Zadania 1. Napisz program, który pobierze od użytkownika trzy liczby całkowite i wypisze na ekranie tę, która jest największa spośród nich. 2. Powtórz zadanie z punktu pierwszego, ale tym razem zamiast liczb niech użytkownik podaje pojedyncze znaki. Program powinien wybrać ten, który najpóźniej występuje w alfabecie. Uwaga! Jeśli w programie umieszczamy kilka następujących po sobie wywołań funkcji scanf() z ciągiem formatującym %c, to zaobserwujemy, że nie wszystkie znaki z klawiatury są odczytywane. Dzieje się tak dlatego, że scanf("%c"); odczytuje nie tylko zwykłe znaki, ale również znaki nowego wiersza pozostawione przez klawisz Enter. Aby poradzić sobie z tym problemem wystarczy, począwszy od drugiego wywołania funkcji scanf(), zamiast ciągu %c zastosować ciąg %c (ze spacją przed znakami % i c). 3. Napisz program, który pobierze do użytkownika dwie liczby, zapisze je w zmiennych typu unsigned char, wypisze je na ekranie, a następnie poda wyniki działań and, or i xor wykonanych na tych liczbach. Wszystkie wartości na ekranie powinny być wypisane w kodzie dziesiętnym i szesnastkowym. 4. Zadeklaruj w programie trzy zmienne typu int, short int i double i wypisz na ekranie ich wartości, nie przypisując im nic wcześniej. 5. Napisz program, który pobierze od użytkownika dwie liczby typu int, następnie je podzieli i wypisze wynik na ekranie. Czy wyniki są zawsze takie, jakich się spodziewałaś/spodziewałeś? 7

6. Napisz program, który pobierze od użytkownika dwie liczby całkowite, a następnie wypisze na ekranie pierwszą z nich jeśli jest ona podzielna przez drugą lub drugą, jeśli pierwsza nie jest podzielna przez drugą. 7. Jak sprawdzić, czy liczba jest parzysta bez używania operatora modulo? Napisz program, który to pokaże. 8. Zadeklaruj zmienną typu unsigned char. Odejmij od jej początkowej wartości jeden. Wypisz na ekranie wartość tej zmiennej. Jak wytłumaczyć ten wynik? 9. (trudniejsze) Poszukaj informacji o prawach de Morgana. Napisz program, który oblicza iloczyn bitowy dwóch zmiennych, ale bez używania operatora &. Powtórz to zadanie dla sumy bitowej. 8