{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
Prof.: José Eustáquio Rangel de Queiroz
[email protected]
[email protected]
Carga Horária: 60 horas
Estruturas em C
DSC/CCT/UFCG
 Estrutura
em C
 Coleção de variáveis referenciada sob
um nome (integração de informações
afins).
de estrutura – criação de
variáveis de estruturas (elementos da
estrutura).
{joseana, rangel}@dsc.ufcg.edu.br
 Declaração
2
Estruturas em C

Exemplo
:
DSC/CCT/UFCG
struct endereco {
char nome[30];
char rua[40];
char cidade[20];
char estado[3];
unsigned long int cep;
};
{joseana, rangel}@dsc.ufcg.edu.br
 Nome endereco - etiqueta da estrutura
struct endereco info_adr;

Declaração da variável info_adr como do tipo
estrutura endereco (alocação da memória neste
ponto)
3
Estruturas em C
DSC/CCT/UFCG

Exemplo:
{joseana, rangel}@dsc.ufcg.edu.br
 Alocação da
struct endereco {
char nome[30];
char rua[40];
char cidade[20];
char estado[3];
unsigned long int cep;
}info_adr, binfo, cinfo;
memória na declaração da
estrutura;
 Definição de um tipo de estrutura endereco e
declaração de variáveis daquele tipo.
4
Estruturas em C
DSC/CCT/UFCG

Exemplo
:
struct {
char nome[30];
char rua[40];
char cidade[20];
char estado[3];
unsigned long int cep;
}info_adr;
{joseana, rangel}@dsc.ufcg.edu.br
 Supressão da etiqueta quando há apenas de
uma variável de um determinado tipo;
 Declaração de uma variável info_adr como
definida pela estrutura que a precede;
5
Estruturas em C
DSC/CCT/UFCG

Forma Geral:
{joseana, rangel}@dsc.ufcg.edu.br
struct nome_do_tipo_da_estrutura {
tipo nome_de_elemento_1;
tipo nome_de_elemento_2;
tipo nome_de_elemento_3;
..
.
tipo nome_de_elemento_N;
}variáveis_estrutura;
 Possibilidade de omissão do nome do tipo
da estrutura (etiqueta) ou das variáveis da
estrutura, mas não de ambos.
6
Estruturas em C
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br

Declaração de
Estruturas
Não reserva espaço
Reserva espaço
struct exemplo
{
int rotulo;
char letra;
char nome[30];
};
struct exemplo
{
int rotulo;
char letra;
char nome[30];
} tipostruct;
/* Nome
“exemplo”
denomina-se etiqueta
da struct
*/
7
Estruturas em C
DSC/CCT/UFCG

Operador .:
 Referência dos membros da estrutura
nome_da_variável_estrutura.nome_do_elemento
{joseana, rangel}@dsc.ufcg.edu.br
 Exemplo:
info_adr.cep=91720260; /* atribui */
printf("%lu", info_adr.cep); /* imprime cep na tela */
printf("%s",info_adr.nome); /* imprime nome */
for(t=0;info_adr.nome[t];++t)
putchar(info_adr.nome[t]); /*apresenta caractere por
caractere */
8
Estruturas em C
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
#include <stdio.h>
#include <conio.h>
void main(void)
{
struct {
char nome[30];
char rua[40];
char cidade[20];
char estado[3];
unsigned long int cep;
}info_adr;
register int t;
clrscr();
printf("Digite um nome\n");
scanf("%s",info_adr.nome);
printf("Digite o CEP\n");
scanf("%lu",&info_adr.cep);

Exempl
o: O que
faz o
programa
ao lado?
9
Estruturas em C
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br
printf("O nome e CEP digitados foram %s e
%lu\n\n", info_adr.nome, info_adr.cep);
for(t=0;info_adr.nome[t];++t){
putchar(info_adr.nome[t]);
printf("\n");
}
}

Exempl
o: O que
faz o
programa
ao lado?
10
Estruturas em C
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br

Exemplo:
Substitua o trecho equivalente
de código do programa anterior pelo
apresentado abaixo e informe o que faz o
programa.
register int t;
clrscr();
printf("Digite um nome\n");
gets(info_adr.nome);
printf("Digite uma rua\n");
gets(info_adr.rua);
printf("Digite o CEP\n");
scanf("%lu",&info_adr.cep);
printf("O nome, a rua e o CEP digitados foram %s, %s e %lu\n\n",
info_adr.nome, info_adr.rua, info_adr.cep);
}
11
DSC/CCT/UFCG

Estruturas em C
Matrizes de
Estruturas
struct endereco info_adr[100];
/* cria 100 conjuntos de variáveis que sao
organizadas como definido na estrutura
endereco */
{joseana, rangel}@dsc.ufcg.edu.br
printf("%lu", info_adr[2].cep);
/* imprime na tela o cep da estrutura 3 da
matriz de 100 estruturas */
 Comuns em planilhas de cálculo tipo Lotus,
nas quais se armazena uma
quantidade de dados encadeados.
grande
12
Estruturas
em C
#include <stdio.h>
#include <conio.h>
DSC/CCT/UFCG
#define TMAX
void main(void)
{

O
struct {
char nome[30];
que
faz
o
char rua[40];
programa
ao
char cidade[20];
char estado[3];
lado?
char cep[30];
for(i=0;i<TMAX;i++)
}info_adr[TMAX];
printf("O
nome[%d],
a rua[%d] e o CEP[%d] digitados foram %s, %s
register int
t, i;
eclrscr();
%s\n", i, i, i, info_adr[i].nome, info_adr[i].rua, info_adr[i].cep);
}for(i=0;i<TMAX;i++){
printf("Digite o nome[%d]\n",i);
gets(info_adr[i].nome);
printf("Digite uma rua[%d]\n",i);
gets(info_adr[i].rua);
printf("Digite o CEP[%d]\n",i);
gets(info_adr[i].cep);
}
{joseana, rangel}@dsc.ufcg.edu.br
Exemplo:
13
Estruturas em C
DSC/CCT/UFCG

Apontadores e
Estruturas I
destes 2 tipos  simples e
geralmente sem problemas
 Combinação
struct coord
{
float x, y, z;
} ponto; // declara a variavel ponto do tipo struct coord
{joseana, rangel}@dsc.ufcg.edu.br
struct coord *aponto;
// apontador para uma variavel qualquer do tipo
struct coord
aponto = &ponto; // aponto aponta para a variável ponto
14
Estruturas em C
DSC/CCT/UFCG

Apontadores e
Estruturas II
 Operador   acesso direto a membros de
uma estrutura via apontador
{joseana, rangel}@dsc.ufcg.edu.br
aponto -> x = 1.0;
aponto -> y = aponto -> -3.1;
15
Estruturas em C
DSC/CCT/UFCG

Exempl
{joseana, rangel}@dsc.ufcg.edu.br
o
/* TESTE DE ESTRUTURA */
void main()
#include <conio.h>
{
#include <stdio.h>
int i,j;
#include <stdlib.h>
float soma[4]={0,0,0,0};
#include <ctype.h>
printf ("\n Notas individuais, medias de cada aluno,
typedef struct {
de exercicios e geral\n");
char RA[10],
nome[40];
for(j=0;j<=3; j=j+1)
printf ("\n #\tRA\t
Nome
Nota1 Nota2
float
nota[4];
for(i=0;i<=6;
i=i+1)
Nota3
Nota4 Media");
}
Dados;
soma[j]=soma[j]+
aluno[i].nota[j];
for(i=0; i<=6;i=i+1)
{
Dados
printf("\n\n\t Medias
poraluno[7]=
exercicio:
%.1f %.1f
%.1f
%.1f",
printf("\n
%d %-10s
%-20s%.1f
%.1f
%.1f
{
soma[0]/7,soma[1]/7,soma[2]/7,soma[3]/7,(soma[0]+soma[1]+soma[2]+
%.1f %.1f %.1f",
"20123081", "Alana Oliveira", 8.8, 8.5, 7.8, 7.6,
soma[3])/28);
i, aluno[i].RA, aluno[i].nome,
"20123077", "Amnon Rodrigues", 7.8, 7.3, 7.2, 7.1,
aluno[i].nota[0], aluno[i].nota[1],
"20123083",
"Ediene Regis", 6.9, 6.8, 6.1, 6.3,
printf("\n");
aluno[i].nota[2], aluno[i].nota[3],
"20123343",
"Helayne Tavares",
5.9, 5.8,
5.4, 5.2,
printf("\n Fim. Digite
qqr(aluno[i].nota[0]+aluno[i].nota[1]+aluno[i].nota
tecla.");getch();
printf(" Feche
a janela");
"20213016", "Jacqueline Nunes", 7.7, 7.6, 7.2, 7.1,
}
[2]+aluno[i].nota[3])/4);
"20123050", "Luiz Eduardo Rosado", 8.8, 8.5, 8.3, 8.2,
}
"29923068", "Nathaly Barbosa", 6.7, 6.4, 6.1, 6.0,
};
16
DSC/CCT/UFCG
José Eustáquio Rangel de Queiroz
[email protected], [email protected]
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE
CENTRO DE ENGENHARIA ELÉTRICA E
INFORMÁTICA
DEPARTAMENTO
DE SISTEMAS E
{joseana, rangel}@dsc.ufcg.edu.br
COMPUTAÇÃO
Download

Estruturas em C - Computação UFCG