Prezentacja programu PowerPoint
Transkrypt
Prezentacja programu PowerPoint
Język ANSI C-struktury Struktury ( zwane w innych językach programowania rekordami) stanowią typ służący do przetwarzania informacji powiązanych ze sobą. Definicja typu strukturowego ma następującą postać struct nazwaTypu { typPola1 nazwaPola1; typPola2 nazwaPola2; . . typPolaN nazwaPolaN; }; Tak więc definicja typu strukturowego składa się ze słowa kluczowego struct, po którym następuje nazwa danego typu strukturowego ( czasami określana jako etykieta), po czym po nawiasie otwierającym występują typy poszczególnych składowych struktury oraz ich nazwy. Składowe typu strukturowego zwane są polami struktury. Język ANSI C-struktury Definicja typu strukturowego kończy się nawiasem zamykającym i średnikiem. W typie strukturowym mogą wystąpić pola, które same mogą być typu strukturowego, mówimy wtedy o tzw. typie strukturowym zagnieżdżonym. Nazwy pól muszą być różne w ramach jednego typu strukturowego, jednak można stosować te same nazwy w ramach innych typów strukturowych. Nazwa pola struktury może być taka sama jak nazwa danego typu strukturowego czy też zmiennej strukturowej. Język ANSI C-struktury Przykład. W ramach jednego typu danych chcemy przechowywać pewne informacje o pracownikach. Zdefiniujemy uproszczony typ strukturowy pozwalający na przechowywanie takich informacji ( w rzeczywistych sytuacjach może być konieczne stosowanie nawet kilkudziesięciu pól). struct pracownik { char nazwisko [20]; char imie [20]; int wiek; double dochod; } rek1, rek2; rek1, rek2 są zmiennymi typu pracownik. Zmienne strukturowe można też zdefiniować w sposób następujący: struct pracownik rek3, rek4, rek5; Język ANSI C-pliki Można też zdefiniować tablicę struktur struct pracownik pracownicy [20]; Zmienna pracownicy jest tablicą struktur składającą się z 20 struktur typu pracownik. Dla realizacji dostępu do pól typu strukturowego wprowadzono w języku C specjalny operator dostępu do pól struktury – operator " ." ( kropka). Operator ten jest stosowany w sposób następujący: jeśli mamy zmienną strukturową rek1 typu pracownik, to możemy wprowadzić wartość do jej pola dochod w sposób następujący: rek1.dochod=1500; W ogólnym przypadku, polami zmiennych strukturowych możemy posługiwać się jak zmiennymi takiego typu, jak typ danego pola struktury. Język ANSI C-struktury Wprowadzanie/wyprowadzanie informacji z /do pól zmiennych strukturowych cz. 1 Jak zaznaczono powyżej, pola takie można stosować, jako zmienne danego typu rek2.dochod=1000; rek2.wiek=25; pracownicy[0].dochod=1200; pracownicy [0].wiek=24; scanf("%f",&rek3.dochod); scanf("%d",&rek3.wiek); 1. Pola typu numerycznego ( typy całkowite i typy rzeczywiste) scanf ("%lf",&pracownicy[1].dochod); scanf ("%d", &pracownicy[1].wiek); Język ANSI C-struktury Wprowadzanie/wyprowadzanie informacji z /do pól zmiennych strukturowych cz. 2 2. Pola typu tablica znaków strcpy (rek1.nazwisko,"Kowalski"); scanf("%s",rek2.nazwisko); gets( rek3.nazwisko); Wyprowadzanie informacji odbywa się podobnie jak dla innych zmiennych. printf ("\n %d ", rek1.dochod); printf("\n %s ", rek1.nazwisko); Język ANSI C-struktury Inicjalizacja tablic struktur Przykład. Inicjalizacja tablicy struktur typu student struct student { char nazwisko[20]; char imie [20]; int rok studiow; char wydzial[20]; }; struct student studenci[3]=\ { {"Kowalski","Marcin",2, "EiA"}, {"Iksiński","Andrzej",2,"EiA"}, {"Malinowski","Dariusz”,2,"EiA"} }; Język ANSI C-struktury Przykład. Program rekordy1 wczytujący i drukujący pojedyncze struktury. (cz.1) #include <stdio.h> #include <string.h> // program rekordy1 wczytuje dane do struktur i drukuje int main(int argc, char **argv) { struct student { char nazwisko[20]; char imie [20]; int rokStudiow; char wydzial[20]; }; struct student student1, student2; /* Bezpośrednie nadawanie wartości polom struktur */ strcpy(student1.nazwisko,"Kowalski"); strcpy(student1.imie,"Jan"); student1.rokStudiow=2; strcpy(student1.wydzial,"EiA"); Język ANSI C-struktury // Program rekordy1 cz. II /* Do wczytywania pól struktury student 2 z klawiatury zastosowano trzy różne funkcje wczytywania pól typu tablica znaków, by pokazać różne sposoby wczytywania takich pól */ printf ("\n Podaj dane 2-go studenta "); printf ("\n Nazwisko: "); scanf("%s",student2.nazwisko); printf ("\n Imie: "); fflush(stdin); fgets(student2.imie,15,stdin); printf("\n Rok studiow :"); scanf("%d",&student2.rokStudiow); printf ("\n Wydział: "); scanf("%s",student2.wydzial); Język ANSI C-struktury // program rekordy1 cz. III /* Drukowanie struktur student1 i student2 */ printf("\n\n Dane studenta 1 "); printf("\n Nazwisko :%s", student1.nazwisko); printf("\n Imie :%s", student1.imie); printf("\n Rok studiow :%d", student1.rokStudiow); printf("\n Wydzial :%s", student1.wydzial); printf("\n\n\n Dane studenta 2 "); printf("\n Nazwisko :%s", student2.nazwisko); printf("\n Imie :%s", student2.imie); printf(" Rok studiow :%d", student2.rokStudiow); printf("\n Wydzial :%s", student2.wydzial); getch(); return 0; } Język ANSI C-struktury Struktury zagnieżdżone Struktury zagnieżdżone to takie struktury w których przynajmniej jedno z pól jest typu strukturowego. struct nazwaTypu { typPola1 nazwaPola1; struct nazwaTypuStrukturowego . . typPolaN } ; nazwaPolaN; nazwaPola2; Język ANSI C-struktury Przykład. Definicja typu strukturowego zagnieżdżonego. struct data { int dzien; int miesiac; int rok; }; struct daneStudenta { char nazwisko[20]; char imie [20]; struct data dataUr ; int rokStudiow; char wydzial[20]; }; struct daneStudenta daneStudenta1, daneStudenta2; Język ANSI C-struktury Przykład . Program rekordy2 wczytujący dane do tablicy struktur i drukujący tablicę struktur. int main(int argc, char **argv) { struct data { int dzien; int miesiac; int rok; }; struct dane_studenta { char nazwisko[20]; char imie [20]; struct data dataUr; int rokStudiow; char wydzial[20]; }; struct daneStudenta studenci[4]; Język ANSI C-struktury // Program rekordy2 cz. II int i; /* Bezpośrednie nadawanie wartości polom tablicy struktur */ strcpy(studenci[0].nazwisko,"Kowalski"); strcpy(studenci[0].imie,"Jan"); studenci[0].rokStudiow=2; studenci[0].dataUr.dzien=2; studenci[0].dataUr.miesiac=5; studenci[0].dataUr.rok=1990; strcpy(studenci[0].wydzial,"EiA"); strcpy(studenci[1].nazwisko,"Nowak"); strcpy(studenci[1].imie,"Andrzej"); studenci[1].rokStudiow=2; studenci[1].dataUr.dzien=2; studenci[1].dataUr.miesiac=6; studenci[1].dataUr.rok=1991; strcpy(studenci[1].wydzial,"EiA"); Język ANSI C-struktury // program rekordy2 cz. III for (i=2;i<4;i++) { printf ("\n Podaj dane studenta %i",i+1); printf ("\n Nazwisko: "); scanf("%s",studenci[i].nazwisko); fflush(stdin); printf ("\n Imie: "); scanf("%s",studenci[i].imie); fflush(stdin); printf("\n Podaj date urodzenia "); printf("\n dzien :"); scanf ("%d",&studenci[i].dataUr.dzien); printf("\n miesiac :"); scanf ("%d",&studenci[i].dataUr.miesiac); printf("\n rok :"); scanf ("%d",&studenci[i].dataUr.rok); printf("\n Rok studiow :"); scanf("%d",&studenci[i].rokStudiow); printf ("\n Wydział: "); scanf("%s",studenci[i].wydzial); fflush(stdin); Język ANSI C-struktury // Program rekordy2 cz. IV /* Drukowanie tablicy struktur */ for (i=0;i<4;i++) { printf("\n\n Dane studenta %d ", i+1); printf("\n Nazwisko :%s", studenci[i].nazwisko); printf("\n Imie :%s", studenci[i].imie); printf(" data urodzenia :%d.%d.%d ",\ studenci[i].dataUr.dzien,\ studenci[i].dataUr.miesiac,studenci[i].dataUr.rok); printf("\n Rok studiow :%d", studenci[i].rokStudiow); printf("\n Wydzial :%s", studenci[i].wydzial); } getchar(); return 0; }