Buscar

Aula_programação_em_C_2014

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 209 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 209 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 209 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

+
COMPUTAÇÃO
João Quadros
+
Roteiro
� Objetivo do curso
� Componentes de programação/Algoritmos
� Características da linguagem C
� Sistemas de tipos
� Variáveis e operadores
� Estruturas de controle
� Funções
� Entrada e Saída
� Gerencia de Memória
+
Objetivo do curso
� Aprender a programar 
� Usar em C e C++ como ferramenta
� Entender bem o funcionamento do programa na memória do 
computador
� Será que só isso basta?
+
DETALHES
Verificação de aprendizado
1P 27/03/2014
2P 22/05/20134
Bibliografia:
-ASCENCIO, A. F. G. e CAMPOS, E. A V., Fundamentos da Programação de 
Computadores - algoritmos, Pascal, C/C++ e Java. São Paulo: Pearson Education –
Prentice Hall. 
-DAMAS, L. M. D., Linguagem C, 10a edição, São Paulo: LTC, 2007. 
-SCHILDT, H., C Completo e Total, 3a edição, São Paulo: Pearson Education, Makron 
Books.
- SZWARCFITER, J. L. e MARKENSON, L., Estruturas de Dados e seus Algoritmos, 3a 
edição, São Paulo: LTC, 2010.
PF 29/05/2014
+
INTRODUÇÃO
João Quadros
+
O que caracteriza uma Linguagem de 
Programação?
� Gramática e significado bem definidos
� Implementável (executável) com eficiência ‘‘aceitável’’
� Universal: deve ser possível expressar todo problema computável
� Natural para expressar problemas (em um certo domínio de 
aplicação)
+
Smalltalk C PROLOG
1980....................Ada...........DBASE-II..................................................
1990.....................................................................Haskell..........Godel...
1950........................................................................................................
FORTRAN
1960.......................ALGOL-60...........COBOL......LISP.........................
SIMULA ALGOL-68 PL/I BASIC
1970..................Pascal............................................................................
Modula-2 ML
Miranda
Eifell C++
Delphi Java C#
Imperativo Funcional LógicoOrientado a objetos
Um breve histórico
Erlang F#Erlang F#
2000.............................PHP......................Phyton..................................
+
Modelo Computacional mais comum
Entrada Programa Saída
Estado
+
Evolução centrada em níveis crescentes 
de abstração
� Linguagens de máquina
� Endereços físicos e operation code
� Linguagens Assembly
� Mnemônicos e labels simbólicos
� Linguagens de “alto nível”
� Variáveis e atribuição (versus acesso direto à memória)
� Estruturas de dados (versus estruturas de armazenamento)
+
Evolução centrada em níveis crescentes 
de abstração
� Estruturas de controle (ao invés de jumps e gotos)
� Estrutura de blocos como forma de encapsulamento
� Generalização e parametrização (abstração de tipos de 
valores)
+
� INSTRUÇÃO:
� Cada um dos passos, cada uma das ações a tomar 
(obedecendo a seqüência lógica) para ir resolvendo o 
problema, ou para ir executando a tarefa
� Em informática, é a informação que indica a um computador 
uma operação elementar a executar
� Ex.: “somar”, “subtrair”, “comparar se é maior”, etc
� Uma só instrução não resolve problemas
� Executar um conjunto de instruções
� Executar em uma seqüência lógica
Programação
+
� EXEMPLO: 
� para “fazer omelete”
� Instruções: “quebrar ovos”, “bater ovos”, “pôr sal”, “ligar fogão”, “pôr 
óleo na frigideira”, “pôr frigideira no fogo”, “fritar ovos batidos”, etc...
� Quanto às instruções isoladas:
� Só “quebrar ovos”, ou só “pôr óleo na frigideira”, não é suficiente para 
cumprir a tarefa “fazer omelete”
� Quanto à seqüência lógica:
� Se executarmos “fritar ovos batidos” antes de “bater ovos”, ou pior, antes 
de “quebrar ovos”, não iremos cumprir a tarefa “fazer omelete”
Programação
+
ALGORITMOS
João Quadros
+
�Definição de Algoritmo
�Algoritmo é uma seqüência de instruções organizadas 
de forma lógica e estruturada, expressas em linguagem 
próprial (Português estruturado), que tem por finalidade 
resolver um problema ou descrever uma tarefa.
+
� PROGRAMA:
� Algoritmo escrito em uma linguagem de computador 
(linguagem de programação - C, Pascal, COBOL, Fortran, 
Basic, Java, etc.)
� Interpretado e executado por um computador
� Interpretação rigorosa, exata, do computador ⇒
⇒ escrita do algoritmo na linguagem de prog. tem que 
seguir regras mais rigorosas
+
� PSEUDOCÓDIGO: 
� Facilita descrever o algoritmo antes de passá-lo para 
uma linguagem de programação
� Intermediária: linguagem natural – linguagem de 
programação
� Pseudocódigo = “códigofalso”
� FLUXOGRAMA: 
� É uma forma universal de representação, pois se 
utiliza de figuras geométricas para ilustrar passos a 
serem seguidos para a resolução de problemas
Tipos de algoritmos
+
� PSEUDOCÓDIGO:
�Descrição do algoritmo, menos rigorosa que na linguagem de 
programação (código fonte)
� Fácil de entender e fácil de codificar depois
� Independente da linguagem de programação
� Simples e objetivo → Técnicas:
+
� FASES para desenvolver o algoritmo:
� Determinar o problema, definí-lo bem
� Dividir a solução nas três fases:
� Exemplo:
� Problema: calcular a média de quatro números
� Dados de entrada: os números, N1, N2, N3 e N4
� Processamento: somar os quatro números e dividir a soma por 4
� Dados de saída: a média final
ENTRADA PROCESSAMENTO SAÍDA
N1 + N2 + N3 + N4
4
ALGORITMO:
+
�Algoritmo:
�Receber o primeiro número
�Receber o segundo número
�Receber o terceiro número
�Receber o quarto número
�Somar todos os números 
�Dividir a soma por 4
�Mostrar o resultado da divisão
ALGORITMO:
+
� ALGORITMO:
� Ex. “somar dois números”:
� Escrever primeiro número no retângulo A
� Escrever segundo número no retângulo B
� Somar o número do retângulo A com o número do retângulo B e 
escrever o resultado no retângulo C
A B C
+ =
Realidade
O que você abstrai dessa realidade?
ALGORITMO e ABSTRAÇÃO
+
� Importante: abordar o máximo de detalhes em um algoritmo.
� Não esquecer: como será interpretado o que foi escrito?
ALGORITMO
+
Exemplo de algoritmo
Quando uma dona de casa prepara um bolo, segue uma receita, que nada mais 
é do que um algoritmo em que cada instrução é um passo a ser seguido 
para que o prato fique pronto com sucesso:
1. Bata 4 claras em neve
2. Adicione 2 xícaras de açúcar
3. Adicione 2 colheres de farinha de trigo, 4 gemas, uma colher de fermento 
e duas colheres de chocolate
4. Bata por 3 minutos
5. Unte uma assadeira com margarina e farinha de trigo
6. Coloque o bolo para assar por 20minutos
+
Exemplo de algoritmo
Um motorista que necessita efetuar a troca de um pneu furado segue uma rotina para 
realizar essa tarefa:
1. Verifica qual pneu está furado
2. Posiciona o macaco para levantar o carro
3. Pega o estepe
4. Solta os parafusos
5. Substitui o pneu furado
6. Recoloca os parafusos
7. Desce o carro
8. Guarda o macaco e o pneu furado
+
Exemplo de algoritmo
+
Exemplo de algoritmo
+
Exemplo de algoritmo
+ Problemas – Divisão de Água
� Inicialmente o recipiente de 8 litros está cheio e os demais vazios;
� Os recipientes não possuem escala de medição, sabe-se apenas o 
volume total de cada;
� Cada transferência(entre os recipientes) deve ser feita no volume 
total do recipiente receptor;
� Ao final das transferências o recipiente com capacidade para 8 
litros deve possuir apenas 4 litros de água e o recipiente de 5 litros 
deve possuir apenas 4 litros de água.
+
� Solução:
Problemas – Divisão de Água
+ Problemas – Transporte Chinês
� Transportar todos os elementos de um lado para outro do rio, sendo 
que:
� Somente o pai,a mãe e o policial sabem pilotar 
o barco;
� A mãe não pode ficar sozinha com os filhos;
� O pai não pode ficar sozinho com as filhas;
� O prisioneiro não pode ficar sozinho com 
nenhum integrante da família;
� O barco só pode transportar duas pessoas por 
vez;
� Você pode ir e vir com as pessoas quantas 
vezes precisar.
+ Problemas – Transporte Chinês
� Solução
+ Exercícios
A. Escreva a seqüência de passos para que uma pessoa abra um 
arquivo armazenado em um pen-drive utilizando o Word do 
Windows
B. Escreva os passos necessários para uma pessoa efetuar um saque 
em um caixa eletrônico
+
Exercícios
1) Identifique os dados de entrada, processamento e saída no algoritmo abaixo
· Receba código da peça
· Receba valor da peça
· Receba Quantidade de peças
· Calcule o valor total da peça (Quantidade * Valor da peça)
· Mostre o código da peça e seu valor total
2) Faça um algoritmo para “Calcular o estoque médio de uma peça”, sendo que
ESTOQUEMÉDIO = (QUANTIDADE MÍNIMA + QUANTIDADE MÁXIMA) /2
+
TESTE DE MESA
� Todo algoritmo deve ser testado
� Usar dados e resultados previamente calculados, seguir 
precisamente as instruções do algoritmo e verificar se o 
procedimento está correto ou não
� Exemplo: Fazer teste de mesa para o algoritmo da média
+
CONCEITOS 
GERAIS DE 
PROGRAMAÇÃO
Programação de Sistema 
Computacional
� Exemplo 2 – Exibir se o aluno está aprovado ou reprovado
ProcessamentoEntrada Saída
Dispositivo
de Entrada
Dispositivo
de Saída
Memória
UCP
Ana, 5, 3 Se (5+3)/2>=7
aprovado
Senão
reprovado
Ana, reprovado
Programação de Sistema Computacional
�Tipos de Linguagens de Programação
� 1 - Totalmente codificadas em binário (0´s e 1´s)
� 2 - Usa instruções simbólicas para representar os 0´s e 1´s
� 3 - Voltadas para facilitar o raciocínio humano
 Linguagem 
