Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade...

27
Capítulo VII – Tipos Capítulo VII – Tipos Enumerativos e Enumerativos e Estruturas Estruturas 7.1 – Tipos enumerativos 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma 7.3 – Manipulação dos campos de uma estrutura estrutura 7.4 – Campos alternativos 7.4 – Campos alternativos

Transcript of Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade...

Page 1: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

Capítulo VII – Tipos Capítulo VII – Tipos Enumerativos e Enumerativos e

EstruturasEstruturas

7.1 – Tipos enumerativos7.1 – Tipos enumerativos

7.2 – A necessidade de estruturas7.2 – A necessidade de estruturas

7.3 – Manipulação dos campos de uma 7.3 – Manipulação dos campos de uma estruturaestrutura

7.4 – Campos alternativos7.4 – Campos alternativos

Page 2: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

7.4 – Campos Alternativos7.4 – Campos Alternativos

7.4.1 – Utilidade de campos alternativos7.4.1 – Utilidade de campos alternativos

Seja o cadastramento dos Seja o cadastramento dos moradoresmoradores de um de um prédio prédio

Para todo Para todo moradormorador são registrados: o são registrados: o nomenome, o , o andarandar, o , o númeronúmero do apartamento e a do apartamento e a idadeidade

Conforme a idade, Conforme a idade, outras informaçõesoutras informações são são registradasregistradas

Page 3: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

Morador:Morador:

nomenome, , andarandar, , númeronúmero do apartamento, do apartamento, idadeidade

Zero a 3 anos:Zero a 3 anos: número de mamadeirasnúmero de mamadeiras tomadas por diatomadas por dia

4 a 11 anos: escolaridade4 a 11 anos: escolaridade, , número de número de brinquedosbrinquedos que possui; que possui;

12 a 17 anos:12 a 17 anos: escolaridadeescolaridade, , número de número de livroslivros que já leu, que já leu, passatempo prediletopassatempo predileto

18 anos ou mais:18 anos ou mais: escolaridadeescolaridade, , profissãoprofissão, , se é ou não se é ou não casadocasado(a), caso seja casado(a), o (a), caso seja casado(a), o nome do cônjugenome do cônjuge e o e o número de filhosnúmero de filhos

Page 4: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

A seguinte A seguinte struct struct poderia ser usada:poderia ser usada:

struct morador {struct morador {

char Nome[30], Escolaridade[10], char Nome[30], Escolaridade[10], Passatempo[15], Passatempo[15], Profissao[15], Profissao[15], NomeConjuge[30]; NomeConjuge[30];

intint andarandar, , numapartamentonumapartamento, , idade, idade, numeromamadeiras, numeromamadeiras,

numbrinquedos, numbrinquedos, numlivros, numlivros, numfilhos;numfilhos;

logic casado;logic casado;

};};

Nenhum morador usaria todos os campos: Nenhum morador usaria todos os campos: desperdíciodesperdício de memória de memória

Solução: Campos Alternativos

Page 5: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

Campos Alternativos: Campos Alternativos: campos de uma variável campos de uma variável que compartilham um que compartilham um mesmo espaçomesmo espaço de de memóriamemória

A A variávelvariável não será do tipo não será do tipo structstruct, mas sim do , mas sim do tipo tipo unionunion

No exemplo dos No exemplo dos moradoresmoradores do prédio, o do prédio, o mesmo mesmo espaçoespaço de memória pode ser compartilhado por: de memória pode ser compartilhado por:

nummamadeirasnummamadeiras Escolaridade, numbrinquedosEscolaridade, numbrinquedos Escolaridade, numlivros, PassatempoEscolaridade, numlivros, Passatempo Escolaridade, Profissao, casado, Escolaridade, Profissao, casado,

NomeConjuge, numfilhosNomeConjuge, numfilhos

Page 6: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

nummamadeirasnummamadeiras Escolaridade, numbrinquedosEscolaridade, numbrinquedos Escolaridade, numlivros, PassatempoEscolaridade, numlivros, Passatempo Escolaridade, Profissao, casado, Escolaridade, Profissao, casado,

NomeConjuge, numfilhosNomeConjuge, numfilhos

Os Os camposcampos desse espaço a serem desse espaço a serem utilizadosutilizados dependem da dependem da idadeidade do morador do morador

