Spis treści. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF03Z. Autor: dr inż.

Podobne dokumenty
Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, INSTRUKCJA WARUNKOWA IF. Informatyka 1

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Metodyki i techniki programowania

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE. Metodyki i techniki programowania

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE. Informatyka 1

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, ZAGNIEŻDŻANIE IF-ELSE.

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

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Metodyki i techniki programowania. Instrukcja do pracowni specjalistycznej z przedmiotu

13 JĘZYK C - OPERATOR WARUNKOWY,

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

if (warunek) instrukcja1; if (warunek) instrukcja1; else instrukcja2; a > b - a większe od b if (warunek) instrukcja1; a <= b - a mniejsze lub równe b

BHP JĘZYK C - INSTRUKCJE ITERACYJNE

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY, INSTRUKCJA SWITCH, OPERATORY BITOWE, INSTRUKCJA ITERACYJNA FOR.

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - ŚLEDZENIE WYKONANIA PROGRAMU, DEBUGGER. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05Z

Spis treści JĘZYK C - FUNKCJE. Metodyki i techniki programowania. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia MITP10

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

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

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Metodyki i techniki programowania

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

Spis treści JĘZYK C - INSTRUKCJE ITERACYJNE FOR, WHILE I DO WHILE, ZAGNIEŻDŻANIE PĘTLI FOR, INSTRUKCJE CONTINUE, BREAK, I GOTO.

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

dr inż. Jarosław Forenc

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

Spis treści JĘZYK C - TABLICE DWU- I WIELOWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Podstawy programowania w języku C i C++

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 informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

3. Instrukcje warunkowe

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

1 Podstawy c++ w pigułce.

Spis treści PROGRAMOWANIE OBIEKTOWE W JĘZYKU C++: FUNKCJE ZAPRZYJAŹNIONE Z KLASĄ, PRZEŁADOWANIE OPERATORÓW. Informatyka 2

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Odczyt danych z klawiatury Operatory w Javie

Spis treści JĘZYK C - PLIKI BINARNE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF30

Programowanie strukturalne i obiektowe

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

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

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

2 Przygotował: mgr inż. Maciej Lasota

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

