You are on page 1of 4

1.

Estruturas
No caso de vetores, foi visto que todos os componentes pertenciam a um mesmo grupo (tipobase). O problema de agrupar dados desiguais em C resolvido pelo uso de Estruturas. Estruturas
permitem agrupar um conjunto de tipos de dados no similares sob um nico nome.
Uma estrutura uma coleo de uma ou mais variveis, possivelmente de tipos diferentes,
colocadas juntas sob um nico nome. Estruturas so chamadas de registros em algumas linguagens. Um
Registro uma estrutura que envolve elementos de natureza distinta. No registro cada elemento pode ser
de um tipo diferente.
Cada Estrutura tem um certo nmero de componentes denominados campos (fields) e definidos
atravs de identificadores.
struct <NomeEstrutura> {
<Tipo1> <Campo1>;
<Tipo2> <Campo2>;
M
<TipoN> <CampoN>;
};

Variveis do Tipo Estrutura so utilizadas quando uma coleo de dados tem alguma afinidade
entre si.

1.1

Exemplo de uma Estrutura

O programa a seguir usa uma estrutura simples contendo dois itens de dados: uma varivel inteira
(cdigo) e uma varivel float (salrio).
#include <stdio.h>
int main()
{
struct exemplo {
/* define o tipo de dado */
int codigo;
/* atributo inteiro */
float salario;
/* atributo float */
};
struct exemplo x;
x.codigo=2410;
x.salario=545.00;
printf(Cdigo = %d\nSalario=%f\n, x.codigo, x.salario);
return 0;
}

O exemplo tradicional de uma estrutura o cadastro de funcionrios de uma empresa que agrega
as caractersticas deste funcionrio: um funcionrio descrito por um conjunto de atributos como nome
(uma strting), cargo (string), salrio (float), data de admisso (inteiros). Provavelmente, haver outros
funcionrios, ento dever ser definido um vetor de estruturas.
Primeiramente, deve ser definido o tipo da estrutura que deseja criar.

Registro Func.
Nome

Registro Funcionrio:
Nome
Cargo
Salrio
Data de Admisso

Cargo
Salrio
Data Admisso
Dia

Ms Ano

typedef struct {
int Dia, Mes, Ano;
} TpData;
typedef struct {
char Nome[30];
char Cargo[20];
float Salario;
TpData DataAdm;
} TpRegFunc;
TpRegFunc RegFunc;

Estas instrues definem um novo tipo de dado chamado TpRegFunc que uma estrutura.
Um campo de uma varivel do tipo struct acessado pelo nome da varivel do tipo struct seguido
de um ponto (.) e o nome do campo.
<VarRegistro>.<Campo>

Exemplo:

RegFunc.Nome
RegFunc.Salario
RegFunc.DataAdm.Ano

O campo de uma Estrutura funciona exatamente como uma varivel (do tipo do campo). Por
exemplo, a varivel RegFunc.Salario pode ser utilizada em qualquer lugar onde uma varivel do tipo
float requerida.
Vetores e estruturas podem ser combinados livremente, e este um recurso bastante utilizado em
programao.
Funcionrios

1
2
3
4

Registro Func.
Nome
Cargo
Salrio

Data Admisso
Dia

Ms Ano

Exemplo: Fazer um programa que leia dados de 10 funcionrios e imprima uma relao de todos os
empregados que ganham salrio maior que a mdia geral.
#include <stdio.h>

#include <conio.h>
#define NumFunc 10
typedef struct {
int Dia, Mes, Ano;
} TpData;
typedef struct {
char Nome[30];
char Cargo[20];
float Salario;
TpData DataAdm;
} TpRegFunc;
TpRegFunc CadFunc[NumFunc];
float Media;
void LeFuncionarios()
{
int i;
for (i=0; i<NumFunc; i++) {
printf("Entre com o Nome
: ");
scanf("%[^\n]", CadFunc[i].Nome);
fflush(stdin);
printf("Entre com o Cargo
: ");
scanf("%[^\n]", CadFunc[i].Cargo);
fflush(stdin);
printf("Entre com o Salario
: ");
scanf("%f", &CadFunc[i].Salario);
fflush(stdin);
printf("Entre com a Data de Admissao : ");
scanf("%d/%d/%d",&CadFunc[i].DataAdm.Dia,&CadFunc[i].DataAdm.Mes,&CadFunc[i].DataAdm.Ano);
fflush(stdin);
printf("\n");
}
}
void CalcMedia()
{
int i;
Media = 0;
for (i=0; i<NumFunc; i++)
Media = Media + CadFunc[i].Salario;
Media = Media / NumFunc;
}
void ExibeSalarios()
{
int i;
for (i=0; i<NumFunc; i++) {
if (CadFunc[i].Salario > Media) {
printf("%s\n", CadFunc[i].Nome);
printf("%s\n", CadFunc[i].Cargo);
printf("%.2f\n", CadFunc[i].Salario);
printf("%02d/%02d/%02d\n\n",
CadFunc[i].DataAdm.Dia,
CadFunc[i].DataAdm.Ano);
}
}
}

CadFunc[i].DataAdm.Mes,

int main()
{
LeFuncionarios();
CalcMedia();
ExibeSalarios();
getch();
return 0;
}