O O tamanho totaltamanho total desse espaço é o desse espaço é o maiormaior dentre aqueles ocupados pelas dentre aqueles ocupados pelas quatro quatro alternativasalternativas

Page 7: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

7.4.2 – A declaração union7.4.2 – A declaração union

Sejam as seguintes declarações:Sejam as seguintes declarações:

union valor {union valor {

int valint; double valreal; char valchar;int valint; double valreal; char valchar;

};};

union valor val;union valor val;

A variável A variável valval é do tipo é do tipo union valorunion valor

Os campos Os campos valintvalint, , valrealvalreal e e valcharvalchar compartilham o mesmo espaço de memóriacompartilham o mesmo espaço de memória

Então, essa Então, essa variávelvariável pode guardar pode guardar alternativamentealternativamente, num dado momento, um , num dado momento, um inteirointeiro, um , um realreal ou um ou um caracterecaractere

Val

valint/valreal/valchar

Page 8: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

union valor {union valor {

int valint; double valreal; char valchar;int valint; double valreal; char valchar;

};};

union valor val;union valor val;

O O espaçoespaço por ela ocupado é o de um por ela ocupado é o de um doubledouble, , pois dentre os tipos dos três campos, pois dentre os tipos dos três campos, doubledouble é é o que ocupa maior espaço o que ocupa maior espaço

Tal como nas declarações Tal como nas declarações enumenum e e structstruct, a , a variável variável val val poderia ser declarada das poderia ser declarada das seguintes formas alternativas:seguintes formas alternativas:

ouou

union valor {int valint; double valreal; char valchar;

} val;

typedef union valor valor;union valor {

int valint; double valreal; char valchar;

};valor val;

Val

valint/valreal/valchar

Page 9: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

typedef union valor valor;typedef union valor valor;

union valor {int valint; double valreal; char valchar;};union valor {int valint; double valreal; char valchar;};

valor val;valor val;

val.valint = 4455;val.valint = 4455;

printf ("1) valint = %d, valreal = %lf, valchar = %c",printf ("1) valint = %d, valreal = %lf, valchar = %c",

val.valint, val.valreal, val.valchar);val.valint, val.valreal, val.valchar);

val.valreal = 4455.68;val.valreal = 4455.68;

printf ("\n\n2) valint = %d, valreal = %lf, valchar = %c",printf ("\n\n2) valint = %d, valreal = %lf, valchar = %c",

val.valint, val.valreal, val.valchar);val.valint, val.valreal, val.valchar);

val.valchar = '*';val.valchar = '*';

printf ("\n\n3) valint = %d, valreal = %lf, valchar = %c",printf ("\n\n3) valint = %d, valreal = %lf, valchar = %c",

val.valint, val.valreal, val.valchar);val.valint, val.valreal, val.valchar);

Exemplo: seja o trecho de programa à esquerda

1) valint = 4455, valreal = 0.000000, valchar = g

2) valint = 343597384, valreal = 4455.680000, valchar = H

3) valint = 343597354, valreal = 4455.680000, valchar = *

No vídeo

Os mesmos 8 bytes (64 bits) estão sendo vistos de formas diferentes

Val

valint/valreal/valchar

Page 10: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

7.4.3 – Estruturas com campos 7.4.3 – Estruturas com campos alternativosalternativos

Campos alternativos são Campos alternativos são muitíssimo usadosmuitíssimo usados dentro de estruturasdentro de estruturas

São frequentes os casos em que o São frequentes os casos em que o valor de valor de algum campoalgum campo de uma estrutura de uma estrutura determinadetermina quais os quais os outros camposoutros campos da mesma serem da mesma serem preenchidos em seguida preenchidos em seguida

Seja a seguir o exemplo visto dos Seja a seguir o exemplo visto dos moradores moradores de um prédiode um prédio

Page 11: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

Declarações dos tipos utilizados:Declarações dos tipos utilizados:

cadastro Cad; // Cad é do tipo cadastro ondecadastro Cad; // Cad é do tipo cadastro onde

struct cadastro {struct cadastro {

int nmor; morador Moradores[10];int nmor; morador Moradores[10];

};};

typedef struct cadastro cadastro;typedef struct cadastro cadastro;

nmor

morador

morador

morador

morador

morador

morador

morador

morador

morador

morador

Moradores

Cad

Page 12: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

typedef struct morador morador;typedef struct morador morador;