for (i=0; i<10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy for (inicjalizacja; test; aktualizacja) instrukcja;

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

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

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

Politechnika Białostocka

Podstawy programowania C. dr. Krystyna Łapin

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

Języki i paradygmaty programowania

Wstęp do programowania

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

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

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

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

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

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne Wyrażenie warunkowe operator selekcji Instrukcja switch

Spis treści MATLAB - ELEMENTY PROGRAMOWANIA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF09

Język C, instrukcje sterujące (laboratorium)

1 Podstawy c++ w pigułce.

Podstawy programowania w języku C

dr inż. Jarosław Forenc

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

Język C zajęcia nr 5

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

Cw.12 JAVAScript w dokumentach HTML

dr inż. Jarosław Forenc

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Podstawy i języki programowania

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

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

KURS C/C++ WYKŁAD 1. Pierwszy program

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

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

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

#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 ); }

JAVAScript w dokumentach HTML (1)

Język C zajęcia nr 11. Funkcje

Podstawy Programowania C++

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

dr inż. Jarosław Forenc

ARKUSZ KALKULACYJNY MICROSOFT EXCEL cz.1 Formuły, funkcje, typy adresowania komórek, proste obliczenia.

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Programowanie obiektowe - zadania

Wprowadzenie do programowania w języku C

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

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

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

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

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

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

4. Funkcje. Przykłady

Transkrypt:

Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 1 Kod przedmiotu: EZ1C200 010 (studia niestacjonarne) JĘZYK C - OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, INSTRUKCJA WARUNKOWA IF, ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY, INSTRUKCJA SWITCH, OPERATORY BITOWE Numer ćwiczenia INF03Z Spis treści 1. Opis stanowiska... 3 1.1. Stosowana aparatura... 3 1.2. Oprogramowanie... 3 2. Wiadomości teoretyczne... 3 2.1. Operatory relacyjne (porównania)... 3 2.2. Operatory logiczne... 4 2.3. Wyrażenia logiczne... 4 2.4. Przykłady obliczania wartości wyrażeń logicznych... 5 2.5. Instrukcja warunkowa if... 7 2.6. Zagnieżdżanie if-... 11 2.7. Operator warunkowy... 12 2.8. Instrukcja wyboru wielowariantowego - switch... 13 2.9. Stałe zadeklarowane jako const... 17 2.10. Operatory bitowe... 17 3. Przebieg ćwiczenia... 19 4. Literatura... 23 5. Zagadnienia na zaliczenie... 23 6. Wymagania BHP... 24 Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB. Autor: dr inż. Jarosław Forenc Białystok 2013 Wydział Elektryczny, Politechnika Białostocka, 2013 Wszelkie prawa zastrzeżone. Żadna część tej publikacji nie może być kopiowana i odtwarzana w jakiejkolwiek formie i przy użyciu jakichkolwiek środków bez zgody posiadacza praw autorskich. Informatyka 1 2 z 25 Instrukcja INF03Z

1. Opis stanowiska 1.1. Stosowana aparatura Podczas zajęć wykorzystywany jest komputer klasy PC z systemem operacyjnym Microsoft Windows (XP/Vista/7). 1.2. Oprogramowanie Na komputerach zainstalowane jest środowisko programistyczne Microsoft Visual Studio 2008 Standard Edition lub Microsoft Visual Studio 2008 Express Edition zawierające kompilator Microsoft Visual C++ 2008. 2. Wiadomości teoretyczne 2.1. Operatory relacyjne (porównania) Operatory relacyjne sprawdzają prawdziwość zadanych za ich pomocą warunków logicznych. Wynik takiego porównania jest wartością typu int i jest równy: 1 - gdy warunek jest prawdziwy; 0 - gdy warunek nie jest prawdziwy (fałszywy). Operatory relacyjne występujące w języku C zestawiono w Tabeli 1. Tabela 1. Operatory relacyjne (porównania) w języku C. Operator Przykład Znaczenie > a > b a większe od b < a < b a mniejsze od b >= a >= b a większe lub równe b <= a <= b a mniejsze lub równe b == a == b a równe b!= a!= b a nierówne b (a różne od b) 2.2. Operatory logiczne W języku C występują trzy operatory logiczne, które zostały zestawione w Tabeli 2. Tabela 2. Operatory logiczne w języku C. Operator Znaczenie Opis! NOT, nie jednoargumentowy operator negacji logicznej - zmienia argument różny od zera na wartość 0, a argument równy zero na wartość 1 && AND, i dwuargumentowy operator koniunkcji, iloczyn logiczny OR, lub dwuargumentowy operator alternatywy, suma logiczna Zasadę działania poszczególnych operatorów przedstawiają Tabele 3 i 4. 2.3. Wyrażenia logiczne Tabela 3. Operator negacji. a!a fałsz prawda prawda fałsz Tabela 4. Operatory koniunkcji i alternatywy. a b a && b a b fałsz fałsz fałsz fałsz fałsz prawda fałsz prawda prawda fałsz fałsz prawda prawda prawda prawda prawda Z operatorów relacyjnych (porównania) oraz operatorów logicznych budowane są wyrażenia logiczne. W wyrażeniach logicznych mogą występować również zmienne, stałe liczbowe, operatory arytmetyczne, operator przypisania Informatyka 1 3 z 25 Instrukcja INF03Z Informatyka 1 4 z 25 Instrukcja INF03Z

i wywołania funkcji zwracających wynik. Podczas obliczania wartości wyrażenia logicznego uwzględniany jest priorytet operatorów przedstawiony w Tabeli 5. Tabela 5. Priorytet wybranych operatorów (od najwyższego do najniższego). Operator Typ operatora! logiczny * / % arytmetyczne + - arytmetyczne > < >= <= relacyjne ==!= relacyjne && logiczny logiczny = przypisania 2.4. Przykłady obliczania wartości wyrażeń logicznych Wyrażenia logiczne obliczane są od strony lewej do prawej. Proces obliczeń kończy się już w momencie, gdy tylko wiadomo, jaki będzie wynik całego wyrażenia. Załóżmy, że mamy w programie następujące deklaracje zmiennych: int i = 1; int j = 2; int k = -5; Wyrażenie i == 1 Wartość 1 (prawda) Sprawdzamy, czy zmienna i jest równa 1. Ponieważ jest to prawda, to wartością całego wyrażenia jest 1. Uwaga: należy zwrócić szczególną uwagę na wprowadzenie operatora porównania (dwa znaki równości), a nie operatora przypisania (jeden znak równości). Wyrażenie j = 3 Wartość 3 (prawda) Sprawdzamy, czy zmienna j ma wartość 3. Przez pomyłkę zamiast dwóch znaków równości wprowadzamy tylko jeden. Wówczas zmiennej j zostaje przypisana nowa wartość - 3, więc wartością całego wyrażenia jest 3. Jeśli wyrażenie takie pojawi się w instrukcji warunkowej if, to okaże się, że jest ono prawdziwe!!! W języku C, w instrukcji if, wyrażenie jest prawdziwe, gdy jego wartość jest różna od zera. Niektóre kompilatory wyświetlają w takim przypadku ostrzeżenie. Wyrażenie i + j < k Wartość 0 (fałsz) W wyrażeniach logicznych mogą być również stosowane operatory arytmetyczne. W powyższym przykładzie jako pierwsze zostanie wykonane dodawanie (operator + ma wyższy priorytet niż operator <), a następnie wynik dodawania zostanie porównany z wartością zmiennej k. Wyrażenie Wartość 3 < j < 6 1 (prawda) Powyższy przykład pokazuje jeden z najczęstszych błędów popełnianych przez początkujących programistów. Chcemy sprawdzić, czy zmienna j (3,6). Jako pierwsze wykonywane jest porównanie 3 < j. Ponieważ nie jest to prawda (gdyż j = 2), to wynikiem porównania jest wartość 0. Następnie wynik tego porównania (czyli 0, a nie j!!!) jest porównywany z wartością 6 (0 < 6). Wyrażenie to jest prawdziwe, a zatem wynik całego wyrażenia logicznego to prawda, czyli 1. W rzeczywistości jednak j (3,6). Prawidłowy zapis warunku logicznego sprawdzającego, czy j (3,6) przedstawiony jest poniżej. Wyrażenie j > 3 && j < 6 Wartość 0 (fałsz) Informatyka 1 5 z 25 Instrukcja INF03Z Informatyka 1 6 z 25 Instrukcja INF03Z

Jako pierwsze jest obliczane wyrażenie po lewej stronie: j > 3. Wynikiem tego porównania jest 0 (fałsz). W tym momencie zakończy się analiza wyrażenia, gdyż niezależnie od tego co zostanie otrzymane po prawej stronie operatora &&, to i tak wartość całego wyrażenia będzie równa 0 (fałsz). Wyrażenie Wartość (j >= 0 && j <= 4) (j > 6 && j < 10) 0 (fałsz) Przy obliczaniu wartości powyższego wyrażenia występuje podobna sytuacja jak poprzednio. Wyrażenia j >= 0 oraz j <= 4 są prawdziwe, a zatem wyrażenie po prawej stronie operatora nie będzie już obliczane, gdyż całkowity wynik jest już znany. Operator alternatywy logicznej ma niższy priorytet niż operator koniunkcji &&, w związku z tym można pominąć nawiasy zwykłe. 2.5. Instrukcja warunkowa if Instrukcja warunkowa if (nazywana także instrukcją rozgałęzienia - ang. branching statement) służy do sprawdzania warunków logicznych i decydowaniu o wykonywaniu lub też pomijaniu fragmentów programu. Instrukcja ta może występować w dwóch postaciach. Postać nr 1 instrukcji if: if (wyrażenie) instrukcja1; Jeśli wartość wyrażenia w nawiasach jest prawdziwa (tzn. różna od zera), to wykonywana jest instrukcja1. Gdy wartość ta jest fałszywa (równa zero), to instrukcja1 nie jest wykonywana. W poniższym fragmencie programu obliczamy wartość bezwzględną zmiennej x. Jeśli zmienna x jest mniejsza od zera, to jej znak jest zmieniany na przeciwny. Jeśli natomiast x jest większe lub równe zeru, to nic się nie dzieje. Wcięcie akapitowe (kilka spacji przed instrukcją x = -x;) nie jest wymagane przez składnię języka, ale należy do powszechnej praktyki formatowania kodu programu. Wcięcia tego rodzaju wyróżniają instrukcje, które nie są wykonywane zawsze, ale jedynie w sytuacji spełnienia pewnego warunku. Jeśli, w przypadku spełnienia warunku w instrukcji if, chcemy wykonać więcej niż jedną instrukcję, to należy zastosować tzw. instrukcję złożoną (instrukcję grupującą, blok), czyli objąć te instrukcje nawiasami klamrowymi, jak zostało zaprezentowane to na poniższym przykładzie. if (x > 0) printf("liczba jest wieksza od zera\n"); printf("wartosc liczby: %d \n",x); Postać nr 2 instrukcji if: if (wyrażenie) instrukcja1; instrukcja2; Jeśli wartość wyrażenia w nawiasach jest prawdziwa (różna od zera), to wykonywana jest instrukcja1, natomiast instrukcja2 wówczas nie jest wykonywana. W przeciwnym przypadku, jeśli wartość wyrażenia jest równa zeru (nie jest prawdziwa), to wykonywana jest instrukcja2, a instrukcja1 jest pomijana. Poniższy fragment programu sprawdza, czy osoba o podanym wieku jest pełnoletnia i wyświetla odpowiedni komunikat. if (wiek >= 18) printf("osoba jest pelnoletnia\n"); printf("osoba nie jest pelnoletnia\n"); if (x < 0) x = -x; Informatyka 1 7 z 25 Instrukcja INF03Z Informatyka 1 8 z 25 Instrukcja INF03Z

Wyrażenie występujące w instrukcji if musi być zawsze umieszczone w nawiasach zwykłych. Po nawiasie nie stawia się średnika. Konstrukcja ze średnikiem na końcu: if (wyrażenie); instrukcja1; jest poprawna (kompilator nie zasygnalizuje błędu), ale oznacza wykonanie instrukcji pustej jeśli wyrażenie jest prawdziwe. Natomiast instrukcja1 zostanie wykonana zawsze, niezależnie od tego czy wyrażenie jest prawdziwe, czy też nie. Poniższy program oblicza iloraz dwóch liczb. Dzielenie jest wykonywane tylko w przypadku, gdy wartość zmiennej b jest różna od zera. Jeśli b ma wartość zero, to program wyświetla odpowiedni komunikat. Program obliczający iloraz dwóch liczb wprowadzonych z klawiatury. #include <stdio.h> #include <stdlib.h> int main() float a, b, w; printf("podaj pierwsza liczbe:"); scanf("%f",&a); printf("podaj druga liczbe:"); scanf("%f",&b); if (b!= 0) w = a / b; printf("wynik dzielenia to: %f\n",w); printf("dzielenie przez zero\n"); W powyższym programie instrukcja złożona występuje dwukrotnie - po if i po. W tym drugim przypadku nie jest to konieczne, gdyż mamy tylko jedną instrukcję. Instrukcję if można zatem zapisać także w następujący sposób: if (b!= 0) w = a / b; printf("wynik dzielenia to: %f\n",w); printf("dzielenie przez zero\n"); Instrukcja znajdująca się bezpośrednio po if wykonywana jest gdy wartość wyrażenia w nawiasach jest różna od zera. Można zatem w powyższym programie zamiast: if (b!= 0) napisać: if (b) Podobnie, zamiast: if (b!= 0) można napisać: if (!b) system("pause"); return 0; Informatyka 1 9 z 25 Instrukcja INF03Z Informatyka 1 10 z 25 Instrukcja INF03Z

2.6. Zagnieżdżanie if- Jako instrukcja po if może występować kolejny if zawierający. Do której instrukcji if zatem on należy? Ogólna zasada: danemu odpowiada pierwszy poprzedzający go i znajdujący się w tym samym bloku if nie mający jeszcze swojej pary w postaci. W poniższym przykładzie przyporządkowany jest do if (wyrażenie2): if (wyrażenie1) if (wyrażenie2) instrukcja1; instrukcja2; Przykład: if (delta >= 0) if (delta > 0) printf("dwa pierwiastki\n"); printf("jeden podwojny pierwiastek \n"); Stosując dodatkowe nawiasy klamrowe można przyporządkować do pierwszej instrukcji if: if (wyrażenie1): if (wyrażenie1) if (wyrażenie2) instrukcja1; instrukcja2; Standard języka C pozwala na obsługę co najmniej 127 poziomów zagnieżdżania if-: if (wyrażenie1) instrukcja1; if (wyrażenie2) instrukcja2; if (wyrażenie3) instrukcja3; if (wyrażenie4) instrukcja5;... 2.7. Operator warunkowy Operator warunkowy składa się z dwóch symboli (? - znak zapytania, : - dwukropek) i wymaga trzech operandów (wyrażeń w1, w2, w3). Stosując operator warunkowy otrzymujemy następującą postać wyrażenia: w1? w2 : w3 Wyrażenie warunkowe obliczane jest w następujący sposób: najpierw obliczane jest wyrażenie w1. Jeśli jego wartość jest różna od zera, to obliczane jest wyrażenie w2 i jego wartość staje się wartością całego wyrażenia warunkowego. W przeciwnym razie w2 jest ignorowane, a wartością wyrażenia warunkowego staje się wartość wyrażenia w3 (po wcześniejszym jego obliczeniu). Wyrażenia warunkowe mogą zastępować proste instrukcje if.... Przykładowo, obliczanie wartości bezwzględnej zmiennej x: if (x < 0) y = -x; y = x; można zastąpić przez: y = (x < 0)? x : x; Informatyka 1 11 z 25 Instrukcja INF03Z Informatyka 1 12 z 25 Instrukcja INF03Z

Podobnie postępujemy z wyznaczeniem większej z dwóch zmiennych a i b: if (a > b) max = a; max = b; można zastąpić przez: max = (a > b)? a : b; Zastosowanie wyrażania warunkowego upraszcza kod programu i może dawać w wyniku kompilacji bardziej zoptymalizowany kod wykonywalny. 2.8. Instrukcja wyboru wielowariantowego - switch Instrukcja switch służy do podejmowania decyzji wielowariantowych, w których sprawdza się, czy wartość pewnego wyrażenia pasuje do jednej z kilku całkowitych stałych wartości, i wykonuje odpowiedni skok. W niektórych przypadkach instrukcją switch można zastąpić wielokrotne instrukcje if - if. Ogólna postać instrukcji switch jest następująca: switch (wyrażenie) case wyrażenie_stałe: instrukcje; case wyrażenie_stałe: instrukcje; case wyrażenie_stałe: instrukcje;... default: instrukcje; Obliczane jest wyrażenie w nawiasach, a następnie jego wartość porównywana jest z wartościami wyrażeń stałych (zawartych w częściach oznaczanych przez etykiety case). Sterowanie jest przekazywane do tej instrukcji, którą poprzedza etykieta case z wyrażeniem stałym równym co do wartości wyrażeniu w nawiasach switch. Od tego miejsca wykonywane są wszystkie instrukcje znajdujące się po tej etykiecie oraz oznaczone przez inne etykiety, aż do końca instrukcji switch. Jeśli nie znajdzie się żadna etykieta pasująca do wartości wyrażenia w nawiasach switch, to sterowanie jest przekazywane do części oznaczonej przez etykietę default, a jeśli jej nie ma, to do instrukcji następującej w programie po switch. Etykieta default może wystąpić tylko jeden raz. W składni instrukcji switch wszystkie instrukcje oraz etykieta default są opcjonalne. Wyrażenia stałe to takie, których wartości są znane w trakcie kompilacji i nie mogą zostać zmienione w fazie wykonania programu. Należą do nich m.in.: - znaki umieszczone w apostrofach: +, a ; - liczby całkowite: 1, 2, 3; - stałe zadeklarowane jako const lub przez dyrektywę preprocesora #define. Wybór arytmetycznego działania wykonywanego na dwóch liczbach w zależności od wciśniętego klawisza. #include <stdio.h> #include <stdlib.h> int main() int key; float x1 = 10.0, x2 = 5.0, y; printf("podaj dzialanie: "); key = getchar(); switch (key) case '+': y = x1 + x2; printf("dodawanie: y = %.2f \n",y); break; case '-': y = x1 - x2; printf("odejmowanie: y = %.2f \n",y); break; default: printf("nieznana operacja!\n"); Informatyka 1 13 z 25 Instrukcja INF03Z Informatyka 1 14 z 25 Instrukcja INF03Z

system("pause"); return 0; Po wciśnięciu - wyświetlone zostałyby komunikaty: Odejmowanie: y = 5.00 Nieznana operacja! W powyższym programie funkcja getchar() odczytuje wciśnięty klawisz i podstawia jego kod pod zmienną key. Następnie w instrukcji switch kod klawisza porównywany jest z wyrażeniami stałymi znajdującymi się po case. Jeśli wciśniętym klawiszem był +, to zmienne x1 i x2 dodawane są do siebie i wyświetlany jest wynik dodawania. Jeśli wciśnięto -, to zmienne są odejmowane. Wprowadzenie każdego innego znaku spowoduje wyświetlenie tekstu: Nieznana operacja!. Po instrukcjach każdego wariantu case występują instrukcje break. Powodują one natychmiastowe opuszczenie instrukcji switch. Ich brak spowodowałby wykonanie wszystkich instrukcji (do końca instrukcji switch) występujących po każdym case. Przykład: switch (key) case '+': y = x1 + x2; printf("dodawanie: y = %.2f \n",y); case '-': y = x1 - x2; printf("odejmowanie: y = %.2f \n",y); default: printf("nieznana operacja!\n"); po wciśnięciu innego znaku wyświetlony zostałby komunikat: Nieznana operacja! Z każdym wariantem może być związanych jedna lub kilka całkowitych wartości stałych bądź wyrażeń stałych, np. Program wyświetlający informację o wprowadzonej ocenie. #include <stdio.h> #include <stdlib.h> int main() int ocena; printf("podaj ocene:"); scanf("%d",&ocena); switch (ocena) case 5: case 4: case 3: printf("ocena pozytywna\n"); break; case 2: printf("ocena negatywna\n"); break; default: printf("bledna ocena\n"); Po wciśnięciu + wyświetlone zostałyby komunikaty: Dodawanie: y = 15.00 Odejmowanie: y = 5.00 Nieznana operacja! system("pause"); return 0; Informatyka 1 15 z 25 Instrukcja INF03Z Informatyka 1 16 z 25 Instrukcja INF03Z

2.9. Stałe zadeklarowane jako const Stałą specyfikujemy używając w deklaracji przed nazwą typu słowa const. Tak zadeklarowana zmienna musi otrzymać wartość w trakcie inicjalizacji i nie może być później zmieniana, np. const int x = 10; const float y = 5.33; 2.10. Operatory bitowe W języku C występuje 6 operatorów pozwalających na wykonywanie operacji na poszczególnych bitach liczb (Tabela 6). Operatory te można stosować jedynie do argumentów całkowitych (char, short, int, long) ze znakiem lub bez. Tabela 6. Operatory bitowe w języku C. Operator Znaczenie Opis & AND dwuargumentowy operator koniunkcji bitowej OR dwuargumentowy operator alternatywy bitowej ^ XOR dwuargumentowy operator różnicy symetrycznej ~ NOT jednoargumentowy operator uzupełnienia jedynkowego (zastępuje 0 1, 1 0) >> dwuargumentowy operator przesunięcia bitowego w prawo << dwuargumentowy operator przesunięcia bitowego w lewo Operacje bitowe są najczęściej wykorzystywane do ustawiania i testowania wartości bitów w obszarach pamięci (programowanie niskopoziomowe i obiektowe). Rozważmy następujący przykład deklaracji zmiennych i operacji bitowych: Operator koniunkcji bitowej (&) ustawia jedynkę na każdej pozycji bitowej tam, gdzie oba bity są równe jeden, zaś w pozostałych przypadkach ustawia zero. z = x & y; x 0 1 1 0 1 0 1 0 y 1 0 1 0 1 1 0 1 z 0 0 1 0 1 0 0 0 Operator alternatywy bitowej ( ) ustawia jedynkę na każdej pozycji bitowej tam, gdzie przynajmniej jeden z bitów jest równy jeden. z = x y; x 0 1 1 0 1 0 1 0 y 1 0 1 0 1 1 0 1 z 1 1 1 0 1 1 1 1 Operator różnicy symetrycznej (^) ustawia jedynkę na każdej pozycji bitowej tam, gdzie bity są różne a zero tam, gdzie bity są takie same. z = x ^ y; x 0 1 1 0 1 0 1 0 y 1 0 1 0 1 1 0 1 z 1 1 0 0 0 1 1 1 Operator uzupełnienia jedynkowego (~) zastępuje jedynkę zerem i zero jedynką. z = ~x; x 0 1 1 0 1 0 1 0 z 1 0 0 1 0 1 0 1 Operatory: << i >> przesuwają bity argumentu stojącego po lewej stronie operatora o liczbę pozycji określoną przez argument stojący po prawej stronie operatora. Argument ten musi być liczbą dodatnią. Przesunięcie w prawo powoduje pojawienie się na najstarszej pozycji 0 (dla liczb bez znaku) lub powielenie bitu znaku (dla liczb ze znakiem). Przy przesunięciu w lewo zwolnione (najmłodsze) bity zapełniane są 0. unsigned char x = 106; /* 01101010 */ unsigned char y = 173; /* 10101101 */ unsigned char z; Informatyka 1 17 z 25 Instrukcja INF03Z Informatyka 1 18 z 25 Instrukcja INF03Z

z = x >> 2; x 0 1 1 0 1 0 1 0 Z 0 0 0 1 1 0 1 0 z = x << 1; x 0 1 1 0 1 0 1 0 z 1 1 0 1 0 1 0 0 Przesunięcie w prawo o 1 pozycję odpowiada podzieleniu liczby przez 2, zaś w lewo - pomnożeniu przez 2, np. z = x >> 1; x 0 1 1 0 1 0 1 0 106 (10) Z 0 0 1 1 0 1 0 1 53 (10) z = x << 1; x 0 1 1 0 1 0 1 0 106 (10) z 1 1 0 1 0 1 0 0 212 (10) Nie należy mylić operatorów logicznych (&& i ) z operatorami bitowymi (& i ), gdyż zazwyczaj kompilator nie wykaże żadnych błędów, a ich wykrycie podczas wykonania programu może być bardzo trudne, np. int x = 1, y = 2; x & y - wartość wyrażenia: 0 (fałsz), x && y - wartość wyrażenia: 1 (prawda). 3. Przebieg ćwiczenia Na pracowni specjalistycznej należy wykonać wybrane zadania wskazane przez prowadzącego zajęcia. W różnych grupach mogą być wykonywane różne zadania. 1. Napisz program, w którym użytkownik wprowadza z klawiatury liczbę całkowitą. Program powinien sprawdzić i wyświetlić informację o parzystości (parzysta/nieparzysta) i znaku liczby (dodatnia/ujemna). W przypadku wprowadzenia zera na ekranie powinien wyświetlić się tylko komunikat: zero. 2. Napisz program wczytujący z klawiatury trzy liczby typu int, a następnie obliczający średnią arytmetyczną tylko tych liczb, które są większe od zera. 3. Napisz program wczytujący trzy liczby typu int. Oblicz i wyświetl wartość największej oraz najmniejszej liczby. 4. Napisz program sprawdzający, czy z trzech odcinków o długościach a, b, c wprowadzonych z klawiatury można zbudować trójkąt. 5. Napisz program, w którym użytkownik wprowadza z klawiatury wzrost w cm, a program wyświetla informację o zaliczeniu osoby do jednej z trzech grup: - poniżej 150 cm - wzrost niski; - od 150 cm, poniżej 180 cm - wzrost średni; - 180 cm i więcej - wzrost wysoki. 6. Napisz program, w którym wczytywane są trzy liczby: dolna i górna granica pewnego przedziału oraz dowolna liczba x. Program powinien wyświetlić informację, czy x znajduje się w przedziale, jest górną lub dolną granicą przedziału, znajduje się poniżej przedziału lub powyżej przedziału. Jeśli dolna granica jest większa od górnej, to program powinien wyświetlić odpowiedni komunikat i zakończyć działanie. 7. Napisz program rozwiązujący równanie kwadratowe: 2 ax + bx + c = 0 (1) Współczynniki a, b, c wczytaj z klawiatury. Jeśli z wprowadzonych danych wynika, że nie jest to równanie kwadratowe, to wyświetl odpowiedni komunikat. 8. Napisz program, w którym użytkownik wprowadza z klawiatury trzy liczby, a program wyświetla je od największej do najmniejszej, a następnie od najmniejszej do największej. Informatyka 1 19 z 25 Instrukcja INF03Z Informatyka 1 20 z 25 Instrukcja INF03Z

9. Na rysunku przedstawiony jest przebieg impulsu trapezowego. Napisz program, który na podstawie wczytanego z klawiatury czasu t obliczy i wyświetli wartość napięcia u. 5 y a) 5 y b) 4 3 2 1 u[v] t[s] 4 3 2 1 x 4 3 2 1 x 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 10. Napisz program, w którym użytkownik wprowadza z klawiatury współrzędne trzech wierzchołków trójkąta, a następnie współrzędne punktu x. Zadaniem programu jest sprawdzenie, czy punkt leży w danym trójkącie. 11. Firma OldBook prowadzi antykwariat internetowy wysyłając książki listami poleconymi priorytetowymi. Koszt wysłania takiego listu zależnie od wagi przesyłki przedstawiony jest w poniższej tabeli. Gabaryt A to przesyłki, w których żaden z wymiarów nie może przekroczyć: wysokość 20 mm, długość 325 mm, szerokość 230 mm. Napisz program, w którym użytkownik podaje: wysokość (w mm), długość (w mm), szerokość (w mm) i wagę przesyłki (w gramach), a program wyświetla koszt wysłania przesyłki. Zakładamy, że przesyłki nie są cięższe niż 2000 gramów. Waga Gabaryt A Gabaryt B do 350 g 4,55 PLN 7,30 PLN ponad 350 g do 1000 g 6,70 PLN 9,30 PLN ponad 1000 g do 2000 g 11,00 PLN 13,10 PLN 12. Napisz program sprawdzający, czy punkt o współrzędnych (x, y) wprowadzonych z klawiatury leży w obszarze zaznaczonym na rysunku (do obszaru zaliczamy także jego granicę). 13. Napisz program, który po wciśnięciu klawiszy od 1 do 5 wypisze tekst: Wcisnales jeden/dwa/trzy/cztery/piec. lub Wcisnales inny klawisz. dla klawiszy różnych od 1 do 5. Zastosuj instrukcję switch. 14. Napisz program, w którym użytkownik wprowadza rok oraz numer miesiąca, a program wyświetla liczbę dni w podanym miesiącu. Uwzględnij obecność lat przestępnych. Zastosuj instrukcję switch. Uwaga: rok przestępny (liczbowo) spełnia następujące warunki: jest podzielny przez 4, ale nie jest podzielny przez 100 lub jest podzielny przez 400. 15. Napisz program, w którym użytkownik wprowadza numer dnia tygodnia. Program powinien wypisać tekst: - zwykly dzien - dla dni od poniedziałku do piątku; - weekend - dla soboty i niedzieli; - bledny numer dnia - dla pozostałych wartości. Przyjmij: 1 - poniedziałek, 2 - wtorek, 3 - środa, itd. Zastosuj instrukcję switch. Informatyka 1 21 z 25 Instrukcja INF03Z Informatyka 1 22 z 25 Instrukcja INF03Z

