Podstawy programowania. Wykład 9 - struktury
Małgorzata Nalbach-Moszyńska
9. Struktury ............................................................................................................................. 2
9.1 Deklaracja struktury .................................................................................................... 2
9.2 Użycie .......................................................................................................................... 2
9.3 Przydzielanie pamięci - funkcja malloc....................................................................... 5
9.4 Zwalnianie pamięci funkcja free .............................................................................. 5
9.5 Słowo kluczowe typedef ......................................................................................... 7
1
Podstawy programowania. Wykład 9 - struktury
Małgorzata Nalbach-Moszyńska
9. Struktury
" Struktura to grupa składowych struktury zebranych pod jedną nazwą.
" Nazwę struktury traktujemy jak nazwę typu danych + struct przed nazwą
" Trzeba pamiętać o zasięgu deklaracji!
" Składowe struktury mogą być różnych typów i mogą mieć różne wielkości.
9.1 Deklaracja struktury
" Składnia
struct
{
;
;
;
...
};
typi to właściwie dowolny (również złożony) typ danych
" UWAGA Średnik po nawiasie klamrowym jest obowiązkowy!
" Przykład:
struct produkt {
int symbol;
char *nazwa;
float cena;
};
9.2 Użycie
" Deklaracja zmiennych. Nazwę struktury traktujemy, jak nazwę każdego innego typu:
struct produkt maslo;
struct produkt pilka;
" Nie można:
- przypisywać wartości całym strukturom;
- drukować całych struktur;
- wczytywać całych struktur.
" Trzeba:
- Przypisywać wartości poszczególnym składowym:
maslo.cena = 3.90;
2
Podstawy programowania. Wykład 9 - struktury
Małgorzata Nalbach-Moszyńska
- drukować poszczególne składowe:
printf( %6.2f\n ,maslo.cena);
- wczytywać poszczególne składowe:
scanf( symbol %d\n , maslo.symbol);
" Przypisywanie i wyświetlanie:
/* w9p1 */
#include
struct produkt {
int symbol;
char nazwa[40];
float cena;
};
int main()
{
struct produkt maslo = {543, "ekstra", 5.55} ;
struct produkt pilka;
/* wypisz dane masla */
printf("*** maslo\n" );
printf( "symbol %d \n", maslo.symbol );
printf( "nazwa %s \n", maslo.nazwa );
printf( "cena %6.2f\n", maslo.cena);
/* wczytaj i wypisz dane pilki */
pilka.symbol = 124;
printf( "Podaj nazwe pilki ");
scanf("%s", &pilka.nazwa);
printf( "Podaj cene pilki ");
scanf("%f", &pilka.cena);
printf("*** pilka\n" );
printf( "symbol %d\n", pilka.symbol );
printf( "nazwa %s\n", pilka.nazwa );
printf( "cena %6.2f\n", pilka.cena);
return 0;
}
" Przekazywanie do funkcji najlepiej przez wskaznik;
" Struktura nie może być zwracana jako wartość funkcji! Trzeba zwracać wskaznik do
struktury a w funkcji rezerwować pamięć.
3
Podstawy programowania. Wykład 9 - struktury
Małgorzata Nalbach-Moszyńska
" Jeżeli odwołujemy się do struktury przez wskaznik, używamy notacji:
->
Przykład:
struct czas {
int godz;
int min;
} pobudka;
struct czas *rano = &pobudka;
rano ->godz = 6;
rano->min = 22;
/* w9p2.c */
#include
#include
struct produkt {
int symbol;
char nazwa[20];
float cena;
};
void wypisz (const struct produkt *prod){
printf( "symbol %d\n", prod->symbol );
printf( "nazwa %s\n", prod->nazwa );
printf( "cena %6.2f\n", prod->cena);
}
void czytaj(struct produkt *prod ){
printf( "Podaj symbol produktu ");
scanf("%d", &(prod->symbol)); /* to co (*prod).symbol */
printf( "Podaj nazwe produktu ");
scanf("%s", prod->nazwa);
printf( "Podaj cene produktu ");
scanf( "%f",&(prod->cena));
}
int main()
{
struct produkt maslo = {543, "ekstra", 5.55} ;
struct produkt pilka;
/* wypisz dane masla */
printf("*** maslo\n" );
wypisz(&maslo);
4
Podstawy programowania. Wykład 9 - struktury
Małgorzata Nalbach-Moszyńska
/* czytaj i wypisz dane pilki */
czytaj(&pilka);
printf("*** pilka\n" );
wypisz(&pilka);
return 0;
}
9.3 Przydzielanie pamięci - funkcja malloc
Przydziela spójny obszar pamięci o wielkości podanej w parametrze. Zwraca wskaznik do
przydzielonego obszaru lub NULL w przypadku błędu.
Składnia:
= malloc();
9.4 Zwalnianie pamięci funkcja free
Zwalnia pamięć przydzieloną wcześniej przez malloc.
Składnia:
free ();
W ten sposób zostawiamy po sobie porządek.
Przykład
/* w9p3 */
#include
#include /* sqrt */
#include /* malloc */
struct Punkt
{
float x;
float y;
char nazwa;
};
struct Punkt *czytajPunkt(){
struct Punkt *pom = malloc(sizeof(struct Punkt));
if (pom!=NULL) {
printf("Podaj nazwe ");
scanf("%c",&(pom->nazwa));
printf("Podaj x ");
scanf("%f",&(pom->x));
printf("Podaj y ");
scanf("%f",&(pom->y));
getchar(); /* czytamy znak końca wiersza */
5
Podstawy programowania. Wykład 9 - struktury
Małgorzata Nalbach-Moszyńska
}
else
printf("********* Blad przydzialu pamieci\n");
return pom;
}
double odlPunktu(const struct Punkt *p1, const struct Punkt
*p2)
{
return sqrt(((p1->x-p2->x)*(p1->x-p2->x)) + (((p1->y-p2-
>y)*(p1->y-p2->y))));
}
void drukujPunkt (struct Punkt *p1){
printf("punkt %c\n",p1->nazwa);
printf("Wspolrzedna x: %.2f\n", p1->x);
printf("Wspolrzedna y: %.2f\n", p1->y);
}
int main()
{
struct Punkt *p1,*p2,*p3;
p1 = czytajPunkt();
if (p1 == NULL) return -1;
p2 = czytajPunkt();
if (p2 == NULL) return -1;
/* poczatek ukl wspol */
p3 = malloc(sizeof (struct Punkt));
if (p3 == NULL) {
printf("****** Brak pamięci !! \n");
return -1;
}
p3->x=0;
p3->y=0;
p3->nazwa ='O';
printf("Dalej od poczatku ukladu znajduje sie ");
if(odlPunktu(p1,p3) > odlPunktu(p2,p3))
drukujPunkt(p1);
else
drukujPunkt(p2);
return 0;
}
6
Podstawy programowania. Wykład 9 - struktury
Małgorzata Nalbach-Moszyńska
9.5 Słowo kluczowe typedef
typedef pozwala tworzyć nowe nazwy typów, zwiększać czytelność programu.
Składnia
typedef
Przykłady:
typedef unsigned int BYTE;
BYTE x, *byte;
typedef char * STRING;
STRING imie;
Można tworzyć wygodne, łatwo rozpoznawalne nazwy dla często używanych typów.
typedef float cena;
cena staraCena, obnizonaCena;
typedef struct zespol {
float rzecz;
float uroj;
} ZESPOL;
ZESPOL pierwszaZesp; /* nie trzeba używać słowa struct */
Przykład
/* w9p4 */
#include
#include /* sqrt */
#include /* malloc */
typedef char znak;
typedef
struct Punkt
{
float x;
float y;
znak nazwa;
}
punkt;
punkt *czytajPunkt(){
punkt *pom = malloc(sizeof(struct Punkt));
if (pom!=NULL) {
printf("Podaj nazwe ");
scanf("%c",&(pom->nazwa));
7
Podstawy programowania. Wykład 9 - struktury
Małgorzata Nalbach-Moszyńska
printf("Podaj x ");
scanf("%f",&(pom->x));
printf("Podaj y ");
scanf("%f",&(pom->y));
getchar();
}
else
printf("********* Blad przydzialu pamieci\n");
return pom;
}
double odlPunktu(const punkt *p1, const punkt *p2)
{
return sqrt(((p1->x-p2->x)*(p1->x-p2->x)) + (((p1->y-p2-
>y)*(p1->y-p2->y))));
}
void drukujPunkt (punkt *p1){
printf("punkt %c\n",p1->nazwa);
printf("Wspolrzedna x: %.2f\n", p1->x);
printf("Wspolrzedna y: %.2f\n", p1->y);
}
int main()
{
punkt *p1,*p2,*p3;
p1 = czytajPunkt();
if (p1 == NULL) return 1;
p2 = czytajPunkt();
if (p2 == NULL) return 1;
/* poczatek ukl wspol */
p3 = malloc(sizeof (punkt));
if (p3 == NULL) {
printf("****** Brak pamięci !! \n");
return -1;
}
p3->x=0;
p3->y=0;
p3->nazwa ='O';
printf("Dalej od poczatku ukladu znajduje sie ");
if(odlPunktu(p1,p3) > odlPunktu(p2,p3))
drukujPunkt(p1);
else
drukujPunkt(p2);
return 0;
}
8
Wyszukiwarka
Podobne podstrony:
2 Wyklad StrukturyDanych
analiza finansowa wyklad struktura
UE Wyklad2(struktura2014zadania2)
UE Wyklad2(struktura2014zadania1)
Wykład 1 struktury algebraiczne
Wykład 2 struktury algebraiczne II
Wykład 2 struktury algebraiczne II
A K wyklad6 StrukturaSystemuKomputerowego2 2011B
wyklady struktura lekki z wyszukiwaniem
Systemy wyklad struktura systemu
2 wykład pojecie i struktura adminitracji publicznej
Algorytmy I Struktury Danych (Wyklady) info
Algorytmy i struktury danych Wyklad 4
SKRYPT WYKŁAD PROMIENIOWANIE JONIZUJĄCE A NOWOTWORZENIE ZMIANY W STRUKTURZE DNA
Algorytmy i struktury danych Wyklad 3
Mikroekonomia wykład 6 2010b Podstawowe struktury rynkowe
MIKROEKONOMIA WYKŁAD 4 (10 12 2011) struktury rynku,teoria podziału
Wyklad XI Teorie struktury kapitalu
więcej podobnych podstron