struct morador {struct morador {

char Nome[30]; int andar, nap, idade;char Nome[30]; int andar, nap, idade;

infoadicionais InfoAdic;infoadicionais InfoAdic;

};};

nmor

morador

morador

morador

morador

morador

morador

morador

morador

morador

morador

Moradores

Cad

char - [30] int int int infoadicionais

Nome andar nap idade InfoAdic

O tipo morador

Page 13: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

typedef union infoadicionais infoadicionais;typedef union infoadicionais infoadicionais;

union infoadicionais {union infoadicionais {

infozeroa3 Info03; info4a11 Info411;infozeroa3 Info03; info4a11 Info411;

info12a17 Info1217; info18oumais Info18;info12a17 Info1217; info18oumais Info18;

};};

char - [30] int int int infoadicionais

Nome andar nap idade InfoAdic

O tipo morador

infozeroa3 / info4a11 / info12a17 / info18oumaisInfo03 / Info411 / Info1217 / Info18

O tipo infoadicionais

Page 14: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

typedef struct infozeroa3 infozeroa3;typedef struct infozeroa3 infozeroa3;

struct infozeroa3 {int nmamads;};struct infozeroa3 {int nmamads;};

typedef struct info4a11 info4a11;typedef struct info4a11 info4a11;

struct info4a11 {escolaridade esc; int nbrinq;};struct info4a11 {escolaridade esc; int nbrinq;};

infozeroa3 / info4a11 / info12a17 / info18oumaisInfo03 / Info411 / Info1217 / Info18

O tipo infoadicionais

int

nmamads

O tipo infozeroa3

escolaridade

int

esc nbrinq

O tipo info4a11

Page 15: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

typedef struct info12a17 info12a17;typedef struct info12a17 info12a17;

struct info12a17 {struct info12a17 {

escolaridade esc; int nlivros;escolaridade esc; int nlivros;

char Passatempo[20];char Passatempo[20];

};};

infozeroa3 / info4a11 / info12a17 / info18oumaisInfo03 / Info411 / Info1217 / Info18

O tipo infoadicionais

escolaridade

int char - [20]

esc nlivros

Passatempo

O tipo info12a17

Page 16: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

typedef struct info18oumais info18oumais;typedef struct info18oumais info18oumais;

struct info18oumais {struct info18oumais {

escolaridade esc; char Profissao[20], escolaridade esc; char Profissao[20], Conjuge[30];Conjuge[30];

char ehcasado; int nfilhos;char ehcasado; int nfilhos;

};};

infozeroa3 / info4a11 / info12a17 / info18oumaisInfo03 / Info411 / Info1217 / Info18

O tipo infoadicionais

O tipo info18oumaisescolarida

decharchar - [20] char - [30] int

esc ehcasado

Profissao Conjuge nfilhos

A seguir, um programa completo

Page 17: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

/* Declaracoes dos diversos tipos *//* Declaracoes dos diversos tipos */

typedef enum escolaridade escolaridade;typedef enum escolaridade escolaridade;

enum escolaridade {nenhuma, basica, media, enum escolaridade {nenhuma, basica, media, superior};superior};

typedef struct infozeroa3 infozeroa3;typedef struct infozeroa3 infozeroa3;

struct infozeroa3 {int nmamads;};struct infozeroa3 {int nmamads;};

typedef struct info4a11 info4a11;typedef struct info4a11 info4a11;

struct info4a11 {escolaridade esc; int nbrinq;};struct info4a11 {escolaridade esc; int nbrinq;};

Page 18: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

typedef struct info12a17 info12a17;typedef struct info12a17 info12a17;

struct info12a17 {struct info12a17 {

escolaridade esc; int nlivros;escolaridade esc; int nlivros;

char Passatempo[20];char Passatempo[20];

};};

typedef struct info18oumais info18oumais;typedef struct info18oumais info18oumais;

struct info18oumais {struct info18oumais {

escolaridade esc; char Profissao[20], escolaridade esc; char Profissao[20], Conjuge[30];Conjuge[30];

char ehcasado; int nfilhos;char ehcasado; int nfilhos;

};};

Page 19: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

typedef union infoadicionais infoadicionais;typedef union infoadicionais infoadicionais;

union infoadicionais {union infoadicionais {

infozeroa3 Info03; info4a11 Info411;infozeroa3 Info03; info4a11 Info411;

info12a17 Info1217; info18oumais Info18;info12a17 Info1217; info18oumais Info18;

};};

