Você está na página 1de 22

Aula 1

Linguagem de Programação Conversa Inicial

1 2
14 14

Prof. Ricardo Sonaglio Albano


Profª. Silvie Guedes Albano

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

Linguagem compilada. Código fonte precisa


ser convertido para um arquivo executável.
Conceitos de linguagem C

5 6 Preprocessor Compiler Assembler Linker


14 14
EXE
Code

Libraries

5 6
Tipos de dados

Tipos de dados C possui tipagem forte


Não fornece suporte ao tipo string (nativo)
7 8

Implementa o conceito de constante


14 14

7 8

Estruturas condicionais

Conhecendo os operadores relacionais e


lógicos
Estruturas condicionais
Estruturas de decisão
9 10 If/else
14 14

Switch/case
Operador ternário

9 10

Estruturas de repetição

Incremento (++) e decremento (--)


Estruturas de repetição For
While
11 12

Do/while
14 14

Break e Continue

11 12
Funções

Escopo de variáveis (local, global e lista de


Funções parâmetros)
Chamada de função com e sem argumentos
13 14
14 14
Protótipo da função
Modificador Static

13 14

15
14

15
Aula 2

Linguagem de Programação Conversa Inicial

1 2
16 16

Prof. Ricardo Sonaglio Albano


Profª. Silvie Guedes Albano

1 2

Strings, vetores e matrizes


Assuntos abordados
Objetivos
Vetores
Estudar o funcionamento de estruturas
Introdução a strings
homogêneas (vetor e matriz)
Funções para manipulação de strings
Entender como ocorre a declaração, acesso
Matrizes
3 4
16 16

e manipulação de strings, com a aplicação


de funções Aplicações e exemplos

Implementar exemplos práticos

3 4

Vetores

Arranjo lógico de valores pertencentes ao mesmo


tipo de dado e identificados por uma única
Vetores variável alocada na memória
Características
5
16
6
16 Contém um ou mais valores (mesmo tipo)
Acesso ocorre através de índice (início em 0)
Conjunto representado por uma variável

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

Conteúdo de notas 3.5 7.5 9.2 6.8

Representação - Variáveis Índice 0 1 2 3

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.

Novo conteúdo 3.5 7.5 3 6.8

7 8

Introdução a strings

A linguagem C não possui o tipo de dado


nativo string
Introdução a strings
Vetor do tipo char para manipular strings
Última posição da cadeia de caracteres é
reservada para o “\0”
9 10
16 16

Tipos de atribuição: caractere ou cadeia de


caracteres

9 10

Funções para manipulação de strings


Biblioteca string.h
strcpy()
strcat()
Funções para manipulação de strings
strcmp()

11 12
strlen()
16 16

Biblioteca ctype.h (caracter)


toupper()
tolower()

11 12
Matrizes

Estrutura homogênea e multidimensional


Matrizes
Necessita de dois ou mais índices, indicando
linha e coluna para a leitura de elementos
dentro das matrizes
13 14
16 16

Os índices iniciam em 0 (zero)

13 14

Matrizes – Identificação e acesso


int números[2][3]

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

Linguagem de Programação Conversa Inicial

1 2
11 11

Prof. Ricardo Sonaglio Albano e Profª Silvie Guedes Albano

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

4 bytes (int) 12 bytes (char) 8 bytes (double)

Alocação da struct na memória = único bloco de memória

1
Manipulação de structs Struct dentro de struct

7 8
11 11

Vetores e matrizes de structs

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

Linguagem de Programação Conversa Inicial

1 2
30 30

Prof. Ricardo Sonaglio Albano e Profª Silvie Guedes Albano

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

Toda variável possui um endereço de


Endereços e ponteiros memória alocado e por meio desse endereço
o conteúdo é armazenado, recuperado e
5 6
manipulado
30 30

Alocação de memória baseada no tipo de


dado

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

Tipo especial de variável que armazena


endereços de memória
Inicialização de ponteiros Função: “apontar” para o endereço que
armazena o valor de uma variável
9 10
30 30 Manipulação:
Operador de endereço (&)
Operador de conteúdo (asterisco)

9 10

Inicialização de ponteiros Inicialização de ponteiros


Operadores relacionais e aritméticos
Alocação de memória
int cod = 123;

Soma e subtração entre ponteiros (inteiro)