Assembly 
( Mnem ô nica ) 
LOAD R1, val1 
 
LOAD R2, val2 
 
ADD R1, R2 
 
STORE R1, val2 
 
Linguagem 
de 
M á quina 
0010 0001 1110
 
0010 0010 1111
 
0001 0001 0010
 
0011 0001 1111
 
Linguagem 
de 
Alto N í vel 
 val2 = val1+val2
 
Baixo Nível Alto Nível
(1) (2) (3)
Instruções Delimitadoras
� Servem para especificar o início e o fim do algoritmo.
início
...
fim
+
Variável
�Representa uma posição na memória, onde 
pode ser armazenado um dado
�Possui um nome e um valor
�Durante a execução do algoritmo, pode ter seu 
valor alterado (seu valor pode variar)
�Mudanças no valor das variáveis:
� Por entrada de dados (“Ler N1”)
� Por atribuição (“MEDIA = <um certo valor>”)
+
� Exemplo SEQÜENCIAL:
“Calcular a média de quatro números”
�PSEUDOCÓDIGO:
� Ler N1
� Ler N2
� Ler N3
� Ler N4
�MEDIA = (N1+N2+N3+N4) / 4
�Mostrar MEDIA
VARIÁVEIS:
mais clareza no pseudocódigo
VARIÁVEL
Declaração de Variáveis
� Exemplos:
declare a,b,c: real;
declare nome: string;
declare sexo: caracter;
declare pratica_esporte: lógico;
+
Atribuição
� Atribui o valor da direita à variável da esquerda
� O valor pode ser uma constante, uma variável ou uma expressão
�MEDIA = (N1+N2+N3+N4) / 4
� (Lê-se media recebe N1+...)
� Neste caso, estamos atribuindo o resultado da fórmula à variável 
média, ou seja, a variável média está recebendo como valor o 
resultado da fórmula
� Outros Exemplos:
� a = 3;
� a = x;
+
Operadores Aritméticos
Exemplos:
MEDIA = (N1+N2+N3+N4) / 4
+
Exercícios
1) Tendo como dados de entrada a altura de uma 
pessoa, construa um algoritmo que calcule seu peso 
ideal, utilizando a seguinte fórmula:
� peso ideal = (72.7*h) – 58
2) Faca um algoritmo que receba como entrada uma 
determinada temperatura em graus Celsius e mostre 
a temperatura em fahrenheit
� OBS: Fahrenheit = (9/5)*(Celsius) + 32
3) Tendo como entrada o total vendido por um 
funcionário no mês de abril, faça um algoritmo que 
mostres a sua comissão e salário bruto neste mês, 
sabendo que o seu salário base é R$1.200,00 e sua 
comissão é de 10% sobre o total vendido.
+
� Operadores relacionais são muito usados quando temos que tomar 
decisões nos algoritmos. Com eles fazemos testes, comparações, que 
resultam em valores lógicos (verdadeiro ou falso):
Exemplo: 
tendo duas variáveis, A = 5 e B = 3:
+
Exercícios
6) Tendo as variáveis SALARIO, IR e SALLIQ, e considerando os valores abaixo. 
Informe se as expressões são verdadeiras ou falsas.
7) Sabendo que A=3, B=7 e C=4, informe se as expressões abaixo são 
verdadeiras ou falsas.
a) (A+C) > B ( )
b) B >= (A + 2) ( )
c) C = (B –A) ( )
d) (B + A) <= C ( )
e) (C+A) > B ( )
+
� Operadores lógicos combinam resultados lógicos, gerando novos valores 
lógicos (verdadeiro ou falso). A “tabela-verdade” abaixo mostra todos os 
valores possíveis de se obter com oper. lógicos:
T = Verdad.
F = Falso
AND = E
OR = OU
NOT = NÃO
+
� Combinando operadores relacionais e operadores lógicos criamos 
operações lógicas, que produzirão resultados lógicos (verdadeiro ou 
falso). Por exemplo, se A = 5, B = 8 e C = 1:
� (A = B) E (B > C) é falso (f e v)
� (A <> B) OU (B < C) é verdadeiro (v ou f)
� NÃO (A > B) é verdadeiro (não f)
� (A < B) E (B > C) é verdadeiro (v e v)
� (A >= B) OU (B = C) é falso (f ou f)
� NÃO (A <= B) é falso (não v)
� São usadas em decisões nos algoritmos...
+ Exercícios
8. Considere a seguinte atribuição de valores para as variáveis: A=3, B=4, 
C=8. Avalie as expressões a seguir indicando o resultado final: 
verdadeiro ou falso.
1) A > 3 E C = 8 ( )
2) A <> 2 OU B <= 5 ( )
3) A = 3 OU B >= 2 E C = 8 ( )
4) A = 3 E NÃO B <= 4 E C = 8 ( )
5) A <> 8 OU B = 4 E C > 2 ( )
6) B > A E C <> A ( )
7) A > B OU B < 5 ( )
8) A <> B E B = C ( )
9) C > 2 OU A < B ( )
10) A > B OU B > A E C <> B ( )
+
Exercícios
9) Sabendo que A=5, B=4 e C=3 e D=6, informe se as expressões 
abaixo são verdadeiras ou falsas.
a) (A > C) AND (C <= D) ( )
b) (A+B) > 10 OR (A+B) = (C+D) ( )
c) (A>=C) AND (D >= C) ( )
+
Exercícios
10) Sabe-se que o uso incorreto da precedência de operadores 
ocasiona erros. Pensando nisso, determine o resultado das 
expressões a seguir (valores: A= 8, B = 5, C = -4, D = 2)
a) Delta = B2 – 4 * A * C
b) J = “Hoje” <> “HOJE”
c) Media = (A + B + C + D) / 4
d) Media = A + B + C + D / 4
e) Resultado = A + B – 10 * C
f) Y = A > 8 E B + C > D
g) Y = A > 3 * 2 OU B + C <> D
Estruturas de Controle
� Baseado na lógica estruturada, Bohn e Jacopini provaram que 
apenas três estruturas são suficientes para explicar a solução 
de qualquer problema, inclusive tornando-os estruturados e 
mais legíveis.
Estruturas de Controle
� São elas:
�Estrutura Seqüencial: os comandos ou 
instruções vão sendo executados na ordem em 
que aparecem no algoritmo.
Estruturas de Controle
� Estrutura de Repetição: comandos são executados repetidas vezes 
até que uma condição de parada seja satisfeita
Estruturas de Controle
� Estrutura de Seleção: Conforme o resultado de uma expressão 
lógica, determinados comandos são executados e outros não, 
caracterizando assim uma seleção de comandos
TRUE
FALSE
Instruções de Seleção
� Tipo simples:
se <sentença> então
<comandos>;
fim-se
OBS.:
<comandos> serão executados apenas se 
<sentença> resultar em TRUE. 
Instruções de Seleção
� Exemplo:
se A>0 então
B =A + 1;
A =0; 
fim-se
Instruções de Seleção
� Tipo composto:
se <sentença> então
<comandos1>;
senão
<comandos2>;
fim-se
OBS.:
<comandos1> serão executados apenas se 
<sentença> resultar em TRUE. Em caso contrário, 
<comandos2> serão executados.
Instruções de Seleção� Exemplo:
se A>B então
B = A + 1;
senão
B = 0;
fim-se
Instruções de Repetição
� Enquanto / Fim-Enquanto
enquanto <sentença> faça
<comandos>;
fim-enquanto;
OBS.:
<comandos> serão executados enquanto 
<sentença> resultar em TRUE. 
Instruções de Repetição
� Exemplo:
A = 10; 
enquanto A>0 faça
leia(B);
escreva(B);
A = A - 1;
fim-enquanto;
Instruções de Repetição
� Repita / Até
repita
<comandos>;
até <sentença>;
OBS.:
<comandos> serão executados até que 
<sentença> resulte em TRUE. 
Instruções de Repetição
� Exemplo:
A=10;
repita
leia(B);
escreva(B);
A =A - 1;
até A<1;
Instruções de Repetição
� Para / Até / Fim-Para
para <variável>=<inicial> até <final> faça
<comandos>;
fim-para;
OBS.:
<variável> - contador do tipo inteiro
<inicial> - valor inicial da variável 
<final> - valor final da variável
Instruções de Repetição
� Exemplo:
{ Comandos para escrever 10 vezes uma 
frase na tela do computador }
para i=1 até 10 faça
escreva(“Último tipo de repetição”);
fim-para;
Estrutura de um Algoritmo
� Um algoritmo em Portugol tem a seguinte estrutura:
início
<declaração de variáveis>
<inicialização de variáveis>
<corpo lógico do algoritmo>
fim
Lógica de Programação & Algoritmo
�Estruturas básicas de um algoritmo: 
�Seqüência – Início/Fim
�Define uma estrutura onde as instruções serão 
executadas na ordem que aparecem. 
�Seleção – Se-Então/Senão
�Define uma estrutura condicional que dada a sua 
avaliação (V ou F) determina qual “caminho” do 
algoritmo será executado
�Repetição – Repita, Enquanto ou Para
�Define uma estrutura de iteração condicional (V ou F) 
ou contada (pré-definida) de instruções
Lógica de Programação & Algoritmo
� Algoritmo para ligar de um telefone público -
Seqüência
Início
1. Tirar o fone do gancho;
2. Ouvir o sinal de linha;
3. Introduzir o cartão;
4. Teclar o número desejado;
5. Conversar;
6. Desligar;
7. Retirar o cartão;
Fim.
Este algoritmo só usa uma
estrutura de seqüência 
“Início/Fim”
Lógica de Programação & Algoritmo
� Algoritmo para ligar de um telefone público – Seleção
E se o telefone público estiver com defeito?
Início
1. Tirar o fone do gancho;
2. Se ouvir o sinal de linha, então
1. Introduzir o cartão;
2. Teclar o número desejado;
3. Conversar;
4. Desligar;
5. Retirar o cartão;
3. Senão
1. ir para o próximo telefone;
Fim.
Este algoritmo usa uma 
estrutura de decisão 
“Se-então/Senão”
Lógica de Programação & Algoritmo
� Algoritmo para ligar de um telefone público – Repetição
E se o próximo telefone público também estiver com defeito?
Início
1. Repita
1. Tirar o fone do gancho;
2. Se ouvir o sinal de linha então
1. Introduzir o cartão;
2. Teclar o número desejado;
3. Conversar;
4. Desligar;
5. Retirar o cartão;
3. Senão 
1. ir para o próximo telefone;
2. Até ouvir o sinal de linha 
Fim.
Este algoritmo usa uma 
estrutura de repetição 
“Repita/Até”
Lógica de Programação & Algoritmo
� Algoritmo para ligar de um telefone público – Repetição
� E se o telefone chamado estiver com defeito?
� E se o telefone chamado estiver ocupado?
� E se acabarem os créditos do cartão telefônico?
� E se ...?
Um algoritmo 
SEMPRE sofre melhorias sucessivas.
(Técnica de refinamentos sucessivos)
Fluxogramas - Exemplo 1
�Achar o valor da expressão: D = B2 - 4AC.
Início
Ler A, B, C D = B^2 - 4*A*C
1
1
Escrever D
Fim
Fluxogramas: 
Exemplo 2
�Achar o maior de 
dois números A e B.
Início
Ler A, B
A=B A<BA>B
Comparar
A com B
Escrever:
“A e B iguais”
Fim
Escrever:
“A é maior”
Escrever:
“B é maior”
Português Estruturado - Exemplo 1
�Achar o valor da expressão: D = B2 - 4AC.
Ler os valores de A, B e C
Calcular a expressão D = B2 - 4AC
Mostrar o resultado desse cálculo
Português Estruturado - Exemplo 2
�Achar o maior de dois números A e B.
Ler dois números A e B
Comparar A com B
Mostrar o resultado dessa comparação
Pseudocódigo - Exemplo 1
�Achar o valor da expressão: D = B2 - 4AC.
Início
Declare A,B,C,D; { Declaração de variáveis }
Leia(A,B,C);
D B^2 - 4*A*C; { Operação de atribuição }
Escreva(D);
Fim.
Pseudocódigo - Exemplo 2
�Achar o maior de dois números A e B.
Início
Declare A,B; { Declaração de variáveis }
Leia(A,B);
Se A = B Então Escreva(“A e B iguais”);
Senão Se A>B Então Escreva(“A é maior”);
Senão Escreva(“B é maior”);
Fim-Se
Fim-Se
Fim.
Atividade 3
� Reescreva corretamente o algoritmo abaixo
� Algoritmo aprovação
Início
1. Obter as 2 notas do aluno;
2. Repita
1. Se Média do aluno >=7, então
1. Repita
1. Informar que o aluno está REPROVADO;
2. Até Média < 7
2. Senão Média >= 7
1. Informar que o aluno está APROVADO;
3. Até último aluno;
Fim.
RESPOSTA - Atividade 3
� Algoritmo aprovação
Início
1. Repita
1. Obter as 2 notas do aluno;
2. Se Média do aluno >=7, então
1. Informar que o aluno está APROVADO
3. Senão
1. Informar que o aluno está REPROVADO;
2. Até último aluno
Fim
UM EXERCÍCIO
� Construa um algoritmo para escolher as duas maiores laranjas 
de um balaio
1) leia um número inteiro e mostre uma mensagem indicando se 
este número é par ou ímpar, e se é positivo ou negativo
2) leia quatro números inteiros e encontre a média aritmética 
simples entre as que correspondem a números pares. Lembre-
se que não pode haver divisão por zero
3) leia 4 notas, calcule a média dessas e escreva: Reprovado
(média < 5), Recuperação (média >= 5 e < 7) e Aprovado
(média >= 7)
Outros exercícios...
4) leia a idade de um nadador e exiba sua categoria segundo as
regras: A(5 até 7); B(8 até 10); C(11 até 13); D(14 até 18) e E(
Idade > 18)
5) leia dois números inteiros, uma operação matemática
(+,-,*,/) e faça o calculo destes números segundo a operação
lida
6) leia o nome e a idade de três pessoas e informe o nome da
pessoa mais velha e o nome da pessoa mais nova. Considere
que não existem idades iguais
mais exercícios...
7) leia os números inteiros A e B e informe se A é múltiplo, divisor
ou nada de B
8) leia três números e mostre-os em ordem crescente
9) leia uma milhar e informe se esse número é palíndromo.
Exemplos de números palíndromos: 9889, 7337 e 2002
10) leia um número inteiro entre 20 e 59 e mostre seu extenso.
Exiba um erro se o número estiver fora do intervalo
ainda mais exercícios...
+
CONCEITOS 
GERAIS C/C++
+
Características
� Paradigma Procedural (C) e OO (C++)
� Flexível
� Alta performance
� Poucas restrições
� Ótima iteração com:
� Sistemas Operacionais
� Dispositivos de Hardware
� Outras Linguagens
+
Palavras Reservadas
auto, break, case, char, const, continue, 
default, do, double, else, enum, extern, float, 
for, goto, if, int, long, register, return, 
short, signed, sizeof, static, struct, switch, 
typedef, union, unsigned, void, volatile, while
Obs.: C/C++ é case sensitive
+
Tipos
� São as formas que utilizamos para representar dados
� C possui 5 tipos básicos:
� char, int, float, double e void
� E 4 modificadores básicos:
� signed, unsigned, long e short
� Os 4 podem ser aplicados ao int
� long pode ser aplicado ao double
� signed e unsigned aplicados ao char
+
Tipos
� Modificadores de acesso:
� const: a variável não pode ter o seu valor alterado
� volatile: a variável pode ter o seu valor modificado fora do 
controle do programa
� Classes de Armazenamento:
� auto: indica que uma variável é local (opcional), também é usada 
na declaração de funções aninhadas
� extern: variável declarada em outro arquivo
� register: armazena, se possível, a variável em um registrador na 
própriaCPU.
+
Tipos
� Classes de Armazenamento (Cont.):
� static: não permite que um módulo externo possa alterar nem ver 
uma variável global, também é usado para manter o valor de uma 
variável local em uma função de uma chamada para outra.
+
Tipos
� O tamanho do inteiro depende da arquitetura do sistema:
� Sistemas de 32 bits � inteiro de 32 bits
� Sistemas de 64 bits � inteiro de 64 bits
� Restrições:
� short int e int devem ter pelo menos 16 bits
� long int com no mínimo 32 bits
� short int <= int <= long int
+
Variáveis
� Declaração:
� tipo nome = inicialização;
� Escopo da variáveis:
� globais: podem ser usadas em qualquer lugar do programa
� locais: podem ser usadas apenas na função onde foi declarada
+
Declarações
� Declaram as variáveis e seus tipos
� Os nomes das variáveis devem conter apenas letras, dígitos e o símbolo _
� Os principais tipos são: int, float, double e char
� Exemplos
int n;
int quantidade_valores;
float x, y, somaValores;
char sexo;
char nome[40];
C diferencia letras maiúsculas de minúsculas!
int n, N;
n é diferente de N!
+
Variáveis
� Restrições
� O nome das variáveis deve começar com uma letra ou um 
sublinhado “_”
� Os demais caracteres podem ser letras, números ou sublinhado
� O nome da variável não pode ser igual a uma palavra reservada e 
aos nomes das funções
� Tamanho máximo para o nome de uma variável:
� 32 caracteres
+
Algoritmo
Real: n1, n2, n3, media
Na Linguagem C...
#include <stdio.h>
#include <stdlib.h>
main()
{
double n1, n2, n3, media;
system("PAUSE");
}
+
Exemplo
int a, b = 10; // Variáveis globais
void f(char c) {
double d = 10.0; // Variável local
int i = a; // Variável local
// ...
}
int main() {
int i = b; // Variável local ao main
return 0;
}
+
Constantes
� São valores que são mantidos fixos pelo compilador
� Também podem ser:
� Octais - 0NUMERO_OCTAL
� Hexadecimais - 0xNUMERO_HEXADECIMAL
� Exemplos:
� ‘\n’ (caractere), “C++” (string), 10 (inteiro), 15.0 (float), 0xEF
(239 em decimal), 03212 (1674 em decimal)
+
Constantes de Barra Invertida
Código Significado
\b Retrocesso (backspace)
\f Alimentação de Formulário (form feed)
\t Tabulação Horizontal (tab)
\n Nova Linha
\” Aspas
\’ Apostrofo
\0 Nulo
\\ Barra Invertida
\a Sinal Sonoro (Beep)
\N Constante Octal (N é o valor da constante)
\xN Constante Hexadecimal (N é o valor da constante)
+
Comando de atribuição
� Atribui o valor da direita à variável da esquerda
� O valor pode ser:
� uma constante,
� uma variável ou 
� uma expressão
� Exemplos
x = 4; --> lemos x recebe 4
y = x + 2;
y = y + 4;
valor = 2.5;
sexo = 'F'
+
Operadores de Atribuição
Equivale a x = x % yx %= y%=
Equivale a x = x / yx /= y /=
Equivale a x = x * yx *= y *=
Equivale a x = x – yx -= y-=
Equivale a x = x + yx += y +=
Atribui o valor de y a xx = y=
ComentárioExemploOperador
+
Operadores Aritméticos
Operador Ação
+ Soma
-
Subtração ou troca de sinal
* Multiplicação
/ Divisão
% Resto da divisão inteira
++ Incremento
--
Decremento
+
Operadores Matemáticos
Decrementa em 1 o valor de xx----
Incrementa em 1 o valor de xx++++
Resto da divisão de x por yx % y %
Divide x por yx / y /
Multiplica x e yx * y*
Subtrai y de xx – y -
Soma x e yx + y+
ComentárioExemploOperador
+
Exercícios
1) Qual o valor das variáveis x, y e z após o seguinte trecho de 
código:
int x, y, z;
x = y = 10;
z = ++x;
x = -x;
y++;
x = x + y - (z--);
2) Utilize o DEVCPP para compilar e rodar código do exercício 
anterior.
+
Operadores Relacionais
Operador Relação
> Maior que
>= Maior que ou igual a
< Menor que
<= Menor que ou igual a
== Igual a
!= Diferente de
+
Operadores Relacionais
O conteúdo de x é maior que o de yx > y>
O conteúdo de x é menor que o de yx < y <
O conteúdo de x é maior ou igual ao de yx >= y >=
O conteúdo de x é menor ou igual ao de yx <= y<=
O conteúdo de x é diferente do de yx != y !=
O conteúdo de x é igual ao de yx == y==
ComentárioExemploOperador
As expressões relacionais em C retornam :
• 1 se verdadeiro e;
• 0 se falso.
+
Operadores Lógicos
Operador Função
&& AND
|| OR
! NOT
+
Operadores Lógicos
� && (E lógico): retorna verdadeiro se ambos os operandos são verdadeiros e falso 
nos demais casos.
Exemplo: if( a>2 && b<3).
� || (OU lógico): retorna verdadeiro se um ou ambos os operandos são verdadeiros 
e falso se ambos são falsos.
Exemplo: if( a>1 || b<2).
� ! (NÃO lógico): usada com apenas um operando. Retorna verdadeiro se o 
operando é falso e vice-versa.
Exemplo: if( !var ).
+
Operadores Lógicos
F ou F → FF e F → F
F ou V → VF e V → F
Não V → FV ou F → VV e F → F
Não V → FV ou V → VV e V → V
Tabela NÃOTabela OUTabela E
+
Operadores Lógicos Bit a Bit
Operador Ação
& AND Lógico
| OR Lógico
^ XOR (OR exclusivo)
~ NOT
>> Shift Rigth
<< Shift Left
+
Exercícios
3) Qual o valor das variáveis a, b, c, d, e, f após a execução do 
seguinte trecho de código:
int x = 2, y = 4;
int a, b, c, d, e, f;
a = x & y;
b = x | y;
c = x ^ y;
d = ~x;
e = x << 3;
f = x >> 1;
+
Tabela de Precedências
, =
+=
-=
*=
/=
? || && | ^ & ==
!=
<<
=
>>
=
<<
>>
+
-
*
/
%
!
~
++
--
.
-
*
& 
( )
[ ]
->
Precedência +-
+
Casts
� Sintaxe:
� (tipo) expressão
� Exemplo:
long a = 10, b = 4;
// f = 2.5
double f = (double) a/b;
+
Controladores de Fluxo
� C possui 7 controladores de fluxo básicos:
� if
� ?:
� switch
� for
� while
� do-while
� goto
+
if
if (condição) { declaração }
if (condição) { declaração1 }
else { declaração2 }
if (condição1) { declaração1 } 
else if (condição2) { declaração2 }
else { declaração3 }
+
Exemplo
int a = 2;
if (2) {
a = 4;
} else if (0) {
a = 0;
}
if (a) {
a = -a;
}
+
?:
� condição ? expressão1 : exepressão2;
� Equivalente a:
if (condição) { expressão1 } 
else { expressão2 }
� O operador ? é restrito, mas pode simplificar expressões grandes
� Uma expressão é diferente de uma declaração
+
Exemplo
int a = 9, b = -4, c;
b = (a > b) ? a : b;
c = (a > b) ? b : a;
+
switch
switch (variável) {
case (constante1):
declaração1;
break; // O break é opcional
case (constanteN):
declaraçãoN;
break; // O break é opcional
default:
declaraçãoDefault;
}
+
Exemplo
switch (a) {
case (1):
// ...
break;
case (2):
// ...
break;
default:
// ...
}
+
for
for (comando; condição; comando) {
declaração;
}
� Exemplo:
// o i não pode ser declarado no for
int i; 
int a = 0;
for (i = 0; i < 100; i++) {
a = a + 14;
}
+
while
while (condição) {
declaração;
}
�Executa a declaração zero ou mais vezes
�Exemplo:
int i = 0;
int a = 0;
while (i < 100) {
a = a + 14;
i++;
}
+
do-while
do {
declaração;
} while (condição);
� Executa a declaração pelo menos uma vez, já que a verificação da 
condição é feita apenas no final de cada iteração do loop
+
Exemplo
int i = 0; 
int a = 0;
do {
a = a + 14;
i++;
} while (i < 0);
+
break, continue e goto
� O break é usado para interromper o switch ou um loop
� Exemplo:
while (1) {
a = a + 14;
i++;
if (i > 99) {
break;
}
}
+
continue
� O continue é usado para fazer um loop pular para a próxima 
iteração
� Exemplo:
while (1) {
i++;
if (i % 2 == 0) {
continue;
}
a = a + 14;
}
+
goto
� O goto pode ser usado para dar um salto incondicional no fluxo do 
programa
� Exemplo:int a = 0;
inicio:
a++;
if (a < 10) {
goto inicio;
}
+
Funções
� Sintaxe:
tipoDeRetorno nomeDaFunção(declaraçãoDosParâmetros) 
{ 
corpoDaFunção;
}
declaraçãoDosParâmetros = tipo1 nome1,..., tipoN nomeN
� Funções que não possuem retorno são void
�O retorno de uma função é feito através do comando 
return
+
Exemplos
int dobro(int a) {
return 2 * a;
}
int main(int a) {
int c;
c = 8;
c = dobro(c);
return 0;
}
+
Exercícios
4) Escreva um programa que lê um inteiro do teclado responde ‘sim’ se ele 
é um múltiplo de 3 e ‘não’ caso contrário
Tome como base a seguinte estrutura de programa:
#include <stdio.h>
int main() {
return 0;
}
5) Implemente um programa que lê 10 inteiros do teclado ou para quando 
dois inteiros consecutivos sejam digitados. Após a leitura o programa 
deverá imprimir o maior, o menor, a média e a soma dos números 
digitados.
6) Modifique a sua resposta para o exercício anterior trocando os loops 
(for, while, do-while) para goto
+ Biblioteca de C ANSI
� Podemos utilizar a biblioteca através da diretiva #include
#include <stdio.h>
#include <stdlib.h>
#inlcude <string.h>
...
+ Principais Headers
DescriçãoHeader
Limites para pontos flutuantesfloat.h
Macros com os limites para tipos inteiroslimits.h
Criação de funções como scanf e printfstdargs.h
Manipulação de tempo/datastime.h
Funções matemáticasmath.h
Funções para manipulação de stringsstring.h
Funções diversasstdlib.h
Funções de E/S padrãostdio.h
+ stdio.h
� Contém diversas funções para o tratamento de entrada e saída
� Contém as principais funções que utilizamos:
� scanf(),printf(), fopen(), fclose(), ...
+
Entrada e Saída de Dados
� A função scanf é utilizada para a leitura dados do dispositivo de 
entrada padrão
� A função printf é utilizada para a escrita de dados do dispositivo de 
saída padrão
+
Tabela de Formato para E/S
Tipo Formato para escrita e leitura
[signed | unsigned] char %c
[signed] int %i ou %d
unsigned int %u
[signed] short int %hi
unsigned short int %hu
[signed] long int %li
unsigned long int %lu
float %f
double %lf
long double %Lf
+
Entrada de Dados
� Função scanf 
scanf ("formatos", &var1, &var2,...)
Exemplos:
int i, j;
float x;
char c;
scanf("%d", &i);
scanf("%d %f", &j, &x);
scanf("%c", &c);
scanf("%s", nome);
%d inteiro
%f float
%lf double
%c char
%s palavra
+ Entrada de Dados (Exemplo 2)
Algoritmo
Real: n1, n2, n3, media
Na Linguagem C...
#include <stdio.h>
#include <stdlib.h>
main()
{
double n1, n2, n3, media;
scanf ("%lf",&n1);
scanf ("%lf",&n2);
scanf ("%lf",&n3);
scanf ("%lf %lf %lf",&n1, &n2, &n3);
system("PAUSE");
}
ler n1
ler n2
ler n3
ler n1, n2, n3
+ Entrada de Dados (exemplo 3)
Real: n1, n2, n3, media
Na Linguagem C...
#include <stdio.h>
#include <stdlib.h>
main()
{
double n1, n2, n3, media;
scanf ("%lf %lf %lf",&n1, &n2, &n3);
media=(n1+n2+n3)/3;
system("PAUSE");
}
ler n1, n2, n3
media=(n1+n2+n3)/3
Algoritmo
+
Saída de Dados
� Função printf
printf ("formatos", var1, var2,...)
Exemplos:
int i, j;
float x;
char c;
printf("%d", i);
printf("%d, %f", j, x);
printf("%c", c);
printf("%s", nome);
%d inteiro
%f float
%lf double
%c char
%s palavra
+
Saída de Dados (Exemplo 4)
#include <stdio.h>
#include <stdlib.h>
main()
{
int i, j;
float x;
char c;
char nome [10];
i = 1; j = 2; x = 3; 
printf("%d", i);
printf("%d, %f", j, x);
system("PAUSE");
}
+
Saída de Dados (Exemplo 5)
#include <stdio.h>
#include <stdlib.h>
main()
{ // definicao de variaveis
double n1, n2, n3, media;
// entrada de dados
scanf ("%lf %lf %lf",&n1, &n2, &n3);
// operacao
media=(n1+n2+n3)/3; 
// saida de dados
printf("%f", n1);
printf("%f", n2);
printf("%f", n3);
printf("%f", media);
system("PAUSE");}
+ Saída de Dados (Exemplo 6)#include <stdio.h>
#include <stdlib.h>
main()
{ // definicao de variaveis
int i, j;
float x;
char c;
char nome[30];
//entrada de dados
scanf("%d", &i);
scanf("%d %f", &j, &x);
scanf("%c", &c);
scanf("%s", nome);
// exibicao de dados 
printf("%d", i); printf("%d, %f", j, x); printf("%c", c); printf("%s", nome);
system("PAUSE"); }
+
Exemplo 7
#include <stdio.h>
#include <stdlib.h>
main()
{ //declaracao de variaveis
int n;
int quantidade_valores;
float x, y, somaValores;
char sexo;
char nome[40];
// operacao
somaValores =1+1;
//saida de dados
printf("somaValores=%f", somaValores); 
system("PAUSE")}
+
Exemplo 8
#include <stdio.h>
#include <stdlib.h>
main()
{ // definicao de vairiaveis
int n;
int quantidade_valores;
float x, y, somaValores;
char sexo;
char nome[40];
x = 1; y = 2;
//atribuicao
somaValores = x + y;
// mostra mensagem de texto na tela
printf("alo mundo"); 
// mostra valor na tela
printf("somaValores=%f", somaValores); system("PAUSE"); }
+
Exemplos
int a;
scanf(“%d”, &a); // lê a
printf(“%d”, a); // escreve a
char ch;
scanf(“%c”, &ch); // lê c
printf(“%c”, ch); // escreve c
float num;
scanf(“%f”, &num); // lê f
printf(“%f”, num); // escreve f
Obs.: Cuidado para 
não esquecer do & no 
uso da função scanf
+
Entrada e Saída
Exemplo 10
#include <stdio.h>
#include <stdlib.h>
main()
{
double n1, n2, n3, media;
printf("Digite 3 notas: ");
scanf ("%lf %lf %lf",&n1, &n2, &n3);
media=(n1+n2+n3)/3;
printf ("Media: %.2lf",media);
system("PAUSE");}
Exemplo 9
#include <stdio.h>
#include <stdlib.h>
main()
{
double n1, n2, n3, media;
scanf ("%lf %lf %lf",&n1, &n2, &n3);
media=(n1+n2+n3)/3;
printf ("%lf",media);
system("PAUSE");}
+
Exemplo 11
1) Tendo como dados de entrada a altura e o sexo de uma pessoa, 
construa um programa que calcule seu peso ideal, utilizando a 
seguinte fórmula: peso ideal = (72.7*h) – 58
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main()
{
float altura, pesoIdeal;
char sexo;
printf ("\nDigite sua altura em metros: ");
scanf ("%f",&altura);
printf ("\nDigite seu sexo (F/M): ");
sexo=getche();
pesoIdeal=(72.7*altura)-58;
printf ("\nO sexo digitado foi %c e o peso ideal desta pessoa eh %.2f quilos\n", sexo, 
pesoIdeal);
system("PAUSE");
}
+
E/S C++
� C++ possui uma biblioteca de E/S chamada 
iostream.h
� Esta possui alguns dispositivos predefinidos:
Nome Tipo Buffered Descrição
cin istream Sim Entrada padrão (normalmente o teclado)
cout ostream Sim Saída Padrão (normalmente o monitor)
clog ostream Sim Saída de erro padrão (normalmente o monitor)
cerr ostream Não Saída de erro padrão (normalmente o monitor)
+
O tipo ostream
� É um tipo de saída de dados
� Podemos enviar dados para objetos deste tipo através do operador <<
(operador de inserção)
� O operador << pode ser utilizado mais de uma vez na mesma sentença e 
não adiciona um ‘\n’ no final da linha
� Exemplos:
cout << “CEFET\n”;
//endl = a quebra de linha
cerr << “CIn” << endl;
clog << “C++” << “\n”;
+
O tipo istream
� É um tipo de entrada de dados
� Podemos ler dados de objetos deste tipo através do operador >>
� O operador >> também pode ser utilizado mais de uma vez na 
mesma sentença
� A leitura só é realizada até um ‘\r’, ‘\n’ ou ‘ ’
� Exemplo:
int a;
float b;
cin >> a >> b;
+
cout
� Objeto pelo qual são efetuadas as operações de saída em direção a saída 
padrão do SO com utilização de buffer
� Utiliza o símbolo << (operador de inserção)
Int main() {
cout << 10 << “ ”;
cout<< “Uma string”;
return 0;
}
+
cout
� Salto de linhas
�Usar \n ou então endl
Int main() {
cout << 10 << “\n”;
cout << “Uma string” << endl;
return 0;
}
+
cout
� Exemplo de saída em C e C++
int x = 25; 
double dob = 8.1;
char ch = ‘F’; 
// C++ C
cout << “x = “ << x; printf("x=%d",x); 
cout << dob << “e “ << ch; printf("%Lf e %c",dob, ch); 
� A formatação da saída dos dados é feita automaticamente. 
+
Formatação de Saída :
� Manipuladores (incluir IOMANIP)
� São “Funções” usadas junto com o cout:
cout << manipulador;
manipulador exemplo 
dec sair inteiro como decimal cout << dec << i; 
hex sair inteiro como 
hexadecimal 
cout << hex << i; 
oct sair inteiro como octal cout << oct << i; 
endl insere linha (‘\n’) cout << endl; 
ends insere término de string 
(‘\0’) 
 