typedef struct morador morador;typedef struct morador morador;

struct morador {struct morador {

char Nome[30]; int andar, nap, idade;char Nome[30]; int andar, nap, idade;

infoadicionais InfoAdic;infoadicionais InfoAdic;

};};

typedef struct cadastro cadastro;typedef struct cadastro cadastro;

struct cadastro {struct cadastro {

int nmor; morador Moradores[10];int nmor; morador Moradores[10];

};};

Page 20: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

/* Cabecalho e declaracoes das variaveis *//* Cabecalho e declaracoes das variaveis */

void main () {void main () {

cadastro Cad;cadastro Cad;

int i; char c;int i; char c;

/* Inicio da entrada de dados *//* Inicio da entrada de dados */

printf ("CADASTRO DE MORADORES DE UM PREDIO");printf ("CADASTRO DE MORADORES DE UM PREDIO");

printf ("\n\nNumero de moradores: "); scanf ("%d", printf ("\n\nNumero de moradores: "); scanf ("%d", &Cad.nmor);&Cad.nmor);

for (i = 0; i < Cad.nmor; i++) {for (i = 0; i < Cad.nmor; i++) {

/* Leitura das informacoes comuns a cada morador *//* Leitura das informacoes comuns a cada morador */

printf ("\n\nMorador n.o %d:", i+1);printf ("\n\nMorador n.o %d:", i+1);

printf ("\n\tNome: "); fflush (stdin); gets printf ("\n\tNome: "); fflush (stdin); gets (Cad.Moradores[i].Nome);(Cad.Moradores[i].Nome);

printf ("\tAndar: "); scanf ("%d", printf ("\tAndar: "); scanf ("%d", &Cad.Moradores[i].andar);&Cad.Moradores[i].andar);

printf ("\tApto: "); scanf ("%d", &Cad.Moradores[i].nap);printf ("\tApto: "); scanf ("%d", &Cad.Moradores[i].nap);

printf ("\tIdade: "); scanf ("%d", printf ("\tIdade: "); scanf ("%d", &Cad.Moradores[i].idade);&Cad.Moradores[i].idade);

Page 21: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

/* Leitura das informacoes dos moradores com idade de zero a 3 anos /* Leitura das informacoes dos moradores com idade de zero a 3 anos */*/

if (Cad.Moradores[i].idade >= 0 && Cad.Moradores[i].idade if (Cad.Moradores[i].idade >= 0 && Cad.Moradores[i].idade <= 3) {<= 3) {

printf ("\tNumero de Mamadeiras: ");printf ("\tNumero de Mamadeiras: ");

scanf ("%d", scanf ("%d", &Cad.Moradores[i].InfoAdic.Info03.nmamads);&Cad.Moradores[i].InfoAdic.Info03.nmamads);

}}

/* Leitura das informacoes dos moradores com idade de 4 a 11 anos *//* Leitura das informacoes dos moradores com idade de 4 a 11 anos */

else if (Cad.Moradores[i].idade >= 4 && else if (Cad.Moradores[i].idade >= 4 && Cad.Moradores[i].idade <= 11) {Cad.Moradores[i].idade <= 11) {

printf ("\tEscolaridade ");printf ("\tEscolaridade ");

printf ("(0 - Nenhuma, 1 - Basica, 2 - Media, 3 - printf ("(0 - Nenhuma, 1 - Basica, 2 - Media, 3 - Superior): ");Superior): ");

scanf ("%d", &Cad.Moradores[i].InfoAdic.Info411.esc);scanf ("%d", &Cad.Moradores[i].InfoAdic.Info411.esc);

printf ("\tNumero de Brinquedos: ");printf ("\tNumero de Brinquedos: ");

scanf ("%d", scanf ("%d", &Cad.Moradores[i].InfoAdic.Info411.nbrinq);&Cad.Moradores[i].InfoAdic.Info411.nbrinq);

}}

Page 22: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

/* Leitura das informacoes dos moradores com idade de 12 a /* Leitura das informacoes dos moradores com idade de 12 a 17 anos */17 anos */

else if (Cad.Moradores[i].idade>=12 && else if (Cad.Moradores[i].idade>=12 && Cad.Moradores[i].idade<=17) {Cad.Moradores[i].idade<=17) {

printf ("\tEscolaridade ");printf ("\tEscolaridade ");

printf ("(0 - Nenhuma, 1 - Basica, 2 - Media, 3 - printf ("(0 - Nenhuma, 1 - Basica, 2 - Media, 3 - Superior): ");Superior): ");

scanf ("%d", scanf ("%d", &Cad.Moradores[i].InfoAdic.Info1217.esc);&Cad.Moradores[i].InfoAdic.Info1217.esc);

printf ("\tNumero de Livros Lidos: ");printf ("\tNumero de Livros Lidos: ");

scanf ("%d", scanf ("%d", &Cad.Moradores[i].InfoAdic.Info1217.nlivros);&Cad.Moradores[i].InfoAdic.Info1217.nlivros);

printf ("\tPassatempo Predileto: ");printf ("\tPassatempo Predileto: ");

fflush (stdin); fflush (stdin);

gets gets (Cad.Moradores[i].InfoAdic.Info1217.Passatempo);(Cad.Moradores[i].InfoAdic.Info1217.Passatempo);

}}

Page 23: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

/* Leitura das informacoes dos moradores com idade de 18 anos ou mais /* Leitura das informacoes dos moradores com idade de 18 anos ou mais */*/

else {else {

printf ("\tEscolaridade ");printf ("\tEscolaridade ");

printf ("(0 - Nenhuma, 1 - Basica, 2 - Media, 3 - Superior): printf ("(0 - Nenhuma, 1 - Basica, 2 - Media, 3 - Superior): ");");

scanf ("%d", &Cad.Moradores[i].InfoAdic.Info18.esc);scanf ("%d", &Cad.Moradores[i].InfoAdic.Info18.esc);

printf ("\tProfissao: ");printf ("\tProfissao: ");

fflush (stdin); gets fflush (stdin); gets (Cad.Moradores[i].InfoAdic.Info18.Profissao);(Cad.Moradores[i].InfoAdic.Info18.Profissao);

printf ("\tEh casado? (s/n): ");printf ("\tEh casado? (s/n): ");

c = Cad.Moradores[i].InfoAdic.Info18.ehcasado = getche c = Cad.Moradores[i].InfoAdic.Info18.ehcasado = getche ();();

if (c == 's' || c == 'S') {if (c == 's' || c == 'S') {

printf ("\n\tNome do conjuge: "); fflush (stdin); printf ("\n\tNome do conjuge: "); fflush (stdin);

gets (Cad.Moradores[i].InfoAdic.Info18.Conjuge);gets (Cad.Moradores[i].InfoAdic.Info18.Conjuge);

printf ("\tNumero de Filhos: ");printf ("\tNumero de Filhos: ");

scanf ("%d", scanf ("%d", &Cad.Moradores[i].InfoAdic.Info18.nfilhos);&Cad.Moradores[i].InfoAdic.Info18.nfilhos);

}}

else printf ("\n");else printf ("\n");

}}

}}

Page 24: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

/* Listagem das informacoes digitadas *//* Listagem das informacoes digitadas */

printf ("\nListagem dos Moradores:\n");printf ("\nListagem dos Moradores:\n");

for(i = 0; i < Cad.nmor; i++) {for(i = 0; i < Cad.nmor; i++) {

/* Informacoes comuns *//* Informacoes comuns */

printf("\n%d) Nome: %-21s; Andar: %4d; Apto: %5d; printf("\n%d) Nome: %-21s; Andar: %4d; Apto: %5d; Idade: %4d", i+1,Idade: %4d", i+1,

Cad.Moradores[i].Nome, Cad.Moradores[i].andar, Cad.Moradores[i].Nome, Cad.Moradores[i].andar, Cad.Moradores[i].nap, Cad.Moradores[i].nap,

Cad.Moradores[i].idade);Cad.Moradores[i].idade);

/* Moradores de zero a 3 anos *//* Moradores de zero a 3 anos */

if (Cad.Moradores[i].idade >= 0 && if (Cad.Moradores[i].idade >= 0 && Cad.Moradores[i].idade <= 3) {Cad.Moradores[i].idade <= 3) {

printf ("\n\tMamadeiras: %d;", printf ("\n\tMamadeiras: %d;",

Cad.Moradores[i].InfoAdic.Info03.nmamads);Cad.Moradores[i].InfoAdic.Info03.nmamads);

}}

Page 25: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

/* Moradores de 4 a 11 anos *//* Moradores de 4 a 11 anos */

else if (Cad.Moradores[i].idade >= 4 && else if (Cad.Moradores[i].idade >= 4 && Cad.Moradores[i].idade <= 11) {Cad.Moradores[i].idade <= 11) {

printf ("\n\tEscolaridade: %d; Brinquedos: %d",printf ("\n\tEscolaridade: %d; Brinquedos: %d",

Cad.Moradores[i].InfoAdic.Info411.esc,Cad.Moradores[i].InfoAdic.Info411.esc,

Cad.Moradores[i].InfoAdic.Info411.nbrinq);Cad.Moradores[i].InfoAdic.Info411.nbrinq);

}}

/* Moradores de 12 a 17 anos *//* Moradores de 12 a 17 anos */

else if (Cad.Moradores[i].idade>=12 && else if (Cad.Moradores[i].idade>=12 && Cad.Moradores[i].idade<=17) {Cad.Moradores[i].idade<=17) {

printf ("\n\tEscolaridade: %d; Livros: %d; printf ("\n\tEscolaridade: %d; Livros: %d; Passatempo: %s",Passatempo: %s",

Cad.Moradores[i].InfoAdic.Info1217.esc,Cad.Moradores[i].InfoAdic.Info1217.esc,

Cad.Moradores[i].InfoAdic.Info1217.nlivros,Cad.Moradores[i].InfoAdic.Info1217.nlivros,

Cad.Moradores[i].InfoAdic.Info1217.Passatempo);Cad.Moradores[i].InfoAdic.Info1217.Passatempo);

}}

Page 26: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

/* Moradores de 18 anos ou mais *//* Moradores de 18 anos ou mais */

else {else {

printf ("\n\tEscolaridade %d; Profissao %s; Casado: printf ("\n\tEscolaridade %d; Profissao %s; Casado: %c;",%c;",

Cad.Moradores[i].InfoAdic.Info18.esc,Cad.Moradores[i].InfoAdic.Info18.esc,

Cad.Moradores[i].InfoAdic.Info18.Profissao,Cad.Moradores[i].InfoAdic.Info18.Profissao,

Cad.Moradores[i].InfoAdic.Info18.ehcasado);Cad.Moradores[i].InfoAdic.Info18.ehcasado);

c = Cad.Moradores[i].InfoAdic.Info18.ehcasado;c = Cad.Moradores[i].InfoAdic.Info18.ehcasado;

if (c == 's' || c == 'S') {if (c == 's' || c == 'S') {

printf ("\n\tConjuge: %s, Filhos: %d",printf ("\n\tConjuge: %s, Filhos: %d",

Cad.Moradores[i].InfoAdic.Info18.Conjuge,Cad.Moradores[i].InfoAdic.Info18.Conjuge,

Cad.Moradores[i].InfoAdic.Info18.nfilhos);Cad.Moradores[i].InfoAdic.Info18.nfilhos);

}}

}}

}}

