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 Estrutura Exemplo estrutura
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 Exemplo variável com estrutura
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 Exemplo acesso a variável com estrutura
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 Exemplo matrizes de estrutura
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 Exemplos de passagens para estrutura
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 Exemplo com uma estrutura complexa
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 = 98765 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 Exemplo mistura estrutura normal com campo de bit
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 passando para uma função um ponteiro
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 union put(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 Exemplo mostra inteiro de símbolo
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 Exemplo inicializa símbolo
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(“%s”dinheiro); ...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”); case dime: printf(“dime”); case quarter: printf(“quarter”); case half_dolar:print(“half_dolar”); case dolar: printf(“dolar”); } 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