Buscar

Algoritmos e Prática de Programação

Prévia do material em texto

Algoritmos e Prática de 
Programação
Prof. Daniel T. Bravo
(danieltbravo@uni9.pro.br)
NOTAS DE AULA
1
Introdução à Lógica de 
Programação
2
Introdução à Lógica de Programação
• Um computador é uma ferramenta para
solucionar problemas que envolvam a
manipulação de informações.
– Dois tipos básicos: dados e instruções
• Um programa de computador é uma
sequência de ações (instruções) inseridas na
máquina que permite ao computador realizar
determinadas tarefas.
3
Introdução à Lógica de Programação
• Lógica é a técnica de encadear pensamentos para
atingir determinado objetivo.
• Seqüência Lógica são passos executados até
atingir um objetivo ou solução de um problema.
• Instruções são um conjunto de regras ou normas
definidas para a realização ou emprego de algo.
Em informática, é o que indica a um computador
uma ação elementar a executar.
4
Introdução à Lógica de Programação
• A Lógica de Programação é a fase de, a partir
de um problema, formular soluções que
gerem um programa de computador.
• Programar é basicamente construir
algoritmos.
• Programas são algoritmos escritos em uma
linguagem de programação (C, Pascal, Java,
etc.) e que são interpretados e executados por
uma máquina.
5
Algoritmo
Sequência lógica e finita de instruções que 
devem ser seguidas para a resolução de um 
problema ou a execução de uma tarefa
6
Algoritmo – Exemplo 1
• Algoritmo para retirar a devolução do imposto de 
renda:
INÍCIO
1. Sair de casa
2. Ir ao banco
3. Dirigir-se ao balcão
4. Já chegou a devolução do imposto de renda?
5. Sim: Vá para o passo 11
6. Não: Voltar para casa
7. Esperar um dia
8. É sábado, domingo ou feriado?
9. Sim: Vá para o passo 7
10. Não: Vá para o passo 1
11. Retirar o dinheiro
12. Voltar para casa
FIM
7
Algoritmo – Exemplo 2
• Algoritmo para uma receita de bolo: em um bolo, 
descrevem-se quais serão os ingredientes e suas 
quantidades. Em seguida, quais são as regras para o seu 
preparo, como a sequência de inclusão dos ingredientes.
INÍCIO
1. Bata cinco claras em neve.
2. Adicione três xícaras de açúcar.
3. Adicione três xícaras de farinha de trigo, cinco gemas, uma colher de fermento e três 
colheres de chocolate.
4. Bata por cinco minutos.
5. Não: Voltar para casa
6. Unte uma assadeira com margarina e farinha de trigo.
7. Coloque o bolo para assar durante vinte e cinco minutos em temperatura média. 
FIM
8
Algoritmo – Exemplo 3
• Problema das Torres de Hanói: inicialmente 
têm-se três hastes (A, B e C) e, na haste A, 
repousam três anéis de diâmetros diferentes, 
em ordem decrescente por diâmetro.
9
Algoritmo – Exemplo 3
• O objetivo é transferir os três anéis da haste A 
para C, usando B se necessário. As regras de 
movimento são as seguintes:
– deve-se mover um único anel por vez;
– um anel de diâmetro maior nunca pode repousar 
sobre algum outro de diâmetro menor.
• Animação do algoritmo.
10
24044.mp4
Algoritmo – Exemplo 3
• Algoritmo:
INÍCIO
1. Mover um anel da haste A para a haste C.
2. Mover um anel da haste A para a haste B.
3. Mover um anel da haste C para a haste B.
4. Mover um anel da haste A para a haste C.
5. Mover um anel da haste B para a haste A.
6. Mover um anel da haste B para a haste C.
7. Mover um anel da haste A para a haste C.
FIM
11
Algoritmo – Exemplo 4
• Problema dos Missionários e Canibais: Três 
missionários e três canibais precisam 
atravessar um rio. Para tal, dispõem de um 
barco com capacidade para duas pessoas. Por 
medida de segurança, não se deve permitir 
que em alguma margem a quantidade de 
missionários seja inferior à de canibais.
• Animação do algoritmo.
12
24049.mp4
Algoritmo – Exemplo 4
• Algoritmo:
INÍCIO
1. Atravessar um missionário e um canibal para a margem B.
2. Voltar o missionário para a margem A.
3. Atravessar dois canibais para a margem B.
4. Voltar um canibal para a margem A.
5. Atravessar dois missionários para a margem B.
6. Voltar um missionário e um canibal para a margem A.
7. Atravessar dois missionários para a margem B.
8. Voltar um canibal para a margem A.
9. Atravessar dois canibais para a margem B.
10. Voltar um canibal para a margem A.
11. Atravessar dois canibais para a margem B.
FIM
13
Algoritmo – Exemplo 5
• Algoritmo para somar e exibir a soma de 2 
números inteiros.
INÍCIO
1. Informe o primeiro número inteiro.
2. Informe o segundo número inteiro.
3. Some os dois números inteiros.
4. Mostre o resultado da soma.
FIM
14
Fases para Montar um Algoritmo
• Para montar um algoritmo, é necessário dividir o
problema apresentado em três fases
fundamentais:
– Entrada: dados de entrada
– Processamento: procedimentos utilizados para se
chegar ao resultado final
– Saída: dados processados
15
Entrada Processamento Saída
Fases do Algoritmo – Exemplo 5
16
Tipos de Dados
17
Tipos de Dados
• Os dados são representados por elementos
advindos do mundo externo, os quais
representam as informações que os seres
humanos manipulam. Eles devem ser abstraídos
para serem processados por um computador
• São caracterizados por três tipos básicos:
– Numéricos (inteiros ou reais)
– Caracteres
– Lógicos
18
Inteiros
• Dados numéricos positivos ou negativos
• Exclui qualquer valor numérico fracionário
• Exemplo: 35, 234, -56, -9, 0
19
Reais
• Dados numéricos positivos, negativo e números
fracionários
• Exemplo: 35, 234, -56, -9, -45.99, 4.5, 0
20
Caracteres
• Seqüência de valores delimitados por aspas
• Formadas por: letras, números e símbolos
• Também conhecido como: alfanumérico, string,
literal, cadeia
• Exemplo: “Programação”, “10a”, “10”, “ ”
21
Lógicos
• Dados com valores que sugerem uma única
opção entre duas possibilidades existentes
• Representação: verdadeiro ou falso, 0 (zero) ou 1
(um), sim ou não
• Também conhecido como booleano
22
Variáveis e Constantes
23
Variáveis
• Variável é tudo aquilo que é sujeito a variações,
que é incerto, instável ou inconstante.
• Como referenciar a armazenar os dados
armazenados em um computador?
• Os valores são armazenados na memória
• Cada tipo de dado diferente ocupa um número
específico de bytes na memória
• Para recuperar um valor é necessário saber o seu tipo
e o endereço do byte inicial ocupado na memória
24
Variáveis
• De formar geral, podemos dizer que uma célula
de memória está associada a um identificador
• O termo variável é freqüentemente utilizado com
sinônimo de identificador
• Variável é uma entidade que guarda valores que
podem ser alterados no decorrer de um
algoritmo
• Embora uma variável possa assumir diferentes
valores, ela só pode armazenar um valor a cada
instante
25
Variáveis
• Uma variável não pode armazenar um valor de tipo
de dado diferente daquele para o qual foi criada
• Uma variável deve possuir um nome e este é
utilizado para sua identificação e representação
dentro de um programa.
26
Variáveis
• Regras de definição e uso de variáveis:
– O nome de identificação de uma variável pode utilizar um ou mais
caracteres
– O primeiro caractere de identificação do nome de uma variável
deve sempre ser alfabético (letras maiúsculas ou minúsculas), os
demais podem ser alfanuméricos (letras, números e _)
– Na definição de um nome composto de uma variável não podem
existir espaços em branco entre os nomes
– Jamais uma variável pode ser definida com o mesmo nome de uma
palavra que represente os comandos de uma linguagem de
programação de computadores, ou seja, as palavras reservadas de
uma linguagem de programação
– Não pode ser utilizado como nome de variável algum que já tenha
sido usado para identificar o nome de um programa
27
Papéis de Variáveis em um Programa
• Ação: quando seu valor inicial é modificado ao
longo da execução de um programa.
• Controle: quando seu valor é vigiado e utilizado
principalmente em operações lógicas de decisão
ao longo de um programa.
28
Constantes
• Constante é tudo que é fixo, estável, inalterável,
imutável, contínuo, invariável, de valor fixo e que
é aplicado sob diversos pontosde vista.
• Exemplo: resultado = soma * 1.23
29
Formas de Representação da 
Lógica de Programação
30
Formas Básicas de Representação da 
Lógica de Programação
• Descrição Narrativa
• Diagrama de Blocos (Fluxograma)
• Português Estruturado (Pseudocódigo)
31
Descrição Narrativa
• Utiliza linguagem natural para especificar os
passos para a realização das tarefas.
• Como dá margem a interpretações errôneas e
ambiguidades, inerentes à sua característica
pouco formal, é pouco utilizada para a
especificação de algoritmos.
32
Diagrama de Blocos
• Descreve o método e a seqüência das ações a
serem estabelecidas para um computador
• Usa diversos símbolos geométricos
• Facilita a visualização completa e imediata da
linha de raciocínio lógico de um programador
• Os diagramas de blocos podem ser feitos e
quebrados e vários níveis
• Deve ser indicado de cima para baixo
• É incorreto e “proibido” ocorrer o cruzamento de
linhas de fluxo de dados entre os símbolos
33
Diagrama de Blocos – Símbolos Básicos
34
Diagrama de Blocos – Símbolos Especiais
35
Diagrama de Blocos - Exemplo
36
Português Estruturado
• Linguagem de projeto de programação
• Notação para elaboração de algoritmos, os quais
serão utilizados na definição, criação e
desenvolvimento de documentação genérica do
código de um programa de computador
• Normalmente não é executada por um
computador.
37
Português Estruturado - Exemplo
programa Soma
var
num1, num2, res : inteiro
inicio
leia num1, num2
res  num1 + num2
escreva “Soma: ”, res
fim
38
Comandos de Leitura e Escrita de 
Dados
39
Comando de Atribuição
(Processamento de Dados)
• Um comando de atribuição permite-nos
fornecer um valor a uma variável, em que o
tipo deve ser compatível com o tipo da
variável.
• Sintaxe:
identificador  expressão
• Exemplo:
A  B
X  10
Y  C + D + 1
SOMA  A1 + A2 + 6 40
Comando de Leitura
(Entrada de Dados)
• Diagrama de Blocos
– Teclado em linha ou entrada manual
• Português Estruturado
– leia <variável(is)>
• Os dados lidos por um algoritmo devem ser 
armazenados em variáveis.
41
<variável(is)>
Comando de Leitura
Exemplo
• Diagrama de Blocos
• Português Estruturado
leia raio
leia N1, N2, N3
• É possível ler o valor de vários dados em uma 
única instrução, para isto, basta separar cada 
identificador de variável por vírgula.
42
N1, N2, N3raio
Comando de Escrita
(Saída de Dados)
• Diagrama de Blocos
– Teclado em linha ou entrada manual
• Português Estruturado
– escreva <variável(is) ou informações>
• Os dados de saída de um algoritmo podem vir 
de variáveis, expressões ou constantes.
43
<variável(is) ou 
informações>
Comando de Escrita
Exemplo
• Diagrama de Blocos
44
“Ola Mundo”
Apresenta a mensagem Ola 
Mundo na tela
res
Apresenta o valor da 
variável res na tela
“Soma: ”, s
Apresenta a mensagem 
Soma: e o valor da variável 
s na tela
N1, N2
Apresenta os valores das 
variáveis N1 e N2 na tela
Comando de Escrita
Exemplo
• Português Estruturado
escreva “Ola Mundo”
escreva res
escreva “Soma: ”, s
escreva N1, N2
• É possível escrever o valor de vários dados em 
uma única instrução, para isto, basta separar 
cada dado por vírgula.
45
Comando de Leitura e Escrita 
Exemplo
46
programa Exemplo
var
v1, res : inteiro
inicio
leia v1
res  v1 * v1
escreva res
fim
Blocos
• Um bloco pode ser definido como um
conjunto de ações com uma função definida,
neste caso um algoritmo pode ser visto como
um bloco.
• Para delimitar um bloco, utiliza-se os
delimitadores início e fim.
47
Estrutura Sequencial
• A estrutura sequencial de um algoritmo
corresponde ao fato de que o conjunto de
ações primitivas será executado em uma
sequência linear de cima para baixo e da
esquerda para a direita, isto é, na ordem em
que foram escritas.
48
Introdução à Linguagem C
49
Introdução à Linguagem C
• A linguagem C foi primeiramente criada por Dennis M. Ritchie
e Ken Thompson no laboratório Bell em 1972.
– A definição está contida no livro The C Programming Language
• C é uma linguagem utilizada como ferramenta na
programação de qualquer tipo de sistema
– Ex: sistemas operacionais, planilhas eletrônicas, processadores de
texto, gerenciadores de banco de dados, processadores gráficos,
sistemas de transmissão de dados, para solução de problemas de
engenharia ou física, etc.
– O sistema operacional UNIX é desenvolvido e C.
50
Introdução à Linguagem C
• A linguagem C foi desenhada para que o usuário possa
planejar programas estruturados e modulares.
– O resultado é um programa mais legível e documentado.
– Os programas em C tendem a ser bastante compactos e de execução
rápida.
• Programas em C podem ser desenvolvidos em partes
separadas por pessoas distintas e depois unidos num produto
final, o que significa que bibliotecas de funções podem ser
criadas ou usadas sem realmente conhecer o código de cada
uma delas.
51
Conceito de Compiladores
• Todo programa escrito numa linguagem de programação de alto
nível precisa ser traduzido para a linguagem de máquina, para que
o computador possa executá-lo, para isso existem os
interpretadores e os compiladores.
• Interpretador: faz a análise sintática (verifica se o programa fonte
está escrito de acordo com a gramática definida pela linguagem) e a
análise semântica (verifica, por exemplo, uma multiplicação entre
tipos de dados diferentes). Executa o programa passo a passo.
• Compilador: Tal como o interpretador, faz a análise sintática e
semântica do programa fonte. O compilador lê o arquivo contendo
o programa escrito em uma dada linguagem de programação e gera
um programa em linguagem de máquina que seja equivalente ao
programa inicial de tal forma que o computador o entenda.
52
Compilador vs Interpretador
53
Interpretador
Programa 
Fonte
Interpretador
Dados
Saída
Compilador
Programa 
Fonte
Compilador
Programa ObjetoDados Saída
Criação de um Programa em 
Linguagem C
• A criação de um programa em linguagem C segue basicamente três
passo:
– Criação do programa fonte (texto)
– Compilação desse programa, para a sua tradução em código executável
– Execução do código produzido
54
Estrutura Básica de um Programa em C
• Um programa em C consiste em uma ou várias “funções”.
• Forma geral da função main:
• Os parênteses após o nome indicam que esta é uma função.
– A função “main” é utilizada para indicar a função que inicia o programa.
• Toda função C deve ser iniciada por uma chave de abertura, {, e
encerrada por uma chave de fechamento, }
• A função main() deve existir em algum lugar do seu programa e
marca o ponto de início da execução do programa.
– Se um programa for constituído de uma única função esta será main()
55
main () {
// instruções
}
O Pré-Processador C
• O pré-processador C é um programa que examina o
programa-fonte em C e executa certas modificações nele,
baseado em instruções chamadas diretivas.
• O pré-processador faz parte do compilador e pode ser
considerado uma linguagem dentro da linguagem C. Ele é
executado automaticamente antes da compilação. Diretivas
do pré-processador seriam instruções desta linguagem.
• Instruções para o pré-processador devem fazer parte do texto
que criamos, mas não farão parte do programa que
compilamos, pois são retiradas do texto pelo compilador
antes da compilação.
56
O Pré-Processador C
• Todas a diretivas do pré-processador são iniciadas com o
símbolo (#). As diretivas podem ser colocadas em qualquer
parte do programa, mas é costume serem colocadas no início
do programa, antes de main(), ou antes do começo de uma
função particular.
• Não há ponto-e-vírgula após qualquer diretiva do pré-
processador.
57
A Diretiva #include
• A diretiva #include causa a inclusão de um programa-fonte
em outro. Ela diz ao compilador para incluir, na hora da
compilação, um arquivo especificado. Sua forma geral é:
#include “nome_do_arquivo” ou
#include <nome_do_arquivo>
• A diferença entre usar “ ” e < > é somente a ordem de procura
nosdiretórios pelo arquivo especificado. Se o arquivo estiver
nos caminhos de procura pré-especificados do compilador
(como é o caso do arquivo stdio.h) use < >.
58
Variáveis
• As variáveis são o aspecto fundamental de qualquer
linguagem de computador. Uma variável em C é um espaço de
memória reservado para armazenar um certo tipo de dado e
tendo um nome para referenciar o seu conteúdo.
• Uma variável é um espaço de memória que pode conter, a
cada tempo, valores diferentes.
59
Declaração de Variáveis
• Uma declaração de variável é uma instrução para reservar
uma quantidade de memória apropriada para armazenar o
tipo especificado.
• Uma declaração de variável consiste no nome de um tipo,
seguido do nome da variável.
• Exemplo: int num;
• Em C todas as variáveis devem ser declaradas.
• Se você tiver mais de uma variável do mesmo tipo, poderá
declará-las de uma única vez, separando seus nomes por
vírgulas.
• Exemplo: int aviao, foguete, helicoptero;
60
Nomes de Variáveis
• A escolha de nomes significativos para suas variáveis pode
ajudá-lo a entender o que o programa faz e prevenir erros.
• Pode-se usar quantos caracteres quiser para o nome de uma
variável
• O primeiro caractere deve ser obrigatoriamente uma letra ou
o caractere de sublinhar (_).
• Os demais caracteres podem ser letras, números ou
caracteres de sublinhar.
• Uma variável não pode ter o mesmo nome de uma palavra-
chave de C.
• Em C letras minúsculas e maiúsculas são diferentes
– Exemplo: PESO, Peso, peSo, peso
61
Palavras-Chaves em C
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
62
Tipos de Dados
• O tipo de uma variável informa a quantidade de memória, em
bytes, que esta irá ocupar e a forma como o seu conteúdo
será armazenado.
63
TIPO BIT BYTES ESCALA
char 8 1 -128 a 127
int 16 2 -32768 a 32767
float 32 4 3.4E-38 a 3.4E+38
double 64 8 1.7E-308 a 1.7E+308
void 0 0 sem valor
Modificadores de Tipos
• Com exceção de void, os tipos de dados básicos podem estar
acompanhados por modificadores na declaração de variáveis.
Os modificadores de tipos oferecidos por C são:
– long ou long int (4 bytes)
– unsigned char (de 0 a 255)
– unsigned int (de 0 a 65535)
– unsigned long
– short (2 bytes no IBM-PC)
64
Inicializando Variáveis
• É possível combinar uma declaração de variável com o
operador de atribuição para que a variável tenha um valor ao
mesmo tempo de sua declaração; é o que chamaremos de
inicialização de variáveis.
int evento = 5;
char corrida = ‘C’;
float tempo = 27.25;
65
Atribuições Múltiplas
• C permite que você atribua o mesmo valor a muitas variáveis
usando atribuições múltiplas em um único comando.
x = y = z = 10;
66
Função de Saída de Dados
• A função printf() é uma das funções de E/S (entrada e saída)
que podem ser usada em C. Ela não faz parte da definição de
C mas todos os sistemas têm uma versão de printf()
implementada.
• Esta função é utilizada para imprimir dados na tela do
computador. Os dados a serem impressos devem ser passados
como argumentos da função printf().
• Sintaxe:
printf (“expr. de controle”, lista de argumentos);
67
Função de Saída de Dados
• Exemplo:
#include <stdio.h>
#include <stdlib.h>
main () {
printf (“Este e’ o numero dois: %d”, 2);
system (“PAUSE”);
}
• A expressão de controle pode conter caracteres que serão exibidos na tela
e códigos de formatação que indicam o formato em que os argumentos
devem ser impressos. No exemplo acima, o código de formatação %d
solicita a função printf() imprimir o segundo argumento em formato
decimal.
• printf() é uma função da biblioteca padrão do C (stdio.h). Para utilizar a
função printf() a biblioteca stdio.h deve ser incluída com a diretiva
#include.
68
Função de Saída de Dados
• Exemplo 2:
#include <stdio.h>
#include <stdlib.h>
main () {
printf (“Ola Mundo! \n”);
system (“PAUSE”);
}
• Neste exemplo a expressão de controle contém apenas os
caracteres que devem ser impressos na tela e um caractere especial
de impressão (“\n”) que indica ao programa para colocar o cursor
na próxima linha.
• Quando não temos nenhum código de formatação na expressão de
controle, não deve ser passado nenhum outro argumento para a
função printf().
69
Função de Saída de Dados
• Exemplo 3:
#include <stdio.h>
#include <stdlib.h>
main () {
int numInt = 10;
float numReal = 15.25;
printf (“%d %f”, numInt, numReal);
system (“PAUSE”);
}
70
Formatos de Impressão
• A tabela abaixo apresenta os códigos para impressão
formatada da função printf():
Código printf() Formato
%c Caractere Simples
%d Decimal
%e Notação Científica
%f Ponto Flutuante (float)
%g %e ou %f (o mais curto)
%o Octal
%s Cadeia de Caracteres
%u Decimal sem sinal
%x Hexadecimal
%ld Decimal Longo
%lf Ponto Flutuante Longo (double)
%% Um único sinal de porcentagem
71
Caracteres Especiais de Impressão
• A tabela abaixo apresenta os códigos de C para caracteres que
não podem ser inseridos diretamente pelo teclado.
Códigos Especiais Significado
\n Nova linha
\r Retorno do cursor
\t Tab
\b Retrocesso
\” Aspas
\\ Barra
\f Salta página de formulário
\0 Nulo
72
Modificadores de Formato
• O Especificador de Largura Mínima de Campo
– Um número colocado entre o símbolo % e o código de formato age
como um especificador de largura mínima de campo. Isso preenche a
saída com espaços, para assegurar que ela atinja um certo
comprimento mínimo.
– Para preencher com 0s, deve-se colocar um 0 antes do especificador
de largura mínima de campo. Por exemplo, %05d preencherá um
número de menos de cinco dígitos com 0s de forma que seu
comprimento total seja cinco.
73
Modificadores de Formato
• O Especificador de Precisão
– O especificador de precisão segue o especificador de largura mínima
de um campo (se houver algum), consistindo em um ponto seguido de
um número inteiro. O seu significado exato depende do tipo de dado a
que está sendo aplicado.
– Exemplo:
#include <stdio.h>
main () {
printf (“%.4f\n”, 123.1234567);
printf (“%6.4d\n”, 21);
printf (“%6.0d\n”, 21);
printf (“%.15s\n”, “Este e um teste simples”);
}
Saída: 123.1235
0021
21
Este e um teste 74
Função de Entrada de Dados
• A função scanf() é outra das funções de E/S implementada em
todos os compiladores C. Ela é o complemento de printf() e
nos permite ler dados formatados da entrada padrão
(teclado).
• Sua sintaxe é similar à de printf(), isto é, uma expressão de
controle seguida por uma lista de argumentos separados por
vírgula.
• A principal diferença está na lista de argumentos. Os
argumentos de scanf() devem ser endereços de variáveis.
• Sintaxe:
scanf (“expr. de controle”, lista de argumentos);
75
Função de Entrada de Dados
• A expressão de controle pode conter códigos de formatação,
precedidos por um sinal %.
• A lista de argumentos deve consistir nos endereços das
variáveis. C oferece um operador para tipos básicos chamado
operador de endereço e referenciado pelo símbolo & que
resulta o endereço do operando.
• scanf() é uma função da biblioteca padrão do C (stdio.h). Para
utilizar a função scanf() a biblioteca stdio.h deve ser incluída
com a diretiva #include.
76
Função de Entrada de Dados
• Exemplo:
#include <stdio.h>
#include <stdlib.h>
main () {
float anos, dias;
printf (“Digite sua idade em anos: ”);
scanf (“%f”, &anos);
dias = anos * 365;
printf (“Sua idade em dias e’ %.0f.\n”, dias);
system (“PAUSE”);
}
77
O Operador de Endereço (&)
• Toda variável ocupa uma certa localização na memória, e seu endereço é o do
primeiro byte ocupado por ela. Um inteiro ocupa 2 bytes. Se você declarou uma
variável n como inteira e atribui a ela o valor 2, quando n for referenciada
devolverá 2. Entretanto, se você referenciar n precedido de & (&n) devolverá o
endereço do primeiro byte onde n está guardada.
• Exemplo:
#include <stdio.h>
#include <stdlib.h>
main () {
int num =2;
printf (“Valor=%d, endereco=%u”, num, &num);
system (“PAUSE”);
}
Saída: Valor=2, endereco=1370
• Um endereço de memória é visto como um número inteiro sem sinal, por isso
usamos %u. 78
Códigos de Formatação de scanf()
• A tabela abaixo apresenta os códigos de formatação da função
scanf():
Código Função
%c Leia um único caractere
%d Leia um inteiro decimal
%e Leia um número em notação científica
%f Leia um número em ponto flutuante
%o Leia um inteiro octal
%s Leia uma série de caracteres
%u Leia um decimal sem sinal
%x Leia um número hexadecimal
%l Leia um inteiro longo
%lf Leia um double
79
Exemplo
• Programa que calcula e apresenta na tela a soma de dois
números inteiros.
#include <stdio.h>
#include <stdlib.h>
main () {
int num1, num2;
printf (“Digite o primeiro valor:”);
scanf (“%d”, &num1);
printf (“Digite o segundo valor:”);
scanf (“%d”, &num2);
int soma = num1 + num2;
printf (“Soma: %d”, soma);
system (“PAUSE”);
}
80
Exemplo 2
• Programa que calcula e apresenta na tela a área de um
círculo.
#include <stdio.h>
#include <stdlib.h>
main () {
float raio;
printf (“Digite o valor do raio:”);
scanf (“%f”, &raio);
float area = 3.1415 * raio * raio;
printf (“Area: %.2f”, area);
system (“PAUSE”);
}
81
Constantes
• O qualificador const pode ser aplicado à declaração de
qualquer variável para especificar que seu valor não deve ser
mudado.
const float PI = 3.1415;
const float SALARIO_MINIMO = 350.00;
82
A Diretiva #define
• A diretiva #define pode ser usada para definir constantes
simbólicas com nomes apropriados
• Exemplo: #define PI 3.1415
• Quando o compilador encontra #define, ele substitui cada
ocorrência de PI por 3.1415
• A frase à esquerda (PI), que será procurada, é chamada
“identificador”. A frase à direita (3.1415), que será
substituída, é chamada “texto”. Um ou mais espaços separam
o identificador do texto.
• Por convenção, o identificador é escrito em letras maiúsculas.
• Só é permitido escrever um comando destas por linha.
83
Exemplo
• Programa que calcula a área de um círculo.
#include <stdio.h>
#include <stdlib.h>
#define PI 3.1415
main () {
float raio;
printf (“Digite o valor do raio:”);
scanf (“%f”, &raio);
float area = PI * raio * raio;
printf (“Area: %.2f”, area);
system (“PAUSE”);
}
84
Comentários
• Comentários podem ser colocados em qualquer lugar de seu programa.
• Comentários começam com dois caracteres, chamados símbolos de
comentários, barra-asterisco (/*) e terminam por asterisco-barra (*/).
Como C ignora espaços, os comentários podem ser escritos em vários
linhas.
/*
Aqui esta
um exemplo de
comentario em
multiplas linhas
*/
• Não são permitidos os simbolos de /* ou */ no interior de um comentário.
/* estou escrevendo /* um comentario ilegal */
85
Operadores Aritméticos
86
Operadores Aritméticos
• Duas categorias: unários e binários
• São unários quando atuam na inversão do estado
de um valor numérico
• São binários quando utilizados em operações
matemáticas de divisão, multiplicação, adição e
subtração
• Em uma expressão aritmética, caso necessite
alterar o nível de prioridade de um referido
cálculo, ele deve ser definido por meio de
parênteses.
87
Operadores Aritméticos
Operador Operação Categoria Resultado Prioridade
 Atribuição - - -
+ Manutenção de 
sinal
Unário - 1
- Inversão de sinal Unário - 1
↑ Exponenciação Binário Inteiro ou Real 2
↑(1/n) Radiciação de n Binário Real 2
/ Divisão Binário Real 3
* Multiplicação Binário Inteiro ou Real 3
div Divisão Binário Inteiro 3
mod Módulo 
(Resto da divisão)
Binário Inteiro 3
+ Adição Binário Inteiro ou Real 4
- Subtração Binário Inteiro ou Real 4
88
Expressões Aritméticas
• São definidas pelo relacionamento existente
entre variáveis e constantes numéricas com a
utilização dos operadores aritméticos
• Exemplo
resultado  10 * (3 + v1)
89
Transformando Expressões 
Matemáticas em Computacionais
• As expressões aritméticas em computação são
escritas de uma forma um pouco diferente da
forma conhecida em matemática:
– Expressão matemática:
X = {43 . [55 : (30 + 2) ] }
– Expressão Computacional:
X (43 * (55 / (30 + 2) ) )
90
Transformando Expressões 
Matemáticas em Computacionais
• Na forma computacional, as chaves e
colchetes são abolidos, utilizando-se em seu
lugar apenas parênteses
• É também substituído o sinal de (=) igual pelo
sinal de () implicado ou atribuído
• O sinal implicado ou atribuído () é utilizado
para indicar que o valor de uma expressão
aritmética está sendo armazenado em uma
variável
91
Transformando Expressões 
Matemáticas em Computacionais
• Exemplo: fórmula para calcular a área de um 
triângulo
– Expressão matemática:
– Expressão computacional:
A  (b * h) / 2
92
2
h . b
A =
Operadores Relacionais
93
Operadores Relacionais
• Uma condição é o estabelecimento de uma
relação lógica entre dois elementos
• Variável x Variável, Variável x Constante
• Para definir uma relação lógica é necessário
usar operadores relacionais
• Uma relação lógica retorna somente os
valores verdadeiro ou falso
• Os operadores relacionais possuem o mesmo
nível de prioridade
94
Operadores Relacionais
Símbolo Significado
= Igual a
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a
<> Diferente de
95
Operadores Lógicos
96
Operadores Lógicos
• Utilizados para uma mesma tomada de
decisão que necessite de mais de uma
condição
• Também conhecidos como operadores
booleanos
97
Símbolo Significado
e Conjunção
ou Disjunção
não Negação
Operador Lógico E
• Utilizado quando duas ou mais condições
necessitam ser verdadeiras para obter-se um
resultado lógico verdadeiro. Caso contrário, o
resultado do valor lógico será falso.
98
Condição 1 Condição 2 Resultado
Verdadeira Verdadeira Verdadeiro
Verdadeira Falsa Falso
Falsa Verdadeira Falso
Falsa Falsa Falso
Operador Lógico Ou
• Utilizado quando pelo menos uma de duas ou
mais condições necessita ser verdadeira para
obter-se um resultado lógico verdadeiro. Caso
contrário o valor lógico será falso
99
Condição 1 Condição 2 Resultado
Verdadeira Verdadeira Verdadeiro
Verdadeira Falsa Verdadeiro
Falsa Verdadeira Verdadeiro
Falsa Falsa Falsa
Operador Lógico Não
• Inverte o valor lógico de uma determinada
condição
100
Condição Resultado
Verdadeira Falso
Falsa Verdadeira
Operadores Lógicos - Prioridade
• Os operadores lógicos possibilitam o uso de mais de
uma condição para a tomada de uma única decisão
• É necessário levar em conta a ordem de prioridade
dos operadores lógicos
• Caso necessite alterar o nível de prioridade de uma
expressão deve ser utilizado parênteses
101
Operador Operação Prioridade
não Negação 1
e Conjunção 2
ou Disjunção 3
Operadores
Linguagem C
102
Operadores Aritméticos 
Linguagem C
• C oferece 6 operadores aritméticos binários (operam sobre
dois operandos) e um operador aritmético unário (opera
sobre um operando).
• Binários
= Atribuição
+ Soma
- Subtração
* Multiplicação
/ Divisão
% Módulo (Resto da divisão inteira)
• Unário
- Menos unário (Indica a troca de sinal)
• Precedência (mais alta -> mais baixa)
- (menos unário), * / %, + -
Para alterar a ordem de precedência, utilize parênteses.
103
Operadores de Incremento (++) e
Decremento (--)
• Considere os operadores abaixo que não são comuns em outras
linguagens:
++ incrementa de 1 seu operando
-- decrementa de 1 seu operando
• O operador de incremento (++) incrementa de um seu operando. Este
operador trabalha de dois modos:
– O primeiro modo é chamado pré-fixado e o operador aparece antes do nome
da variável.
– O segundo é o modo pós-fixado em que o operador aparece seguindo o nome
da variável.
• Em ambos os casos, a variável é incrementada. Porém quando ++n é
usado numa instrução, n é incrementada antes de seu valor ser usado, e
quando n++ estiver numa instrução, n é incrementada depois de seu
valor ser usado.
• Os operadores de incremento e decremento tem precedência sobretodos
os operadores aritméticos.
104
Operadores de Incremento (++) e
Decremento (--)
• Exemplo 1:
Se as seguintes linhas de programa forem executadas:
n = 5;
x = n++;
printf (“x = %d n = %d”, x, n);
a saída será: x = 5 n = 6
• Exemplo 2:
Se as seguintes linhas de programa forem executadas:
n = 5;
x = ++n;
printf (“x = %d n = %d”, x, n);
a saída será: x = 6 n = 6
105
Operadores Aritméticos de Atribuição
• Operadores Aritméticos de Atribuição
+=, -=, *=, /=, %=
• Cada um destes operadores é usado com um nome de variável à sua
esquerda e uma expressão à sua direita. A operação consiste em atribuir
um novo valor à variável que dependerá do operador e da expressão à
direita.
• Se x é uma variável, exp uma expressão e op um operador aritmético (+,
-, *, / ou %), então
x op= exp; equivale a x = (x) op (exp);
• Exemplos:
i += 2; equivale a i = i + 2;
x *= y + 1; equivale a x = x * (y + 1)
t /= 2.5; equivale a t = t / 2.5;
p %= 5; equivale a p = p % 5;
d -= 3; equivale a d = d – 3; 106
Operadores Relacionais
Linguagem C
• Os operadores aritméticos têm maior precedência que os
operadores relacionais.
107
Símbolo Significado
== Igual a
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a
!= Diferente de
Operadores Lógicos
Linguagem C
108
Operador Significado Precedência
! Negação – Não Lógico 1
&& Conjunção – E Lógico 2
|| Disjunção – OU Lógico 3
Precedência dos Operadores
Linguagem C
109
Operadores Tipos
! - ++ -- unários; não lógico e menos aritmético
* / % aritméticos
+ - aritméticos
< > <= >= relacionais
== != relacionais
&& lógico E
|| lógico OU
= += -= *= /= %= aritméticos de atribuição
Desvio Condicional Simples
110
Desvio Condicional Simples
• Recurso para tomada de decisão simples
• Deve ser utilizado caso seja necessário executar
instruções somente se uma condição for verdadeira
• A tomada de decisão simples utiliza a instrução
se...então...fim_se. Nesta instrução, se a condição
estabelecida for verdadeira, são executadas todas as
instruções definidas entre se...então e fim_se, depois
são executadas todas as condições existentes após
fim_se. Se a condição estabelecida for falsa, são
executadas as instruções que estão definidas após a
instrução fim_se
111
Desvio Condicional Simples
112
Diagrama de Blocos Português Estruturado
se condição então
instruções
fimse
Linguagem C
if (condição){
instruções;
}
Desvio Condicional Simples
Exemplo
• Ler dois valores numéricos, efetuar a adição e apresentar o seu resultado 
caso o valor somando seja maior que 10.
• Diagrama de Blocos:
113
Início
A, B
X  A + B
X > 10
N
Fim
X
S
Desvio Condicional Simples
Exemplo
• Português Estruturado:
programa SOMA_NUMEROS
var
A, B, X : inteiro
inicio
escreva “Digite dois numeros inteiros”
leia A, B
X  A + B
se X > 10 então
escreva X 
fimse
fim
114
Desvio Condicional Simples
Exemplo
• Linguagem C:
#include <stdio.h>
#include <stdlib.h>
main () {
int a, b, x;
printf (“Digite dois numeros inteiros \n“);
scanf (“%d%d”, &a, &b);
x = a + b;
if (x > 10) {
printf (“Soma: %d \n”, x);
}
system (“PAUSE”);
}
115
Desvio Condicional Composto
116
Desvio Condicional Composto
• se...então...senão...fimse
• Deve ser utilizado caso seja necessário executar instruções se
uma condição for verdadeira ou executar outras instruções se
a condição for falsa
• Nesta instrução, se a condição estabelecida for verdadeira,
são executadas todas as instruções definidas entre se...então
e senão. Se a condição estabelecida for falsa, são executadas
todas as instruções que estiverem definidas entre senão e
fimse
• Somente após a execução de uma das possibilidades
anteriores é que o programa executa as instruções existentes
após o fimse
117
Desvio Condicional Composto
118
Condição
N S
Instruções executadas 
quando a condição for 
verdadeira
Instruções executadas 
quando a condição for 
falsa
Diagrama de Blocos Português Estruturado
se condição então
instruções para cond. verdadeira
senão
instruções para cond. falsa
fimse
Linguagem C
if (condição){
instruções;
}
else {
instruções;
}
Desvio Condicional Composto
Exemplo
• Ler dois valores numéricos e efetuar a adição. Caso o valor somando seja maior ou
igual a 10, deve ser apresentado somando a ele 5; caso o valor somado não seja
maior ou igual a 10, deve ser apresentado subtraído dele 7.
• Diagrama de Blocos:
119
Início
A, B
X  A + B
X >= 10
N
Fim
S
R X - 7 R X + 5
R
Desvio Condicional Composto
Exemplo
• Português Estruturado:
programa SOMA_NUMEROS
var
A, B, X, R : inteiro
inicio
escreva “Digite dois numeros inteiros”
leia A, B
X  A + B
se X >= 10 então
R  X + 5 
senão
R  X – 7
fimse
escreva R
fim
120
Desvio Condicional Composto
Exemplo
• Linguagem C:
#include <stdio.h>
#include <stdlib.h>
main () {
int a, b, x, r;
printf (“Digite dois numeros inteiros \n”);
scanf (“%d%d”, &a, &b);
x = a + b;
if (x >= 10) {
r = x + 5;
}
else {
r = x – 7;
}
printf (“Resultado: %d \n”, r);
system (“PAUSE”);
}
121
Desvio Condicional Encadeado
122
Desvio Condicional Encadeado
(Aninhado)
• Utilizado quando é necessário estabelecer
algumas verificações lógicas de condições
definidas sucessivamente
123
Desvio Condicional Encadeado
Diagrama de Blocos
124
Condição 1
Condição 2
Instruções 
executadas quando a 
condição 1 é 
verdadeira
Instruções executadas 
quando a condição 1 é 
false, mas a condição 2 
é verdadeira
Instruções executadas 
quando a condição 1 e 
a condição 2 são falsas
N S
N S
Desvio Condicional Encadeado
Português Estruturado
se condição1 então
instruções para condição1 verdadeira
senão
se condição2 então
instruções para condição2 verdadeira, porém condição1 falsa
senão
instruções para condição1 e condição2 falsa
fimse
fimse
125
Desvio Condicional Encadeado
Linguagem C
if (condicao1) {
instruções;
}
else {
if (condicao2) {
instruções;
}
else {
instruções;
}
}
126
Desvio Condicional Encadeado
Exemplo
• Elaborar um algoritmo que efetue o cálculo do
reajuste de salário de um funcionário.
Considere que o funcionário deve receber um
reajuste de 15% caso seu salário seja menor
que 500. Se o salário for maior ou igual a 500,
mas menor ou igual a 1000, seu reajuste será
de 10%; caso seja ainda maior que 1000, o
reajuste deverá ser de 5%.
127
Desvio Condicional Encadeado
Exemplo
• Diagrama de Blocos:
128
salario < 500
salario <= 
1000
novoSalario 
salario * 1.15
novoSalario 
salario * 1.10
novoSalario 
salario * 1.05
N S
N S
Início
salario
novoSalario
Início
Desvio Condicional Encadeado
Exemplo
• Português Estruturado:
programa ReajustaSalario
var
salario : real
novoSalario : real
inicio
escreva “Salario: ”
leia salario
se salario < 500 então
novoSalario  salario * 1.15
senão
se salario <= 1000 então
novoSalario  salario * 1.10
senão
novoSalario  salario * 1.05
fimse
fimse
escreva novoSalario
fim 129
Desvio Condicional Encadeado
Exemplo
• Linguagem C:
#include <stdio.h>
#include <stdlib.h>
main () {
float salario, novoSalario;
printf (“Salario: ”);
scanf (“%f”, &salario);
if (salario < 500) {
novoSalario = salario * 1.15;
}
else {
if (salario <= 1000) {
novoSalario = salario * 1.10;
}
else {
novoSalario = salario * 1.05;
}
}
printf (“Novo Salario: %.2f \n”, novoSalario);
system (“PAUSE”);
} 130
Desvio Condicional Encadeado
O Comando else-if
• A construção else-if é uma maneira reformatada de nihos if-else:
#include <stdio.h>
#include <stdlib.h>
main () {
float salario, novoSalario;
printf (“Salario: ”);
scanf (“%f”, &salario);
if (salario < 500)
novoSalario = salario * 1.15;
else if (salario <= 1000)
novoSalario = salario * 1.10;
else
novoSalario = salario * 1.05;
printf (“Novo Salario: %.2f \n”, novoSalario);
system (“PAUSE”);
}
131
comando else-if
Esse else está associado
ao comando
if (salario <= 1000)
Desvio Condicional com Múltipla 
Escolha132
Desvio Condicional com Múltipla Escolha
• Deve ser utilizado quando houver a
necessidade de construir um programa no
qual seja necessário utilizar uma seqüência
grande de instruções do tipo se
133
Desvio Condicional com Múltipla Escolha
Diagrama de Blocos
134
VAR=VLR1
VAR=VLR2
VAR=VLRN
Instruções
Instruções
Instruções
Instruções
S
S
S
N
N
N
Desvio Condicional com Múltipla Escolha
Português Estruturado
escolha variável
caso valor1:
instruções
caso valor2:
instruções
...
caso contrário:
instruções
fimescolha 
135
Desvio Condicional com Múltipla Escolha
Linguagem C
switch (expressao) {
case constante1:
instruções; /*opcional*/
case constante2: /*opcional*/
instruções; /*opcional*/
....
default: /*opcional*/
instruções; /*opcional*/
}
136
O Comando switch
• O comando switch avalia a expressão entre parênteses, após
a palavra switch, e compara seu valor com os rótulos dos
casos.
• A expressão entre parênteses deve ser de valor inteiro ou
caractere.
• Cada caso deve ser rotulado por uma constante do tipo inteiro
ou caractere ou por uma expressão constante. Você não
poderá usar uma variável e nem uma expressão lógica para
rótulo. Esta constante deve ser terminada por dois pontos (:)
e não por ponto-e-vírgula.
• Pode haver uma ou mais instruções seguindo cada case. Estas
instruções não necessitam estar entre chaves.
137
O Comando switch
• O corpo de um switch deve estar envolto por chaves.
• Se um caso for igual ao valor da expressão, a execução
começa nele.
• Se nenhum caso for satisfeito e existir um caso default: a
execução começará nele, senão o programa processará as
instruções seguintes ao bloco switch. Um default: é opcional.
• Os rótulos dos casos devem ser todos diferentes.
• O comando break causa uma saída imediata do switch. Se não
existir um comando break seguindo as instruções de um caso,
o programa segue executando todas as instruções dos casos
abaixo.
138
Desvio Condicional com Múltipla Escolha
Exemplo
• Ler um número inteiro. Caso o número lido
seja 9, apresentar na tela O numero e igual a
9. Caso o número lido seja 10, apresentar na
tela O numero e igual a 10. Caso o número
lido seja igual a 11, apresentar na tela O
numero e igual a 11. Caso contrário,
apresentar na tela O numero esta errado.
139
Desvio Condicional com Múltipla Escolha
Exemplo
• Diagrama de Blocos:
140
num = 9
num = 10
num = 11
S
S
S
N
N
Inicio
num
“O numero 
esta errado”
N
Fim
“O numero e 
igual a 9”
“O numero e 
igual a 10”
“O numero e 
igual a 11”
Desvio Condicional com Múltipla Escolha
Exemplo
• Português Estruturado:
programa NUMEROS
var
num : inteiro
inicio
escreva “Digite um numero:”
leia num
escolha num
caso 9:
escreva “O numero e igual a 9”
caso 10: 
escreva “O numero e igual a 10”
caso 11: 
escreva “O numero e igual a 11” 
caso contrário: 
escreva “O numero esta errado”
fimescolha
fim
141
Desvio Condicional com Múltipla Escolha
Exemplo
• Linguagem C:
#include <stdio.h>
#include <stdlib.h>
main () {
int num;
printf (“Digite um numero: ”);
scanf (“%d”, &num);
switch (num) {
case 9:
printf (“O numero e igual a 9”);
break;
case 10:
printf (“O numero e igual a 10”);
break;
case 11:
printf (“O numero e igual a 11”);
break;
default:
printf (“O numero esta errado”);
}
system (“PAUSE”);
} 142
Estrutura de Repetição Enquanto
143
Estruturas de Repetição
• São necessárias quando se tem que repetir um determinado conjunto de
instruções, que representem um comportamento padrão, várias vezes
• Com estas estruturas, escreve-se as instruções uma única vez, e ela pode
ser executada várias vezes
• Repetições podem ser controladas por:
– Condição
– Contador
• Quando o controle é por contador, a interrupção é prevista no instante em
que é iniciada a execução da estrutura de repetição
• Quando o controle é por condição, deve haver uma expressão lógica, e a
interrupção é controlada por meio do resultado desta expressão
– É imprescindível que haja uma instrução dentro do bloco de instruções que permita a
alteração do valor lógico da condição
• As estruturas de repetição são também conhecidas como laços
144
Estrutura de Repetição Enquanto
• É uma estrutura que faz um teste lógico no início de um laço,
verificando se é permitido executar o trecho de instruções
subordinado a esse laço
• Esta estrutura tem o seu funcionamento controlado por
decisão, isto é, uma condição
• Executa um determinado conjunto de instruções enquanto a
condição verificada for verdadeira
• No momento em que a condição se torna falsa, o
processamento é desviado para fora do laço
• Se a condição for falsa logo de início, as instruções contidas
no laço são ignoradas
145
Estrutura de Repetição Enquanto
146
Diagrama de Blocos Português Estruturado
enquanto (condição) faça
instruções
fimenquanto
Linguagem C
while (condição){
instruções;
}
Estrutura de Repetição Enquanto
Exemplo 1
• Elaborar um algoritmo que calcule a média
aritmética de 3 notas de 30 alunos
• Diagrama de Blocos:
147
Estrutura de Repetição Enquanto
Exemplo 1
• Português Estruturado:
programa media
var
cont : inteiro
n1, n2, n3, m : real
inicio
cont  1
enquanto (CONT <= 30) faça
escreva “Digite 3 notas”
leia n1, n2, n3
m  (n1 + n2 + n3) / 3
escreva “Media: ”, m
cont  cont + 1
fimenquanto
fim
148
Estrutura de Repetição Enquanto
Exemplo 1
• Linguagem C:
#include <stdio.h>
#include <stdlib.h>
main () {
int cont;
float n1, n2, n3, m;
cont = 1;
while (cont <= 30) {
printf (“Digite 3 notas \n”);
scanf (“%f%f%f”, &n1, &n2, &n3);
m = (n1 + n2 + n3) /3;
printf (“Media: %.2f\n”, m);
cont = cont + 1;
}
system (“PAUSE”);
}
149
Contador
• Um contador é utilizado para contar o número de vezes que um bloco de
instruções é executado. Em estruturas de repetição, um contador ajuda a
contar quantas vezes o laço é executado.
• Um contador é uma variável que recebe ela mesma mais um valor
constante.
Exemplo: cont cont + 1
• Um contador deve ser inicializado
• Um contador deve ser incrementado
cont  1
enquanto (cont <= 30) faça
...
cont  cont + 1
fimenquanto
150
inicialização
incremento
Estrutura de Repetição Enquanto
Exemplo 2
• Elaborar um algoritmo que leia 10 números
inteiros positivos e apresente na tela a soma
dos números lidos.
• Diagrama de Blocos:
151
Estrutura de Repetição Enquanto
Exemplo 2
• Português Estruturado:
programa soma
var
num, cont, acum : inteiro 
inicio
cont  1
acum  0
enquanto (cont <= 10) faça
escreva “Numero Positivo: ”
leia num
acum  acum + num 
cont  cont + 1
fimenquanto
escreva “Soma: ”, acum
fim
152
Estrutura de Repetição Enquanto
Exemplo 2
• Linguagem C:
#include <stdio.h>
#include <stdlib.h>
main () {
int num, cont, acum;
cont = 1;
acum = 0;
while (cont <= 10) {
printf (“Numero Positivo: ”);
scanf (“%d”, &num);
acum = acum + num;
cont = cont + 1;
}
printf (“Soma: %d\n”, acum);
system (“PAUSE”);
}
153
Acumulador
• Um acumulador, também conhecido como somador, é utilizado para obter
somatórios. Em estruturas de repetição, um acumulador ajuda a acumular
valores cada vez que um laço é executado.
• Um acumulador é uma variável que recebe ela mesma mais o valor de
outra variável.
Exemplo: acum acum + num
• Um acumulador deve ser inicializado
• O valor adicionado ao acumulador a cada execução de laço é variável
– Diferente do contador, cujo valor adicionado é sempre constante
acum  0
enquanto (cont <= 10) faça
...
acum  acum + num
...
fimenquanto
154
inicialização
acumulação
Estrutura de Repetição Enquanto
• O Exemplo 2 utiliza o pré-conhecimento da quantidade de números
positivos a serem lidos para calcular a soma. Entretanto, se não
soubéssemos quantos números deveriam ser lidos, o que faríamos para
controlar o laço de repetição?
• Precisaríamos de um laço que fosse executado por uma quantidade
indeterminada de vezes.
• Assim, teríamos de encontrar outro critério de parada, que possibilitasseque o laço fosse finalizado após o último número positivo (independente
de quantos sejam) ter sido informado.
• Isso pode ser feito utilizando um valor predefinido como finalizador, a ser
informado após o último número positivo.
155
Estrutura de Repetição Enquanto
Exemplo 3
• Elaborar um algoritmo que efetue leituras
sucessivas de números inteiros positivos até
que um número negativo seja informado. Ao
final, apresentar a soma dos números
positivos informados.
• Diagrama de Blocos:
156
Estrutura de Repetição Enquanto
Exemplo 3
• Português Estruturado:
programa soma
var
num, acum : inteiro 
inicio
acum  0
escreva “Numero: ”
leia num
enquanto (num >= 0) faça
acum  acum + num 
escreva “Numero: ”
leia num 
fimenquanto
escreva “Soma: ”, acum
fim
157
Estrutura de Repetição Enquanto
Exemplo 3
• Linguagem C:
#include <stdio.h>
#include <stdlib.h>
main () {
int num, acum;
acum = 0;
printf (“Numero: ”);
scanf (“%d”, &num);
while (num >= 0) {
acum = acum + num;
printf (“Numero: ”);
scanf (“%d”, &num);
}
printf (“Soma: %d\n”, acum);
system (“PAUSE”);
}
158
Estrutura de Repetição Repita
159
Estrutura de Repetição Repita
• É uma estrutura que realiza um teste lógico no final do laço
• Esta estrutura tem o seu funcionamento controlado por
decisão, isto é, uma condição, porém executa um conjunto de
instruções pelo menos uma vez antes de verificar a validade
da condição estabelecida
• O comando repita tem seu funcionamento em sentido
contrário ao comando enquanto, pois sempre processa um
conjunto de instruções no mínimo uma vez até que a
condição seja verdadeira
• Se a condição for falsa, o laço continua
• Se a condição for verdadeira, o laço é encerrado
160
Estrutura de Repetição Repita
• Na Linguagem C, o resultado da avaliação da condição é
interpretado de maneira inversa ao Diagrama de
Blocos/Português Estruturado:
– Se a condição for verdadeira, o laço continua
– Se a condição for falsa, o laço é encerrado
161
Estrutura de Repetição Repita
162
Português Estruturado
repita
instruções
ateque (condição)
Linguagem C
do {
instruções;
} while (condição);
Diagrama de Blocos
Estrutura de Repetição Repita
Exemplo
• Elaborar um algoritmo que efetue a leitura
de uma série de valores, representando os
preços dos itens comprados por cliente. Ao
final, apresentar na tela o total a ser pago.
Para finalizar a entrada de dados o usuário
deve informar o valor zero.
• Diagrama de Blocos:
163
Estrutura de Repetição Repita
Exemplo
• Português Estruturado:
programa caixa
var
p, s : real 
inicio
s  0
repita
escreva “Preco: ”
leia p
s = s + p 
ateque (p = 0)
escreva “Total: ”, s
fim
164
Estrutura de Repetição Repita
Exemplo
• Linguagem C:
#include <stdio.h>
#include <stdlib.h>
int main () {
float p, s;
s = 0;
do {
printf (“Preco: ”);
scanf (“%f”, &p);
s = s + p;
} while (p != 0);
printf (“Total: %.2f\n”, s);
system (“PAUSE”);
}
165
Estrutura de Repetição Para
166
Estrutura de Repetição Para
• Os laços que possuem um número pré-conhecido de
execuções poderão ser processados por meio da estrutura de
repetição para
• Esta estrutura tem o seu funcionamento controlado por uma
variável denominada contador
• Executa um determinado conjunto de instruções certo
número de vezes
167
Estrutura de Repetição Para
168
Diagrama de Blocos
Estrutura de Repetição Para
169
Português Estruturado
para variável de inicio até fim passo incremento faça
instruções
fimpara
Linguagem C
for (inicialização, condição, incremento) {
instruções;
}
Estrutura de Repetição Para
Exemplo
• Elaborar um algoritmo que calcule a média
aritmética de 3 notas de 30 alunos
• Diagrama de Blocos:
170
Estrutura de Repetição Para
Exemplo
• Português Estruturado:
programa media
var
cont : inteiro
n1, n2, n3, m : real
inicio
para cont de 1 até 30 passo 1 faça
escreva “Digite 3 notas”
leia n1, n2, n3
m  (n1 + n2 + n3) / 3
escreva “Media: ”, m 
fimpara
fim
171
Estrutura de Repetição Para
Exemplo
• Linguagem C:
#include <stdio.h>
#include <stdlib.h>
int main () {
int cont;
float n1, n2, n3, m;
for (cont = 1; cont <= 30; cont++) { 
printf (“Digite 3 notas \n”);
scanf (“%f%f%f”, &n1, &n2, &n3);
m = (n1 + n2 + n3) /3;
printf (“Media: %.2f\n”, m); 
}
system (“PAUSE”);
}
172
Linguagem C
Operadores de Incremento (++) e Decremento (--)
• Considere os operadores abaixo que não são comuns em outras
linguagens:
++ incrementa de 1 seu operando
-- decrementa de 1 seu operando
• O operador de incremento (++) incrementa de um seu operando.
Exemplo:
cont++ equivale a cont = cont + 1
• O operador de decremento (--) decrementa de um seu operando.
Exemplo:
cont-- equivale a cont = cont - 1
• Os operadores de incremento e decremento devem ser usados somente
com operandos que são variáveis, isto é, o operando não pode ser um
valor constante.
173
Bibliografia
• Manzano, J. A. N. G.; Oliveira, J. F. Algoritmos: Lógica para
Desenvolvimento de Programação de Computadores. 21ª ed.
Ed. Érica, 2007.
• Forbellone, A. L. V. Lógica de Programação. 2ª ed. Ed. Makron
Books, 2000.
• Evaristo, J. Programando com PASCAL. 2ª ed. 2004.
Download: http://professor.ic.ufal.br/jaime/livros/pascal.htm
• Mizrahi, V. V. Treinamento em Linguagem C – Módulo I. Ed.
Makron Books, 1990.
• Schildt, H. C – Completo e Total. Ed. Makron Books, 1995.
174
http://professor.ic.ufal.br/jaime/livros/pascal.htm

Continue navegando