O documento apresenta uma introdução à linguagem de programação C ministrada pelo professor John Hebert da Silva Felix da Universidade da Integração Internacional da Lusofonia Afro-Brasiliera. O documento inclui tópicos sobre estruturas, uniões e enumerações na linguagem C.
1. Linguagem C Agradecimentos
TÉCNICAS DE PROGRAMAÇÃO I
Prof.John Hebert da Silva Felix
johnfelix@unilab.edu.br
Universidade da Integração Internacional da Lusofonia
Afro-Brasiliera
Curso de Engenharia de Energias
Redenção-CE, Brasil
2014
Prof. John Hebert S. Felix 1/9 UNILAB
Técnicas de Programação I
2. Linguagem C Agradecimentos
Índice da Apresentação
1 Linguagem C
Linguagem C
Prof. John Hebert S. Felix 2/9 UNILAB
Técnicas de Programação I
4. Linguagem C Agradecimentos
Linguagem C
1 Introdução;
2 A Biblioteca-padrão e as Palavras Reservadas em C;
3 Tipos de Dados e Variáveis;
4 Operadores e Expressões;
5 Entrada e Saída E/S pelo Console;
6 Estruturas de Controles;
7 Funções;
8 Arrays e Strings;
9 Ponteiros;
10 Estruturas, Uniões e Enumerações;
11 Arquivos e Streams;
12 Estruturas de dados:
Listas lineares (Filas, Pilhas e Listas Encadeadas);
Ordenação e Pesquisa.
Prof. John Hebert S. Felix 4/9 UNILAB
Técnicas de Programação I
5. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
Estruturas, Uniões e Enumerações
Estrutura - é um agrupamento ou coleção de variáveis
relacionadas e referenciadas pelo mesmo nome;
União - é uma posição ou espaço de memória que é
compartilhado por variáveis diferentes e, em geral, tipos de
dados também diferentes;
Enumeração - é um conjunto de constantes inteiras, que
representa os valores contidos em variáveis deste tipo.
Prof. John Hebert S. Felix 5/9 UNILAB
Técnicas de Programação I
6. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
Estruturas, Uniões e Enumerações
Estrutura - é um agrupamento ou coleção de variáveis
relacionadas e referenciadas pelo mesmo nome;
União - é uma posição ou espaço de memória que é
compartilhado por variáveis diferentes e, em geral, tipos de
dados também diferentes;
Enumeração - é um conjunto de constantes inteiras, que
representa os valores contidos em variáveis deste tipo.
Prof. John Hebert S. Felix 5/9 UNILAB
Técnicas de Programação I
7. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
Estruturas, Uniões e Enumerações
Estrutura - é um agrupamento ou coleção de variáveis
relacionadas e referenciadas pelo mesmo nome;
União - é uma posição ou espaço de memória que é
compartilhado por variáveis diferentes e, em geral, tipos de
dados também diferentes;
Enumeração - é um conjunto de constantes inteiras, que
representa os valores contidos em variáveis deste tipo.
Prof. John Hebert S. Felix 5/9 UNILAB
Técnicas de Programação I
8. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
Estruturas, Uniões e Enumerações
Estrutura - é um agrupamento ou coleção de variáveis
relacionadas e referenciadas pelo mesmo nome;
União - é uma posição ou espaço de memória que é
compartilhado por variáveis diferentes e, em geral, tipos de
dados também diferentes;
Enumeração - é um conjunto de constantes inteiras, que
representa os valores contidos em variáveis deste tipo.
Prof. John Hebert S. Felix 5/9 UNILAB
Técnicas de Programação I
9. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
Estruturas
As estruturas podem ser formadas por variáveis de diferentes tipos de
dados. As variáveis em uma estrutura são chamadas de membros
(elementos ou campos) da estrutura. Em geral, as estruturas são
utilizadas na declaração de registros.
Estrutura - Sintaxe
struct identificador{
tipo nome_da_variável;
...
tipo nome_da_variável;
} variáveis_estrutura;
Em que: apenas um dos dois (identificador ou variáveis_estrutura) podem ser
omitidos.
Prof. John Hebert S. Felix 6/9 UNILAB
Técnicas de Programação I
10. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
Ex.: Declaração, atribuição e acesso de uma estrutura
#include <stdio.h>
//declaração da estrutura
struct coordxy {
float cx;
float cy;
};
int main (void){
struct coordxy ponto; //declara variável do tipo coord
struct coordxy *pontoPt; //declara ponteiro do tipo coord
pontoPt = &ponto; //atribui o endereço de ponto para pontoPt
ponto.cx = 9.5; //Acessa o membro da estrutura com operador ponto(.)
pontoPt->cy = 14.3; //Acessa o membro da estrutura com operador seta(->)
printf(“O ponto está localizado nas coordenadas(%f,%f)”,ponto.cx,ponto.cy);
printf(“nO pontoPt está localizado nas
coordenadas(%f,%f)”,ponto->cx,ponto->cy);
return 0;
}
Prof. John Hebert S. Felix 6/9 UNILAB
Técnicas de Programação I
11. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
Estrutura - typedef
A palavra-chave typedef permite criar novos nomes para tipos de dados
existentes, i.e., defeni sinônimos para representar determinado tipo de
dado. Exemplos:
1 typedef unsigned long int ULInt;
2 typedef struct coordxy Ponto;
3 typedef struct {
float cx;
float cy;
} Ponto;
No exemplo 1, ULInt é definido como do tipo inteiro longo sem sinal. A
partir deste é possivel declarar variável com tais características, e.g.,
ULInt cep;
No exemplo 2 é criado o tipo Ponto como sinônimo para o tipo struct
coordxy. Da mesma forma como no ex.3, porém sem a necessidade de
especificar o identificar da estrutura. A partir do ex. 2 ou 3 é possivel
declarar estruturas do tipo Ponto, e.g., Ponto ponto[25];, que declara um
array de 25 estruturas de ponto.
Prof. John Hebert S. Felix 6/9 UNILAB
Técnicas de Programação I
12. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
Passando Estrutura para Funções
#include <stdio.h>
typedef struct { //declaração da estrutura
float cx;
float cy;
} Ponto;
float distPontos(Ponto *a, Ponto *b); //Protótipo de função com a Estrutura ponto
int main (void){
Ponto pa, pb; //declara variável do tipo estrutura Ponto
printf(“Digite as coordenadas(x,y) dos pontos A e Bn”);
scanf(“%f%f%f%f”,&pa.cx,&pa.cy,&pb.cx,&pb.cy);
printf(“A distância entre os pontos A (%f,%f) e B (%f,%f) é:
%2.2f”,pa.cx,pa.cy,pb.cx,pb.cy,distPontos(&pa,&pb)); //Passando a Estrutura ponto para
distPontos
return 0;
}
float distPontos(Ponto *a, Ponto *b) {
return (sqrt(pow((b->cx - a->cx),2) + pow((b->cy - a->cy),2)));
}
Prof. John Hebert S. Felix 6/9 UNILAB
Técnicas de Programação I
13. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
Arrays dentro de uma estrutura
typedef struct {
int cod;
char nome[20]; //Array unidimensional - vetor
float prc;
int vend[4][6]; //Array bidimensional - tabela
} RgProduto;
Prof. John Hebert S. Felix 6/9 UNILAB
Técnicas de Programação I
14. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
União
A união tem a mesma forma de uma estrutura a diferença é a
palavra-chave union;
A união pode conbuir no desenvolvimento de códigos portáveis,
pois o compilador não verifica o tamanho real das variáveis que a
formam, evitando assim a dependêcia de máquina;
Com frequências as uniões são utilizadas em conversões de tipo,
permitindo referenciar os dados contidos nesta de forma
diferente, e.g., modificar determinado tipo primitivo para realizar
algum tipo de arredondamento diferente do usual.
Prof. John Hebert S. Felix 6/9 UNILAB
Técnicas de Programação I
15. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
União - Sintaxe
union identificador{
tipo nome_da_variável;
...
tipo nome_da_variável;
} variáveis_união;
Em que: apenas um dos dois (identificador ou variáveis_estrutura) podem ser
omitidos.
Ex.: União
union DTipos{
int num;
char tx;
};
Atribuição e acesso a um membro de uma união é semelhante ao de um
elemento de estrutura.
Prof. John Hebert S. Felix 6/9 UNILAB
Técnicas de Programação I
16. Linguagem C Agradecimentos
Estruturas, Uniões e Enumerações
Enumeração
A enumeração consiste numa forma mais adequada para organizar os
valores constantes.
Enumeração - Sintaxe
enum identificador{ lista_enumerada } lista_de_variáveis;
Semelhante a estrutura, o identificador ou lista_de_variáveis pode ser omitido.
Exs.:
enum estacoes {Ver, Inv, Out, Prim};
enum meses {Jan, Fev, Mar, Abr, Maio, jun, Jul, Ao, set, Out, Nov, Dez};
enum logico {True = 1, False = 0};
//Declaração de uma variável do tipo enum
enum estacoes estacao;
enum meses mes;
enum logico condicao;
Prof. John Hebert S. Felix 6/9 UNILAB
Técnicas de Programação I
17. Linguagem C Agradecimentos
Arquivos e Streams
Arquivos e Streams
Arquivo - é formado por um grupo de registros (correponde a
estrutura vistas anteriormente). Um arquivo em C pode
representar desde arquivos em disco, impressora, teclado, ou
qualquer dispositivo de E/S;
Stream - é uma abstração de E/S de C, que estabelce canais de
comunicação entre os programas e arquivos, quando estão em
execução.
Prof. John Hebert S. Felix 7/9 UNILAB
Técnicas de Programação I
18. Linguagem C Agradecimentos
Arquivos e Streams
Arquivos e Streams
Arquivo - é formado por um grupo de registros (correponde a
estrutura vistas anteriormente). Um arquivo em C pode
representar desde arquivos em disco, impressora, teclado, ou
qualquer dispositivo de E/S;
Stream - é uma abstração de E/S de C, que estabelce canais de
comunicação entre os programas e arquivos, quando estão em
execução.
Prof. John Hebert S. Felix 7/9 UNILAB
Técnicas de Programação I
19. Linguagem C Agradecimentos
Arquivos e Streams
Arquivos e Streams
Arquivo - é formado por um grupo de registros (correponde a
estrutura vistas anteriormente). Um arquivo em C pode
representar desde arquivos em disco, impressora, teclado, ou
qualquer dispositivo de E/S;
Stream - é uma abstração de E/S de C, que estabelce canais de
comunicação entre os programas e arquivos, quando estão em
execução.
Prof. John Hebert S. Felix 7/9 UNILAB
Técnicas de Programação I
20. Linguagem C Agradecimentos
Arquivos e Streams
Arquivos - declarar e abrir arquivos
A biblioteca-padrão que oferece suporte para manipular arquivos é a stdio.h.
Funções comuns do sistema de arquivo
Nome Função
fopen() Abre um arquivo
fclose() Fecha um arquivo
putc() Escreve um caractere em um arquivo
fputc() Realiza a mesma função que putc()
getc() Lê um caractere em um arquivo
fgetc() Realiza a mesma função que fgetc()
fseek() Posiciona o arquivo em um byte específico
fprintf() Realiza em um arquivo a mesma função que printf() no console
fscanf() Realiza em um arquivo a mesma função que scanf() no console
feof() Devolve verdadeiro se o fim do arquivo é alcançado
ferror() Devolve verdadeiro se ocorreu um erro
rewind() Posiciona o indicador de posição no início do arquivo
remove() Apaga um arquivo
fflush() Descarrega um arquivo
Prof. John Hebert S. Felix 8/9 UNILAB
Técnicas de Programação I
21. Linguagem C Agradecimentos
Arquivos e Streams
Modos de abertura de arquivo
Modo Descrição
r Abre um arquivo de texto para leitura
w Cria um arquivo de texto para escrita
a Anexa novos dados a um arquivo de texto
rb Abre um arquivo binário para leitura
wb Cria um arquivo binário para leitura
ab Anexa novos dados a um arquivo binário
r+ Abre um arquivo de texto para leitura e escrita
w+ Cria um arquivo de texto para leitura e escrita
a+ Anexa novos dados ou cria um arquivo de texto para leitura e
escrita
r+b Abre um arquivo binário para leitura e escrita
w+b Cria um arquivo binário para leitura e escrita
a+b Anexa novos dados a um arquivo binário para leitura e escrita
Prof. John Hebert S. Felix 8/9 UNILAB
Técnicas de Programação I
22. Linguagem C Agradecimentos
Arquivos e Streams
Arquivos - abrindo e fechando arquivos
A função fopen() abre um arquivo e retorna o poneiro que está associado
com tal arquivo. Enquanto a função fclose() fecha o arquivo.
Arquivo - Sintaxe fopen() e fclose()
FILE *fPt;
fPt = fopen(nome_do_arquivo, modo) ;
Em que: ftp é um ponteiro para uma estrutura FILE.
Ex.: Abrindo arquivo
FILE * txPt //ponteiro de arquivo txPt = texto1.dat
txPt = fopen(“texto1.dat”,“r”);
Prof. John Hebert S. Felix 8/9 UNILAB
Técnicas de Programação I
23. Linguagem C Agradecimentos
Arquivos e Streams
Arquivo - Sintaxe fopen() e fclose() - continuação
Para detectar algum erro durante a abertura do arquivo é utilizada a seguinte forma:
FILE * txPt //ponteiro de arquivo txPt = texto1.dat
if((txPt = fopen(“texto1.dat”,“r”))==NULL){
printf(“Erro. O arquivo não pode ser aberton”);
exit(1);
}
Ex.: Fechando arquivo
fclose(txPt);
Em que: txPt é um ponteiro para uma estrutura FILE, obtido quando o arquivo “texto1.dat”
foi aberto.
Prof. John Hebert S. Felix 8/9 UNILAB
Técnicas de Programação I
24. Linguagem C Agradecimentos
Arquivos e Streams
Arquivos - lendo e escrevendo qualquer tipo de dado em um arquivo
A função fread() realiza a leitura dos dados e a função fwrite() os escreve.
Arquivo - Sintaxe
fread(void *var, size_t num_bytes, size_t cont, FILE *fPt) ;
fwrite(void *var, size_t num_bytes, size_t cont, FILE *fPt) ;
Em que:
var é um ponteiro para uma região da memória que receberá os dados lidos;
size_t é tipo definido em stdio.h;
num_bytes é o número de bytes a ler ou escrever;
cont representa o número de itens (do comprimento especificado por num_bytes);
fPt é um ponteiro para uma estrutura FILE;
Ex.: Abrindo arquivo
......
Prof. John Hebert S. Felix 8/9 UNILAB
Técnicas de Programação I