JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Spis treści

7
Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 1 Kod przedmiotu: ES1C200 009 (studia stacjonarne) JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Numer ćwiczenia INF12 Autor: dr inż. Jarosław Forenc Białystok 2013 Informatyka 1 2 z 14 Instrukcja INF12 Spis treści 1. Opis stanowiska ............................................................................................. 3 1.1. Stosowana aparatura ............................................................................... 3 1.2. Oprogramowanie ...................................................................................... 3 2. Wiadomości teoretyczne................................................................................ 3 2.1. Struktury ................................................................................................... 3 2.2. Odwołania do pól struktury ....................................................................... 5 2.3. Inicjalizacja zmiennej strukturalnej ........................................................... 6 2.4. Przekazywanie struktur do funkcji ............................................................ 7 2.5. Deklaracje typedef.................................................................................... 8 2.6. Pola bitowe............................................................................................... 8 2.7. Unie.......................................................................................................... 9 3. Przebieg ćwiczenia ....................................................................................... 10 4. Literatura ....................................................................................................... 12 5. Zagadnienia na zaliczenie ............................................................................ 12 6. Wymagania BHP ........................................................................................... 13 _____________ Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB. © 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.

Transcript of JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Spis treści

Page 1: JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Spis treści

Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii

Instrukcja do pracowni specjalistycznej z przedmiotu

Informatyka 1

Kod przedmiotu: ES1C200 009

(studia stacjonarne)

JĘZYK C - STRUKTURY, POLA BITOWE, UNIE

Numer ćwiczenia

INF12

Autor: dr inż. Jarosław Forenc

Białystok 2013

Informatyka 1 2 z 14 Instrukcja INF12

Spis treści

1. Opis stanowiska ............................................................................................. 3

1.1. Stosowana aparatura ............................................................................... 3

1.2. Oprogramowanie ...................................................................................... 3

2. Wiadomości teoretyczne ................................................................................ 3

2.1. Struktury ................................................................................................... 3

2.2. Odwołania do pól struktury ....................................................................... 5

2.3. Inicjalizacja zmiennej strukturalnej ........................................................... 6

2.4. Przekazywanie struktur do funkcji ............................................................ 7

2.5. Deklaracje typedef .................................................................................... 8

2.6. Pola bitowe ............................................................................................... 8

2.7. Unie .......................................................................................................... 9

3. Przebieg ćwiczenia ....................................................................................... 10

4. Literatura ....................................................................................................... 12

5. Zagadnienia na zaliczenie ............................................................................ 12

6. Wymagania BHP ........................................................................................... 13

_____________ Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB.

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

Page 2: JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Spis treści

Informatyka 1 3 z 14 Instrukcja INF12

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

Struktura jest zestawem elementów różnych typów, zgrupowanych pod jedną

nazwą. Struktury służą zatem do reprezentacji złożonych obiektów różnych

danych. Ogólna postać deklaracji struktury jest następująca:

struct nazwa { opis_pola_1; opis_pola_2; ... opis pola_n; };

Deklaracja struktury rozpoczyna się od słowa kluczowego struct, po którym

może występować opcjonalna nazwa struktury (etykieta struktury). Pomiędzy

nawiasami klamrowymi umieszczone są pola struktury (komponenty struktury,

składowe struktury), mające taką samą postać jak deklaracje zmiennych

w programie. W deklaracji struktury muszą występować wszystkie nawiasy

klamrowe i średniki.

Informatyka 1 4 z 14 Instrukcja INF12

Poniżej przedstawione są przykłady deklaracji struktur.

struct punkt { int x; int y; };

struct osoba { char imie[15]; char nazwisko[20]; int wiek; int wzrost, waga; };

Pola jednego typu można łączyć przecinkami. Nazwy pól struktury mogą być

takie same jak nazwy innych zmiennych w programie, a nawet takie same jak

nazwa struktury. Deklarując strukturę wprowadzamy nowy typ danych (np. struct

punkt), którym można posługiwać się tak samo jak każdym innym typem

standardowym.

Po klamrze kończącej listę pól struktury może występować lista zmiennych:

struct osoba { char imie[15]; char nazwisko[20]; int wiek; } Kowalski, Nowak;

W powyższej deklaracji Kowalski i Nowak są zmiennymi typu struct osoba.

W przypadku deklaracji, po której nie występuje lista zmiennych, nie następuje

przydział pamięci, natomiast zmienne można zadeklarować później, np.

struct osoba { char imie[15]; char nazwisko[20]; int wiek; }; struct osoba Kowalski, Nowak;

Page 3: JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Spis treści

Informatyka 1 5 z 14 Instrukcja INF12

2.2. Odwołania do pól struktury