16. Napisz program, w którym użytkownik wprowadza numer miesiąca, a program wyświetla nazwy wszystkich miesięcy, które pozostały do końca roku. Wyświetl odpowiedni komunikat w przypadku błędnego numeru miesiąca. Zastosuj instrukcję switch. Przykładowe wywołanie programu: Podaj numer miesiaca: 9 ------- wrzesien pazdziernik listopad grudzien 17. Zadeklaruj w programie zmienną typu unsigned char. Zainicjuj zmienną liczbą z przedziału od 0 do 255. Wyświetl wartości kolejnych bitów tej liczby. 4. Literatura [1] Kernighan B.W., Ritchie D.M.: Język ANSI C. Programowanie. Wydanie II. Helion, Gliwice, 2010. [2] Prata S.: Język C. Szkoła programowania. Wydanie V. Helion, Gliwice, 2006. [3] King K.N.: Język C. Nowoczesne programowanie. Wydanie II. Helion, Gliwice, 2011. [4] Summit S.: Programowanie w języku C. FAQ. Helion, Gliwice, 2003. [5] Wileczek R.: Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows. Helion, Gliwice, 2009. 5. Zagadnienia na zaliczenie 1. Omów operatory relacyjne (porównania) i logiczne w języku C. 2. Opisz sposób tworzenia i obliczania wyrażeń logicznych. 3. Omów składnię i zastosowanie instrukcji warunkowej if. 6. Wymagania BHP Warunkiem przystąpienia do praktycznej realizacji ćwiczenia jest zapoznanie się z instrukcją BHP i instrukcją przeciw pożarową oraz przestrzeganie zasad w nich zawartych. W trakcie zajęć laboratoryjnych należy przestrzegać następujących zasad. - Sprawdzić, czy urządzenia dostępne na stanowisku laboratoryjnym są w stanie kompletnym, nie wskazującym na fizyczne uszkodzenie. - Jeżeli istnieje taka możliwość, należy dostosować warunki stanowiska do własnych potrzeb, ze względu na ergonomię. Monitor komputera ustawić w sposób zapewniający stałą i wygodną obserwację dla wszystkich członków zespołu. - Sprawdzić prawidłowość połączeń urządzeń. - Załączenie komputera może nastąpić po wyrażeniu zgody przez prowadzącego. - W trakcie pracy z komputerem zabronione jest spożywanie posiłków i picie napojów. - W przypadku zakończenia pracy należy zakończyć sesję przez wydanie polecenia wylogowania. Zamknięcie systemu operacyjnego może się odbywać tylko na wyraźne polecenie prowadzącego. - Zabronione jest dokonywanie jakichkolwiek przełączeń oraz wymiana elementów składowych stanowiska. - Zabroniona jest zmiana konfiguracji komputera, w tym systemu operacyjnego i programów użytkowych, która nie wynika z programu zajęć i nie jest wykonywana w porozumieniu z prowadzącym zajęcia. - W przypadku zaniku napięcia zasilającego należy niezwłocznie wyłączyć wszystkie urządzenia. - Stwierdzone wszelkie braki w wyposażeniu stanowiska oraz nieprawidłowości w funkcjonowaniu sprzętu należy przekazywać prowadzącemu zajęcia. Informatyka 1 23 z 25 Instrukcja INF03Z Informatyka 1 24 z 25 Instrukcja INF03Z

- Zabrania się samodzielnego włączania, manipulowania i korzystania z urządzeń nie należących do danego ćwiczenia. - W przypadku wystąpienia porażenia prądem elektrycznym należy niezwłocznie wyłączyć zasilanie stanowiska. Przed odłączeniem napięcia nie dotykać porażonego. Informatyka 1 25 z 25 Instrukcja INF03Z