Język C
Transkrypt
Język C
Laboratorium nr 4 Instrukcja laboratoryjna 4 1) 1/4 Język C Temat: Typy złożone. Przygotował: mgr inż. Maciej Lasota Typ wyliczeniowy. Typ wyliczeniowy „enum” w języku C został stworzony dla zmiennych, które przechowują tylko ograniczony zbiór wartości. Dostęp do tych wartości odbywa się poprzez nazwę tzw. etykietę. Język C implementuje typ wyliczeniowy „enum” jako zgodny z typem całkowitym, dlatego też, poprawnym sposobem przydzielenie wartości do zmiennej jest podanie numeru określonej etykiety. Ogólna postać instrukcji „enum” jest następująca: enum nazwa_typu { etykieta1, etykieta2, ... } nazwa_zmiennej; 2) Tablice. Tablica to ciąg zmiennych jednego typu. Ciąg taki posiada jedną nazwę, a do jego poszczególnych elementów odnosimy się przez numer tzw. indeks. Tablice umożliwiają wykonywanie podobnych operacji jak na zwykłych zmiennych. Liczba elementów tablicy jest z góry określona tzw. wymiarem tablicy. Tablice dodatkowo dzielimy na: • tablice jednowymiarowe, • tablice wielowymiarowe. Typowa deklaracja tablicy jednowymiarowej, przedstawiona została poniżej: typ_danych nazwa_tablicy[wymiar]; W przypadku języka C, tablice indeksowane są od numer „0” (w innych językach programowania od numeru „1” np. Pascal). Dodatkowo tablica, może czasami nie posiadać określonego wymiaru, lecz w takim przypadku musi być odpowiednio zainicjowana. Inicjowanie tablicy polega na nadaniu jej poszczególnym elementom odpowiednich wartości zgodnych z typem danych danej tablicy. Laboratorium nr 4 2/4 Przykład: int tablica[100]; int tablica[1]={20,10}; char imie[]=”Romek”; //tablica 100 elementowa 0 – 99 //przechowująca liczby całkowite //tablica zainicjowana; //tablica znakowa „pusta” //zainicjowana ciągiem znaków Oprócz tablic jednowymiarowych, można także definiować tablice wielowymiarowe. Typowa deklaracja tablicy wielowymiarowej w języku C, przedstawiona została poniżej: typ_danych nazwa_tablicy[wymiar][wymiar] ... [wymiar]; Aby odwołać się do konkretnego elementu tablicy w celu zapisu lub odczytu danych. Należy podać nazwę zadeklarowanej tablicy oraz w nawisach kwadratowych „[ ]” podać indeks elementu, do którego się odwołujemy. Przykład: #include <stdio.h> #include <stdlib.h> int main(void) { int i,j; int tab[20][20]; for(i=0; i<20; i++) { for(j=0; j<20; j++) { tab[i][j] = (i+j); } } for(i=0; i<20; i++) { for(j=0; j<20; j++) { printf("[%d] ",tab[i][j]); }p printf("\n"); } return (0); } Laboratorium nr 4 3) 3/4 Struktury i Unie. Typy danych w języku C dzielą się na proste i złożone. Typy złożone mogą składać się z typów prostych jak i typów złożonych. Struktura (w języku Pascal odpowiednikiem struktury jest rekord) jest złożonym typem danych zawierającym składowe różnych typów, umieszczonych kolejno w pamięci. Struktury mają następujące ograniczenia: składowe nie mogą być typu aktualnie definiowanego, nie mogą być funkcją, natomiast mogą być wskaźnikiem do funkcji. Typowa deklaracja struktury w języku C, przedstawiona została poniżej: struct nazwa_struktury { [typ danych] [nazwa [typ danych] [nazwa [typ danych] [nazwa ... [typ danych] [nazwa }; składowej 1]; składowej 2]; składowej 3]; składowej n]; Przykład: struct punkt { int x; int y; }; //pierwsza składowa struktury //druga składowa struktury Dla stworzonej struktury danych możemy zdefiniować zmienną tzw. zmienną strukturalną. Przy definicji takich zmiennych, przed podaniem nazwy struktury, należy podać słowo struct. Definicja zmiennej strukturalnej: [struct] [nazwa struktury] [nazwa zmiennej]; Przykład: struct dane { char imie[20]; char nazwisko[25]; float wiek; }; struct dane moje_dane_osobowe; Laboratorium nr 4 4/4 Dostęp do składowych struktury odbywa się, przez tzw. notacje kropkową. Notacja ta polega na podaniu zmiennej strukturalnej, kropki „.” oraz nazwy składowej. [zmienna strukturalna].[nazwa składowej] Przykład: struct data { int dzien; int miesiac; int rok; } data_urodzenia; scanf(”%d”,&data_urodzenia.dzien); scanf(”%d”,&data_urodzenia.miesiac); scanf(”%d”,&data_urodzenia.rok); printf(”Data urodzenia: %d-%d-%d\n”,data_urodzenia.dzien ,data_urodzenia.miesiac ,data_urodzenia.rok); Unia jest podobna do struktury danych, ale posiada jedną różnicę, dla każdej składowej unii przydzielane jest wspólne miejsce (obszar w pamięci). W obszarze tym przechowywanych jest wiele nazw pól (składowych). W przypadku struktura danych poszczególne składowe nie wpływają wzajemnie na siebie. Modyfikacja jednego pola nie wpływa na pozostałe. W przypadku unii wszystkie pola zajmują tę samą przestrzeń, a więc tylko jedno z nich w danej chwili może być aktywne (posiada przypisaną wartość). Jeśli składowa w unii ma przypisaną wartość, przypisanie wartości do drugiej składowej spowoduje usunięcie starej wartości. Przykład: union punkt { float x; float y; }; union punkt wspolrzedna;