/* Fechamento da tela *//* Fechamento da tela */

printf ("\n\nDigite algo para encerrar: "); getch();printf ("\n\nDigite algo para encerrar: "); getch();

}}

Page 27: Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

Exercícios 7.4:Exercícios 7.4:

1)1) Seja o Seja o programa ao programa ao lado contendo lado contendo estruturas e estruturas e campos campos alternativos. alternativos. Mostrar o que Mostrar o que será escrito no será escrito no vídeo pela sua vídeo pela sua execução.execução.

#include <stdio.h>#include <conio.h>

typedef char str2[2]; typedef char str4[4];struct ss {str2 x[4]; str4 y[2];};typedef struct ss ss; typedef char str16[16];typedef char str8[8];union uu {ss a; str16 b; str8 c;} uniao;

void main () {str16 palavra =

"ABCDEFGHIJKLMNOP";str8 numero = "12345678";int i, j;for (i=0; i<16; i++) uniao.b[i] =

palavra[i];for (i=0; i<8; i++) uniao.c[i] =

numero[i];for (i=0; i<4; i++) {

for (j=0; j<2; j++)printf ("%c%c",

uniao.a.x[i][j],

uniao.a.y[j][i]);

printf ("\n");}

printf ("\n\nDigite algo para encerrar: ");

getch();}