Buscar

Tipos Especiais em C

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

LAPRO	I
Prof.	Dr.	Rafael	Garibotti
Pontifícia	Universidade	Católica	do	Rio	Grande	do	Sul	
Faculdade	de	Informática	- FACIN
v Baseado no	material	cedido pelos Profs.	Dr.	Marco	Mangan e	Dr.	Matheus	Trevisan
REGISTROS	E	TIPOS	ESPECIAIS
AULA	SOBRE:
TIPOS	ESPECIAIS
TIPOS	ESPECIAIS
1
typedef
Ø Criação	de	novos	tipos	de	variáveis.
typedef <tipo> <definição>
Ø Exemplo:
#include <stdio.h>
int main ( ) {
typedef float real;
typedef float real_vec[10]; //Tipos podem ser vetores
real x;
real_vec y;
x=3.14;
y[0]=3.14;
printf("Variavel: %f, Vetor: %f\n", x, y[0]);
return 0;
}
TIPOS	ESPECIAIS
2
enum
Ø Atribuir	valores	inteiros	sequenciais	a	constantes.
Ø Usados	quando	se	conhece	o	conjunto	de	valores	que	a	variável	pode	assumir.
enum <definição> { <valor0>, <valor1>, ... };
Ø Exemplo:
#include <stdio.h>
int main ( ) {
enum dias {
seg, ter, qua, qui, sex, sab, dom
};
enum dias d1;
d1=seg;
printf ("%d\n", d1); // 0
d1++;
if (d1==ter)
printf ("%d\n", d1); // 1
return 0;
}
TIPOS	ESPECIAIS
3
enum
Ø Exemplo	(atribuição de	valores):
#include <stdio.h>
int main ( ) {
enum cores{
verde=1, azul=2,
amarelo, // valor anterior + 1
vermelho=7
};
enum cores c1;
c1=amarelo;
while(1) {
if (c1==vermelho) break;
else {
printf("Cor= %d\n",c1);
c1++;
}
}
return 0;
}
REGISTRO
MOTIVAÇÃO
4
Ø Vetores	e	matrizes
ü Estruturas	de	dados	homogêneas.
ü Armazenam	vários	valores,	mas	todos	de	um	mesmo	tipo	(int,	float,	etc.).
Ø Problemas	reais
ü Coleções	de	dados	que	são	de	tipos	diferentes
ü Exemplo	(Ficha	de	cadastro	de	um	cliente):
• Nome:	string
• Endereço:	string
• Telefone:	string
• Salário:	float
• Idade:	int
FICHA
Nome:	____________
Endereço:	_________
Telefone:	__________
Salário:	___________
Idade:	____________
REGISTRO
5
Registro (ou	struct)
Ø Tipo	de	dado	estruturado	heterogêneo.
Ø Coleção	de	variáveis	referenciadas	por	um	mesmo	label.
Ø Permite	agrupar	dados	de	diferentes	tipos	numa	mesma	estrutura.
Ø Cada	componente	pode	ser	de	um	tipo	diferente.
Ø Componentes	referenciados	por	um	nome.
Ø Elementos	do	registro.
Ø Campos	ou	membros	da	struct.
REGISTRO
6
Ø Campo (Field)
ü Conjunto	de	caracteres	com	o	mesmo	significado.
• Exemplo: nome.
Ø Registro	(Struct ou	Record)
ü Conjunto	de	campos	relacionados.
• Exemplo: nome,	endereço,	telefone,	salário	e	idade	de	uma	pessoa.
FICHA
Nome:	____________
Endereço:	_________
Telefone:	__________
Salário:	___________
Idade:	____________
Campos
Registro
STRUCT
7
Ø A	palavra	reservada	struct indica	ao	compilador	que	está	sendo	criada	uma	estrutura.
Ø Uma	estrutura	deve	ser	declarada	após	incluir	as	bibliotecas	e	antes	da	função main.
Ø Sintaxe:
// Bibliotecas
struct <identificador_da_struct>{
tipo <nome_var_campo1>;
tipo <nome_var_campo2>;
};
int main ( ) {
struct <identificador_da_struct> <var1>, <var2>;
// Comandos
return 0;
}
STRUCT
8
Ø Se	o	compilador C	for	compatível com	o	padrão C	ANSI.
ü Informação contida em uma struct pode ser atribuída a	outra struct do	mesmo tipo.
ü Não é necessário atribuir os valores de	todos os elementos/campos
separadamente.
ü Exemplo: <var1> = <var2>;
• Todos os campos de	<var1>	receberão os valores correspondentesdos	campos
de	<var2>.
Ø Para	acessar os campos da	struct.
ü Utiliza-se	o	nome da	variável struct,	seguido de	ponto,	seguido do	nome do	campo.
ü Exemplo: <var1>.<nome_variável_campo2>;
STRUCT
9
Ø Exemplo (formas	de	utilização):
ü Um	struct endereço	que	guarda	os	elementos	nome,	rua,	cidade,	estado	e	cep.
struct endereco{
char nome[30];
char rua[40];
long int cep;
};
struct endereco info_end;
typedef struct {
char nome[30];
char rua[40];
long int cep;
} endereco;
endereco info_end;
OU
STRUCT
10
Ø Já vimos que:
ü Para	acessar membros de	uma struct usamos
nome_var.nome_membro
Ø Portanto,	considerandoo	exemplo anterior:
ü Para	inicializar o	cep	da	variável info_end.
info_end.cep=123456;
scanf("%d", &info_end.cep);
ü Para	obter o	nome da	pessoa e	escrever na struct.
gets(info_end.nome);
ü Para	imprimir o	endereço.
printf("%s", info_end.rua);
STRUCT
11
Ø Exemplo:
#include <stdio.h>
struct aluno {
char nome[40];
float P1;
float P2;
float T;
int faltas;
};
int main() {
struct aluno joao, maria;
joao.P1 = 9.5;
joao.P2 = 8.5;
joao.T = 9.0;
joao.faltas = 4;
maria = joao;
printf("%d\n", maria.faltas);
return 0;
}
STRUCT
12
Ø Exemplo:
#include <stdio.h>
#include <string.h>
struct endereco {
char rua[40];
int num;
char cep[10];
char cidade_estado[40];
};
int main() {
struct endereco e1;
struct endereco e2;
// inicialização dos campos de e1
strcpy(e1.rua, "Avenida Ipiranga");
e1.num = 1234;
strcpy(e1.cep, "90000-123");
strcpy(e1.cidade_estado, "Porto Alegre / RS");
...
...
// inicialização dos campos de e2
strcpy(e2.rua, "Rua Lima e Silva");
e2.num = 1987;
strcpy(e2.cep, "90000-345");
strcpy(e2.cidade_estado, "Porto Alegre / RS");
// exibe os dados
printf("\n%s %d", e1.rua, e1.num);
printf("\n%s, %s\n", e1.cep, e1.cidade_estado);
printf("\n%s %d", e2.rua, e2.num);
printf("\n%s, %s\n\n", e2.cep, e2.cidade_estado);
return 0;
}
VETOR	DE	REGISTRO
13
Ø Vetores de	registros podem ser definidos como vetores de	tipos básicos.
Ø Para	manipular os dados	do	vetor,	devem ser fornecidos o	índicee	o	campo.
Ø Exemplo:
#include <stdio.h>
#include <string.h>
/* Usar as declarações anterioes das structs */
int main() {
struct aluno Turma380[28];
struct endereco vetorEndAmigos[100];
strcpy(Turma380[0].nome, “Fulano”);
Turma380[0].P1 = 9.5;
Turma380[0].P2 = 8.5;
Turma380[0].T = 9.0;
Turma380[0].faltas = 4;
strcpy(vetorEndAmigos[0].rua, “Carlos Gomes”);
strcpy(vetorEndAmigos[1].rua, “Goethe”);
return 0;
}
ESTRUTURAS	E	FUNÇÕES
PASSANDO	ARGUMENTOS	PARA	FUNÇÕES
14
Ø Pode-se	passar para	uma função um	elemento de	uma estrutura,	a	
própria estrutura ou o	endereçoda	estrutura.
ü Para	passar o	elemento i da	variável um que é uma estrutura,	seria:
funcao(um.i);
ü Para	passar toda a	estrutura,	seria:
funcao(um);
ü Para	passar o	endereço da	estrutura,	seria:
funcao(&um); 
PASSANDO	ELEMENTOS
15
Ø Exemplo:
typedef struct{
char x;
int y;
float z;
char s[10];
} s1;
s1 exemplo;
Ø Para	passar elementos x e	y	da	estrutura para	a	função f1,	a	chamada de	f1	seria:
f1(exemplo.x, exemplo.y);
Ø A	definição da	função teria que receber 2	parâmetros,	um	char e	um	int:
void f1(char x, int y){
... 
}
PASSANDO	A	ESTRUTURA
16
Ø Para	passar a	estrutura inteira,	seria:
f2(exemplo);
Ø A	definição da	f2	seria:
void f2(s1 param){
//para acessar os valores seria
param.x = 'c';
param.y = 2;
param.z = 2.3;
param.s[0] = 'a';
param.s[1] = 'b';
}
PASSANDO	O	ENDEREÇO
17
Ø Para	passar o	endereçoda	estrutura seria (passagem de	
parâmetros por referência):
f3(&exemplo);
Ø Na	definição da	função teria que receber um	parâmetro
que é um	ponteiro para	a	estrutura enviada.	Desta
maneira se	teria:
void f3(s1 *param) {
...
}
PASSANDO	O	ENDEREÇO
18
Ø Para	acessar a	variável x	de	param seria:	(*param).x,	 para	simplificar
a	escrita os compiladores substituem o	* pelo operador seta	(->)	e	
pode-se	acessar x como:	param->x = ‘c’.
void f3(s1 *param){
param -> x = 'c';
param -> y = 2;
param -> z = 2.3;
param -> s[0] = 'a';
param -> s[1] = 'b';
param -> s[2] = 'c';
} 
ESTRUTURAS	ANINHADAS
ESTRUTURAS	ANINHADAS
19
Ø Utilizar typedef para	realizar a	definição de	tipos e	utilizar os tipos criados dentro de	
novas estruturas.
Ø Exemplo:
ü Definir o	tipo estrutura DATA,	contendo os elementos dia,	mes e	ano.
ü Definir o	tipo estrutura DADOS	contendo o	nome,	cpf e	data	denascimento que é do	tipo data.
#include <stdio.h>
#include <string.h>
typedef struct {
int dia;
int mes;
int ano;
} DATA;
…
ESTRUTURAS	ANINHADAS
20
typedef struct{
char nome[30];
long cpf;
DATA data_nascimento;
} DADOS; 
int main(){
DADOS a, b;
strcpy(a.nome, "Pedro Silva");
a.data_nascimento.dia = 12;
a.data_nascimento.mes = 8;
a.data_nascimento.ano = 1999;
a.cpf = 12345;
b = a;
printf("Nome: %s", b.nome);
printf("\nData de Nascimento: %d, %d, %d\n", b.data_nascimento.dia, 
b.data_nascimento.mes, b.data_nascimento.ano);
return 0;
} 
ATIVIDADE
LABORATÓRIO
21
Ø As	atividades	do	laboratório	da	aula	de	hoje	estão no	Moodle.

Outros materiais