Você está na página 1de 71

Linguagem C

Prof Leandro I. Pinto


Sumário
• Introdução
– Primeiro Programa
• Comando de escrita printf
• Comando de leitura scanf
• Tipos de variáveis
• Atribuição
• Expressões Aritméticas, Relacionais e Booleanas
• Comando ‘if’
• Repetição – While (Enquanto)
• Repetição – For (Para)
• Aninhamento
• Vetores
• Ponteiros
• Funções
• Escopo de Variáveis
• Estruturas
• Arquivos
Introdução
• C é uma linguagem de programação compilada
de propósito geral, estruturada, imperativa,
procedural
• Criada em 1972 por Dennis Ritchie na empresa
AT&T Bell Labs
• C é uma das linguagens de programação mais
populares
– existem poucas arquiteturas para as quais não
existem compiladores para C
Processo de Compilação

Código
Código Fonte
executável

Pré-Processador Assembler Código objeto Linker

Outras
Código bibliotecas
Compilador
assembly
Processo de Compilação

Pré-Processador Compilador
Processo de Compilação
• O Pré-Processador executa as diretivas de compilação
(marcadas com #)
• #include
• #define
• E outros...
• O compilador transforma o código fonte C em instruções
assembly e código objeto
• Assembly são instruções que podem ser entendidas pelo computador, porém
ainda estão em formato humanamente compreensíveis
• Código objeto já está próximo de um código de máquina, mas é apenas parte do
programa, ainda faltam bibliotecas e algumas transformações
• O linker faz a união entre todas as partes do programa
• Ele reúne todos os pedaços, que estão em código objeto, e gera um único
executável (O Programa), que agora possui código de máquina e pode ser
executado
Sistema Operacional e Executável
• O Sistema Operacional executa o programa
• O programa pode retornar um valor numérico
indicando sucesso ou falha.
– O return dentro da função ‘main’ faz esse retorno
– Em geral não utilizamos esse retorno na disciplina
– É utilizado quando um programa A chama outro B
para executar um trabalho
• O programa A precisa saber se B executou com sucesso.
• Nesse caso, A utiliza o retorno de B.
Primeiro Programa
• A estrutura mínima de um programa em C
exige ao menos a função main
– int main(){ return 0; }
– É o inicio do programa
Bibliotecas

Nome da Função

Função

Uma String

Uma chamada de
função
O bloco de comandos
• Em C, agrupamos uma sequência de comandos em blocos
– Nenhum comando pode estar fora de um bloco
– Um bloco é delimitado por ‘{‘ e ‘}’
– No exemplo a seguir, todos os comandos estão dentro do bloco
da função main
– Mais tarde, veremos que muitos comandos possuem blocos
atrelados

Início do Bloco ‘{‘

Fim do Bloco ‘{‘


TUDO DENTRO DO main
• Todos os comandos que veremos a seguir
deverão ser feitos dentro do bloco da função
main;
• Exceto quando vermos funções.

Treinaremos aqui
Comando de escrita printf
• “printf()” é a função para escrever
– Colocamos o que escrever entre aspas e dentro dos
parênteses (parâmetros da função)
– O texto entre aspas chamaremos de “string” ou
cadeia de caracteres.
printf(“Um teste”)
• Podemos usar comandos especiais:
printf(“Um teste\n”);
printf(“Outro teste\n”);
\n para pular linha
\t: tab \a: bip
Comando de escrita printf
• O printf é usado para imprimir valores de variáveis
que veremos mais tarde
– Agora vamos ver apenas o tipo int para os slides seguintes.
– Colocamos %d no lugar que queremos substituir pelo valor
Saída do
programa
Comando de escrita printf
• Esses são alguns tipos que podem ser
impressos com printf
– https://cplusplus.com/reference/cstdio/printf/

Exemplo Descrição
printf(“%d”, a) Imprimir inteiros
printf(“%f”,a) Imprimir número real
printf(“%.2f”,a) Imprime com 2 casas decimais
printf(“%s”, tex) Imprime texto (char nome[50])
printf(“%c”, a) Imprime um caracter
Comando de leitura scanf
• A função scanf é usada para ler valores do usuário:
• Utiliza os mesmos formatos do printf
Comando de leitura scanf

Padrão do que vai ser


lido

Variável para guardar


o valor
Tipos de variáveis
• Variáveis armazenam os dados do programa
– Números, resultados de cálculos, etc...
• Chamamos de tipos primitivos os seguintes
tipos: int, float, double e char
Tamanho de cada tipo de variável
Data Type Size (in bytes) Minimum Value Maximum Value
char 1 -128 127
unsigned char 1 0 255
short 2 -32,768 32,767
unsigned short 2 0 65,535

int 4 -2,147,483,648 2,147,483,647


unsigned int 4 0 4,294,967,295

long long 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

unsigned long long 8 0 18,446,744,073,709,551,615


float 4 1.17549e-38 3.40282e+38
double 8 2.22507e-308 1.79769e+308
Tipos de variáveis
• Tipos de variáveis e como imprimir cada uma.
Atribuição
• A atribuição é usada para alterar o valor das
variáveis. É feita através do sinal ‘=‘.

Atribuições
Aritmética
• Podemos fazer qualquer operação conhecida da
matemática.
Expressões Relacionais
Expressões Relacionais
• Para tomar decisões, os programas de computador
podem resolver relações através do uso de
operadores relacionais
• A expressões relacionais serão utilizadas em
comandos específicos da linguagem C
posteriormente nestes slides
Operador Descrição
> Maior que
< Menor que
>= Maior ou igual
<= Menor ou igual
== Igual
!= Diferente
Expressões Relacionais
• A resolução de um operador relacional resulta
num valor lógico Verdadeiro (1 ou V) ou Falso
(0 ou F)
• Exemplos:
–5 > 9 = F
– 8 < 15 = V
– 10 == 10 = V
– 10 != 10 = F
Expressões Relacionais
• Podem envolver expressões aritméticas
• Elas são resolvidas primeiro

2+3 < 5*2


5 < 10
V
Expressões Booleanas
Operadores/Conectivos Lógicos
• Os operadores lógicos verificam se os operandos
satisfazem uma determinada condição e geram
Verdadeiro ou Falso como resultado.
• Os operandos são sempre valores lógicos (V ou F)
– Em alguns casos V pode aparecer como 1 e F como 0

Símbolo Descrição
&& E (and)
|| OU (or)
! NÃO (not)
Tabela Verdade dos Operadores Lógicos

A B A&&B A B A||B
F F F F F F
F V F F V V
V F F V F V
V V V V V V

A !A
0 1
1 0
Exemplos
5 > 2 && 1 < 20
Exemplos
5 > 2 && 1 < 20
V && V
V

3 == 5 || !(5 > 2)
F || !V
F || F
F
Expressões Lógicas - Exercício

7 > 1 || (8 == 2 && 5 > 1)

!( !(7 > 1) || (3==3) )

(5+3 < 2 || 8 < 2*10) && 5 != 7


Comandos
Comando ‘if’
• O ‘if’ (se) verifica se uma expressão lógica é
verdadeira e executa um bloco de comandos
• Ele possui o opcional de incluir o bloco else (senão),
que só será executado se a expressão resultar em
falso Se
Bloco Verdade

Senão

Bloco Falso
Repetição – While (Enquanto)
• O “while” repete um bloco de comandos
enquanto uma expressão for verdadeira

Expressão lógica

Bloco a ser repetido


Repetição – While (Enquanto)
• Exemplo, fazendo 10 repetições

Inicia variável para


contar

Incrementa a contagem
Repetição – For (Para)
• O “for” repete um bloco enquanto uma
expressão é verdadeira. Ele também inicializa
e incrementa a variável automaticamente.

Inicialização Expressão Incremento


Repetição – For (Para)
• O “for” repete um bloco enquanto uma
expressão é verdadeira. Ele também inicializa
e incrementa a variável automaticamente.
Aninhamento
Aninhamento
• Podemos aninhar diversos comandos que possuem
blocos uns dentro de outros
• O exemplo mostra um comando if aninhado num
for
Aninhamento
• Nesse exemplo, o primeiro if verifica se é par.
• Se sim, o segundo if verifica se é múltiplo de
4.
Aninhamento
• Exemplo com repetição
Matrizes / Vetores
Vetores
• Vetores são estruturas de dados indexados que podem armazenar
uma certa quantidade de itens do mesmo tipo.
• Matrizes em C na verdade são vetores de vetores.
• Usamos da mesma forma que qualquer outra variável comum
– Mas temos a vantagem de indexar

Declaração de 10 inteiros Posições indexadas de 0 a 9

Atribuição para algumas


posições

Imprimindo a posição 0
Vetores
• Mas a real vantagem está no uso com repetições:
Note que mesmo alterando para 100,
1000 ou mais posições, o mesmo
código ainda funciona!

Atribuição de valor
aleatório a cada posição
(apenas para exemplo)

media inicia com valor 0


Soma de cada posição na
variável media

Divisão por 10
Matrizes
• Matrizes em C são vetores de vetores

Declaração Matriz 5x5


Variáveis para indexar cada
dimensão linha/coluna
Um laço para percorrer as linhas
Outro para percorrer as colunas
Ponteiros
Ponteiros

• Cada variável declarada


Declara um
está armazenada numa ponteiro para
posição de memória do um int

computador
Atribui o
• Podemos declara um tipo endereço (&) de
“a” para “p”
especial de variável
chamada “ponteiro”. Ela
pode armazenar o endereço Imprime o valor

de memória de outra
que está no local
apontado por p (*)
variável
Ponteiros

int a; int *p;


a = 10 p = &a;

Variável ponteiro
120 121 122 310 armazenando o
10 ... 120 endereço de outra
variável

Segmento de memória
p = 120
*p = 10
Ponteiros
• Podemos ainda alterar o valor de ‘a’ apenas
através do ponteiro:

*p = 12;

Podemos ler: Conteúdo de p recebe 10


Ou seja, o endereço apontado por p receberá 10
*p => Valor do endereço apontado por p
Ponteiros
• Variáveis ponteiros só podem receber
endereços de outras variáveis:

p = &a;

p recebe o endereço de a
&a significa endereço de a
Funções
Funções
• Funções são como subprogramas
– Elas podem receber entradas e retornar uma
saída
• Entradas são os parâmetros da função
• O retorno da função é a saída.
• As vezes, as funções podem alterar os
parâmetros para usar como saída, para ter
mais flexibilidade com dados de saída
Exemplo de função

Tipo do
Retorno

Retorno Parâmetro de entrada

O retorno é
atribuído para f
Função com mais de um parâmetro
Funções – Passagem de Parâmetros por Referência
• Quando passamos parâmetros para uma função
dessa forma: minhaFuncao(a), estamos passando
uma cópia do valor de ‘a’.
– Como a função lida com uma cópia, não pode alterar
o real valor de a.
• A passagem de parâmetros por referência
significa enviar o endereço de ‘a’
– Assim a função tem a possibilidade de alterar o valor
de ‘a’, o qual foi declarado no escopo de outra função
• Pode ser usado para que a função tenha mais do
que apenas uma variável de retorno
Funções – Passagem de Parâmetros por Referência
Parâmetros por
referência possuem *

Usamos *
para se
referir ao
local
apontado
pelo ponteiro

Usamos &
para pegar o
endereço da
variável, e
não o seu
valor
Passagem de Parâmetros - Vetores
• Para passar um vetor por parâmetro, somente
o endereço do mesmo é enviado

120
11

Envia o
endereço 120
Passagem de Parâmetros - Vetores
• Para enviar um vetor para outra função, basta
usar somente o nome do vetor.
– A linguagem já considera ‘v’ como um ponteiro
Outra declaração
int v[] equivalente

As vezes, precisa
enviar quantas
posições tem ‘v’
Escopo de Variáveis
• Escopo local
– Só existe localmente – Variáveis dentro de uma
função somente podem ser utilizadas dentro dela
• Escopo local
– Variáveis declaradas fora de uma função. Podem
ser acessadas de dentro de qualquer função.
Escopo de Variáveis

Variável Global Acessando


Variável Global

Acessando Variável Local


Variável
Global
Estruturas
Estruturas
• Os tipos de dados primitivos (int, float, char)
nem sempre são suficientes para nossos
programas
• Podemos definir tipos de dados mais
elaborados a partir dos primitivos
• Como exemplo, temos vetores e estruturas
• Estruturas permitem criar tipos de dados
compostos por tipos primitivos
Estruturas
Estruturas
Exemplo
Arquivos
Arquivos
• Arquivos são utilizados como forma permanente de armazenamento.
• fopen() - cria um novo arquivo ou abre um arquivo existente
• fclose() - fecha um arquivo
• getc() – lê um caractere de um arquivo
• putc() - escreve um caractere em um arquivo
• fscanf() – lê um conjunto de dados de um arquivo
• fprintf() - grava um conjunto de dados em um arquivo
• fseek() - define a posição para o ponto desejado
• ftell() - fornece a posição atual no arquivo
• rewind() - define a posição para o ponto inicial
• fwrite() – Para escrever uma sequência de bytes
• fread() – Para ler uma sequencia de bytes
• Veja mais aqui: https://www.freecodecamp.org/news/file-handling-in-c-
how-to-open-close-and-write-to-files/
• r : abre um arquivo em modo de leitura
• w : abre ou cria um arquivo de texto no modo
de gravação
• a+ : abre um arquivo em modo de leitura e
gravação com cursor.
• Acrescentando b (rb, wb, a+b) abre em modo
binário.
Estruturas e Arquivos
• Estruturas podem representar “objetos” do
mundo real. Ex. Um cadastro de produto,
pessoa, etc.
• Uma estrutura é armazenada na memória do
computador como uma sequência de bytes
• Essa sequência pode ser gravada num arquivo.
– Ou obtida a partir de um arquivo
• Usamos fread e fwrite
• Divide-se o arquivo em blocos com o mesmo tamanho do registro.
• Para acessar o 5º registro, precisamos avançar 5*<tamanho de 1
registro>
– Se o registro em 58 bytes, o 5º registro estará a partir do byte
5*58=290

CADEIRA
110.90
23
Exemplo

Você também pode gostar