setw(int n) ajusta o tamanho do campo 
para n caracteres 
cout << setw(20) 
 << ‘*’; 
setfill(char n) preenche o campo com n cout << setfill(‘#’); 
flush libera o buffer 
setprecision (int n) real com n casas decimais 
depois do ponto 
cout << 
setprecision(2) << f; 
+
Exemplo de uso
// setfill example 
#include <iostream> 
#include <iomanip> 
using namespace std; 
int main () { 
cout << setfill ('x') << setw (10); 
cout << 77 << endl; 
return 0; 
} 
Saída: xxxxxxxx77 
+
cin
� Objeto pelo qual são efetuadas as operações de entrada em a partir da 
entrada-padrão do SO com utilização de buffer
� Utiliza o símbolo >> (operador de extração)
Int main(){
int idade;
cout << “Digite a idade: “;
cin >> idade;
cout << “Voce tem “ << idade << ‘” anos”;
return 0;
}
+
cin
� Exemplo de entrada em C e C++
// C++ C 
int x; cin >> x; scanf("%d",&x);
float f,g; cin >> f >> g; scanf("%f%f",&f,&g);
char ch; 
double dob; cin>>dob>>ch scanf("%Lf%c",&dob,&ch);
� A formatação dos dados, explícita em C, é automática em C++.
+
cerr e clog
� Operações de saída em direção a saída de erro padrão do sistema
� Cerr = sem buffer
� Clog = com buffer
� Exemplo
.....
if( ! div ) {
cerr << “O dividor nao pode ser zero “ << endl;
}
.....
+ string.h
� Contém um conjunto de funções para manipulação de strings
� Principais funções:
� strcmp(), strlen(), strcpy(), strcat(), ...
� Já foi amplamente abordado na aula sobre strings
+ stdlib.h
� Possui diversas funções de utilidade geral
� Útil para
� Alocação dinâmica de memória
� Conversão de tipos
� Controle de processos
� Ordenação
� Busca
� Geração de números pseudo-aleatórios
� ...
+ stdlib.h
� Funções para conversão de tipos:
� int atoi(char *str);
� Converte uma string para um int
� float atof(char *str);
� Converte uma string para um float
� Exemplo:
� exemploConversao.c
+ stdlib.h
� Funções para controle de processos:
� void exit(int status);
� Encerra o programa
� int system(const char *comando);
� Executa um comando do Sistema Operacional
� Retorna 0 se o comando foi executado com sucesso, ou 
–1 caso contrário
� int atexit(void (* funcao) (void));
� Faz com que o programa chame a função passada como 
parâmetro no seu fim
� Várias funções podem ser adicionadas e são chamadas 
na ordem inversa
+ stdlib.h
� Ordenação:
� void qsort(
void *elementos,
int numeroDeElementos,
int tamanhoDoTipo,
int (* funcDeComparacao) (
const void *e1, const void *e2
)
);
+ stdlib.h
� Ordenação:
� A função qsort() é uma implementação genérica 
do algoritmo Quick Sort
� elementos é o array que será ordenado
� numeroDeElementos é quantidade de posições 
preenchidas no array
� tamanhoDoTipo é tamanho em bytes do tipo dos 
elementos do array
� funcDeComparacao é função que será utilizada 
para a comparação entre elementos do array
+ stdlib.h
� Busca binária:
� void *bsearch(
void *chave,
void *elementos,
int numeroDeElementos,
int tamanhoDoTipo,
int (* funcDeComparacao) (
const void *e1, const void *e2
)
);
+ stdlib.h
� chave é um ponteiro para o elemento que se busca
� elementos é o array onde a busca será realizada
� numeroDeElementos é quantidade de posições preenchidas no array
� tamanhoDoTipo é tamanho em bytes do tipo dos elementos do array
� funcDeComparacao é função que será utilizada para a comparação entre 
elementos do array
� Retorna um ponteiro para o elemento encontrado ou NULL se a chave não existe
+ stdlib.h
� Ordenação:
� A função bsearch() é uma implementação 
genérica do algoritmo de Busca Binária
� Para que o algoritmo funcione o array deve esta 
ordenado de acordo com a função de 
comparação
+ stdlib.h
� Geração de números pseudo-aleatórios:
� void srand(unsigned int semente);
� Inicializa o gerador de números pseudo-aleatórios
� int rand();
� Gera um número pseudo-aleatório entre 0 RAND_MAX
� RAND_MAX é uma constante definida em stdlib.h e o 
seu valor depende do compilador e do S.O.
+
Exemplo clássico
#include <stdio.h>
#include <stdlib.h>
main()
{
printf ("Alo mundo!");
system("PAUSE");
}
+
Caracteres especiais
� Tambem chamadas de sequencias de escape usam o \
� Exemplo:
int main(){
char letra1 = ‘\x043’; // hexa
char letra2 = ‘\103’; // octal
cout << letra1 << “ “ << letra2 <<endl;
cout << “\x043\x02B\x02B”<< endl;
}
Saida: C C++
+ Funções Matemáticas
Tangente de xtan(x)tan
Raiz quadrada de xsqrt(x)sqrt
Seno de xsin(x)sin
Calcula x elevado à potência ypow(x, y)pow
Logaritmo decimal de xlog10(x)log10
Logaritmo natural de xlog(x)log
Arredonda o número deal para baixo; floor(3.2) é 3floor(x)floor
Valor absoluto de xfabs(x)fabs
e elevado à potencia xexp(x)exp
Cosseno de x (x em radianos)cos(x)cos
Arredonda o número real para cima; ceil(3.2) é 4ceil(x)ceil
ComentárioExemploFunção
#include <math.h>
+
Exemplo 12
2) Construa um programa que tendo como entrada dois pontos quaisquer do plano P(x1,y1) e 
Q(x2,y2), imprima a distância entre eles. A fórmula da distância é:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
float x1, y1, x2, y2; distancia;
printf ("\nDigite o valor de x1: "); scanf ("%f",&x1); 
printf ("\nDigite o valor de y1: "); scanf ("%f",&y1); 
printf ("\nDigite o valor de x2: "); scanf ("%f",&x2); 
printf ("\nDigite o valor de y2: "); scanf ("%f",&y2);
distancia=sqrt(pow((x2-x1),2)+pow((y2-y1),2));
printf ("\nA distancia entre os pontos P1 e P2 eh %.2f\n", distancia);
system("PAUSE");}
+
Exercicio I
3) Construa um programa que calcule a quantidade de latas de tinta necessárias e o custo para pintar 
tanques cilíndricos de combustível, onde são fornecidos a altura e o raio desse cilindro.
Sabendo que:
- a lata de tinta custa R$20,00
- cada lata contém 5 litros
- cada litro de tinta pinta 3 metros quadrados.
Sabendo que:
Área do cilindro=3.14*raio2 + 2*3.14*raio*altura
e que raio e altura são dados de entrada.
+
Resposta do Exercício I
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{ float altura, raio, areaCilindro, qtdadeLitros, qtdadeLatas, custo;
printf ("\nDigite o valor da altura em metros: "); scanf ("%f",&altura);
printf ("\nDigite o valor do raio em metros: "); scanf ("%f",&raio);
areaCilindro=3.14*raio*raio + 2*3.14*raio*altura;
printf ("\nA area do cilindro eh %.2f metros quadrados", areaCilindro);
qtdadeLitros=areaCilindro/3;
printf ("\nA qtidade de litros necessaria eh de %.2f ", qtdadeLitros);
qtdadeLatas=qtdadeLitros/5;
printf ("\nA qtidade de latas necessaria eh de %.2f ", qtdadeLatas);
custo=qtdadeLatas*20;printf ("\nO valor total das tintas eh de R$ %.2f \n", custo); system("PAUSE"); }
+
Roteiro
� Vetores
� Strings
� Matrizes
+
Vetores
� São Matrizes com uma única dimensão
� Declaração
� tipo nome[tamanho];
� Exemplo:
int array1[3];
� Representação: ?
?
?
+
Inicialização
� Vetores podem ser inicializados na sua declaração:
int array2[4]={-1,20,3}; int array3[]={1,0,3};
-1
20
3
?
1
0
3
+
Inicialização
� Podemos ter vetores de qualquer tipo:
char array1[4] = { ‘A’, ‘B’, ‘C’ };
float array2[] = { 10.0, 5.4, 6.33 };
double array3[] = { -0.2, 4.3, 3.14 };
unsigned int array4[10];
...
+
Acessando um Vetor
int array[3] = { 1, 2, 3 };
array[1] = -5;
array[0] = array[0] + 2;
printf(“%d”, array[0]);
3
-5
3
+
Exemplo
#include <stdio.h>
int main() {
int numeros[10] = {1, 1};
int i;
for (i = 2; i < 10; i++) {
numeros[i] = numeros[i-1] + numeros[i-2];
}
for (i = 0; i < 10; i++) {
printf("%d\n", numeros[i]);
}
return 0;
}
+
Vetores
� Cuidados importantes ao utilizar vetores
� O compilador não verifica se o índice é válido:
int a[10];
int b = a[32];
int b = a[-32];
// converte f para int
int c = a[‘F’];
� O código acima compila sem problemas, mas o que irá acontecer 
quando ele for rodado?
� Ninguém sabe!!!
+
Strings
� Uma string é vetor de caracteres terminado pelo caractere nulo ‘\0’
� Sintaxe:
� char nomeDaString[] = “conteudo”;
� Exemplos:
char frase[] = “Eu adoro C”;
char centro[4] = “CIn”;
char faculdade[10] =
{‘U’,‘F’,‘P’,‘E’,‘\0’};
+
Cuidados Importantes
� Lembre-se sempre do ‘\0’
� O tamanho do vetor deve ser o número de caracteres que ele irá 
armazenar + 1
� Erro comum:
� char faculdade[] = 
{'U', 'F', ‘U'};
� faculdade não é uma string!
+
string.h
� Principais funções:
� int strlen(str)
� int strcmp(str1, str2)
� string strcpy(destino, origem)
� string strcat(destino, origem)
� Existem diversas outras que veremos mais adiante
+
strlen
� int strlen(str);
� Retorna o tamanho da string passada como parâmetro
� Exemplo:
char string[50] = “Linguagem”;
// imprime 9
printf(“%d”, strlen(string));
� Obs.: O caractere ‘\0’ não é contado.
+
strcmp
� int strcmp(str1, str2)
� Compara duas strings
� A ordem lexicográfica é utilizada para a comparação
Condição Retorno
<0 Se str1 é menor que str2
0 Se str1 é igual à str2
>0 Se str1 é maior que str2
+
Exemplo
#include <stdio.h>
#include <string.h>
int main() {
char pergunta[] = 
“qual é a sua linguagem favorita?”;
char resposta[15];
do {
printf(“%s”, pergunta);
scanf(“%s”, resposta);
} while (strcmp(resposta, “C”));
return 0; 
}
+
strcpy
� string strcpy(destino, origem)
� Copia o segundo parâmetro no primeiro
� Exemplo:
char ori[] = “ABC”;
char dest[12] = “”; 
strcpy(dest, ori);
// dest = “ABC”;
+
strcat
� string strcat(destino, origem)
� Concatena o segundo parâmetro no primeiro
� Exemplo:
char ori[] = “DEF”;
// Não esqueça de inicializar:
char dest[12] = “ABC”;
// dest = “ABCDEF”
strcat(dest, ori);
+
Outras funções
� string gets(string)
� Lê uma string do dispositivo de entrada padrão
� Também lê espaços
� Não verifica o tamanho máximo da string
� int puts(string)
� Imprime uma string no dispositivo de saída padrão
� Ambas estão definidas no header stdio.h
+
Matrizes Multidimensionais
� Sintaxe:
� tipo nomoDaMatriz[dim1][dim2]...[dimN];
� Exemplos:
// Matriz Bidimensional
int m1[2][2] = { 1, 2, 3, 4 };
// Outra maneira
int m2[2][2] = { { 1, 2 }, { 3, 4 } };
// Matriz Tridimensional
int m3[2][2][2] = { 1, 2, 3, 4, 5, 6, 7, 8 };
printf("%d\n", m1[1][1]);
printf("%d\n", m3[1][0][0]);
+
Exercícios
1) Escreva um programa que lê strings do teclado até que 
duas strings iguais sejam digitadas consecutivamente. A 
saída é a concatenação de todas as strings lidas e os 
tamanhos da maior a da menor.
2) Faça um programa que calcula o determinante de uma 
matriz 2*2. O usuário entra com a matriz e o programa 
imprime o determinante na tela
+
PONTEIROS
+
Ponteiro e Alocação Dinâmica de Memória
�Ponteiro
�Ponteiros ou apontadores (em inglês pointers)são 
variáveis cujo conteúdo é um endereço.
�Declaração de Variável de tipo Ponteiro
�Na linguagem C para declarar um ponteiro usa-se o tipo 
com os nomes das variáveis precedidos pelo caractere *.
�Assim é necessário na declaração de um ponteiro, 
especificar para qual tipo de variável ele irá apontar. O 
operador * indica que a variável é um apontador.
�por exemplo, declarar uma variável de nome p que 
pode armazenar endereços de memória em que 
existe um inteiro armazenado.
� int *p; 
+
Ponteiro e Alocação Dinâmica de Memória
�Declaração de Variável de tipo Ponteiro (Exemplos)
�por exemplo: 
�int *pi; // ponteiro para int
�char *pc; // ponteiro para char
�float *pf; // ponteiro para float
�double *pd; // ponteiro para double 
O operador & significa “endereço de”. Lembra-se do scanf?
Agora ficará explicado porque as variáveis no scanf devem vir
precedidas por &.
+
Ponteiro e Alocação Dinâmica de Memória
�Usos de Ponteiros
112
--- 108
--- 104
// variável inteiro
int a;
// variável 
ponteiro
// para inteiro
int *p;
Efeito de declarações de 
variáveis na pilha de execução
a
p
+
Ponteiro e Alocação Dinâmica de Memória
�Usos de Ponteiros
112
--- 108
5 104
// a recebe o valor 5
a = 5;
112
104 108
5 104
112
104 108
6 104
// p recebe o endereço de 
//a diz-se p aponta para a 
p = &a;
// conteúdo de p recebe o 
// valor 6
*p = 6;
a
p
a
p
a
p
+
Ponteiro e Alocação Dinâmica de Memória
# include <stdio.h>
int main(void)
{
int a;
int *p;
p= &a;
*p = 2;
printf(“%d”,a);
return 0;
}
# include <stdio.h>
int main(void)
{
int a, b,*p;
a=2;
*p = 3;
b=a+(*p);
printf(“%d”,a);
return 0;
}
ERRO : p não foi inicializadoIMPRIME 2
+
Ponteiro e Alocação Dinâmica de Memória
#include <stdio.h>
main()
{int a, *pa;
double b, *pb;
char c, *pc;
// atribuições de endereços
pa = &a; pb = &b; pc = &c;
// atribuição de valores
a = 1; b = 2.34; c = '@';
printf("\n valores:%5d %5.2lf %c", a, b, c);
printf("\n ponteiros:%5d %5.2lf %c", *pa, *pb, *pc);
printf("\n enderecos:%p %p %p", pa, pb, pc);
// mais atribuições de valores usando os ponteiros
*pa = 77; *pb = 0.33; *pc = '#';
printf("\n valores :%5d %5.2lf %c", a, b, c);
printf("\n ponteiros:%5d %5.2lf %c", *pa, *pb, *pc);
printf("\n enderecos:%p %p %p", pa, pb, pc);
}
+
Ponteiro e Alocação Dinâmica de Memória
valores: 1 2.34 @
ponteiros: 1 2.34 @
enderecos:1004 1016 1025
valores : 77 0.33 #
ponteiros: 77 0.33 #
enderecos:1004 1016 1025
RESULTADO:
+
Ponteiro e Alocação Dinâmica de Memória
�Passando Ponteiros para Funções
�Já vimos anteriormente, no estudo das funções em C, que
para que tenhamos parâmetros de retorno, isto é,
parâmetros que são alterados dentro da função e retornam
com esse novo valor, é necessário que passemos o endereço
da variável como parâmetro. O endereço nada mais é que
um ponteiro.
+
Ponteiro e Alocação Dinâmica de Memória
�Passando Ponteiros para Funções 
�Exemplo:
uma função que troca o conteúdo de duas variáveis
#include <stdio.h>
void troca (double *a, 
double *b)
{double aux;
aux = *a;
*a = *b;
*b = aux;
}
int main () // 
principal
{int a=5, b=7;
troca(&a, &b);
printf(‘’%lf 
%lf‘’,a,b);
return 0;
}
+
Ponteiro e Alocação Dinâmica de Memória
�Ponteiro e Vetor
�O nome do ponteiro também é um vetor
int v[100];
*v = 33; //é o mesmo que v[0] = 33;
*(v+2) = 44; é o mesmoque v[2] = 44;
for (i=0; i<100; i++)
*(v+i) = 0; //zera o vetor v
+
Ponteiro e Alocação Dinâmica de Memória
�Ponteiro e Vetor
�Podemos também usar um ponteiro como um vetor.
int v[100];
int *pv;
pv = v; //também pode ser pv = &v[0];
for (i = 0; i < 100; i++) pv[i] = 0;
�Passando Vetor para função
�Passar um vetor para uma função consiste em passar 
o endereço da primeira posição do vetor
+
Ponteiro e Alocação Dinâmica de Memória
�Passando Vetor para função (Continuação)
�Os elementos do vetor não são copiados para a 
função o argumento copiado é apenas o endereço do 
primeiro elemento 
+
Ponteiro e Alocação Dinâmica de Memória
�Passando Vetor para função (Continuação)
�Exemplo:
#include <stdio.h>
#include <stdlib.h>
// Função que calcula 
média
float media(int n, 
float *v)
{
int i;
float s = 0.0f;
for (i = 0 ; i<n; 
i++) 
s += v[i];
return s/n; 
}
int main(int argc, char 
*argv[])
{
float v[5], float med;
int i;
for (i = 0 ; i<5; i++) 
scanf("%f", &v[i]);
med = media(5,v);
printf("media = %.2f\n 
", med);
system("PAUSE");
return 0;
}
+
Ponteiro e Alocação Dinâmica de Memória
�Alocação de Memória
�Consiste em requisitar espaços (tamanhos) de 
memória em tempo de execução do programa.
�O espaço alocado dinamicamente permanece 
reservado até que seja explicitamente liberado pelo 
programador
+
Ponteiro e Alocação Dinâmica de Memória
�Alocação Esquematizado de Memória
Código do 
programa
Variáveis globais e 
estáticas
Memória alocada 
dinamicamente
Pilha 
Memória Livre
+
Ponteiro e Alocação Dinâmica de Memória
�Funções para Alocação de Memória
�Existem funções, presentes na biblioteca padrão 
stdlib que permitem alocar e liberar memória 
dinamicamente:
�malloc ()
�free() 
�Exemplo1:
int* v; 
v = malloc(10 * v); 
+
Ponteiro e Alocação Dinâmica de Memória
�Funções para Alocação de Memória
Código do 
programa
Variáveis 
globais e 
estáticas
---
Código do 
programa
Variáveis 
globais e 
estáticas
40 bytes
504 
v = (int *) malloc(10* sizeof(v));int * v;
v v
504
+ �Atividade
� Desenvolva um algoritmo que carregue uma matriz 
12 X 4 com os valores das vendas de uma loja, em 
que a cada linha represente um mês do ano, e cada 
coluna, uma semana do mês. Calcule e imprima: 
1. Total vendido em cada mês do ano;
2. Total vendido em cada semana durante todo o 
ano;
3. Total vendido no ano.

Outros materiais

Outros materiais