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;