A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.

Apresentações semelhantes


Apresentação em tema: "LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo."— Transcrição da apresentação:

1 LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo

2 Tópicos 1. Introdução à Linguagem C 2. Operadores e Expressões 3. Estruturas de Controle 4. Entrada e Saída 5. Matrizes e strings 6. Funções 7. Ponteiros 8. Estruturas e Uniões 9. Arquivos Texto 10. Arquivos Binários

3 Estruturas e uniões –C permite 5 tipos de dados personalizados pelo usuário: estrutura, campo de bit, união, enumeração e typedef Estrutura –Coleção de variáveis; referência pelo mesmo nome –Variáveis que formam a estrutura são elementos de estrutura Exemplo estrutura struct addr { char nome[30]; char rua[40]; char cidade[20]; char estado[3] unsigned long int cep; };

4 –Declarando variável com a estrutura anterior Exemplo variável com estrutura struct addr ender_info; Exemplo outra forma declarar variável como estrutura struct addr { char nome[30]; char rua[40]; char cidade[20]; char estado[3] unsigned long int cep; }ender_info, binfo, cinfo; Exemplo outra forma declarar uma variável como estrutura struct { char nome[30]; char rua[40]; char cidade[20]; char estado[3] unsigned long int cep; }ender_info;

5 –Forma geral: struct nome_tipo_estrut { tipo nome_variável;... } variáveis_estrut; –Referências aos elementos da estrutura forma: nome_estrutura.nome_elemento Exemplo acesso a variável com estrutura ender_info.cep = 12345; printf(%lu,ender_info.cep); ou gets(ender_info.nome); –Acesso a elementos individuais é indexado: Exemplo acesso a elementos individuais int t; for (t=0; ender_info.nome[t];++t) putchar (ender_info.nome[t]);

6 –Matrizes de estruturas: define a estrutura e depois declara uma variável daquele tipo Exemplo matrizes de estrutura struct addr ender_info[100]; –Acesso a um elemento: indexa printf(%lu, ender_info[2].cep); Exemplo estrutura de enderecos struct addr { char nome[30]; char rua[40]; char cidade[20]; char estado[3]; } ender_ info[tamanho];... gets(ender_info[1].nome); /* inserir elemento */... printf(%s \n,ender_info[1].nome);/* mostrar elemento */... fread(&ender_info[i],sizeof(struct_addr),1,fp); /* lê */... fwrite(&ender_info[i],sizeof(struct_addr),1,fp);/*salva*/

7 –Passando estruturas para funções Passando elementos de estruturas para funções: passa-se uma variável simples ou endereços Exemplos de passagens para estrutura struct aluno { char x; int y; float z; char s[10]; } joao;... Func1(joao.x); Func2(joao.y); Func3(joao.z); Func4(joao.s); Func5(joao.s[3]);

8 Exemplos de passagens de endereços para a estrutura... Func1(&joao.x); Func2(&joao.y); Func3(&joao.z); Func4(joao.s); Func5(&joao.s[3]); Passando estruturas inteiras para funções: quando uma estrutura é um argumento de uma função ela é passada inteira usando a passagem por valor; o tipo de argumento é o tipo de parâmetro. Exemplos de passagens de estrutura inteira main()f1(parm) {struct { struct {int x, y; int a, b;char ch; char ch;}parm; }arg;{ arg.a = 1000;printf(%d, parm.x); f1(arg);} }

9 Exemplos de outra forma de passar a estrutura inteira struct struct_tipo { int a, b; char ch; }; main()f1(parm) {struct struct_tipo parm; struct struct_tipo arg;{ arg.a = 1000;printf(%d,parm.a); f1(arg);} } –Ponteiros para estruturas declaração: struct tipo_estrutura *ponteiro uso: obtendo chamada por referência e criando listas e outras estruturas desvantagem no uso da estrutura: esforço extra para tirar e colocar elementos na pilha. A solução é a passagem de apenas um ponteiro o conteúdo será modificado e a passagem será mais rápida

10 Exemplos de uso de ponteiro para estruturas struct bal { float balanço; char nome[80]; } pessoa; struct bal *p... Colocando o endereço de pessoa no ponteiro p: p = &pessoa;... Fazendo referência ao indivíduo: (*p).balanco Existem dois métodos de fazer referência a uma variável de estrutura com ponteiros: com referências explícitas e com o operador flecha o primeiro método é considerado arcaico o segundo método é considerado uma abreviação do primeiro o primeiro método é a base de entendimento do segundo