int *ptrcod = &cod;
123
int valor = *ptrcod;
Incremento e decremento (++, --) na
memória
printf("Valor de cod: %i", cod);
printf("Apontado: %i", *ptrcod);
11
30
printf("Endereço de cod: %p",&cod);
printf("End. de cod: %p\n",ptrcod);
0061FF14
12
30
Cálculos no conteúdo da variável apontada
printf("Valor: %i\n", valor);
Comparativo entre ponteiros (mesmo tipo)

Aula 4 – Figura 16 – Exemplo variável e ponteiro (Fonte: elaborado pelos autores)


*String (ponteiros com vetores e
Figura composta matrizes)

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

VARIÁVEL ptr2 ptr1 número


15 16
30 30
CONTEÚDO 38364 38360 0

ENDEREÇO 38344 38352 38360 38364

Aula 4 – Figura 19 – Navegando na memória em decimal (Fonte: elaborado pelos autores)

15 16

Alocação dinâmica de memória Alocação dinâmica de memória

Alocação estática – o bloco de memória é Funções (stdlib.h):


reservado na compilação do código. Memória malloc() alocação de memória
fixa
calloc() alocação com inicialização de bytes
17
30
Alocação dinâmica – a reserva de memória 18
30

ocorre em tempo real, no tempo de execução. realloc(): redimensionamento


Pode ser redimensionada free(): liberação de memória

17 18
3
Ponteiros com vetores e matrizes

Vetores e matrizes = ponteiros constantes