Dostęp do pól struktury możliwy jest dzięki konstrukcji typu:

nazwa_struktury.nazwa_pola

W poniższym przykładzie zapisujemy wartość 25 do pola wiek zmiennej

strukturalnej Kowalski.

Kowalski.wiek = 25;

nazwa pola

kropka

nazwa zmiennej typu strukturalnego

Operator kropki nazywany jest operatorem bezpośredniego wyboru pola.

W przypadku, gdy zmienna strukturalna jest wskaźnikiem, to do odwołania

do pola struktury używamy operatora pośredniego wyboru pola (->), np.

struct osoba Nowak, *Nowak1; Nowak1 = &Nowak; Nowak1 -> wiek = 25;

lub

(*Nowak1).wiek = 25;

W ostatnim zapisie nawiasy są konieczne, gdyż operator . ma wyższy priorytet niż

operator *.

Przykładowe operacje na strukturze.

#include <stdio.h> struct osoba {

Informatyka 1 6 z 14 Instrukcja INF12

char imie[15]; char nazwisko[20]; int wiek; }; int main() { struct osoba Nowak; printf("Imie: " ); scanf("%s" , Nowak.imie); printf("Nazwisko: " ); scanf("%s" , Nowak.nazwisko); printf("Wiek: " ); scanf("%d" , &Nowak.wiek); printf("%s %s, wiek: %d\n" , Nowak.imie, Nowak.nazwisko,Nowak.wiek); return 0; }

2.3. Inicjalizacja zmiennej strukturalnej

W deklaracjach pól struktury nie mogą występować inicjalizacje. Można

natomiast inicjalizować zmienne strukturalne, np.

struct osoba Nowak = {"Jan" ,"Nowak" ,25};

Brakujące pola w inicjalizacji zostaną zastąpione zerami. Każda wartość

początkowa musi być wyrażeniem stałym (nie może być zmienną).

Zmienne strukturalne tego samego typu można sobie przypisywać, ale nie

można ich porównywać ze sobą.

struct osoba Nowak = {"Jan" , "Nowak" , 40}; struct osoba Nowak1; Nowak1 = Nowak;

Page 4: JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Spis treści

Informatyka 1 7 z 14 Instrukcja INF12

Polami struktury mogą być inne struktury, można definiować tablice struktur, np.

struct data { int dzien; int miesiac int rok; }; struct osoba { char imie[15]; char nazwisko[20]; struct data ur; };

struct osoba Nowak; struct osoba RodzinaKowalskich[5];

Nowak.ur.rok = 1980; RodzinaKowalskich[1].ur.rok = 1965;

2.4. Przekazywanie struktur do funkcji

Struktury przekazywane są do funkcji tak jak każde inne zmienne

podstawowych typów, czyli przez wartość.

Program zawierający funkcję obliczającą odległość dwóch punktów.

#include <stdio.h> #include <math.h>

struct punkt { int x; int y; };

float odleglosc(struct punkt pkt1, struct punkt pkt2) { return sqrt(pow(pkt2.x-pkt1.x,2)+ pow(pkt2.y-pkt1.y,2)); }

Informatyka 1 8 z 14 Instrukcja INF12

int main() { struct punkt p1 = {2,3}, p2 = {-2,1}; float odl;

odl = odleglosc(p1,p2); printf("Punkt nr 1: (%d,%d)\n" ,p1.x,p1.y); printf("Punkt nr 2: (%d,%d)\n" ,p2.x,p2.y); printf("Odleglosc = %g\n" ,odl);

return 0; }

2.5. Deklaracje typedef

Deklaracja typdef służy do tworzenia nowych nazw typów danych. Poniższa

deklaracja tworzy dla typu int synonim integer, którym można posługiwać się

dokładnie tak samo, jak typem int.

typedef int integer;

nowa nazwa typu

stara nazwa typu

słowo kluczowe typedef

typedef int integer; integer x, y, *ptr; x = 10; printf("%d\n" ,x);

2.6. Pola bitowe

Pola bitowe umożliwiają przechowywanie małych wartości zajmujących

pojedyncze bity bez zbędnych strat pamięci. Pola bitowe deklaruje się wewnątrz

struktur w następujący sposób:

Page 5: JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Spis treści

Informatyka 1 9 z 14 Instrukcja INF12

typ id_pola : wielkość_pola

obszar zajmowany przez pole, w bitach

opcjonalny identyfikator (nazwa) pola

typ (int, unsigned int, signed int)

Pola zajmują tyle bitów, ile podano jako wielkość_pola. Wartości zapisane

w polach traktowane są jak liczby całkowite. Zakres wartości pól wynika

