Escolar Documentos
Profissional Documentos
Cultura Documentos
1 2
14 14
1 2
Linguagem de programação em C
Objetivos Assuntos abordados
Conhecer os conceitos iniciais da programação Conceitos de linguagem C
em C e a compilação de códigos
Tipos de dados
Realizar comparativos entre as linguagens C e
Python Estruturas condicionais
Introduzir comandos iniciais, variáveis e tipos Estruturas de repetição
3 4
14 14
de dados
Funções
Discutir sobre as estruturas de controle
Aprender sobre funções e suas vantagens
3 4
Conceitos de linguagem C
Libraries
5 6
Tipos de dados
7 8
Estruturas condicionais
Switch/case
Operador ternário
9 10
Estruturas de repetição
Do/while
14 14
Break e Continue
11 12
Funções
13 14
15
14
15
Aula 2
1 2
16 16
1 2
3 4
Vetores
5 6
Vetores - comparativo Vetores - comparativo
float notas[4] = {3.5, 7.5, 9.2, 6.8}
float nota1 = 3.5, nota2 = 7.5, nota3 = 9.2, Representação – Vetor notas:
nota3 = 6.8 1 2 3 4 Posição
7 8 ...
16 3.5 7.5 9.2 6.8 16
Nota1 Nota2 Nota3 Nota4 Nota[2] = 3; /*Altera o valor contido no índice 2 para 3.
7 8
Introdução a strings
9 10
11 12
strlen()
16 16
11 12
Matrizes
13 14
Colunas
1 2 3
Aplicações e exemplos
0 0 0
0 0 0 Linha 1 5 77 44 0
15 16
16 16
Linha 2 33 8 12 1
0 1 2 Índice
15 16
17
16
17
Aula 3
1 2
11 11
Structs
Assuntos abordados:
Definição de structs
Manipulação de structs
Objetivo:
Struct dentro de struct
Aprender a manipular estruturas
Vetores e matrizes de structs
3 4
11
heterogêneas 11
Aplicações e exemplos
Definição de structs
struct treino {
char piloto[12];
int nro_volta;
double tempo;
Definição de structs }volta;
sizeof(int); // 4 bytes
sizeof(char); //12 bytes
sizeof(double);// 8 bytes
5 6
sizeof(volta); //4+12+8 = 24
11 11
1
Manipulação de structs Struct dentro de struct
7 8
11 11
struct passagem { 0
char numpass [12];
1
Vetores e matrizes de structs char voo[7];
char classe; 2
char assento[4];
char origem[50]; ...
9 10 char destino[50];
11 11
struct data dt; 37
struct hora hh;
39
char portao[4];
} p[40]; 39
Aplicações e exemplos
11
11
2
Aula 4
1 2
30 30
1 2
Ponteiros
Assuntos abordados:
Objetivos:
Endereços e ponteiros
Conhecer e aplicar o uso de ponteiros
Inicialização de ponteiros
Estudar o funcionamento da alocação direta
de blocos de memória Alocação dinâmica de memória
3 4
30
Entender como ocorre a criação de
30
Ponteiros com vetores e matrizes
estruturas dinâmicas Ponteiros com structs
Implementar exemplos práticos
3 4
Endereços e ponteiros
5 6
1
Endereços e ponteiros Endereços e ponteiros
Alocação de memória
int main {
Armazena endereços de memória
2001 2002 2003 2004 2005 2006 2007 2008
char letra = ‘s’; //1 byte s “Aponta” para o endereço que armazena o
int nro = 47; //4 bytes 47 valor de uma variável
char nome[7] = “Zanana”; Z a n a n a \0
Formas de declaração de ponteiros:
7 float salario; //4 bytes 8
30 30
1 byte tipo *nome_ponteiro;
return(0); Espaço de memória
} reservado (variável salario)
tipo * nome_ponteiro;
Aula 4 – Figura 15 – Alocação de memória (Fonte: elaborado pelos autores)
tipo* nome_ponteiro;
Figura composta
7 8
Inicialização de ponteiros
9 10
11 12
2
Inicialização de ponteiros Inicialização de ponteiros
Exemplo: cálculos indiretos envolvendo o
Exemplo: movimentação na memória
conteúdo apontado
int numero = 0, *ptr1 = &numero, *ptr2;
int x = 0, a = 5, b = 2, *ptr = &a;
ptr2 = ptr1++; //incremento 4 bytes
(*ptr)++;
VARIÁVEL
13 b = (*ptr) + 1; 14
ptr2 ptr1 número
30 30
CONTEÚDO 0x7ffeec0995d8 0x7ffeec0995dc 0
*ptr = (*ptr) + 10;
ENDEREÇO 0x7ffeec0995d8 0x7ffeec0995d0 0x7ffeec0995dc 0x7ffeec0995d8
x = (*ptr) * b;
x = (((*ptr) + b)) * (*ptr); Aula 4 – Figura 18 – Navegando na memória em hexadecimal (Fonte: elaborado pelos autores)
13 14
Inicialização de ponteiros
CONVERSÕES
Hexadecimal Trecho a converter Decimal
0x7ffeec0995dc 95dc 38364
0x7ffeec0995d8 95d8 38360
0x7ffeec0995d0 95d0 38352
Alocação dinâmica de memória
0x7ffeec0995c8 95c8 38344
15 16
17 18
3
Ponteiros com vetores e matrizes
19 20
Conteúdo / valor
int main(){
int x=34;
ptr P int *ptr1 = &x;
Endereço do índice 0 2048
int **ptr2 = &ptr1;
ptr+1 e 2049
Aula 4 – Figura 20 – Vetores e ponteiros (Fonte: elaborado pelos autores) Aula 4 – Figura 21 – Navegando com Ponteiro duplo (Fonte: elaborado pelos autores)
21 22
22768 22784
[1,1]
Vetor
23400
[0,0]
23404
[0,1] Vetor [1,0]
23416 23420
Ponteiros com structs
22768 22772 22784 22788
(4 bytes) (4 bytes) (4 bytes) (4 bytes)
23 24
30
Valores fornecido pelo usuário Valores fornecido pelo usuário 30
10 11 20 21
Aula 4 – Figura 22 – Ponteiro de ponteiro, alocação dinâmica (Fonte: elaborado pelos autores)
23 24
4
Ponteiros com structs Ponteiros com structs
25 26
27 28
Apresentação indireta:
printf ("\nCódigo: %i", (*ponteiro).codigo);
printf ("\nTítulo: %s", ponteiro->titulo); Estudo de caso:
29
30
30
30
Voando Bem Linhas Aéreas
Vetores e matrizes:
ponteiro.cliente;
29 30
5
31
30
31
6
Aula 5
1 2
16 16
1 2
Aplicando recursividade
Aplicar o conceito de recursividade
enum e union
Implementar as estruturas enum e union
3 4
Passagem de parâmetros
por valor e referência
Passagem por valor
tipo nome_funcao (tipo parâmetro1,..., tipo
Passagem de parâmetros parâmetroN){
por valor e referência return (valor_retorno); }
5 6
16 16
5 6
ARGV e ARGC
7 8
Conversão de parâmetros
16 16
7 8
Recursividade
9 10
Recursividade
Recursividade
Fatorial de 5
5 * 4 * 3 * 2 * 1 = 120
11 12
Aplicando recursividade enum e union
13 14
16 16
13 14
Sintaxe
int main() { 123
15 16
16 16 varUni.nro1 = 123; armazenamento na memória
printf("Número: %d", varUni.nro1); S
enum nome {elemento1, ..., elementoN} varUni.tip = ‘S’; armazenamento – substituição do valor anterior
printf("Tipo: %c", varUni.tip);
return(0); }
15 16
17
16
17
Aula 6
1 2
28 28
1 2
3 4
Pré-processador
código
5 6
1
Pré-processador Pré-processador
Tarefas executadas:
Preprocessor Compiler Assembler Linker
Inclusão de arquivos de cabeçalho (header
EXE
Code files, .h)
7
28
Estamos aqui! 8
28
Expansão de macros
Libraries
Remoção de comentários
7 8
Pré-processador
9 10
11 12
2
Trabalhando com múltiplos arquivos
.c
Code
.i .s .o Exemplo de múltiplos arquivos
.h
Code EXE
13 14
28 .i .s .o 28
.c
Code
13 14
Manipulação de arquivos
15 16
17 18
3
Manipulação de arquivos Manipulação de arquivos
Funções:
Fechamento
Abertura – fopen()
MODOS DE LEITURA
fclose(arquivo)
Texto Binário Ação
"r" "rb" Leitura (read).
Renomeando
"w" "wb" Gravação (write). Sobreposição.
19
28
20
28
rename (nome_atual, novo_nome)
"a" "ab" Adição (append).
“r+” "r+b" Exclusão
“w+” "w+b" Modificador ‘+’, obriga a criação do arquivo.
“a+” "a+b" remove(nome_arquivo)
Fonte: Albano, 2022
19 20
21 22
23 24
4
Manipulação de arquivos Manipulação de arquivos
MACROS DE PESQUISA
Acesso aleatório – fseek()
Origem Descrição
Acesso de forma aleatória, movimentando o SEEK_SET Início do arquivo. Movimentando o ponteiro uma
ponteiro para qualquer posição do arquivo quantidade estipulado de bytes para baixo.
em bytes
25 26 SEEK_CUR Posição corrente (atual). A pesquisa inicia da
28 28
O uso do Sizeof() é importante para a posição atual e move o ponteiro para baixo a
definição do deslocamento no arquivo quantidade de bytes definida.
SEEK_END Final do arquivo. Move o ponteiro para cima.
fseek (ponteiro, qtd_bytes, origem)
Fonte: Albano, 2022
25 26
Agradecimento
Aplicações e exemplos
Obrigado por sua atenção e
27
28
28
28
muito sucesso para você!
27 28
29
28
29
5