Ponteiros com vetores e matrizes
Exemplo:
char nome[10] = "Alberto";
19 20
30 30
printf ("Valor do nome é %s.", nome);
printf (“Endereço do nome é %p.", nome);

19 20

Ponteiros com vetores e matrizes Ponteiros com vetores e matrizes

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

Incremento do endereço ptr+2 d 2050


Alocação de
memória VARIÁVEL **ptr2 *ptr1 X
21 ptr+3 r 2051 22
30 30
CONTEÚDO 6422296 6422300 * 34 **
ptr+4 o 2052

Fim da String \0 2053 ENDEREÇO 6422292 6422296 6422300


(4 bytes) (4 bytes) (4 bytes)

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

Ponteiros com vetores e matrizes


Simulação: Matriz 2 x 2

Vetor de ponteiros (principal)

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

23400 23404 23416 23420


(4 bytes) (4 bytes) (4 bytes) (4 bytes)

Aula 4 – Figura 22 – Ponteiro de ponteiro, alocação dinâmica (Fonte: elaborado pelos autores)

23 24
4
Ponteiros com structs Ponteiros com structs

Manipular a estrutura de forma indireta:


struct livro {
int codigo; (*ponteiro).autor equivale a exemplar.autor

char titulo[50]; ponteiro->autor equivale a exemplar.autor


char autor[50]; //... Trecho da struct
25 26
30 }exemplar; 30

Aplicações – atribuição indireta:


int main() {
(*ponteiro).codigo = 123;
struct livro (*ponteiro) = &exemplar; }
ponteiro->codigo = 123;

25 26

Ponteiros com structs Ponteiros com structs

Captura indireta de dados:


Atribuição indireta (string): scanf ("%d", &(*ponteiro).codigo);
strcpy ((*ponteiro).titulo, "Linguagem C"); scanf ("%d", &ponteiro->codigo);
27 28
30 30
strcpy (ponteiro->titulo, "Linguagem C"); gets ((*ponteiro).titulo);
gets (ponteiro->titulo);

27 28

Ponteiros com structs Ponteiros com structs

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

Linguagem de Programação Conversa Inicial

1 2
16 16

Prof. Ricardo Sonaglio Albano


Profª. Silvie Guedes Albano

1 2

Utilizando recursos avançados em


linguagem de programação Assuntos abordados
Objetivos Passagem de parâmetros por valor e
Aprender sobre a passagem de valor e referência
referência em funções Argc e Argv
Entender sobre o funcionamento dos Recursividade
argumentos Argc e Argv
3 4
16 16

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

Passagem por referência


tipo_dado nome_funcao (tipo *ptr1, ..., tipo *ptrn){
return (valor_retorno); }

5 6
ARGV e ARGC

int main(int argc, char *argv[]) {...}


ARGV e ARGC

7 8
Conversão de parâmetros
16 16

atoi(), atol() e atof()


strtod(), strtol()

7 8

Recursividade

Direta: função recursiva em que a função


Recursividade chama e executa suas próprias instruções
Indireta: chamada recursiva. Quando a
9
16
10
16
função chama uma segunda função, e a
função chamada também realiza uma
chamada para a primeira função

9 10

Recursividade
Recursividade
Fatorial de 5
5 * 4 * 3 * 2 * 1 = 120

Exemplo: cálculo fatorial


Multiplicação (produto) dos números inteiros
até atingir o valor um
11 12 main( )
16 16
120 24 6 2

11 12
Aplicando recursividade enum e union

13 14
16 16

13 14

enum e union enum e union


union: conjunto de variáveis compartilhando a
mesma alocação de memória

enum: lista enumerada union exemploUni {


int nro1; //4 bytes
Alocação de memória

double nro2; //8 bytes

Primeira posição (início), índice 0 char tip;


}varUni;
//1 byte
8 bytes (compartilhado)

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

Linguagem de Programação Conversa Inicial

1 2
28 28

Prof. Ricardo Sonaglio Albano


Profª. Silvie Guedes Albano

1 2

Bibliotecas Externas e manipulação de


arquivos Assuntos abordados:
Objetivos: Pré-processador
Estudar sobre a função do Pré-processador Trabalhando com múltiplos arquivos
Discutir sobre o funcionamento e utilização Exemplo de múltiplos arquivos
3
28 de múltiplos arquivos 4
28
Manipulação de arquivos
Aprender sobre a manipulação de arquivos Aplicações e exemplos
Implementar exemplos práticos

3 4

Pré-processador

Preparação inicial realizada diretamente no


Pré-processador
código, antes da compilação.
Atuação do pré-processador é vinculada às
5 6

diretivas, declaradas nas primeiras linhas do


28 28

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

Aula 6 – Figura 25 – Preprocessor (Fonte: elaborado pelos autores)


Definição de constantes, entre outros
Figura composta (baseada na figura 1 – Aula 1)
Fonte: Albano, 2022

7 8

Pré-processador

Diretivas mais utilizadas:


#include: cabeçalho de um arquivo externo.
Trabalhando com múltiplos arquivos
#include <nome_arquivo.h>
9
28
#include “nome_arquivo.h” 10
28

#define: Substituição de texto (maiúsculas)


Constante simbólica e macro

9 10

Trabalhando com múltiplos arquivos Trabalhando com múltiplos arquivos

Conjunto de arquivos (.c e .h), cada qual Etapas:


responsável por pequenas funções e Criação de arquivos fontes e respectivos
vinculados entre si arquivos cabeçalhos
11
28
No processo de compilação de múltiplos 12
28
Compilação de arquivos fontes, gerando um
arquivos, gera-se apenas um único arquivo executável combinado
executável Compilação independente ou múltipla

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

Aula 6 – Figura 26 – Arquivos múltiplos (Fonte: elaborado pelos autores)


Fonte: Albano, 2022

13 14

Manipulação de arquivos

Manipulação de arquivos Processamento de dados:


Valores alocados na memória e eliminados
15
28
16
28
na conclusão da execução
Dados armazenados em arquivos no disco

15 16

Manipulação de arquivos Manipulação de arquivos

Tipos de arquivos Ponteiro de arquivo (tipo FILE)


Textos Aponta para o endereço (posição 0) do
Caracteres: putc() e getc() arquivo
17
28
String: fputs() e fgets() 18
28
Navega pelo conteúdo, percorrendo todas
Dados formatados: fprintf() e fscanf() as posições do arquivo

Binários (bytes): fwrite() e fread() FILE *ponteiro;

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

Manipulação de arquivos Manipulação de arquivos


Leitura e gravação
Leitura e gravação
Caractere a caractere (texto):
String (texto):
Gravação:
Gravação:
putc (caractere, ponteiro)
21
28
22
28
fputs (string, ponteiro)
Leitura:
Leitura:
getc (ponteiro)
fgets (string, tamanho, ponteiro)
Status EOF (End Of File)

21 22

Manipulação de arquivos Manipulação de arquivos

Leitura e gravação Leitura e gravação


Registros (binário):
Dados formatados (texto):
Gravação:
Gravação:
fwrite (vetor, tamanho, quantidade,
fprintf (ponteiro, “texto”, argumentos)
23
28
24
28
ponteiro)
Leitura:
Leitura:
fscanf (ponteiro, “operador”, fread (endereço, tamanho, ocorrência,
&argumento) ponteiro)

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

Você também pode gostar