Baixe o app para aproveitar ainda mais
Prévia do material em texto
Ti d d dTi d d d CCTipos de dadosTipos de dados CC 9 char 9 int • simples • estruturados int 9 float 9 doubleestruturados double9 ponteiros * 9 arranjos 9 estruturas 9 arquivos 9 enumeraçõesç Passagem de parâmetros tipo estruturaPassagem de parâmetros tipo estrutura É• É indicado na declaração do parâmetro se ele é do tipo struct ou o typedef correspondente typedef struct { int dia, mes, ano; } DATA; typedef struct pessoa { char nome[100]; int idade; Passagem por VALOR! int idade; DATA nasc; } PESSOA; id t (PESSOA ) // id t ( t t )void mostrar (PESSOA x) // ou void mostrar (struct pessoa x) { printf ("Nome : %s\n", x.nome); printf ("Idade : %d\n\n", x.idade); i tf ("D t N %d/%d/%d\ " di )printf ("Data Nasc : %d/%d/%d\n", x.nasc.dia, x.nasc.mes, x.nasc.ano); }; int main () {{ PESSOA p = {"Joao",23, {23, 9, 1964}}; mostrar (p); } Passagem de parâmetros por referência Passagem de parâmetros por referência • Para alterar o valor da variável deve ser • Para alterar o valor da variável, deve ser passado o endereço typedef struct {int dia mes ano;} DATA;typedef struct {int dia,mes,ano;} DATA; typedef struct pessoa { char nome[100];[ ]; int idade; float salario; DATA nasc; Passagem por REFERÊNCIA! } PESSOA; void ler (PESSOA *x) { printf ("Nome : %s\n" (*x) nome);printf ( Nome : %s\n , ( x).nome); printf ("Idade : %d\n\n", (*x).idade); printf ("Data Nasc : %d/%d/%d\n", (*x).nasc.dia, (*x).nasc.mes, (*x).nasc.ano); };}; int main () { PESSOA p; ler(&p); mostrar (p); } Precedência de Operadores Precedência de Operadores pp (PESSOA p) (PESSOA *ptr) (PESSOA *ptr) ( E p) Para leitura ( ) (PESSOA ptr) Para leitura ( E p ) Para leitura ( (* ) )gets (p.nome) gets (*ptr.nome)gets( (*ptr).nome ) Operador Ponto tem maior precedência do que o Ponteiro Compilador vai interpretar como *(ptr.Nome) , mas ptr não é do tipo estrutura. ERRO!! Operador seta:Operador seta: -->>pp • Utilizado em funções com parâmetro do tipo Ut l zado em funções com parâmetro do t po estrutura, onde ponteiros devem ser utilizados. • Indica o acesso a um campo de uma estrutura por p p meio de um ponteiro para esta estrutura. • Escrever aluno-> media é o mesmo que escrever q (*aluno).media. • O parênteses é necessário porque o ● (ponto ) tem O parênteses é necessário porque o ● (ponto ) tem prioridade maior que o *. Atenção: a notação com o operador seta é a de Atenção a notação com o operador seta é a de uso mais frequente. ExercícioExercício f lh í• Ver folha de exercícios ExercícioExercício Defina em C um novo tipo denominadoDefina em C um novo tipo denominado Passagem, conforme layout do bilhete de passagem de ônibus mostrado abaixo.passag m ôn us mostra o a a o. Viação VIAJE BEMViação VIAJE BEM Cod. Empresa: ______ Nome do Passageiro: _________________ O i D ti Origem: ___________ Destino: _____________ Data: ___/___/___ Horário: ____:____ Assento:___________ Valor do bilhete: ______________ . // struct como parâmetro: precisa ser global!!! typedef struct {typedef struct { int dia, mes, ano; } DATA ; typedef struct { int hora, min;, } HORARIO; typedef structyp { int cod; char nome_p[20];_p[ ] char origem[20], destino[20]; DATA data_b; HORARIO horario_b;_ int assento; float valor; } BILHETE;} ExercícioExercício A partir da estrutura definida no item 1 A partir da estrutura definida no item 1, implemente as funções ler_bilhete e mostrar bilhete, que permitem, respectivamente, _ , q p , p , ler e mostrar todos os dados relativos a um determinado bilhete. Observe que as funções devem receber a estrutura bilhete como parâmetro, o que implica o s d t i suso de ponteiros. struct data { int dia, mes, ano; }; // função que efetua a leitura dos dados de uma passagem: void ler_bilhete (BILHETE *bilhete ) { i f ("C d d E ") } struct horario { int hora, min; }; bilhprintf ("Cod. da Empresa: "); scanf ("%d", &bilhete->cod); fflush(stdin); printf ("Nome do Passageiro: "); struct est_bilhete { int cod; char nome_p[20]; h i [20] d tiprintf ( Nome do Passageiro: );gets ((*bilhete).nome_p); printf ("Origem: "); gets (bilhete->origem); i tf ("D ti ") char origem[20], destino struct data data_b; struct horario horario_b int assento; float valor; printf ("Destino: "); gets (bilhete->destino); printf ("Data do Bilhete (dd mm aa): "); scanf ("%d%d%d", &bilhete->data b.dia, &bilhete->data b.mes, float valor; } BILHETE; f ( , _ , _ , &bilhete->data_b.ano); printf ("Horario do Bilhete (hh mm): "); scanf ("%d%d", &(*bilhete).horario_b.hora, &bilhete->horario_b.min); printf ("Assento: ");printf ( Assento: ); scanf ("%d", &bilhete->assento); printf ("Valor do Bilhete: "); scanf ("%f", &bilhete->valor);( ) } struct data { int dia, mes, ano; }; struct horariostruct horario { int hora, min; }; struct est_bilhete { // função que efetua a impressão dos dados de uma passagem: void mostra_bilhete ( BILHETE *bilhete ) { { int cod; char nome_p[20]; char origem[20], destino struct data data_b; { printf ("\nCod. da Empresa: %d", bilhete->cod); printf ("\nNome do Passageiro: %s",bilhete->nome_p); printf ("\nOrigem: %s " bilhete->origem); struct horario horario_b; int assento; float valor; } BILHETE; printf ( \nOrigem: %s ,bilhete->origem); printf ("\nDestino: %s ",bilhete->destino); printf ("\nData do Bilhete: %d/%d/%d", bilhete->data_b.dia, bilhete->data_b.mes, bilhete->data_b.ano);_ , _ ) printf ("\nHorario do Bilhete: %d:%d hs.", bilhete->horario_b.hora, bilhete->horario_b.min); printf ("\nAssento: %d", bilhete->assento); i tf ("\ V l d Bilh t R$ % 2f \ \ " bilh t l )printf ("\nValor do Bilhete: R$ %.2f \n\n", bilhete->valor); } /* Name: viajebem.cpp Author: Cida Souto. Date: 20/05/08 00:07 Description: definir tip bilhete de passagem de onibus. */ #include <stdio.h> // t t â t i l b l!!!// struct como parâmetro: precisa ser global!!! typedef struct data { int dia, mes, ano; }DATA ; // programa principal: int main( ) { BILHETE ss m; }DATA ; typedef struct horario { int hora, min; }HORA; d f b lhBILHETE passagem; ler_bilhete(&passagem); mostra_bilhete(&passagem); return 0; typedef struct est_bilhete { int cod; char nome_p[20]; char origem[20] destino[20];return 0; } char origem[20], destino[20]; DATA data_b; HORARIO horario_b; int assento; float valor; float valor; } BILHETE ; void ler_bilhete (BILHETE *bilhete ) ..... void mostra_bilhete (BILHETE *bilhete ) ...... int main ( )int main ( ) { } // fim de main
Compartilhar