Vous êtes sur la page 1sur 4

Estruturas em C

Conceitos Básicos
• Coleção de uma ou mais variáveis que podem ser de diferentes tipos, agrupadas sob um
mesmo nome;
• Exemplo típico:
o Folha de pagamento onde cada elemento é um funcionário;
o Funcionário é descrito através de um conjunto de atributos como por exemplo:
nome → string
endereço → string
CPF → string
código do depto. → char
salário → float
tempo de serviço → int (em meses)
• Sintaxe:
struct nome { /* definição da estrutura */
tipo1 var1 ;
tipo2 var2 ;
tipo3 var3;
};
• Uso da estrutura – declaração de variáveis:
Ex.: struct nome var;
o nome é um novo tipo definido e var é uma declaração de variável do novo tipo
o var é uma variável do tipo struct nome e tem vários campos (partes): var1,
var2, etc ..., que são acessados da seguinte maneira:
var.var1
var.var2
var.var3
• Ex1:
struct ponto { //definição do tipo ponto
int x; /* ou int x, y; */
int y;
};
struct ponto P, M; // declaramos dois pontos: P e M
Os campos de P e M podem receber valores ou podem ser lidos:
P.x = 2;
P.y = 3;
ou poderia ser
scanf (“% d % d”, &P.x, &P.y);

• Ex2:
struct facil // definição do tipo facil
{ int num;
char ch;
};

struct facil x1, x2; // declaração de variáveis do tipo facil


//Atribuido valores aos campos:
x1.num = 13;
x1.ch = ‘c’;
• É possivel fazer atribuição entre variáveis do mesmo tipo de estruturas. No exemplo
anterior, como x1 e x2 são do mesmo tipo, podemos fazer a seguinte atribuição:
x2 = x1;
printf (“% d % c \n”, x2.num, x2.ch);
imprime: 13 c
• A definição e declaração podem ser feitas juntas:
struct facil {
int num;
char ch; //define facil
} x1, x2; // declaração das variáveis x1 e x2

• Ex 3 – estrutura para definição de um livro:


struct livro {
char titulo [30];
int registro;
char estilo [10];
}

struct livro L1; /* declaração de L1 */

Algumas operações:
printf (“\n Digite título: “);
gets (L1.titulo);
printf (“\n Digite registro: “);
scanf (“%d”, &L1.registro);
printf (“\n Digite estilo: “);
scanf (“%s”, L1.estilo);

struct livro livro2 = {“Iracema”, 102, “romance”};


/* declaração de livro2 e atribuição */

• Caso o novo tipo criado seja usado só uma vez, podemos “omitir” seu nome (deixá-lo sem
nome):
struct {
int num;
char ch;
} x1, x2; //variáveis x1 e x2 com campos num e ch
• Comando typedef:
o O comando typedef pode servir para redefinir tipos existentes, dando outro
nomes a eles;
o Forma geral:
typedef <tipo ou nomeantigo > < nomenovo>

o A struct facil do ex. anterior, pode ser redefinida como struct simples, ex.:
typedef facil simples;
que é equivalente a
typedef struct facil
{ int num;
char ch;
} simples; // definição do tipo simples
• Outras maneiras alternativas de definir o tipo simples, são:
struct simples
{ int num;
char ch;
};

typedef struct simples //usando typedef


{ int num;
char ch;
}; // definição do tipo simples
ou ainda:
typedef struct // usando typedef
{ int num;
char ch;
} simples; // definição do tipo simples
Obs.: não confundir esta ultima definição de tipo (pois aqui tem typedef) com a
declaração de variáveis

• Ex. 4 – Mais exemplos de declarações com typedef:


typedef struct Ponto // definição de Ponto
{ int x, y;
}
Ponto P, M; // declarações das variáveis P e M
Obs.: Não precisa escrever struct antes.

typedef struct ponto /* definição de tipo */


{ int x, y;
} P, M; // declaração das variáveis P e M

ponto S; // declaração da variável S

/* definição de tipo: nome do tipo no final */


typedef struct {
int x;
int y;
} Ponto;
Obs: Se não tivesse a palavra typedef, Ponto
seria variável!!!
Ponto P, M, S;/* declaração de variáveis do tipo Ponto */

• Podemos usar estruturas dentro de estruturas.


• Ex 5:
struct ponto {
int x;
int y;
}

struct retangulo {
struct ponto pt1; // campo do tipo struct ponto
struct ponto pt2; // campo do tipo struct ponto
}
struct retangulo R1, R2;
 Observações:
R1 e R2 têm 4 campos cada um:
R1.pt1.x, R1.pt1.y, R1.pt2.x, R1.pt2.y //idem para R2.

 Supor que pt1 e pt2 são vértices opostos de um retângulo. Leitura dos vértices:
printf (“Leitura do 1o. Retângulo: \n”);
printf (“Digite vértice 1: \n”);
scanf (“%d %d”, &R1.pt1.x, &R1.pt1.y);
printf (“Digite vértice 2: \n”);
scanf (“%d %d”, &R1.pt2.x, &R1.pt2.y);
Cálculo da área de R1:
area = (R1.pt2.x - R1.pt1.x) * (R1.pt2.y - R1.pt1.y));
printf (“\n Area de R1 = %d \n”, area);
• Estruturas não podem ser comparadas.
o Ex: if (x1 = = x2)
.
ou if (R1 = = R2) ERRADO!!!
o Os campos é que devem ser comparados um a um, ex.:
if ( (x1.num == x2.num) && (x1.ch == x2.ch) ) // CORRETO
printf(“ As variáveis x1 e x2 são iguais \n”);
Exemplo1. Utilizando estrutura, fazer um programa em C que permita a entrada de nome, endereço e
telefone de 5 pessoas e os imprima.
Código:
#include <stdio.h>

struct cadastro {
char nome[20];
char end[50];
char telefone[11];
};

void main()
{
int i;

struct cadastro c[5];

for (i=0; i<5; i++)


{
printf("\n Digite seu Nome : ");
scanf("%s", &c[i].nome);
printf("\n Digite seu Endereco : ");
scanf("%s", &c[i].end);
printf("\n Digite seu Telefone : ");
scanf("%s", &c[i].telefone);
}
for (i=0; i<5; i++)
{
printf("\n Nome : %s", c[i].nome);
printf("\n Endereco : %s", c[i].end);
printf("\n Telefone : %s", c[i].telefone);
printf("\n\n");
}
getch();
}