headerphoto

Struktura

Proměnné typu struktura používáme v jazyce C pro uložení údajů různých datových typů např. informace o studentovi(jméno, příjmení, absence, studijní průměr...). Máme potom všechny informace v jedné proměnné. Výhodné je definovat strukturu jako uživatelský datový typ. Tato definice se uvádí globálně (mimo jakoukoliv funkci) na začátku programu.

Dílčí informace nazýváme položky. K jednotlivým položkám se v struktuře dostaneme přes operátor . (tečka). Na rozdíl od pole, můžeme se strukturou pracovat jako s celkem, např. v jednom příkazu přiřadit hodnoty z jedné struktury do druhé. Pokud chceme ale informace ze struktury vypsat na obrazovku, musíme je vypisovat postupně po položkách, protože můžou mít různé datové typy.

Definice struktury jako uživatelský datový typ:

typedef struct{
        typ polozka1;
        typ polozka2;
        ...
       } TNAZEV;

Z důvodu přehlednosti doporučujeme na začátku názvu datového typu použít velké písmeno T. Víme potom, že pokud identifikátor začíná na T, jedná se o název datového typu a ne o název proměnné. Proměnnou tohoto typu potom deklarujeme:

TNAZEV nazev_prom;

Přístup k položkám struktury nazev_prom v programu můžeme vzhledem k předchozím deklaracím obecně zapsat nazev_prom.polozka1.

Dále jsou uvedeny příklady definice a deklarace struktury a použití struktury v programu.

typedef struct{
       char prijmeni[20], jmeno[20];
       int absence;
       float prumer;
       }Tstudent;

- definuje datový typ Tstudent s položkami jmeno, prijmeni, absence, prumer

Tstudent prvni, trida[35];

- deklaruje proměnnou prvni, jedná se o jednoduchou proměnnou typu Tstudent. Může obsahovat informace o 1 studentovi.

- deklaruje pole trida o velikosti 35, které může obsahovat informace o více studentech

Pokud chceme v programu pracovat s příjmením studenta, můžeme to zapsat: prvni.prijmeni nebo trida[i].prijmeni, kde hodnota proměnné i určuje index záznamu o studentovi v poli (pořadí studenta).

Př. Program načte informace o zadaném počtu knih.

#include <stdio.h>
#include <stdlib.h>
#define MAX 50

typedef struct{
    int cislo;
    char nazev[20];
    float cena ;
    } TKNIHA;

int main()
{
  int pocet, i;
  TKNIHA knihy[MAX];
  
  do{
    printf("Zadej pocet knih(max. %d): ", MAX);
    scanf("%d", &pocet);
  }while(pocet>MAX);

  //nacteni zadaneho poctu knih
  for(i=0; i<pocet; i++)
   {
     printf("\nZadej udaje pro %d.knihu :", i+1);
     printf("\n\tcislo : ");
     scanf("%d", &knihy[i].cislo);
     fflush(stdin);
     printf("\tnazev : ");
     gets(knihy[i].nazev);
     printf("\tcena : ");
     scanf("%f",&knihy[i].cena);
   }
   
   //kontrolni vypis informaci o knihach
   if (pocet == 0) printf("\nPrazdny seznam\n");
   else
   {
     printf("\nSeznam knih :");
     printf("\n\nCislo:      Nazev:        Cena:");
     for(i=0; i<pocet; i++)
     {
       printf("\n%3d%15s%12.2f",knihy[i].cislo,knihy[i].nazev, knihy[i].cena);
     }                           }
  printf("\n\n"); 
  system("pause");
  return 0;
}
 

Design downloaded from Free Templates - your source for free web templates