z wielkości_pola. Dostęp do pól bitowych odbywa się na takiej samej zasadzie jak

do normalnych pól struktury, np.

struct bits { unsigned int a : 4; unsigned int b : 2; unsigned int : 2; unsigned int c : 6; } x;

Poniższe przypisanie jest niepoprawne, gdyż pole b zajmuje 2 bity, a do

zapisania liczby 4 potrzebne są trzy bity (410 = 1002).

x.b = 4;

2.7. Unie

Unia jest specjalnym rodzajem struktury, w której „aktywne” jest tylko jedno

pole (Rys. 1). Unię deklaruje się w podobny sposób jak strukturę:

union nazwa { char c; int i; double f; } x;

Informatyka 1 10 z 14 Instrukcja INF12

x.c

x.i

x.d

Rys. 1. Interpretacja graficzna unii.

Zmienna x z powyższego przykładu może przechowywać wartość typu char

lub wartość typu int lub wartość typu double, ale tylko jedną z nich w danym

momencie. Rozmiar unii wyznaczany jest przez rozmiar największego jej pola.

Dostęp do pól unii jest taki sam jak do pól struktury, np.

x.c = 'a' ; x.d = 12.15;

Unię można zainicjować jedynie wartością o typie jej pierwszej składowej.

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 zawierający funkcje realizujące podstawowe działania na

liczbach zespolonych (+, -, *, /) oraz funkcję wyświetlającą liczbę zespoloną

w postaci: 2+3j. Liczbę zespoloną zdefiniuj jako strukturę:

struct zesp { float Re, Im; };

Nagłówki pozostałych funkcji muszą mieć postać:

struct zesp dodaj (struct zesp x, struct zesp y); struct zesp odejmij (struct zesp x, struct zesp y); struct zesp pomnoz (struct zesp x, struct zesp y); struct zesp podziel (struct zesp x, struct zesp y); void drukuj (struct zesp x);

Page 6: JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Spis treści

Informatyka 1 11 z 14 Instrukcja INF12

2. Zdefiniuj strukturę paszport zawierającą następujące pola: nazwisko, imię,

obywatelstwo, seria, numer, płeć. Następnie zadeklaruj dwie zmienne

strukturalne. Pierwszą z nich zainicjalizuj wartościami, natomiast wartości do

drugiej wczytaj w klawiatury. Wyświetl na ekranie zawartość obu zmiennych.

3. Struktura rezonans przechowuje informacje o szeregowym obwodzie

rezonansowym: rezystancja, indukcyjność, pojemność, częstotliwość

rezonansowa, impedancja falowa, dobroć. Napisz program, w którym

użytkownik wprowadza parametry obwodu (R, L, C), a program oblicza

i wyświetla pozostałe wielkości charakteryzujące rezonans. Wszystkie

wielkości i parametry muszą być przechowywane w strukturze. Dodatkowo

program powinien sprawdzić poprawność wprowadzonych danych (R>0, L>0,

C>0). W przypadku błędu program wyświetla odpowiedni komunikat i prosi

jeszcze raz o wprowadzenie danych, itd., aż do momentu, gdy dane będą

prawidłowe.

częstotliwość: LC

fπ2

1= (1)

impedancja falowa: C

L=ρ (2)

dobroć: R

Qρ= (3)

Przykład działania programu:

Podaj R: -5 Podaj L: 0.01 Podaj C: 2.5e-4 Bledne dane. Podaj dane jeszcze raz. Podaj R: 10 Podaj L: 0.01 Podaj C: 2.5e-4 Czestotliwosc rezonansowa: 100.65842 Impedancja falowa: 6.32455 Dobroc: 0.63246

Informatyka 1 12 z 14 Instrukcja INF12

4. N-elementowa tablica zawiera struktury punkt opisujące współrzędne punktów

(x, y) w prostokątnym układzie współrzędnych. Napisz program, który

odnajdzie i wyświetli numer oraz współrzędne punktu, którego odległość od

początku układu współrzędnych jest:

a) największa;

b) najmniejsza.

Współrzędne punktów wygeneruj pseudolosowo z zakresu ⟨⟨⟨⟨9, -9⟩⟩⟩⟩.

struct punkt { int nr, x, y; };

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 sposób deklarowania struktur w języku C.

2. W jaki sposób można odwoływać się do pól struktury?

3. Opisz inicjalizację zmiennych strukturalnych.

4. Opisz sposób przekazywania struktur do funkcji.

5. Omów sposób deklarowania oraz zastosowanie pól bitowych i unii.

Page 7: JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Spis treści

Informatyka 1 13 z 14 Instrukcja INF12

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 14 z 14 Instrukcja INF12

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