Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Registros
No esquecer do ponto-e-vrgula !
Estruturas em C 5
21.1 Estrutura: Declarao - Struct
A definio da estrutura Dados (struct Dados) indica que a
partir daquele momento o compilador passa a conhecer um
outro tipo, chamado struct Dados, que composto por um
inteiro, dois caracteres e um vetor de 20 caracteres. E uma
varivel pessoa do tipo Dados
idade pessoa.idade
nome[20] pessoa.nome
struct Dados
Nome do novo tipo de dado
{
int idade; Campo idade do tipo int
char est_civil, sexo;
Campo estado civil e sexo do
char nome[20];
tipo char
} pessoa;
Campo nome do tipo string
Estruturas em C 13
21.3 Estrutura: Carga Inicial Automtica
Uma Estrutura pode ser iniciada quando ela declarada. Para
tanto, usa-se a seguinte sintaxe:
struct nome_estrutura variavel = { valor1, valor2,..., valorn}
Coloca-se entre chaves os valores dos membros da
estrutura, pela ordem em que eles foram escritos na sua
definio.
Estruturas em C 16
21.4 Estruturas: typedef
Todas as vezes em que se for declarar uma varivel do tipo
estrutura fora do local de definio da mesma, necessrio
colocar antes do nome da varivel a palavra reservada struct
seguida do nome da estrutura.
Ex: struct Data d1; declarao da varivel d1
main()
{ Dt d1; No necessrio empregar a
d1.Dia = 26; palavra struct Data e sim apenas Dt.
d1.Mes = Jan;
Estruturas em C 19
d1.Ano = 93; }
21.4 Estruturas: typedef
A seguir so ilustradas as trs formas possveis para se declarar
um novo tipo Data utilizando struct com ou sem typedef:
struct Data typedef struct Data
struct Data
{ {
{
int Dia, Ano; int Dia, Ano;
int Dia, Ano;
char Mes[20]; char Mes[20];
char Mes[20];
}; } Dt;
};
typedef struct Data Dt;
main()
main() main()
{ struct Data d1;
{ Dt d1; { Dt d1;
d1.Dia = 26;
d1.Dia = 26; d1.Dia = 26;
d1.Mes = Jan;
d1.Mes = Jan; d1.Mes = Jan;
d1.Ano = 93;}
d1.Ano =Estruturas
93; } em C d1.Ano = 93; } 20
21.4 Estruturas: typedef
Exemplo 7 Atribuies
#include <stdio.h> Atribuio de valores
typedef struct Data entre estruturas:
{int Dia, Ano; char Mes[20];} Dt;
main() d2 = d1;
{
Equivale :
int n_Dias;
Dt d2, d1 = {23, 67, Jan}; d2.Dia = d1.Dia;
printf(Data inicial e:);
printf(%d/%s/%d\n,d1.Dia,d1.Mes,d1.Ano); d2.Mes = d1.Mes;
d2 = d1; d2.Ano = d2.Ano;
printf(Entre com n. de dias:);
scanf(%d,&n_Dias); Observe que para vetor
d2.Dia = d1.Dia + n_Dias; e matriz a atribuio
printf(A nova data e:); sempre feita
printf(%d/%s/%d\n,d2.Dia,d2.Mes,d2.Ano); elemento por elemento!
}
Estruturas em C 23
21.5 Novos Tipos: funes + struct
2. O programa ter uma funo (addDia) que que vai receber a
data atual d1 e o nmero de dias que se quer adicionar e ela
vai calcular e devolver nova data d2;
Estruturas em C 24
21.5 Novos Tipos: funes + struct
Calendrio Gregoriano
1 1 1 1
365,242199 365
4 100 400 3300
Cada 4 anos + 1 dia
Calendrio Gregoriano
Ano Bissexto Algoritmo
Se resto(ano/100) 0
(a) No divisvel por 100 e
Se (ano/400) 0
divisvel por 4.
ento bissexto; (b)
Seno no_bissexto; (c)
(b) Divisvel por 100 e 400.
Seno
Se resto(ano/4) 0
(c) Os demais anos no
ento bissexto; (a)
so Bissextos.
Seno no_bissexto; (c)
33
Estruturas em C 38
21.6 Estrutura: Exemplos Resolvidos
if (op == 2)
{ printf( "\nDigite o nome do cliente a ser consultado ");
gets(nome_cliente);
achou = 0;
for (i=0;i<15;i++)
{ if (stricmp(conta[i].nome,nome_cliente) == 0)
{printf( "\nNumero conta: %d Saldo:%.2f ",
conta[i].num, conta[i].saldo);
achou = 1; }
} // Fim for
if (achou == 0)
printf("\nNao existe conta cadastrada para este
cliente!");
getch();
}// Fim if (op==2)
34
Estruturas em C 39
21.6 Estrutura: Exemplos Resolvidos
if (op == 3)
{ i = 0;
achou = 0;
while (i < 15)
{ if (conta[i].num != 0)
{ if (i==0)
{ menor_saldo = conta[i].saldo;
posi = i; }
else if (conta[i].saldo < menor_saldo)
{ menor_saldo = conta[i].saldo;
posi = i; }
achou = 1;
}
i++;
} // Fim while
if (achou == 0)
printf( "\nNenhuma conta foi cadastrada!");
else // excluir a conta
{ for (i=posi;i<14;i++)
{ conta[i] Estruturas
= conta[i+1];
em C
} 40
35
21.6 Estrutura: Exemplos Resolvidos
conta[i].num = 0;
strcpy(conta[i].nome,"\0");
conta[i].saldo = 0;
printf("\nConta excluida com sucesso!");
} // Fim else excluir a conta
getch();
} // Fim if (op==3)
} while (op!=4); //Fim lao principal
} // Fim programa
Estruturas em C 41
21.6 Estrutura: Exemplos Resolvidos
Exemplo 10 Polinmio
Fazer um programa que leia os coeficientes de
um polinmio P(x), imprima e calcule seu
valor num ponto x (fornecido pelo usurio), e
encontre os coeficientes do polinmio Q(x).
Utilize uma funo para ler o polinmio, outra
para imprimi-lo e outra para calcular o seu
valor no ponto x.
Estruturas em C 42
21.6 Estrutura: Exemplos Resolvidos
Estruturas em C 46
21.6 Estrutura: Exemplos Resolvidos
// Funo que acha o polinomio Q(x)- Quociente da
//diviso de P(x)/(x-x1)
Pol calcPol(Pol px, float x)
{ //Pol pz;
int i, n = px.n;
Pol pz;
pz = px;
if (n == 0)
pz.v[0]= px.v[0];
else
{
// Usando algoritmo de Briott-Rufini.
pz.v[n-1] = px.v[n-1] + px.v[n]*x;
for (i=n-2; i >= 0; i--)
pz.v[i] = px.v[i] + x*pz.v[i-1];
pz.n = n - 1;
}
return pz;
}
Estruturas em C 47
21.6 Estrutura: Exemplos Resolvidos
Estruturas em C 48
21.6 Estrutura: Exemplos Resolvidos
Furnas
(x)
(u)
Estruturas em C 49
21.6 Estrutura: Exemplos Resolvidos
Exemplo 11 Usinas Hidro Exemplo 11 Usinas Hidro
#include <stdio.h> // Inicializa os dados de uma usina.
typedef struct usinaH usinaH initUsinaH(usinaH h)
{char nome[100]; float x, u; { Pol px, pu;
Pol px, pu;} usinaH; printf(\n Entre nome da usina:);
gets(h.nome);
// Prottipos das funes. printf(\n Entre com volume:);
void printUsinaH(usinaH h); scanf(%f,&h.x);
usinaH initUsinaH(usinaH h); printf(\n Entre com defluencia:);
float calcAltx(usinaH h); scanf(%f,&h.u);
h.px = initPol(px);
// Funo principal. h.pu = initPol(pu);
main() return h;}
{ // Imprime dados de uma usina.
usinaH h; float x; void printUsinaH(usinaH h)
printf(Iniciando usina:); {printf(\n Nome da usina:);
h = initUsinaH(h); puts(h.nome);
printf(\n Mostrando h:); printf(\nVolume:%f,h.x);
printUsinaH(h); printf(\nDefluencia:%f,h.u);
printf(px=%f\n,calcAltx(h)); printf(\n
Estruturas em C Polx = );printPol(h.px); 50
} printf(\n Polu = );printPol(h.pu);}
21.6 Estrutura: Exemplos Resolvidos
Exemplo 11 Usinas Hidro
// Funo que calcula phi(x)
// (altura de montante).
float calcAltx(usinaH h)
{
float y;
y = calcPol(h.px, h.x);
return y;
}
Observao Importante:
A estrutura usinaH utiliza uma
outra estrutura Pol que
representa um polinmio,
bem como as funes
associadas a manipulao
da estrutura Pol. Estruturas em C 51
21.6 Estrutura: Exemplos Resolvidos
Exemplo 12 Cadastro2
Fazer um programa que leia o nome de um
produto vendido, a data da compra, o preo da
venda e imprima todos estes valores. A seguir
imprima tambm um resumo da venda da
seguinte maneira:
-----------------------------------------
Resumo da venda
Produto: geladeira
Data da venda:23/10/2008
Preo do produto: R$ 2500.00
------------------------------------------
Utilize uma estrutura para armazenar os dados
dos produtos e funesEstruturas
para em
fazer
C
as impresses. 52
21.6 Estrutura: Exemplos ResolvidosExemplo 12 Cadastro2
#include <stdio.h> // Funo principal.
#include <stdlib.h> main()
typedef struct Data {Pd p[3]; int i;
{int D, M, A;} Dt; printf("Leitura de
typedef struct Produto produtos:");
{char Nome[100]; for (i=0; i < 3; i++)
Data Venda; { fflush(stdin);
float Preco;} Pd; p[i]=initProd();
// Prottipos das funes. fflush(stdin);
void printData(Dt d); printProd(p[i]);}
void printProd(Pd p); printf("\n\n");
Dt initData(void); system("pause");
Pd initProd(void); }
// Funo principal. // Funo que imprime Data.
main() void printData(Dt d)
{Pd p[3]; int i; {printf("%d/%d/%d",d.D,d.M
printf("Leitura de ,d.A);}
produtos:");
Estruturas em C 53
21.6 Estrutura: Exemplos Resolvidos Exemplo 12 Cadastro2
Estruturas em C 55
21.7 Novos Tipos: enum
Definio
A palavra enum associa a um
Exemplo13
conjunto de nomes, valores
inteiros a partir de zero (padro) No exemplo abaixo criada
uma estrutura enum que
ou a partir de um primeiro valor
associa para cada palavra
fornecido. Se um valor for
um valor inteiro.
fornecido alguns nomes e no
outros, o compilador atribui
o prximo valor inteiro aos que enum Mes
{ Jan = 1, Fev, Mar, Abr, Mai,
no tiverem valor. Tipos enum
Jun, Jul, Ago, Set, Out,
so tratados como inteiros e
Nov, Dez
qualquer operao de nmeros };
inteiros com eles vlida. Estruturas em C 56
21.7 Novos tipos: enum
Exemplo 13.1 Enum Mes Exemplo 13.2 Enum Mes
#include <stdio.h> #include <stdio.h>
enum meses {Jan = 1, Fev, Mar, enum meses {Jan = 1, Fev, Mar,
Abr, Mai, Jun, Jul, Ago, Set, Out, Abr, Mai, Jun, Jul, Ago, Set, Out,
Nov, Dez}; Nov, Dez};
main() main()
{ int dia; { int dia;
meses mes; meses mes;
mes = Set; mes = meses(9); // int -> meses !
if (mes == Jan || mes == Mar || if (mes == Jan || mes == Mar ||
mes == Mai || mes == Jul || mes == Mai || mes == Jul ||
mes == Ago || mes == Out || mes == Ago || mes == Out ||
mes == Dez) mes == Dez)
dia = 31; dia = 31;
else else
if (mes == Fev) if (mes == Fev)
dia = 28; dia = 28;
else else
dia = 30; dia = 30;
printf(Numero dias: %d \n,dia); } printf(Numero
Estruturas em C dias: %d \n,dia); } 57
21.8 Novos tipos: resumo
Fim de
Novos Tipos
Structs, Typedef e
Enum
Estruturas em C 59