joseana rangeldsc ufcg edu br DSCCCTUFCG Prof Jos
{joseana, rangel}@dsc. ufcg. edu. br DSC/CCT/UFCG Prof. : José Eustáquio Rangel de Queiroz rangel@dsc. ufcg. edu. br rangeldequeiroz@gmail. com Carga Horária: 60 horas
DSC/CCT/UFCG Estruturas em C ¤ Estrutura em C ± Coleção de variáveis referenciada sob um nome (integração de informações afins). {joseana, rangel}@dsc. ufcg. edu. br ± Declaração de estrutura – criação de variáveis de estruturas (elementos da estrutura). 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: struct endereco { char nome[30]; char rua[40]; char cidade[20]; char estado[3]; unsigned long int cep; }info_adr, binfo, cinfo; {joseana, rangel}@dsc. ufcg. edu. br ± Alocação da 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 Exemplo : DSC/CCT/UFCG ¤ 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 nomen"); scanf("%s", info_adr. nome); printf("Digite o CEPn"); scanf("%lu", &info_adr. cep); ¤ Exempl o: O que faz o programa ao lado? 9
DSC/CCT/UFCG Estruturas em C {joseana, rangel}@dsc. ufcg. edu. br printf("O nome e CEP digitados foram %s e %lunn", 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 Exemplo: DSC/CCT/UFCG {joseana, rangel}@dsc. ufcg. edu. br ¤ 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 nomen"); gets(info_adr. nome); printf("Digite uma ruan"); gets(info_adr. rua); printf("Digite o CEPn"); scanf("%lu", &info_adr. cep); printf("O nome, a rua e o CEP digitados foram %s, %s e %lunn", info_adr. nome, info_adr. rua, info_adr. cep); } 11
Matrizes de Estruturas DSC/CCT/UFCG ¤ Estruturas em C 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(); %sn", 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 Apontadores e Estruturas I DSC/CCT/UFCG ¤ ± Combinação destes 2 tipos simples e geralmente sem problemas 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
Apontadores e Estruturas II DSC/CCT/UFCG ¤ Estruturas em C ± 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 {joseana, rangel}@dsc. ufcg. edu. br ¤ Exemplo /* 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 geraln"); char RA[10], nome[40]; for(j=0; j<=3; j=j+1) printf ("n #t. RAt Nome Nota 1 Nota 2 float nota[4]; for(i=0; i<=6; i=i+1) Nota 3 Nota 4 Media"); } Dados; soma[j]=soma[j]+ aluno[i]. nota[j]; for(i=0; i<=6; i=i+1) { Dados printf("nnt Medias poraluno[7]= exercicio: %. 1 f", printf("n %d %-10 s %-20 s%. 1 f { soma[0]/7, soma[1]/7, soma[2]/7, soma[3]/7, (soma[0]+soma[1]+soma[2]+ %. 1 f", "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 rangel@dsc. ufcg. edu. br, rangeldequeiroz@gmail. com 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 DSC/CCT/UFCG - Técnicas de Programação
- Slides: 17