11 Exemplo de método de referências explícitas struct tm { int horas; int minutos; int segundos; }; main() { struct tm time; time.horas = 0; time.minutos = 0; time.segundos = 0; for (;;) { update (&time); display (&time); } /* função update com referências explícitas */

12 update(t) struct tm *t; { (*t).segundos++; if ((*t).segundos == 60) { (*t).segundos = 0; (*t).minutos++; } if ((*t).minutos == 60) { (*t).minutos = 0; (*t).horas++; } if ((*t).horas == 24) (*t).horas = 0; delay(); } display(t)delay() struct tm *t;{ {long int t; printf(%d:,(*t).horas);for (t=1;t<128000;++t); printf(%d:,(*t).minutos);} printf(%d:,(*t).segundos); }

13 Exemplo de método de flecha /* função update com flecha */ update(t) struct tm *t; { t->segundos++; if (t->segundos == 60) { t->segundos = 0; t->minutos+++; } if (t->minutos == 60) { t->minutos = 0; t->horas++; } if (t->horas == 24) t->horas = 0; delay(); }

14 –Matrizes e estruturas dentro de estruturas: um elemento de uma estrutura pode ser simples ou complexo Exemplo com uma estrutura complexa struct x { int a[10][10]; float b; } y;...referência ao inteiro 3,7 em a da estrutura y: y.a[3][7]...estrutura complexa aninhada struct emp { struct addr endereço; float salario; }trabalhador;...atribuição trabalhador.endereco.cep = As referências são feitas da esquerda para a direita do mais externo para o mais interno

15 Campos de bit –Método de acessar um único bit em um byte –Vantagens: se o armazenamento for limitado, pode se armazenar várias variáveis booleanas em um byte; interfaces de dispositivos transmitem informações codificadas em bits dentro de um byte; algumas rotinas de codificação precisam acessar bits dentro de bytes –Sintaxe: struct nome_tipo_estrutura { tipo nome1: comprimento; tipo nome2: comprimento;... tipo nome3: comprimento; } O Campo de bit é declarado como int, unsigned ou signed; campos de bit de comprimento 1 são unsigned

16 Exemplo com campo de bit struct device { unsigned active: 1; unsigned ready: 1; unsigned xmt_error: 1; } dev_code;... wr_tape() char c; { while (!dev_code.ready) rd(&dev_code); wr_to_tape() while (dev_code.active) rd(&dev_code); if (dev_code.xmt_error) printf(erro de gravação) } Não é preciso dar nome a cada campo de bit Exemplo com campo de bit sem nome struct device { unsigned active: 1; unsigned ready: 1; unsigned xmt_error: 1; unsigned: 2; unsigned eot:1; } dev_code;

17 –Desvantagens dos campos de bit: não se pode utilizar o endereço de uma variável de campo de bit; não se pode colocar as variáveis de campo de bit em matrizes; não ultrapassa limite de inteiros; é dependente de máquina. Pode se misturar estrutura comum com campos de bit Exemplo mistura estrutura normal com campo de bit struct emp { struct addr endereco; float pagamento; unsigned lay_off: 1; unsigned horista: 1; unsigned deducoes: 3; } dev_code; Uniões –Localização de memória usada por variáveis diferentes que podem ser de tipos diferentes

18 –Exemplo: union u_type { int i; char ch; }; union u_type cn –Para se ter acesso a union pode ser usado o ponto ou a flecha. Ex.: cn.i = 1; Exemplo passando para uma função um ponteiro func1(un) union u_type *un; { un->i = 10; } –Union ajuda a produzir código independente Exemplo unionput(word,fd) union pw {union pw, word; int i;file *fp; char ch[2];{putc(word->ch[0],fp); }putc(word->ch[1],fp); }

19 Enumerações –Conjunto de constantes inteiras com nome e especificação de todos os valores legais forma: enum nome_tipo_enum{lista_enum}lista_var Exemplo enumeração enum moeda{penny, nickel, dime, quarter, half_dolar,dolar}; enum moeda dinheiro;...referências: dinheiro = dine; if (dinheiro == quarter) printf(é um quarter\n); –Na enumeração cada símbolo também é um valor inteiro: Exemplo mostra inteiro de símbolo enum moeda{penny, nickel, dime, quarter, half_dolar,dolar}; enum moeda dinheiro;...referências: dinheiro = dine; if (dinheiro == quarter) printf(é um quarter\n);

20 –Pode se atribuir o valor inteiro de um ou mais símbolos usando um inicializador; os próximos símbolos seguirão a sequência Exemplo inicializa símbolo enum moeda {penny, nickel, dime, quarter=100, half_dolar, dolar}; –ERRO no uso de enumeração (achar que o símbolo pode ser tratado diretamente) Exemplo erro na enumeração dinheiro = dolar; printf(%sdinheiro);...outro gets(s) strcpy(dinheiro,s) –Para usar os nomes dos símbolos é preciso escrevê-los explicitamente

21 Exemplo mostrar nome do símbolo switch (dinheiro) { case penny:printf(penny); break; case nickel:printf(nickel); break; case dime:printf(dime); break; case quarter:printf(quarter); break; case half_dolar:print(half_dolar); break; case dolar:printf(dolar); break; } Exemplo mostrar nome do símbolo através do array char nome[][20] = { penny, nickel, dime, quarter, hal_dolar, dolar }... printf(%s,nome[diheiro]);

22 Exemplo uso correto de símbolo associado a array enum moeda {penny, nickel, dime, quarter, half_dolar, dolar}; char nome[][20] = { penny, nickel, dime, quarter, half_dollar, dolar }; main() { enum moeda dinheiro; for (dinheiro=penny;dinheiro<=dolar;dinheiro++) printf(%s,nome[dinheiro]); } –Uso de sizeof para portabilidade: ajuda a eliminar código dependente de máquina Exemplo mostrar tamanho da variável char ch; int i; double f; printf(%d %d %d,sizeof(ch), sizeof(i), sizeof(f));

23 Exemplo qual é o tamanho da union? sizeof(tom) union x { char ch; int i; float f; } tom; Typedef –Forma de definir explicitamente novos nomes de tipos de dados forma: typedef tipo nome; Exemplo para dados simples typedef float balanco;... balanco bal_do_ano; Exemplo para dados complexos typedef struct { float vencimento; int em_atraso; char nome[40]; } cliente; cliente clist[num_clientes];


Carregar ppt "LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo."

Apresentações semelhantes


Anúncios Google