Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

E-BOOK
ALGORITMOS E 
PROGRAMAÇÃO
Introdução a Lógica de Programação 
APRESENTAÇÃO
A base fundamental de um programa de computador são os algoritmos e a lógica de 
programação. Esses conceitos, além de serem bases da programação de computadores, 
desenvolvem habilidades, como raciocínio lógico, que podem ser utilizadas na resolução dos 
mais diversos problemas das mais diversas áreas. 
Nesta Unidade de Aprendizagem, você estudará a construção de um algoritmo, os conceitos 
básicos envolvidos e como funciona a execução de um programa de computador. 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Conhecer o conceito de algoritmo: apresentação, exemplos e definição.•
Entender os conceitos de comandos, variáveis, expressões e instruções.•
Compreender as formas de execução de um programa: compilação e interpretação.•
DESAFIO
Acompanhe o seguinte caso de uso de um algoritmo:
Sua atividade é desenvolver um algoritmo que ajude na seguinte tarefa de pesquisa: qual sistema 
o celular usa? iOS ou Android? Todo dia a pesquisa deverá recomeçar, mas os valores do dia 
anterior deverão ser guardados.
Este desafio consiste em você escrever quais os passos necessários para realizar essa pesquisa. 
Você deverá escrever um algoritmo que ajude na coleta de dados e na análise deles: quantas 
pessoas foram entrevistadas, qual a quantidade de usuários de um sistema e de outro? Qual a 
idade média dos seus entrevistados?
Uma dica é escrever o algoritmo da forma mais detalhada possível. Lembre-se de que não existe 
certo e errado; o importante é atingir o objetivo. O foco desta atividade é um algoritmo, não um 
programa.
INFOGRÁFICO
Sabendo que um algoritmo nada mais é do que um conjunto de passos para se realizar uma 
tarefa, é importante compreender que não existe uma forma única de algoritmo, pois há várias 
formas de se cumprir um mesmo objetivo.
Acompanhe no infográfico como desenvolver um algoritmo.
CONTEÚDO DO LIVRO
Aprender a programar é uma das habilidades mais interessantes da computação. Para que esse 
aprendizado seja consistente, é importante compreender toda a lógica que envolve o 
desenvolvimento de um programa: lógica de programação, conceitos básicos e execução de um 
programa são tópicos que introduzirão você ao universo da programação.
Leia o capítulo Algoritmos e lógica de programação, da obra Algoritmos de programação, base 
teórica para esta Unidade de Aprendizagem.
Boa leitura.
ALGORITMOS DE 
PROGRAMAÇÃO
Marcela Santos
Introdução à lógica 
de programação
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Conhecer o conceito de algoritmo: apresentação, exemplos e definição.
 � Entender os conceitos de comandos, variáveis, expressões e instruções.
 � Compreender as formas de execução de um programa: compilação 
e interpretação.
Introdução
Já parou para pensar como é feito um jogo, um site da Internet ou um 
aplicativo do seu dispositivo móvel? Cada vez mais, usamos tecnologia 
desde o nosso trabalho até a nossa diversão. E que tal você aprender 
como os programas são desenvolvidos para poder criar seus próprios 
jogos, sites, etc.? A base fundamental de um programa de computador 
são os algoritmos e a lógica de programação. Esses conceitos, além de 
serem bases da programação de computadores, desenvolvem habilidades, 
como raciocínio lógico, que podem ser utilizadas na resolução dos mais 
diversos problemas nas mais diversas áreas.
Neste capítulo, você vai acompanhar a construção de um algoritmo, 
os conceitos básicos envolvidos e como funciona a execução de um 
programa de computador.
Algoritmo: apresentação, exemplos e definição
Um algoritmo nada mais é do que um conjunto de passos para a realização 
de uma determinada tarefa. O que é importante entendermos é que um algo-
ritmo não precisa ser necessariamente algo ligado à tecnologia. Na realidade, 
o tempo todo estamos criando algoritmos para realizarem diversas tarefas. 
Quer ver um exemplo?
Quando você vai sair de casa a caminho da faculdade, existe uma sequência 
de passos que você realiza, que tem uma ordem. As ordens das coisas que você 
precisa fazer para chegar à faculdade são escolhidas para te ajudar a realizar 
a tarefa: “ir para a faculdade”.
Outros exemplos:
 � Preparar um hambúrguer.
 � Fazer um avião de papel.
 � Trocar o pneu de um carro.
Exemplo — Preparar um hambúrguer
1. Cortar o pão e deixá-lo aberto com as partes de dentro voltadas para cima;
2. lavar a alface e o tomate;
3. fritar o hambúrguer;
4. colocar o hambúrguer sobre uma das partes do pão que está aberta;
5. colocar uma fatia de queijo, uma rodela de tomate e uma folha de alface sobre 
o hambúrguer;
6. fechar o pão com a outra parte que ficou sem nada sobre ela.
Pronto — sanduíche prontinho! Mas podemos fazer algumas perguntas 
sobre essa nossa aventura na cozinha:
 � Existe somente um jeito de fazer esse hambúrguer?
 � A ordem das atividades é importante?
Não existe uma única forma; o importante é que essas atividades sejam 
organizadas de tal forma que a tarefa “preparar um hambúrguer” seja realizada. 
Nesse momento, o importante é fazer, não importando se mais rápido, mais 
gostoso ou com mais recheio. Assim, a ordem é de extrema importância para 
que consigamos chegar ao objetivo final.
Afinal, o que isso tem a ver com computador? Bom, primeiro é preciso 
entender por que o uso de computador para resolução dos mais diversos pro-
blemas e das mais diversas tarefas tornou-se tão imprescindível. Para isso, 
vamos comparar o ser humano a um computador.
Introdução à lógica de programação2
O humano é um ser inteligente, capaz de realizar diversas tarefas, como, 
por exemplo, calcular o valor do desconto de um jogo que está prestes a 
comprar. Já um computador é uma máquina “burrinha”, que só executa o 
que mandamos. Em contrapartida, ele não se cansa. Imagina se você tivesse 
que calcular, durante o dia inteiro, o desconto da venda de uma loja? Poderia 
cansar-se e até cometer um erro, não é mesmo?
Então, é por isso que, desde quando foi criado até hoje, o papel fundamental 
do computador é ajudar o ser humano nas suas tarefas. Mas quem ensina o 
computador o que ele tem que fazer? Esse papel é do ser humano, que o faz 
por meio dos programas. 
Os programas de computador são conjuntos de instruções que o computa-
dor precisa realizar para poder concluir uma determinada tarefa. Então, um 
algoritmo, em computação, também é um conjunto de passos, só que o foco 
é desenvolver um programa de computador. 
Um algoritmo bastante famoso é o utilizado pelo Google, para realizar suas 
buscas. Ele foi desenvolvido a partir de 1995, pelos então estudantes Larry 
Page e Sergey Brin. Imagine que você tenha que realizar uma busca por nome 
em uma agenda telefônica — fica mais fácil se a agenda estiver organizada 
por nome, concorda? Então, os primeiros sistemas de busca ordenavam os 
sites dessa forma, sendo que o grande diferencial do Google foi utilizar um 
algoritmo que ordenasse os sites do mais acessado para os menos acessados. 
Dessa forma, a probabilidade do que o usuário estava procurando estar entre 
os primeiros é maior.
Os algoritmos estão em várias áreas — medicina, bolsa de valores, mo-
bilidade urbana. Seu uso está cada vez mais difundido, e aprender como 
escrever um algoritmo bem como torná-lo mais eficiente é uma habilidade 
muito importante para os profissionais das mais diversas áreas.
Algoritmo pode ser definido como uma sequência de passos que visam a atingir um 
objetivo definido (FORBELLONE; EBERSPÄCHER, 2005).
3Introdução à lógica de programação
Comandos, variáveis, expressões e instruções
No nosso exemplo do hambúrguer, falta pensarmos em uma coisa: saber 
como escrever e definir quais são os passos necessários. Bom, cada pessoa 
pode definir de um jeito, e isso poderia acontecer também ao escrevermos 
um algoritmo paraum programa de computador, o que tornaria o trabalho 
dos computadores muito mais complicado, pois cada pessoa poderia definir 
esses passos de uma forma. Em computação, costuma-se padronizar grande 
parte dos conceitos envolvidos, e a definição dos passos de um algoritmo 
também foi padronizada.
Por meio de comandos, podemos formar as instruções e as expressões. 
Assim, os comandos são os tijolos da nossa construção; com eles, o computador 
entende o que deve fazer. Escrever um texto na tela, por exemplo, pode ser a 
ação que será executada pelo comando “escrever <texto” que será escrito na tela.
Existem vários tipos de comandos: comandos para atribuição de valor, 
comandos para entrada e saída de dados, comandos para estruturas de seleção 
ou de repetição — vamos conhecer todos eles. Agora, você precisa saber 
que comando denota uma ação (ou um conjunto delas) que o computador irá 
executar, tem forma e segue algumas regrinhas.
Outra definição que usaremos ao longo de todo o nosso curso é a de 
variáveis. Durante a execução de um programa, dados são entregues ao 
computador, que, executando esse programa, modifica os dados e “responde” 
conforme o esperado. 
Exemplo — Operação de saque em um autoatendimento
1. Entrar com os dados de conta e senha; 
2. solicitar qual opção o cliente deseja realizar;
3. se for saque, solicitar o valor a ser sacado;
4. se existir saldo, entregar o dinheiro;
5. se não, mostrar a mensagem de “saldo indisponível” na tela; 
6. encerrar a operação.
Introdução à lógica de programação4
Esse valor que você solicitou é um dado que precisa ser armazenado na 
memória do computador. Essa região da memória do computador, onde guar-
damos, mesmo que temporariamente, o dado, chamamos de “variável”, e, como 
o próprio nome diz, pode sofrer mudança (variação) de valor.
Memória de um computador é o meio físico para armazenar dados temporariamente 
ou permanentemente. Para saber mais, consulte TANENBAUM, 2000.
Para podermos usar as variáveis, precisamos inicialmente criá-las. Em 
programação, a criação de uma variável é chamada de “declaração de uma 
variável”, que pode ser comparada ao ato de etiquetar pequenas gavetas para 
organizar diversos itens. A grande ideia por detrás da variável é que cada 
uma delas tem um nome e um tipo. Assim, somente os dados daquele tipo 
podem ser colocados na sua respectiva variável. Não daria para colocar um 
grampeador em uma gaveta etiquetada com canetas. Veremos mais detalhes 
sobre variável adiante.
Com as variáveis e os comandos, podemos formar as instruções e/ou 
expressões. Uma expressão é uma combinação de variáveis, comandos e 
operadores. Já uma instrução é uma operação única, que é executada pelo 
processador do computador. Assim, o programa de computador é formado por 
várias instruções. Em resumo, as instruções são formadas por comandos e/ou 
variáveis. Todas essas ferramentas são usadas para escrever um programa, 
utilizando o conceito de algoritmo. 
Representação de um algoritmo
Como foi visto, um algoritmo é um conjunto de passos para que uma tarefa seja 
realizada. Esses passos são organizados de forma lógica, a fim de se chegar 
ao objetivo final. Existem várias formas de se representar um algoritmo — até 
agora usamos o português para isso, mas existem representações gráficas: 
fluxograma e diagrama de Chapin. Vamos representar o algoritmo do saque, 
usando o fluxograma da Figura 1:
5Introdução à lógica de programação
Figura 1. Algoritmo do saque.
Fonte: Do autor.
INÍCIO
Solicitar dados
do usuário
Solicitar a opção
de operação
Se for
saque
Solicitar valor
a ser sacado
Saldo 
suficiente?
Mostrar mensagem
de saldo indisponível
Entregar o
valor solicitado
FIM
V
F V
As representações gráficas são mais fáceis de entender devido à sua própria 
natureza. A lógica envolvida fica mais clara, porém é preciso que se aprenda a 
padronização dos itens que podem ser usados. Por esse motivo, ao logo deste 
livro, usaremos o português para a representação dos algoritmos.
Para saber mais sobre a representação de algoritmos, consulte FORBELLONE; EBERS-
PÄCHER, 2005. 
Introdução à lógica de programação6
Execução de um programa: compilação e 
interpretação
Bom, já sabemos que um programa é um conjunto de instruções que são 
entregues ao computador para que ele realize determinada tarefa. Essa ação 
de realizar uma tarefa em computação chamamos de “execução de um pro-
grama”, e existem duas maneiras de um programa ser executado. Antes de 
passarmos para essa etapa, é importante dizer que os algoritmos, mesmo que 
padronizados, ainda não estão escritos em uma linguagem que o computador 
entenda. Existem várias linguagens que o computador entende: C, Java, Python 
são exemplos de linguagens de programação. Então, o processo de desenvolver 
um programa passa por estas etapas:
1. Entender o problema ou a tarefa que queremos que o programa execute.
2. Desenvolver um algoritmo.
3. Escrever o algoritmo em uma linguagem de programação — esse ar-
quivo com o algoritmo escrito em uma linguagem de programação é 
chamado de “código-fonte”.
4. Enviar o programa para que o processador o execute, compilando ou 
interpretando o código-fonte.
 ■ Compilar um arquivo é traduzir de uma linguagem para outra. As-
sim, quando compilamos um código-fonte, estamos transformando 
um arquivo escrito em uma linguagem de programação em uma 
linguagem que o processador pode executar, também chamada de 
linguagem de máquina. Exemplos de linguagens compiladas: C, 
C++, Erlang, Haskell.
 ■ Outras linguagens de programação são interpretadas, funcionando 
da seguinte forma: o código fonte é passado para o interpretador, 
que pega cada instrução escrita no código-fonte e a executa de forma 
direta, não realizando uma tradução de todo o código-fonte. Exemplos 
de linguagens interpretadas: Java, Python, Ruby, PHP.
 ■ A maior vantagem de uma linguagem compilada é a velocidade de 
execução. Como, nesse tipo de linguagem, o código-fonte é convertido 
diretamente em uma linguagem de máquina, a execução é mais rápida 
e eficiente quando comparada com uma linguagem interpretada 
especialmente em sistemas onde a complexidade é alta.
 ■ Já as linguagens interpretadas não precisam ser totalmente tradu-
zidas para um código de máquina, pois cada uma das instruções é 
executada diretamente pelo seu interpretador. Logo quando foram 
7Introdução à lógica de programação
inventadas essas linguagens, a velocidade do tempo de execução, 
quando comparadas com as linguagens compiladas, era, sem som-
bra de dúvidas, muito alta e a principal desvantagem quando feita 
essa comparação. Porém, com a invenção da tecnologia just-in-time 
(JIT), essa desvantagem continua existindo, mas bem menor. Essa 
técnica consiste em realizar uma tradução dinâmica, em tempo de 
execução e não antes da execução. Assim, a diferença de execução 
entre linguagens compiladas e interpretadas diminuiu.
 ■ Em contrapartida, um programa compilado precisa ser gerado para 
cada plataforma que for rodar: Windows, Linux, Mac OS. Já um 
programa interpretado pode rodar em qualquer máquina, já que sua 
“interpretação” é feita em tempo de execução, sendo que a única 
necessidade é ter o interpretador na máquina onde esse programa 
será executado. 
Para saber mais sobre JIT, consulte:
https://goo.gl/GjiWhs
FORBELLONE, A. L. V.; EBERSPÄCHER, H. F. Lógica de programação: a construção de 
algoritmos e estrutura de dados. São Paulo: Makron Books, 2005.
TANENBAUM, A. S. Sistemas operacionais. Porto Alegre: Bookman, 2000.
Introdução à lógica de programação8
DICA DO PROFESSOR
Existem várias linguagens de programação no mercado, mas há uma característica muito 
importante que precisa ser levada em consideração na hora da escolha.
No vídeo da Dica do Professor, você terá orientações sobre compiladores e interpretadores, 
ferramentas que nos auxiliam na tradução de um código-fonte.
Conteúdo interativo disponívelna plataforma de ensino!
EXERCÍCIOS
1) Um algoritmo pode ser considerado como um conjunto de passos para realizar 
determinada tarefa.
Imagine que você precisa fazer um avião de papel e propõe para um amigo que cada 
um escreva um algoritmo para realizar essa tarefa. Cada um escreve o seu; vocês 
constatam que eles são diferentes tanto na quantidade de passos como na própria 
descrição dos passos. Depois dessa fase, vocês trocam os algoritmos: você faz o avião 
com o algoritmo escrito pelo seu amigo e vice-versa. Seguindo cada passo, os dois 
conseguem fazer um avião de papel.
O que é possível afirmar sobre seus algoritmos?
A) Algo está errado, pois não é possível ter mais de um algoritmo para resolver a mesma 
tarefa.
B) Não existe algoritmo para fazer algo que não envolva tecnologia. Portanto, estes não são 
algoritmos.
C) Somente quem escreve um algoritmo pode interpretá-lo. Assim, cada um deveria ter feito 
o avião de papel com o seu próprio algoritmo.
D) Não é possível um ser humano escrever um algoritmo para fazer um avião de papel.
E) Os algoritmos escritos estão funcionando bem, visto que atingiram o objetivo: fazer um 
avião de papel.
2) Imagine um jogo de adivinhação de número. O número deve ser sorteado 
aleatoriamente, e o usuário adivinha um valor; se ele acertar, ganha o jogo. Caso 
contrário, o jogo avisa se você adivinhou um número muito grande ou muito 
pequeno. Um possível algoritmo para esse jogo pode ser visto a seguir:
Passo 1 – sortear um número;
Passo 2 – perguntar ao usuário qual número ele adivinhou;
Passo 3 – se for igual ao número sorteado, informar ao usuário que ele ganhou;
Passo 4 – ?
Passo 5 – ?
Escolha a opção que completa o algoritmo com os passos 4 e 5.
A) Passo 4 – se o número adivinhado for menor que o número sorteado, dar a dica para o 
usuário adivinhar um número menor; 
Passo 5 – se o número adivinhado for maior que o número sorteado, dar a dica para o 
usuário adivinhar um número maior.
B) Não é possível, pois é preciso saber o número sorteado para completar o algoritmo.
C) Passo 4 – se o número adivinhado for maior que o número sorteado, dar a dica para o 
usuário adivinhar um número menor; 
Passo 5 – se o número adivinhado for menor que o número sorteado, dar a dica para o 
usuário adivinhar um número maior. 
D) É impossível escrever um algoritmo para esse tipo de jogo de adivinhação.
E) Passo 4 – se o número adivinhado for menor que o número sorteado, dar a dica para o 
usuário adivinhar um número maior; 
Passo 5 – se o número adivinhado for maior que o número sorteado, dar a dica para o 
usuário adivinhar um número maior.
3) Uma variável é uma região de memória que serve para armazenar ________ que estão 
envolvidos(as) num programa. As variáveis são definidas com um ________ e um 
________.
Qual opção completa de forma correta essa afirmação?
A) Dados, nome e tipo.
B) Dados, nome e valor inicial.
C) Textos, tamanho e tipo.
D) Dados, valor inicial e tipo.
E) Letras, nome e tipo.
4) Um programa pode ser executado de duas formas: na primeira, o código-fonte é 
traduzido para a linguagem máquina e logo em seguida executado; na segunda, cada 
uma das instruções é executada de forma direta, sem a necessidade de tradução 
completa do código-fonte.
Em qual das alternativas estão essas duas formas de execução, respectivamente?
A) Interpretação e compilação.
B) Simplificação e execução dinâmica.
C) Compilação e tradução.
D) Compilação e interpretação.
E) Compilação e processamento.
5) Ao comparar o tempo de execução de uma tarefa por um programa de computador 
escrito em linguagem compilada com outro em linguagem interpretada, é possível 
afirmar que:
A) os programas interpretados são mais rápidos que os programas compilados.
B) não existe diferença entre o tempo de execução de programas compilados e interpretados.
C) os programas compilados são mais rápidos que os programas interpretados.
D) não é possível avaliar o tempo de execução de um programa somente sabendo como ele foi 
executado.
E) o tempo de execução de dois programas não pode ser mensurado para fins de análise.
NA PRÁTICA
Rafael é um estudante de medicina que estudou algoritmo e lógica de programação durante o 
ensino médio. Ele está em um dos vários estágios do seu curso e precisa analisar os sintomas de 
um paciente para chegar a um diagnóstico.
Usando seus conhecimentos de lógica de programação, Rafael desenvolve um algoritmo capaz 
de ajudá-lo.
Como Rafael está em estágio, ele tem o auxílio do seu professor, que gostou da ideia e o 
parabenizou pela ótima ferramenta de apoio para os estudantes, salientando que pode ser 
melhorada com o tempo e a experiência.
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Comece a Programar: 3 Passos Iniciais
Para complementar seus estudos, assista ao vídeo, que mostra os três principais passos para 
começar a programar.
Conteúdo interativo disponível na plataforma de ensino!
CS Discoveries: Variables (tem legenda)
O vídeo que mostra o que é uma variável e como sua definição é importante no 
desenvolvimento de algoritmos.
Conteúdo interativo disponível na plataforma de ensino!
A Hora do Código
Esta página é uma iniciativa mundial que visa a levar o ensino de programação a crianças de 10 
a 16 anos de forma divertida. Acesse e confira os cursos disponíveis.
Conteúdo interativo disponível na plataforma de ensino!
Introdução à Algorítmos e Lógica de 
Programação
APRESENTAÇÃO
É sem dúvida muito importante a programação em qualquer área, como na Engenharia, por isso, 
é de supra necessidade compreender um pouco o mundo da programação. Nesta Unidade de 
Aprendizagem, além de aprender o universo da programação, vocês terão os conceitos e a 
oportunidade de compreender um pouco dessa área. Para isso, utilizaremos um software 
chamado MATLAB, uma ferramenta que auxiliará no desenvolvimento de algoritmos.
Nesta Unidade de Aprendizagem, você vai estudar o conceito de lógica, o que é um algoritmo e 
como está relacionado com a lógica. Também irá aprender a identificar e definir o que são tipos 
de dados, operadores aritméticos, operadores relacionais, operadores lógicos, expressões 
aritméticas, expressões relacionais e as regras de precedências entre os operadores.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Identificar os algoritmos e sua lógica de programação na solução de problemas, a 
representação e os tipos de dados na construção de algoritmos. 
•
Aplicar os algoritmos e sua lógica de programação na solução de problemas.•
Operar de forma correta os tipos de dados e suas relações.•
DESAFIO
O Desafio – A Torre de Hanói!
A Lenda: o problema das torres de Hanói foi proposto pelo matemático francês Edouard Lucas, 
em 1883. Lucas elaborou para seu “invento” uma lenda curiosa sobre uma torre muito grande. A 
“torre de Brama”, que foi criada no “início dos tempos”, com três hastes contendo 64 discos 
concêntricos (mesmo centro). O “criador” do universo também criou uma comunidade de 
monges cuja única atividade seria mover os discos da haste original (“A”) para uma de destino 
(“C”). O “criador” estabeleceu que o mundo acabaria quando os monges terminassem sua tarefa. 
Porém, os monges deveriam respeitar as três regras para a sua execução.
É interessante observar que o número mínimo de "movimentos" para conseguir transferir todos 
os discos da primeira estaca à terceira é 2n-1, sendo n o número de discos.
Logo: Para solucionar um Hanói de 3 discos, são necessários 23 -1 movimentos = 7 
movimentos.
Para solucionar um Hanói de 7 discos, são necessários 127 movimentos.
Para solucionar um Hanói de 15 discos, são necessários 32.767 movimentos.
Para solucionar um Hanói de 64 discos, como diz a lenda, são necessários 
18.446.744.073.709.551.615 movimentos.
Usando um pouco de lógica e a ferramenta Matlab, você precisa escreverum algoritmo que 
solucione esse desfio!
Acompanhe, na imagem a seguir, as orientações.
INFOGRÁFICO
Em programação, os tipos de estruturas de controle disponíveis mudam de linguagem para 
linguagem. Nessa visão, temos os fluxos de execução de algoritmos, o primeiro é a continuação 
da execução em uma instrução após a outra instrução, como na estrutura sequencial. O segundo 
é a execução de um bloco de código somente se uma condição é verdadeira, esta chamada de 
estrutura de seleção. O terceiro é a execução de um bloco de código enquanto uma condição é 
verdadeira, ou de forma a iterar uma coleção de dados, sendo esta chamada de estrutura de 
repetição.
Acompanhe, no Infográfico a seguir, como esse conceito pode se inter-relacionar com essas 
estruturas.
CONTEÚDO DO LIVRO
Neste capítulo, você verá sobre a introdução a algoritmos e à lógica de programação e alguns 
conceitos, como fluxo e execução, com a estrutura sequencial, estrutura de seleção e de 
repetição, além do conceito de lógica, o que são algoritmos, tipos de dados, operadores 
aritméticos, relacionais, lógicos, precedência entre os operadores e expressões.
Leia o capítulo Introdução a Algoritmos e Lógica de Programação do livro Algoritmos e 
programação que é base teórica desta Unidade de Aprendizagem.
Boa leitura.
ALGORITMO E 
PROGRAMAÇÃO
Jeferson Faleiro Leon
Introdução a algoritmos 
e lógica de programação
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
  Criar, reconhecer, interpretar e aplicar os algoritmos e sua lógica de 
programação na solução de problemas.
  Identificar, diferenciar e aplicar a representação e os tipos de dados 
na construção de algoritmos e na solução de problemas.
  Operar de forma correta os tipos de dados e suas relações.
Introdução
Neste capítulo, você estudará o conceito de lógica, verá o que é um 
algoritmo e como ele está relacionado com a lógica. Além disso, aprenderá 
a identificar e definir o que são tipos de dados, operadores aritméticos, 
operadores relacionais, operadores lógicos, expressões aritméticas e 
expressões relacionais.
Conceitos de lógica de programação
A lógica não tem uma defi nição específi ca: inicialmente, era ligada à ma-
temática (lógica formal) e, atualmente, está relacionada a todas as áreas do 
conhecimento humano.
Podemos relacionar a lógica com a “correção do pensamento”, pois uma de 
suas preocupações é determinar quais operações são válidas e quais não são, 
fazendo análises das formas e leis do pensamento. Como filosofia, ela procura 
saber por que pensamos assim e não de outro jeito; como arte ou técnica, 
ela nos ensina a usar corretamente as leis do pensamento (FORBELLONE; 
EBERSPACHER, 2005). 
Algoritmos
Para Forbellone e Ebersoacher (2005), algoritmo é um conjunto fi nito de 
regras, bem defi nidas, que nos levam à solução de um problema em um 
tempo fi nito. Segundo Berg e Figueiró (2002), algoritmo é a descrição de 
um conjunto de ações que, obedecidas, resultam numa sucessão fi nita de 
passos, atingindo o objetivo. 
Para que se tenha um algoritmo, é preciso:
a) que se tenha um número finito de passos;
b) que cada passo esteja precisamente definido, sem possíveis ambiguidades;
c) que existam zero ou mais entradas;
d) que existam uma ou mais saídas;
e) que exista uma condição de fim, sempre atingida em tempo finito, para 
quaisquer entradas.
Os algoritmos são criados e reconhecidos por sua lógica de programação. 
Segundo Forbellone e Eberspacher (2005), a lógica está relacionada à coerência 
e à racionalidade; lógica de programação é a racionalização dos processos 
formais da programação de computadores e algoritmo é a sequência de passos 
que visam atingir um objetivo bem definido.
Os algoritmos podem ser visualizados por meio de um fluxograma 
convencional ou por meio de um fluxograma do tipo Chapin. Forbellone 
e Eberspacher (2005) fornecem um exemplo básico da diferença entre 
ambos e destacam que há uma série de vantagens e desvantagens para cada 
um desses fluxogramas. Por exemplo, o fluxograma convencional é mais 
fácil de desenhar e é previsto em etapas, enquanto o fluxograma Chapin 
pode compactar as perguntas de F e V ou S e N em somente um bloco, 
sendo considerado mais técnico e formal. Na Figura 1, você pode observar 
essas diferenças.
Introdução a algoritmos e lógica de programação2
Figura 1. Fluxograma convencional e fluxograma Chapin.
Fonte: Forbellone e Eberspacher (2005).
Tipos de dados (primitivos)
Para entender os tipos primitivos, voltemos nossa atenção para um conceito 
muito importante: a informação. Antes disso, vamos entender o que é um 
3Introdução a algoritmos e lógica de programação
dado? Dados são códigos que constituem a matéria-prima da informação, ou 
seja, é a informação não tratada que ainda não apresenta relevância.
A informação é constituída pelos dados tratados – o resultado do processa-
mento de dados são as informações. As informações têm significado e podem 
contribuir no processo de tomada de decisões.
Os dados podem ser classificados conforme seu tipo e os principais serão 
descritos a seguir.
Tipos numéricos
  Inteiros: é um número que não possui casas decimais; por exemplo, a 
idade de uma pessoa ou uma quantidade de itens num estoque.
  Real: é um número que possui casas decimais, ou seja, é um número 
fracionário; por exemplo, a altura de uma pessoa ou o peso de um 
determinado produto.
Tipos alfanuméricos
  Literal ou String: são os textos, que podem conter letras, números e 
caracteres especiais. Não são utilizados para cálculos.
Tipos lógicos 
  Booleano: é um dado que só pode conter 2 informações (verdadeiro 
ou falso).
Expressões
Expressões, no sentido matemático, são representações simbólicas de sequ-
ências de operações a serem feitas sobre determinados operandos visando a 
obtenção de um resultado. Necessitam-se de dois tipos de expressões para a 
elaboração de algoritmos: expressões aritméticas e expressões lógicas.
Introdução a algoritmos e lógica de programação4
Expressões aritméticas
Expressões aritméticas são aquelas cujos operadores são aritméticos e cujos 
operandos são constantes e/ou variáveis do tipo numérico (inteiro ou real).
Operadores aritméticos
Soma +
Divisão /
Quociente da divisão inteira Div
Radiciação //
Subtração -
Multiplicação ·
Resto da divisão inteira Mod
10 div 3 = 3 10 mod 3 = 1 3 div 5 = 0
25 div 5 = 5 25 mod 5 = 0 3 mod 5 = 3
5Introdução a algoritmos e lógica de programação
Funções matemáticas
Função Descrição Exemplo
sqr (x) Quadrado de x (x2) sqr (4) = 16
sqrt (x) Raiz quadrada de x ( ) sqrt (25) = 5
sen (x) Seno de x sen (90) = 1
cos (x) Cosseno de x cos (90) = 0
tg (x) Tangente de x tg (45) = 1
int (x) Parte inteira de x int (23,49) = 23
frac (x) Parte fracionária de x frac (23,49) = 49
pot (x,y) X na potência y (xy) pot (3, 2) = 9
abs (x) Valor absoluto de x abs ( -39) = 39
Sinal (x) Fornece o valor –1, +1 ou zero conforme o 
valor de x seja negativo, positivo pu nulo.
Sinal (-44) = -1
Precedência entre os operadores
Os operadores de mesma precedência na tabela são resolvidos da esquerda 
para a direita, na ordem que aparecerem na expressão.
Introdução a algoritmos e lógica de programação6
5 + 9 + 7 + 8 / 4
5 + 9 + 7 + 2 = 23
1 - 4 · 3 / 6 - 2 · 3
1 - 4 · 3 / 6 - 8
1 - 12 / 6 - 8
1 - 2 - 8 = -9
3 · 2 - 4 / 2 + abs (5 - 3 · 5) / 2
3 · 2 - 4 / 2 + abs (5 - 15) / 2
3 · 2 - 4 / 2 + abs (-10) / 2
3 · 2 - 4 / 2 + 10 / 2
9 - 4 / 2 + 10 / 2
9 - 2 + 5 = 12
Expressões lógicas
Expressões lógicas são aquelas cujos operadores são lógicos e/ou relacionais 
e cujos operandos são relações e/ou constantes e/ou variáveis de tipo lógico. 
O resultado de uma expressão lógica sempre é uma constante lógica (F - falso 
ou V - verdadeiro).
Operadores relacionais
= Igual < > Diferente
> Maior >= Maior ou igual
< Menor <= Menor ou igual
7Introdução a algoritmos e lógica de programação
2 · 4 = 24 / 3 = 8
V
2 + (8– 7) > = 3 · 6 - 15
2 + 1 > = 18 - 15
3 > = 3
V
Operadores lógicos
Símbolo Função
E Conjunção
Ou Disjunção (não-exclusiva)
Não Negação
O operador lógico E é utilizado quando dois ou mais relacionamentos lógicos 
de uma determinada condição necessitam ser verdadeiros. O operador lógico 
E faz com que somente seja executada uma determinada operação se todos as 
condições mencionadas forem simultaneamente verdadeiras, gerando, assim, 
um resultado lógico verdadeiro.
SE (NÚMERO > = 20) E (NÚMERO < = 90)
Então, escrever “Número válido no intervalo”
Se NÃO, escrever “Número inválido, não está no intervalo”
Fim-SE
Introdução a algoritmos e lógica de programação8
O operador lógico OU é utilizado quando pelo menos um dos relaciona-
mentos lógicos (quando houver mais de um relacionamento) de uma condição 
necessita ser verdadeiro. O operador lógico OU faz com que seja executada 
uma determinada operação se pelo menos uma das condições mencionadas 
gerar um resultado lógico verdadeiro.
SE (SEXO = ‘Masculino’) OU (SEXO = ‘Feminino’)
Então, escrever “O seu sexo é válido”
Se não, escrever “O seu sexo é inválido”
Fim-SE
O operador lógico NÃO é utilizado quando se necessita estabelecer que 
uma determinada condição dever ser não verdadeira ou deve ser não falsa. 
O operador lógico NÃO se caracteriza por inverter o estado lógico de uma 
condição, isto é, inverte o resultado lógico da condição.
Algoritmo prog1
Var
A, B, C, X: Inteiro
Início
Ler (X, A, B)
SE NÃO (X > 5)
Então C: = (A + B) · X
Se não C: = (A – B) · X
Fim-SE
Escrever (C)
Fim
9Introdução a algoritmos e lógica de programação
Tabelas verdade
Tabela verdade é o conjunto de todas as possibilidades combinatórias entre os 
valores de diversas variáveis lógicas, as quais se encontram em apenas duas 
situações, e um conjunto de operadores lógicos.
Operador E
A B A e B
V V V
V F F
F V F
F F F
Operador OU
A B A ou B
V V V
V F V
F V V
F F F
Operador NÃO
A A não B
V F
F V
Introdução a algoritmos e lógica de programação10
Prioridades
Entre operadores lógicos:
Entre todos os operadores:
BERG, A.; FIGUEIRÓ, J. Lógica de programação. 3. ed. Canoas: Ed. ULBRA, 2002.
FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lógica de programação: a construção de 
algoritmos e estruturas de dados. 3. ed. São Paulo: Pearson, 2005. 
Leituras recomendadas
CHAPRA, S. C. Métodos numéricos aplicados com MATLAB® para engenheiros e cientistas. 
3. ed. Porto Alegre: AMGH, 2013. 
OLIVEIRA, A. B.; BORATTI, I. C. Introdução à programação de algoritmos. Florianópolis: 
Visual Books, 2004. 
SOUZA, M. A. F. et al. Algoritmos e lógica de programação. 2. ed. São Paulo: Cengage, 
2012.
11Introdução a algoritmos e lógica de programação
 
DICA DO PROFESSOR
A importância de aprender programação passa pela compreensão de um problema, entender o 
que é um dado, uma informação, os tipos de dados (alfanuméricos, numéricos e boolenos), 
operadores (aritméticos, relacionais e lógicos) e expressões (aritméticas, relacionais e lógica).
Nesta Dica do professor, faço o convite para que você mergulhe nos estudos de algoritmos e 
 compreenda ainda mais o conteúdo que está estudando. 
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) O que são algoritmos?
A) Algoritmo é um conjunto finito de regras, bem definidas, que nos leva à solução de um 
problema em um tempo finito.
B) Algoritmo é um conjunto infinito de regras, bem definidas, que nos leva à solução de um 
problema em um tempo longo.
C) Algoritmo é um conjunto finito de regras, nada definida, que leva à solução de um 
problema em um tempo finito.
D) Algoritmo é a forma ambígua de escrever um programa de computador e que nos dá a 
ideia de um problema que o programador pensou em resolver.
E) Algoritmo é um elemento finito de regras, pouco definidas, que nos leva à solução de um 
problema em um tempo finito.
2) 
O fluxo de execução de um algoritmo consiste em estruturas. Quais são essas 
estruturas?
A) Sequencial, Aritmética e de Junção.
B) Sequencial, Seleção e Repetição.
C) Junção, de Seleção e de Repetição.
D) Repetição, de Artimética e de Seleção.
E) Aritmética, Seleção e Junção.
3) Existem alguns tipos de dados primitivos que podem ser números negativos, positivos 
ou nulos com e sem decimais, que apresentam letras e que apresentam valores de V 
ou F ou valores binários 0 ou 1. Quais são esses tipos primitivos de dados?
A) Lógicos ou booleanos, inteiros, estatísticos, probabilisticos.
B) Dados numéricos, dados científicos, lógicos, probabilísticos.
C) Dados de números Inteiros, reais, com caractere, lógicos ou booleanos.
D) Com caractere, simples, compostos, booleanos.
E) Dados de números inteiros, reais, compostos, booleanos.
As expressões são fórmulas matemáticas que auxiliam a obter um resultado 
numérico. Normalmente, são utilizadas para obter um resultado numérico para 
números inteiros e reais, ou para condições, ou para conjunções, disjunções e 
4) 
negações. Quais são essas expressões?
A) Exponenciais, Aritméticas, de Conjunção.
B) Aritméticas, Relacionais, Lógicas ou Booleanas.
C) Geométricas, de Razão, Exponenciais.
D) Geométricas, Relacionais, Lógicas ou Booleanas.
E) Lógicas ou Booleanas, de Razão, Geométricas.
5) Analise o seguinte trecho:
algoritmo "Modelo" 
var 
n: inteiro
inicio
escreval("Insira um número inteiro: ") 
leia(n) 
n = n * n; 
escreval("O ................... é : ",n)
fimalgoritmo
O que o irá acontecer com o valor lido, o que será mostrado como resultado?
A) O resultado é o QUADRADO do valor lido.
B) O resultado é o DOBRO do valor lido.
C) O resultado é a METADE do valor lido.
D) O resultado não é calculado, pois o tipo de dado não pode ser utilizado para fazer cálculos.
E) O resultado é o triplo do valor lido.
NA PRÁTICA
Vamos resolver um problema prático de um saltador de bungee jumping.
Se um saltador de bungee jumping vai pular de um penhasco, qual é a velocidade final no 
período de queda livre, a fim de que se possa determinar o comprimento e a resistência da corda.
Acompanhe, na imagem a seguir, como resolver esse problema.
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Por que todos deveriam aprender a programar?
No link a seguir, você verá pessoas famosas falando sobre como programação é algo muito 
legal, e que mais escolas deveriam ensinar programação para seus alunos.
Conteúdo interativo disponível na plataforma de ensino!
Lógica e programação
No link a seguir, você terá acesso a um vídeo que apresenta uma introdução sobre o que é e por 
que a lógica é indispensável para quem deseja entrar no mundo da programação.
Conteúdo interativo disponível na plataforma de ensino!
Primeiro Algoritmo - Curso de Algoritmos
No link a seguir, você terá acesso a uma videoaula que aborda sobre algoritmos de uma forma 
simples e intuitiva.
Conteúdo interativo disponível na plataforma de ensino!
A linguagem C - Conceitos Básicos
APRESENTAÇÃO
Da mesma forma que existem vários idiomas no mundo, na computação existem várias 
linguagens de programação, as LPs. LP é uma linguagem na qual os programas são escritos e 
que faz uma tradução do algoritmo para uma linguagem que o computador entenda. 
Nesta Unidade de Aprendizagem, você vai conhecer a linguagem C, também conhecida como a 
linguagem das linguagens, pois é bastante difundida no meio acadêmico e usada para que você 
dê os primeiros passos no mundo da programação. Você vai entender como surgiu a linguagem 
por meio do histórico da linguagem C, compreender a estrutura básica da linguagem, conhecer 
vários ambientes de desenvolvimento e configurar o que melhor se adaptar às suas 
necessidades. 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Reconhecer o histórico da linguagem C.•
Identificar a estrutura básica de um programa em C.•
Instalar ambientes de desenvolvimento da linguagem C.•DESAFIO
Assim, você precisa escolher um ambiente de desenvolvimento para a linguagem C e realizar a 
sua instalação. Você deve fazer uma pequena introdução do ambiente de desenvolvimento que 
foi escolhido, indicar qual sistema operacional utilizou e o passo a passo para a instalação, 
finalizando com um print da IDE.
INFOGRÁFICO
A linguagem de programação C é uma linguagem compilada: é preciso que o código-fonte passe 
por um programa chamado compilador. A saída desse processo é uma espécie de codificação 
que o computador entende.
Acompanhe no infográfico como esse processo acontece.
CONTEÚDO DO LIVRO
Para desenvolver programas, é preciso conhecimento de alguma linguagem de programação. 
Neste capítulo, você aprenderá um pouco mais sobre o que são essas linguagens e como elas 
funcionam, e entrará em contato com a linguagem C, uma das mais populares.
Leia o capítulo A linguagem C - Conceitos básicos, da obra Algorítmos de Programação, que 
serve de base teórica para esta Unidade de Aprendizagem.
Boa leitura.
ALGORÍTMOS DE 
PROGRAMAÇÃO 
Marcela Santos
A linguagem C – 
conceitos básicos
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Conhecer o histórico da linguagem C.
� Identificar a estrutura básica de um programa em C.
� Instalar e conhecer ambientes de desenvolvimento da linguagem C.
Introdução
Da mesma forma que existem vários idiomas no mundo, na computa-
ção, existem várias linguagens de programação, as LPs. Uma LP é uma 
linguagem na qual os programas são escritos e que faz uma tradução do 
algoritmo para uma linguagem que o computador entenda. 
Neste texto, você vai estudar sobre a linguagem C, também conhecida 
como a “linguagem das linguagens”, por ser bastante difundida no meio 
acadêmico e usada para que você dê os primeiros passos no mundo da 
programação. Você vai entender como surgiu a linguagem por meio do 
histórico da linguagem C, compreender a estrutura básica da linguagem, 
além de conhecer vários ambientes de desenvolvimento e configurar o 
que melhor adaptar-se às suas necessidades.
Histórico da linguagem C
Antes de começarmos a falar sobre C, que é a linguagem que usaremos, vamos 
entender o que é uma linguagem de programação. No capítulo Introdução 
à Lógica de Programação, falamos sobre Algoritmos e como o seu papel é 
importante no desenvolvimento de um programa. A Figura 1, a seguir, faz a 
representação de como um algoritmo ajuda na resolução de problemas.
Figura 1. Diagrama de como um algoritmo ajuda na resolução de problemas.
Problema Algoritmo
ProgramaSolução
Porém, se o algoritmo não está escrito em uma linguagem que o compu-
tador entenda, é preciso, então, fazer uma tradução da linguagem que nós, 
humanos, usamos para a que a máquina entenda. Essa tradução é feita por 
meio da utilização de uma linguagem de programação (LP). Existem várias 
linguagens de programação, com paradigmas e níveis de abstração diferentes.
Quando uma LP assemelha-se à linguagem falada ou escrita por um ser 
humano, ela é dita de alto nível, e, quando ela aproxima-se da linguagem de 
máquina, é dita de baixo nível. Da mesma forma que o Português, por exemplo, 
tem regras (sintaxe) para que seja compreendido por qualquer pessoa que fale 
esta língua, as LPs também têm um conjunto de regras com as quais é possível 
traduzir um algoritmo e gerar um programa.
Dito isso, podemos começar a falar da linguagem que vamos utilizar neste 
livro: a linguagem de programação C. A linguagem C é uma LP bastante 
popular, criada por volta de 1970, por Dennis Ritchie. 
A linguagem C foi desenvolvida nos laboratórios Bell, onde muitas de suas 
ideias iniciais surgiram de outra linguagem, a B, que tem como antecessoras as 
linguagens BCPL e CPL. CPL foi uma linguagem desenvolvida com o propósito 
de ser uma linguagem de alto e baixo níveis. A maior desvantagem da CPL foi 
que era muito pesada para o desenvolvimento de algumas aplicações. Em 1967, 
foi desenvolvida a Basic CPL – BCPL, que mantinha as características básicas 
da CPL. Ken Thompson, que trabalhava na Bell Labs, utilizou esse projeto para 
A linguagem C – conceitos básicos2
o desenvolvimento da linguagem B. Assim, B foi uma versão de BCPL escrita 
para o desenvolvimento de sistemas. Em 1972, Dennis Ritchie, trabalhando com 
Ken Thompson, desenvolveu uma linguagem também baseada na linguagem 
BCPL, mas que mantinha parte da especificação para acesso a hardware, ou 
seja, a parte das características de baixo nível da linguagem, conhecida como C.
A linguagem C é usada por programadores há muito tempo e poderosa no 
desenvolvimento dos mais diversos tipos de sistema, desde sistemas operacio-
nais, passando por compiladores, editores de texto, etc. Além da diversidade de 
sistemas, é importante ressaltar que C é uma linguagem que pode ser utilizada 
em máquinas com um alto poder de processamento, bem como em máquinas 
mais simples e com baixo poder de processamento.
Dentre as características de C, podemos destacar:
 � Portabilidade: os programas em C são compilados, gerando um único 
executável. Assim, é possível compilar um programa escrito em C para 
qualquer máquina, desde que exista compilador C para ela. Na prática, 
existem compiladores C para quase todos os computadores.
 � Poder e variedade dos operadores: é possível trabalhar com funções 
matemáticas, criação e manipulação de arquivos de Dos, dentre outras 
possibilidades. Isso tudo pode ser feito de forma simplificada, com 
adição de bibliotecas padronizadas, presentes na própria linguagem.
 � Sintaxe elegante, estruturada e flexível: indicada para quem está co-
meçando a programar.
 � Acesso facilitado à memória e a todo o hardware, quando preciso: 
assim, é possível ir de um programa simples até o desenvolvimento de 
um sistema operacional.
 � Uso de procedimentos e funções para desenvolver sistemas desacopla-
dos: sistemas desacoplados são sistemas onde é possível isolar pequenas 
partes para, por exemplo, encontrar erros sem causar nenhum dano ao 
restante do sistema.
Pela natureza de como foi desenvolvida, C também é chamada de lingua-
gem de Médio Nível, pois possui um conjunto de instruções necessárias para 
acesso ao hardware, como as linguagens de baixo nível (Assembly). Além 
disso, C pode ser simples e amigável, como uma linguagem de alto-nível 
deve ser. Uma linguagem de médio nível pode, em alguns casos, não prover 
as estruturas necessárias a uma linguagem de alto nível, mas certamente ela 
tem ferramentas que podem ser usadas como blocos para construção dessas 
estruturas necessárias.
3A linguagem C – conceitos básicos
A primeira versão de C foi criada por Dennis Ritchie, em 1972, nos laboratórios Bell, para 
ser incluída como um dos softwares a serem distribuídos juntamente com o sistema 
operacional Unix do computador PDP-11.
Estrutura básica da linguagem C
Neste ponto, você deve estar querendo saber como é escrito um programa que 
utiliza a linguagem C. A primeira coisa que temos que entender é o processo 
da criação desse programa. 
 � Com o algoritmo em mente, você deve traduzi-lo para C em um arquivo 
e salvá-lo com a extensão C. Por exemplo, imagine que eu escrevi meu 
primeiro programa em um arquivo que irei nomear de programa1; ao 
salvá-lo, esse arquivo precisa de um nome e de uma extensão; assim, 
esse arquivo ficaria como: programa1.c
 � A segunda parte é usar um compilador para gerar o programa. O com-
pilador nada mais é do que um programa que vai fazer toda a conversa 
e tradução do seu código-fonte para a linguagem mais baixa do sistema, 
a linguagem da máquina.
 � Pronto, agora seu programa foi criado. Basta somente executá-lo.
 � A Figura 2, a seguir, demonstra, por meio de um esquema, a criação 
de um programa compilado.
Figura 2. Como um programa compilado é criado?
A linguagem C – conceitos básicos4
Agora vamos entender a estrutura básica do nosso código-fonte, escrito em 
linguagem C. Mais à frente, veremos com o usodas ferramentas precisamos, 
mas, por hora, imagine que você abriu qualquer editor de texto da sua preferên-
cia e criou um arquivo novo, salvou-o com extensão C e, agora, chegou a hora 
de preenchê-lo com seu código em C, conforme exemplificado na Figura 3.
Figura 3. Primeiro programa em C.
Durante todo este livro, vamos explicar os códigos, usando os números 
das linhas na margem à esquerda dos códigos. Vamos a elas:
 � Falamos sobre uma das características do C, o uso de bibliotecas pa-
dronizadas. A linha 1 é o comando para adicionar a biblioteca padrão 
stdio.h no seu código-fonte. Uma das possibilidades que ela traz são 
comandos de entrada e saída de dados. 
 � Na linha 2, temos a declaração da função principal, que, em C, é cha-
mada de main, e a palavra int antes dela indica que deverá “devolver” 
algo do tipo inteiro. Depois de main, temos um par de parênteses vazio, 
indicando que ela não tem nenhum argumento.
 � Nas linhas 3 e 6, temos um par de chaves, entre as quais a magia 
acontece, onde todo o seu algoritmo, agora traduzido para C, ficará.
 � Na linha 4, temos um exemplo de instrução que escreve um texto na tela.
 � Por fim, na linha 5, temos o valor que a função main retorna, 0.
Sabemos que, a essa altura do livro, poucas dessas palavras parecem fami-
liares, mas calma: foi assim com todos os programadores profissionais — todo 
mundo, no início de aprendizado, passou por essa etapa. É preciso que neste 
início (principalmente) você estude e pratique como se estivesse aprendendo 
um novo idioma, como o inglês. Só assim tudo ficará mais familiar e, como 
os programadores dizem, “no sangue”.
5A linguagem C – conceitos básicos
No exemplo da Figura 4, o programa escreve algo na tela. Se você quiser 
escrever um programa, por exemplo, que soma 2 números, deverá substituir 
a linha 4 por toda a tradução do seu algoritmo. Então, a estrutura básica de 
um código C é a seguinte:
Figura 4. Estrutura básica de um programa em C.
Agora temos o código-fonte. Na próxima seção, vamos conhecer os am-
bientes para desenvolvimento e, assim, gerar o programa em C.
Ambientes de desenvolvimento com 
linguagem C
Existem dois caminhos a seguir em se tratando de desenvolvimento de pro-
gramas. Você pode usar um editor de texto e um compilador/interpretador da 
linguagem que escolher, ou um ambiente integrado de desenvolvido, também 
conhecido como IDE.
Muitas pessoas dizem que, no início dos estudos de programação, é me-
lhor usar um editor de texto, já que, em muitas vezes, uma IDE traz muita 
informação que ainda não é familiar ao estudante.
Neste livro, vamos dar a você sugestões de editores de texto e IDE, para que, 
assim, você possa fazer suas escolhas. Começando com os editores de texto:
 � Sublime Text, que pode ser usado em ambientes OS X, Windows ou 
Linux.
 � Atom, que também pode ser usado em OS X, Windows ou Linux.
 � Editores-padrão do seu sistema operacional.
A linguagem C – conceitos básicos6
Agora, as IDEs:
 � Dev-C++: ferramenta para desenvolvimento C e C++, para o ambiente 
Windows — essa ferramenta é bastante difundida no meio acadêmico.
 � Code::Blocks: ferramenta open-source, na qual se pode programar 
em C,C++ e Fortran. (existe versão para Windows, Linux e OS X) 
— uma das ferramentas mais flexíveis e com uma quantidade grande 
de plugins, o que pode ajudar durante o desenvolvimento de algum 
programa específico.
 � Visual Studio: ambiente de programação para o Windows e OS X — 
nessa IDE, é possível programar em várias linguagens, dentre elas a C.
 � Eclipse: uma das IDEs mais completas, na qual se pode programar 
(realizando a configuração adequada) em diversas linguagens — dis-
ponível para OS X, Windows ou Linux.
Alguns detalhes:
 � Se você escolher usar o editor de texto, é preciso instalar também o 
compilador C.
 � Se você escolher usar uma IDE, deve configurá-la para a linguagem 
C, no caso das IDEs que possuem uma vasta gama de possibilidade de 
linguagens de programação.
Escolhido o ambiente de programação, vamos criar nosso primeiro pro-
grama? Vamos usar aqui o editor de texto+compilador no ambiente Linux. No 
caso das IDEs, é preciso somente abrir um novo documento, “codar ”(termo 
da moda e moderninho pra programar!!!), e clicar no ícone responsável por 
compilar e/ou executar o programa. 
Como o editor simples foi o escolhido, é preciso, agora, ir para a linha de 
comando do Linux e digitar alguns comandos. É necessário acessar a pasta onde 
o arquivo.c esteja e, em seguida, basta digitar o seguinte: gcc nomedoarquivo.c 
-o nomedoprograma.
7A linguagem C – conceitos básicos
Linha de comando para compilação de um programa em C:
 � gcc — comando para executar o compilador C;
 � nomedoarquivo — o arquivo deve ter sido salvo com extensão C e é preciso estar 
na mesma pasta que ele;
 � -o — opção necessária para gerar o executável em C;
 � nomedoprograma — nome do programa que vai ser gerado; se não for digitado, 
o compilador gera um programa cujo nome será a.out.
Depois disso, e se tudo ocorreu bem, o compilador gera um programa com 
o nome nomedoprograma. Basta, agora, executá-lo — e você escreveu seu 
primeiro programa em C! Parabéns!
Além de IDEs, existem outras ferramentas para otimizar 
o desenvolvimento de software. Para maiores detalhes, 
acesse o link a seguir ou o código QR. 
https://goo.gl/79C11q
PINHEIRO, F. A. C. Elementos de programação em C. Porto Alegre: Bookman, 2012.
Leitura Recomendada
A linguagem C – conceitos básicos8
DICA DO PROFESSOR
O que é uma linguagem de programação? De que é formada uma linguagem de programação e 
quais os conceitos básicos da linguagem C?
Acompanhe o vídeo da Dica do Professor para receber orientações sobre esses conceitos e se 
familiarizar com a linguagem C.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) Sobre a linguagem C, é correto afirmar que:
A) sua portabilidade se dá pelo fato de que pode-se rodar um programa executável em 
qualquer sistema operacional, sem precisar recompilar.
B) os programas escritos em C têm alto grau de segurança.
C) essa linguagem tem características que permitem o uso do paradigma de orientação a 
objetos.
D) não tem recursos de baixo nível, ou seja, de acesso direto ao hardware.
E) é uma das linguagens indicadas para se começar a estudar programação, pois é considerada 
simples e bem-estruturada.
O seguinte programa está escrito em linguagem C. Qual a função da linha 1? 2) 
 
A) Acrescentar a biblioteca padrão da linguagem C para que se possa fazer entrada e saída de 
dados.
B) Incluir um tipo de arquivo de dados no programa.
C) Essa instrução pode ser retirada de acordo com o que está se desejando escrever no 
programa.
D) Não pode ser usada se serão feitas entrada e saída de dados.
E) Permite que mais de um usuário utilize o código.
3) O que é uma linguagem de programação?
A) É a linguagem utilizada pelos programadores para realizar documentação sobre os 
programas que eles escrevem.
B) É a linguagem falada pelos humanos, mas, em vez de uma conversa entre humanos, trata-
se de uma conversa entre humanos e um computador.
C) É a linguagem utilizada para escrever programas de computadores.
D) É a linguagem na qual os algoritmos são escritos.
E) É a linguagem composta por 0 e 1 e impossível de ser utilizada por um ser humano.
4) Utilizando o editor e o compilador, quais os passos para que se tenha um programa 
em C pronto para execução?
A) Escrever o programa em um arquivo, salvar o arquivo com extensão C e executá-lo na 
linha de comando.
B) Escrever o programa em um arquivo com extensão txt, com a seguinte linha de comando: 
gcc -o nomedoprograma.txt nomedoexecutavel.
C) Escrever o programa em um arquivo, salvar o arquivo com extensão c e compilar com a 
seguinte linha de comando: gcc nomedoprograma.c -o nomedoexecutavel.
D) Não é possível desenvolver um programa em C somente com editor de texto e compilador.
E) Escrever o programa em um arquivo com qualquer extensãoe compilar com a seguinte 
linha de comando: gcc -o nomedoprograma nomedoexecutavel.
5) A linguagem C é uma linguagem:
A) de médio nível e compilada.
B) de alto nível e interpretada.
C) de baixo nível e compilada.
D) de baixo nível e interpretada.
E) Nenhuma das alternativas anteriores.
NA PRÁTICA
Taís está em seu primeiro dia de trabalho no setor de desenvolvimento de sistemas em uma 
empresa de alta tecnologia. Seu primeiro dia se dá junto com o primeiro dia de estágio de 
Felipe, o estagiário da equipe de apoio.
 
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Linguagens mais Populares de 2017
Com tantas linguagens de programação no mercado, é interessante estar atento às linguagens de 
programação mais populares do ano para organizar os estudos. Neste video, você verá as 
linguagens de programação mais populares do ano de 2017.
Conteúdo interativo disponível na plataforma de ensino!
O que significa "COMPILAR" e quando você precisa fazer isso no Linux
O vídeo mostra como se dá o processo de compilação de um programa no sistema operacional 
Linux.
Conteúdo interativo disponível na plataforma de ensino!
Dia do Programador: alguns GRANDES Programadores da História
Quem foi a primeira pessoa a programar um computador? Quais foram as pessoas que 
começaram nesse universo incrível de programação? Neste vídeo, você vai conhecer alguns 
grandes programadores da história.
Conteúdo interativo disponível na plataforma de ensino!
O que eu preciso saber para virar engenheiro de software na Google?
A Google é uma das principais empresas de tecnologia e um dos grandes sonhos de emprego de 
muitos dos estudantes de computação. Quer saber o que você precisa fazer para se tornar um 
engenheiro de software da Google? Acesse o artigo e fique por dentro.
Conteúdo interativo disponível na plataforma de ensino!
Tipos de dados e Variáveis
APRESENTAÇÃO
Os dados que utilizamos nos programas de computadores precisam ser armazenados na memória 
do computador. A memória é como um grande arquivo cheio de gavetas e, para uma melhor 
organização, essas gavetas podem estar etiquetadas. Outro detalhe desse grande arquivo é que as 
gavetas podem ter tamanhos diferentes e, de acordo com o tamanho, guardam determinado tipo 
de objeto. Usando essa analogia, cada gaveta é uma variável que tem um nome (etiqueta) e um 
tamanho que representa o tipo de variável. 
Nesta Unidade de Aprendizagem, você vai compreender o que são variáveis e como definimos 
os tipos de dados que podemos armazenar nessas variáveis.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Identificar a diferença entre os tipos de dados.•
Realizar a inicialização e nomeação de variáveis.•
Aplicar a declaração de variáveis.•
DESAFIO
O seu desafio é escrever os tipos de dados numéricos e o seu range. Você deverá escrever isso 
de forma que os meteorologistas possam ajudá-lo a escolher o melhor tipo. Uma dica é, em vez 
de escrever a quantidade de bytes de cada tipo, mostrar qual o menor e o maior número que 
pode ser armazenado naquele tipo. Para entender melhor os tipos de dados em C e as faixas de 
valores, acesse: 
 
Conteúdo interativo disponível na plataforma de ensino!
INFOGRÁFICO
Acompanhe no infográfico a relação entre os tipos de dados e o espaço reservado na memória 
do computador.
CONTEÚDO DO LIVRO
Em programação, os dados são tão importantes quanto o próprio código. Sem dados, o programa 
não pode realizar nenhuma operação. Por isso, conhecer como armazenar esses dados, bem 
como que tipo de dados utilizamos, é uma das tarefas iniciais e de muita importância.
Leia o capítulo Tipos de Dados e Variáveis, da obra Algoritmos de Programação , que serve de 
base teórica para esta Unidade de Aprendizagem.
Boa leitura.
ALGORÍTMOS DE 
PROGRAMAÇÃO
Marcela Santos
Tipos de dados e variáveis
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
  Identificar a diferença entre os tipos de dados.
  Realizar a inicialização e nomeação de variáveis.
  Aplicar a declaração de variáveis.
Introdução
Os dados que utilizamos nos programas de computadores precisam ser 
armazenados na memória do computador. A memória é como um grande 
arquivo cheio de gavetas, e, para uma melhor organização, essas gavetas 
podem estar etiquetadas. Outro detalhe desse grande arquivo é que as 
gavetas podem ter tamanhos diferentes e, de acordo com eles, guardam 
determinado tipo de objeto. Usando essa analogia, cada gaveta é uma 
variável que tem um nome (etiqueta) e um tamanho que representa o 
seu tipo.
Neste capítulo, você vai compreender o que são variáveis e como 
definimos os tipos de dados que podemos armazenar nelas.
Diferença entre os tipos de dados
Um computador é uma máquina que processa dados. Ao escrevermos um 
programa, estamos, na verdade, realizando essa tarefa com os dados que o 
usuário entrega para a máquina. Por exemplo, quando queremos que um pro-
grama realize o cálculo da média entre duas notas, é preciso que, de alguma 
forma, o programa “receba” essas duas notas.
Os dados são os insumos que entregamos aos computadores para que eles 
realizarem a tarefa, utilizando, para isso, um programa computacional. Esses 
dados são armazenados em regiões de memória que chamamos de variáveis. 
Podemos pensar na memória do computador como um grande armário cheio 
de gavetas, as variáveis são as gavetas e, para uma melhor organização, cada 
uma possui uma etiqueta indicando o tipo de material que pode ser guardado 
nela: papel, envelopes, canetas.
As variáveis também possuem etiquetas que são os nomes das variáveis, e 
a classificação do que pode ser guardado em cada variável é dada pelos tipos 
de variáveis de uma determinada linguagem de programação.
Existem cinco tipos de dados em C, e cada um representa um tipo de 
informação. Os tipos são representados por uma palavra reservada da lin-
guagem, que são:
  int: números inteiros
  char: letras, caracteres, dados alfanuméricos
  float: números reais com precisão simples, ocupa 4 bytes na memória 
do computador
  double: números reais com precisão dupla, ocupa 8 bytes na memória 
do computador
  void:vazio
Além dos tipos, existem em C os modificadores de tipo:
  short: diminui o espaço em memória reservado para uma variável
  long: aumenta o espaço em memória reservado para uma variável
  unsigned: indica que a variável será guardada sem sinal
  signed: indica que a variável será armazenada com sinal
Como a ideia desse material é focar em algoritmos de programação, mas 
com nível básico, os modificadores não serão utilizados.
Tipos de dados e variáveis2
Inicializando e nomeando variáveis
Se retomarmos ao exemplo da gaveta, os nomes que estão escritos nas etiquetas 
identifi cam os elementos que estão na gaveta. Não é conveniente identifi car a 
etiqueta como caneta, sendo que o que está sendo guardado nela seja adesivos.
Uma palavra reservada de uma linguagem é uma palavra que faz parte da sintaxe e tem 
uma funcionalidade especificada na linguagem, não podendo ser usada para outro fim.
Com as variáveis, funciona da mesma forma. É conveniente colocar o 
nome das variáveis para ajudar na leitura de um código. Lembre-se de que 
você pode ter que reler o código para encontrar erros ou, até mesmo, outras 
pessoas precisem realizar a tarefa árdua de leitura de código alheio.
Escolha nomes que identifiquem as variáveis. Existem algumas regras que 
podem ajudar na hora de nomear uma variável:
  Evite começar com letra maiúscula e nunca use um número para co-
meçar uma variável.
  Não utilize caracteres especiais, como:, “, (,).
  Você não pode usar nenhuma palavra reservada como variável.
  Evite variáveis como a, b, n1,n2 , pois isso só tende a dificultar a 
leitura de código.
  Se a variável tem mais de uma palavra, a partir dasegunda, coloque a 
primeira letra da palavra em maiúscula, ou utilize underline. 
  Não coloque sinais de pontuação na sua variável.
Quando criamos um programa e utilizamos o conceito de variáveis, o 
compilador associa a uma região de memória o nome desta variável. A memória 
do computador é um recurso utilizado por todos os programas que estão sendo 
executados ou que pararam de ser executados em algum momento, ou seja, 
aquela região que agora é a variável do seu programa pode ter sido utilizada 
por outro programa, o que deixou alguma informação nessa parte da memória, 
como se fosse um lixo de dados.
3Tipos de dados e variáveis
O que podemos fazer, então, para evitar erros no nosso código devido a 
valores deixados na memória? Podemos limpar essa região de memória, e 
isso pode ser feito inicializando o valor de uma variável logo em seguida à 
declaração. A Figura 1 mostra a declaração e a inicialização de uma variável.
Figura 1. Declaração e inicialização de variáveis.
Declaração de variáveis
Quando um programa está sendo executado, signifi ca que ele está na memó-
ria do computador, onde armazenamos os dados nas variáveis. Precisamos 
solicitar que o computador reserve essa região de memória que possuirá um 
nome e um tipo.
O ato de solicitar essa região deve ser feito no programa e chama-se decla-
ração de variáveis. Em C, podemos declarar uma variável da seguinte forma:
Na linha 4, realizamos a declaração de uma variável; primeiramente, é 
preciso colocar o tipo da variável, seguida do nome dela, e, por fim, o ponto-
-e-vírgula que finaliza toda e qualquer linha em C. Na linha 5, inicializamos 
a variável idade com o valor 0, para que, assim, não corramos o risco de ter 
um valor indesejado armazenado nessa variável, sendo utilizado no nosso 
programa.
Vamos a outro exemplo. Imagine que você precise calcular a média de um 
aluno. O seu usuário precisa digitar duas notas e você precisa calcular a média. 
Vamos, nessa etapa, somente declarar e inicializar as variáveis necessárias.
Tipos de dados e variáveis4
Figura 2. Declaração simultânea de variáveis.
Observe que, na linha 4, declaramos na mesma linha 3 variáveis do tipo 
double, pois a média pode ser um número com vírgula. Essa é outra forma 
de declarar variáveis de mesmo tipo de forma simultânea. Nas linhas 5,6 e 
7, inicializamos essas variáveis para evitarmos quaisquer erros causados por 
“lixo” de dados presente na memória. A Figura 2 apresenta uma declaração 
simultânea de variáveis.
A definição do tipo das variáveis, do nome e de como você faz essas 
escolhas constitui uma etapa importante do desenvolvimento de programas. 
Faça essas escolhas com calma e analisando bem o que você utilizará e como.
PAES, R. B. Introdução à Programação com a Linguagem C. São Paulo: Novatec, 2016. 
296p.
PINHEIRO, F. A. C. Elementos de programação em C. Porto Alegre: Bookman, 2012. 548p.
Leituras recomendadas
5Tipos de dados e variáveis
Encerra aqui o trecho do livro disponibilizado para 
esta Unidade de Aprendizagem. Na Biblioteca Virtual 
da Instituição, você encontra a obra na íntegra.
Conteúdo:
DICA DO PROFESSOR
O que são variáveis e para que elas servem? Como definir os tipos de dados que serão utilizados 
em um programa? Acompanhe o vídeo da Dica do Professor e tenha orientações sobre esses 
conceitos e como a linguagem C trata essas questões.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) Você precisa declarar uma variável "idade" do tipo inteiro. Qual a maneira correta 
de fazer isso em C?
A) int idade;
B) idade int;
C) inteiro idade;
D) Não é preciso declarar em C; o simples uso da variável faz ela passar a existir.
E) float idade;
2) Ao declarar uma variável que armazena um caractere, você escreveu a seguinte linha 
de código: char -nome; Ao compilar o programa, verificou que essa declaração gerou 
um erro de sintaxe. Qual a alternativa que indica esse erro? 
A) -nome é uma palavra reservada; por esse motivo, ocorreu o erro.
B) char não é um tipo existente em C.
C) Variáveis não devem começar com caracteres especiais como o hífen utilizado na 
declaração.
D) Durante a declaração, não é preciso o ponto e vírgula no final da linha de código.
E) Faltou inicializar a variável, pois, em C, não podemos usar uma variável sem antes 
inicializá-la.
3) Qual a maneira correta de declarar uma variável em C?
A) A declaração é feita primeiro colocando-se o tipo da variável, seguido do nome da variável 
e finalizando a instrução com ponto e vírgula. O tipo é dado por palavras reservadas da 
linguagem em que se está programando.
B) Não se declara variável em C.
C) A declaração é feita colocando-se o nome da variável, seguido do tipo de variável e 
finalizando a instrução com ponto e vírgula. O tipo é dado por palavras reservadas da 
linguagem em que se está programando.
D) A declaração é feita colocando-se o nome da variável, seguido do caractere especial : (dois 
pontos). Em seguida, coloca-se o tipo de variável e finaliza-se a instrução com ponto e 
vírgula. O tipo é dado por palavras reservadas da linguagem em que se está programando.
E) A declaração é feita colocando-se o tipo da variável, seguido do caracter especial : (dois 
pontos). Em seguida, coloca-se o nome da variável e finaliza-se a instrução com ponto e 
vírgula. O tipo é dado por palavras reservadas da linguagem em que se está programando.
Você precisa armazenar os seguintes dados: 
 
- Salário bruto; 
4) 
- Sexo, que será representado por F (Feminino), M (Masculino) ou N (prefiro não 
declarar); 
- Idade, em anos. 
 
Quais são os tipos dessas variáveis?
A) int, char e double.
B) double, char e double.
C) double, char e int.
D) int, char e int.
E) char, double e int.
5) Por que, em alguns casos, é interessante inicializar uma variável em C?
A) Porque o nome da variável pode já ter sido usado por algum programa.
B) Porque essa técnica é obrigatória em todo programa e todas as variáveis em C.
C) Porque é uma boa prática para um melhor entendimento do código-fonte.
D) Para não corrermos o risco de utilizar um valor armazenado anteriormente por outro 
programa naquele espaço de memória.
E) A inicialização de uma variável é desnecessária em C.
NA PRÁTICA
Fernando é estagiário do setor de recursos humanos de uma empresa e está desenvolvendo um 
programa em C para calcular salário bruto, salário líquido e descontos de funcionários da 
empresa onde ele trabalha. Além disso, ele gostaria de saber a quantidade de funcionários que se 
declaram do sexo masculino ou do sexo feminino e a quantidade de funcionários que não 
gostaria de declarar o seu sexo.
Como dados, ele tem a quantidade de horas trabalhadas, o nome do funcionário e o valor da 
hora. Além disso, ele obteve as porcentagens de desconto.
Porém, Fernando ficou confuso sobre quais aspectos precisa levar em consideração na escolha 
das variáveis para desenvolver esse programa e pediu ajuda a um colega da área de 
programação.
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Lógica de Programação
Os algoritmos são formados por instruções e dados. Acompanhe no vídeo um resumo sobre 
tipos de dados, variáveis, constantes e instruções.
Conteúdo interativo disponível na plataforma de ensino!
Projeto torne-se um programador - Uso de variáveis
Se você quer se tornar um programador, um passo muito importante é entender o que é uma 
variável e como usá-la. Assista ao vídeo para entender como uma variável é armazenada e como 
se dá o uso dela.
Conteúdo interativo disponível na plataforma de ensino!
Declaração de Variáveis, Leitura e Escrita de Dados
Os algoritmos são formados por instruções e dados. Acompanhe no vídeo um resumo sobre 
tipos de dados, variáveis, constantes e instruções.
Conteúdo interativo disponível na plataforma de ensino!
Entrada e saída de dados
APRESENTAÇÃO
A tarefa de um programa de computador é receberdados por meio de instruções de entrada, 
processar essas informações de acordo com a lógica criada e traduzida para uma determinada 
linguagem de programação e entregar esses dados processados utilizando as instruções de saída 
de dados.
Nesta Unidade de Aprendizagem, você irá estudar uma parte importante do desenvolvimento de 
sistemas: as instruções necessárias para realizar a entrada e a saída de dados em um programa de 
computador.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Definir função.•
Aplicar as funções printf() e scanf().•
Desenvolver códigos de formatação.•
DESAFIO
A linguagem C é uma linguagem amplamente utilizada pela comunidade de desenvolvedores e 
uma linguagem de referência para cursos de ciência da computação em todo o mundo, 
juntamente com Python e Java. Procedural e estruturada, C provavelmente é uma das 
linguagens de programação mais conhecida no mundo.
Considere que você é funcionário do cinema de um shopping. Seu gerente pediu que 
desenvolvesse um programa em C para calcular o valor de ingressos do cinema e fornecer aos 
usuários. O programa deve apresentar ao usuário as opções de filme e o valor total dos 
ingressos, com custo de 12,50 reais cada. Além disso, o valor do ingresso deve ser facilmente 
modificado no código. 
As opções de filme são: 
Se o usuário escolher a opção 1: Vingadores 4 – da Marvel 
Se o usuário escolher a opção 2: Como Treinar o Seu Dragão 3 
Se o usuário escolher a opção 3: Dumbo 
Se o usuário escolher a opção 4: Shazam! 
Neste desafio demonstre como organizar o código para fazer a entrada de dados usando as 
funções printf e scanf. Ao final o usuário tem que ser informado sobre as opções escolhidas. 
INFOGRÁFICO
Uma função é um subprograma que só é executado quando chamado, evitando repetições, ou 
seja, podemos pegar esse trecho de código que irá se repetir e colocar dentro de um bloco - uma 
função.
Outra característica é que as funções ajudam a dividir um programa, deixando o código mais 
organizado. Cada função executa uma operação predetermina. Existem funções predefinidas 
como: printf () e scanf(), e as funções definidas pelo usuário.
Uma função pode ser pensada como uma caixa-preta, quando se utiliza uma função não é 
necessário "estar a par" de todo o código existente dentro dela, apenas saber o que precisa 
entregar para a função (se precisa) e o que ela vai entregar (se entregar).
Acompanhe no Infográfico como a caixa-preta funciona, arrastando a seta.
Conteúdo interativo disponível na plataforma de ensino!
CONTEÚDO DO LIVRO
Os computadores precisam de dados, que são processados pelos programas, para executar as 
suas tarefas. É preciso que nos programas existam instruções para que esses dados sejam 
inseridos e, além disso, instruções para que a resposta desse processamento seja mostrada. Essas 
instruções são as instruções de entrada e de saída.
Leia mais no capítulo Entrada e saída de dados, da obra Algoritmos de programação, que serve 
como base teórica para esta Unidade de Aprendizagem.
Boa leitura.
ALGORITMOS DE 
PROGRAMAÇÃO 
Marcela Santos
Entrada e saída de dados
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Descrever o conceito de função.
� Aplicar as funções printf() e scanf().
� Usar códigos de formatação.
Introdução
Os programas de computador são sistemas que processam dados. A tarefa 
de um programa de computador é receber dados por meio de instruções 
de entrada, processar essas informações de acordo com a lógica criada e 
traduzida para uma determinada linguagem de programação e entregar 
esses dados processados, utilizando as instruções de saída de dados.
Neste capítulo, você estudará uma parte importante no desenvol-
vimento de sistemas: as instruções necessárias para realizar a entrada e 
saída de dados em um programa de computador.
O conceito de função
Para explicar o conceito de função, vamos começar com o seguinte código:
Figura 1. Código-fonte: o conceito de função.
Na linha 4, temos o uso de uma função existente em C, a printf. Esta
função escreve na tela o texto existente em parênteses e entre aspas. Existe 
uma complexidade gigante para que seja escrito na tela do computador um 
valor e existam instruções específicas para isso.
Uma função é um conjunto de instruções que realizam uma determinada tarefa. Para 
que fique mais fácil o uso, elas têm nome. 
Seria preciso um conjunto dessas instruções todas as vezes em que essa 
operação fosse necessária em um programa. Para facilitar esse trabalho, em 
programação, existem dois conceitos muito importantes: biblioteca e funções.
Na vida real, também temos algo parecido. Imagine que você tenha que 
fazer café. Automaticamente nós já realizamos todas as tarefas que estão en-
volvidas: colocar água para ferver, colocar o pó do café, esperar a água ferver 
e despejar a água quente sobre o pó de café (essa é a maneira que eu faço café!)
Então todas as vezes que eu vou fazer café, mando essas informações 
automaticamente para o meu cérebro. Em programação, é a mesma coisa: uma 
função é um conjunto de instruções organizadas em bloco, que possuem um 
nome e, quando for preciso, é chamada por meio deste.
As funções podem ser criadas pelos programadores ou podem estar in-
cluídas nas bibliotecas de uma determinada biblioteca — e é aqui que entra 
o nosso segundo conceito: uma biblioteca de programação é um conjunto de
funções que já foram pré-definidas por outros programadores; você precisa
simplesmente adicionar a biblioteca ao seu programa e utilizar as funções.
Esse é o caso da função printf, presente na linha 4 do código apresentado 
na Figura 1. Agora, vamos aprender mais sobre essa e outra função, que são 
as funções básicas de entrada e saída na linguagem C.
Entrada e saída de dados2
As funções printf() e scanf()
Um computador é uma máquina que faz uso de programas e dados para realizar 
tarefas. Esses programas recebem esses dados, processam e entregam-nos 
como resposta a algum tipo de problema. Os programas são compostos de 
instruções que fazem esse processamento. Essas instruções podem ser funções 
de entrada e de saída, e é sobre elas que iremos tratar.
Vale a pena ressaltar que estamos tratando da linguagem de programação 
C, e essas funções sãos funções desta linguagem.
Para usar as funções scanf e printf, é preciso incluir a biblioteca stdio.h no código-fonte, 
por meio da linha
#include <stdio.h>
A função printf é a função de saída de dados no vídeo. Todas as funções 
têm uma sintaxe, que é uma regra que mostra como ela deve ser usada e qual 
o resultado esperado. A sintaxe de printf está representada na Figura 2, 
a seguir:
Figura 2. Sintaxe da função printf.
printf(”entrada de dados”);
aqui você digita o 
texto que deseja
apresentar na tela.
3Entrada e saída de dados
Essa é a forma mais básica para utilizarmos essa função, quando queremos 
simplesmente apresentar na tela uma mensagem de texto. Mas pode haver 
situações em que queremos apresentar o valor de uma variável. Quando isso 
for necessário, basta que, em vez do texto, coloquemos somente a variável 
sem as aspas. 
Mas ainda pode existir a situação em que queremos apresentar um texto 
e uma variável na mesma saída de dados. Para entendermos como isso pode 
ser feito, vamos analisar o seguinte código, na Figura 3:
Figura 3. O uso de printf com código de formatação.
Esse código mostra o ano que a pessoa nasceu, usando, para isso, uma 
variável que contém a idade da pessoa. Foram definidas 3 variáveis do tipo 
inteiro: idade, anoAtual e anoNascimento. 
As variáveis idade e anoAtual possuem valores iniciais, ou seja, não temos 
uma entrada de dados por parte do usuário que executa o programa criado 
com esse código-fonte. A variável anoNascimento é calculada usando-se dois 
operadores: o de atribuição e o de subtração — esses operadores serão vistosem capítulos posteriores. 
Entrada e saída de dados4
Nesse primeiro momento, vamos entender o que a linha 6 faz, conforme 
representação na Figura 4:
Figura 4. Expressão usando operadores e uma variável.
Depois de realizar a operação, que fica à
esquerda dessa expressão, o valor é
armazenado dentro da variável
anoNascimento
Essa operação subtrai
do valor 2018 o valor
armazenado na variável
idade
Com o valor armazenado na variável anoNascimento, falta realizarmos 
a saída de dados, ou seja, escrever esse valor na tela. Isso é feito na linha 7, 
utilizando-se a função printf, só que desta vez essa função é usada com 
um código de formatação e a concatenação de uma variável.
Concatenar uma variável é unir variáveis e/ou textos na mesma saída de 
dados, por exemplo. Para isso, adicionamos, ao final do texto que deverá 
aparecer na tela, uma vírgula (,), seguida das variáveis. Cada variável que é 
adicionada tem um tipo, e é preciso “avisar” ao printf que tipo é esse, para 
tal, o C tem o conceito de códigos de formatação. Mas antes de entendermos o 
que sãos os códigos de formatação, vamos à nossa função de entrada de dados.
Bom, agora vamos para a próxima função, a scanf. Da mesma forma 
que a função printf é uma função que está em uma biblioteca padrão do 
C, scanf também está; a diferença é que scanf é uma função de entrada 
de dados.
5Entrada e saída de dados
Vamos usar um exemplo de uso, apresentado na Figura 5, a seguir:
Figura 5. Código-fonte com o uso de printf e scanf.
Esse programa pede ao usuário que ele digite sua idade e o ano atual e, 
com esses dados, ele calcula o ano do nascimento. Na linha 6, temos o uso 
da função printf, que mostra na tela o texto, informando ao usuário a 
solicitação do dado.
Em seguida, aparece o uso da função scanf. Quando o usuário digitar um 
valor e teclar enter, a linha 7 pode ser traduzida para: “armazene na variável 
idade o valor inteiro que foi digitado”. A sintaxe básica da função scanf é 
a que está representada na Figura 6:
Figura 6. Sintaxe da função scanf.
O primeiro valor da função
scanf é o código de
formatação entre aspas
Já o segundo valor,
também chamado
de parâmetro, é a
variável, precedida 
de &
Entrada e saída de dados6
Podemos, também, receber mais de um número no mesmo scanf, con-
forme pode ser visto no exemplo da Figura 7, a seguir:
Figura 7. Código-fonte de um programa que soma dois valores, recebidos no mesmo scanf.
Códigos de formatação
Os códigos de formatação em C começam com % e permitem que as funções de 
entrada (scanf) e saída (printf) expressem os tipos de dados armazenados 
nas variáveis. Indicam o tipo do dado. 
 � %c: imprime o conteúdo da variável com representação ASCII.
 � %d: imprime o conteúdo da variável com representação decimal com 
sinal.
 � %u: imprime o conteúdo da variável com representação decimal sem 
sinal.
 � %o: imprime o conteúdo da variável com representação octal sem sinal.
 � %x: imprime o conteúdo da variável com representação hexadecimal 
sem sinal.
 � %f: imprime o conteúdo da variável com representação com ponto 
decimal.
 � %e: imprime o conteúdo da variável com representação em notação 
científica (exponencial).
 � %g: formato geral, escolhe a representação mais curta entre %f e %e.
Além desses códigos de formatação em C, nós temos as sequências de 
escape que podem auxiliar para impressão de texto na tela de forma formatada. 
Dentre elas, os mais usados são.
7Entrada e saída de dados
 � \n: quebra de linha
 � \t: realiza uma tabulação horizontal
 � \b: adiciona um “backspace” ao texto
 � \r: volta o cursor para o começo da linha sem mudar de linha
 � \a: emite um sinal sonoro
 � \”: quando você precisa, no seu texto, do uso de aspas duplas
 � \’: quando você , no seu texto, do uso de aspas simples
 � \\: quando você precisa, no seu texto, do uso de barra invertida
 � \0: caractere nulo
No código da Figura 8, a seguir, você pode ver o uso de códigos de for-
matação e sequências de escape.
Figura 8. Uso de código de formatação, sequência de escape e funções de entrada e saída.
PAES, R. B. Introdução à Programação com a Linguagem C. São Paulo: Novatec, 2016. 
296p.
PINHEIRO, F. A. C. Elementos de programação em C. Porto Alegre: Bookman, 2012. 548p.
Leituras recomendadas
Entrada e saída de dados8
DICA DO PROFESSOR
As funções printf e scanf são funções existentes na biblioteca padrão stdio.h do C e são muito 
usadas em praticamente todos os programas que precisam de entrada e saída de dados.
Acompanhe o vídeo da Dica do professor, onde você terá orientações sobre esses conceitos e 
sobre como usar essas funções.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) Considerando o seguinte código, qual o valor das variáveis x e y no final da execução?
 
A) X é 17 e y é 17.
B) X é 25 e y é 25.
C) X é 17 e y é 25.
D) X é 25 e y é 17.
E) Não é possível determinar os valores das variáveis.
2) Qual o valor da variável após a execução do seguinte código:
A) 18.
B) -2.
C) O valor da variável x é um endereço de memória.
D) Nada. Ocorre um erro, pois não é possível realizar uma operação do tipo x-2.
E) 16.
3) Qual a definição de uma função em linguagem de programação?
A) Uma função é um conjunto de instruções organizadas em forma de bloco e que têm um 
nome para que assim sejam utilizadas em um código-fonte.
B) Uma função é uma regra matemática utilizada em programação para realizar cálculos.
C) É uma regra para acesso de forma mais simples à memória do computador.
D) Uma função é a forma com que os usuários entram com os dados em um programa.
E) Uma função é uma entidade básica de um sistema computacional e existe somente em 
linguagens antigas.
4) Para que servem as funções printf e scanf?
A) São funções utilizadas para realizar operações de impressão de um arquivo em um 
impressora e acesso ao scanner conectado à máquina.
B) São funções para realização de operações matemáticas em um computador.
C) A função printf mostra um valor na tela do computador e a função scanf serve para 
armazenar valores dentro de uma variável.
D) A função printf armazena um valor em uma determinada variável, já a função scanf mostra 
um valor na tela.
E) São instruções de acesso à memória.
O que está faltando na linha 9 para que seja mostrado o seguinte texto: Soma:, seguido do 
valor da soma dos dois números digitados pelo usuário.
5) 
 
A) &soma.
B) soma.
C) "soma".
D) 'soma'.
E) +soma.
NA PRÁTICA
Ana está gerenciando o desenvolvimento de um sistema de pesquisa sobre o sistema bancário. O 
sistema é usado com interação direta com o usuário em terminais espalhados por um shopping 
para verificar o uso do aplicativo do banco e da confiabilidade dos clientes em cada banco 
disponível no terminal.
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
CS Principles: Defining and Calling Functions
Acompanhe no vídeo a seguir, como definir e usar funções em programação.
Conteúdo interativo disponível na plataforma de ensino!
Programação em C
Acesse o vídeo para compreender melhor o que são os subprogramas ou funções, pois o vídeo 
traz uma introdução sobre esse conceito.
Conteúdo interativo disponível na plataforma de ensino!
Programar em C - Formatação de Ouput -
Nesse vídeo você irá aprender formatação de output na Linguagem C.
Conteúdo interativo disponível na plataforma de ensino!
Operadores
APRESENTAÇÃO
Os operadores são símbolos utilizados para escrever expressões. Essas expressões podem ser de 
atribuição, aritméticas, lógicas e relacionais. Além de tipos diferentes, as expressões podem 
conter vários operadores, o que implica entender qual é a precedência entre esses operadores.
Nesta Unidade de Aprendizagem, você irá compreender como funcionam os operadores e quais 
são eles em C. Além disso, você irá estudar os conceitos de incremento, como ele pode ser feito 
e seu importante papelna arte da programação de computadores. 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Compreender o uso dos operadores de atribuição, aritméticos, relacionais e lógicos.•
Construir expressões com vários operadores e precedência.•
Desenvolver expressões que utilizem operadores de pré e pós-incremento/decremento.•
DESAFIO
Você foi contratado por uma empresa de jogos. Sua primeira atividade é desenvolver um jogo 
educativo que será utilizado no ensino de matemática.
 
 
Você deverá entregar esse projeto em partes. Nessa primeira etapa, você irá implementar 
somente o seguinte:
- Pedir ao usuário um número. 
- Calcular o antecessor e sucessor desse número. 
- Mostrar a tabuada de multiplicação desse número. 
- Apresentar os próximos três números com contagem de dois em dois.
Esse jogo será modificado futuramente, pois se deseja adicionar algumas funcionalidades, como 
escolha do tipo de tabuada e tamanho do "passo" da contagem. Portanto, organize seu código de 
forma que outro programador possa entendê-lo.
INFOGRÁFICO
Como resolver expressões com vários operadores de tipos diferentes? O infográfico, a seguir, 
apresenta dicas simples de como fazê-lo e ter a resposta correta para expressões com muitos 
operadores usando, para isso, a ordem de precedência.
CONTEÚDO DO LIVRO
Os operadores são peças fundamentais para realizar diversas tarefas no mundo da programação 
utilizando expressões. Essas expressões podem ser de atribuição, relacionais ou lógicas, e 
podem configurar expressões de um tipo ou haver expressões com vários operadores de vários 
tipos.
Além disso, existe uma forma rápida de realizar uma tarefa bastante comum na computação: 
incremento e decremento de uma variável.
Leia mais no capítulo Operadores, da obra Algoritmos de programação, base teórica para esta 
Unidade de Aprendizagem. 
Boa leitura. 
ALGORITMOS DE
PROGRAMAÇÃO
Marcela Santos
Operadores
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Reconhecer o uso dos operadores de atribuição, aritméticos, rela-
cionais e lógicos.
 � Construir expressões com vários operadores e precedência.
 � Desenvolver expressões que utilizem operadores de pré e 
pós-incremento/decremento.
Introdução
Os operadores são símbolos que são utilizados para escrevermos expres-
sões, as quais podem ser de atribuição, aritméticas, lógicas e relacionais. 
Além de tipos diferentes, as expressões podem conter vários operadores, 
o que implica entendermos qual a precedência entre estes.
Neste capítulo, você vai compreender como funcionam os operadores 
e quais são eles em C. Além disso, você será apresentado aos conceitos 
de incremento, como ele pode ser feito e seu papel importante na arte 
da programação de computadores.
Operadores de atribuição, aritméticos, 
relacionais e lógicos
Como foi visto anteriormente, uma variável é um espaço de memória de 
um determinado tipo, que vai guardar um valor seja do tipo inteiro, real ou 
caractere. Existe uma função predefinida em uma biblioteca padrão do C, 
que nos permite guardar um valor digitado pelo usuário em uma variável 
declarada, a função scanf. 
Mas como podemos armazenar um valor em uma variável, sendo que 
ele não foi digitado pelo usuário — como, por exemplo, no momento que 
inicializamos uma variável? Observe a Figura 1.
Identificação interna do documento H2KELUIHE5-1PZKMF1
Figura 1. Código para exemplificar o operador de atribuição.
As linhas 3 e 4 mostram a declaração e inicialização de duas variáveis; 
tomemos a linha 3 como exemplo. Essa linha pode ser traduzida como: 
“armazeno o valor 34 dentro da variável idade”. Para realizar essa operação, 
utilizamos o operando = (igual), de atribuição. A sintaxe de uso deste operando 
em uma expressão de atribuição pode ser vista na Figura 2.
Figura 2. Sintaxe do operador de atribuição.
Esse valor armazenado pode ser um valor direto (como no exemplo), ou 
uma expressão aritmética, lógica ou relacional.
Todas as operações aritméticas, já conhecidas da nossa matemática clássica, 
podem ser usadas em programação. Cada linguagem de programação tem 
seus operandos para representar essas operações — em alguns casos, são 
os mesmos que já conhecemos em outros, existindo uma pequena diferença.
Operadores2
Identificação interna do documento H2KELUIHE5-1PZKMF1
Para exemplificar, vamos desenvolver um programa em C que realiza as 
quatro operações básicas com dois números inteiros, conforme representado 
na Figura 3.
Figura 3. Código de uma calculadora com as quatro operações aritméticas.
Ao executar esse programa e digitando os valores 5 e 2 para as variáveis 
numero1 e numero2, respectivamente, teremos a seguinte resposta, na Figura 4: 
Figura 4. Saída da calculadora com as quatro operações aritméticas.
3Operadores
Identificação interna do documento H2KELUIHE5-1PZKMF1
Um ponto interessante a se avaliar essa saída de dados é a resposta à 
operação de divisão. Em C, ao se dividir dois números inteiros, o resultado 
também é um número inteiro, mesmo que a resposta da divisão seja um número 
real, como no caso de 5 dividido por 2. Assim, a resposta aparece truncada, 
que quer dizer somente com a parte inteira.
Para resolvermos isso, podemos declarar as variáveis como do tipo float e 
delimitar o número de casas decimais depois da vírgula. Isso pode ser visto, 
a seguir, na Figura 5 e na Figura 6.
Figura 5. Código de uma calculadora com as quatro operações aritméticas usando o tipo 
float.
Operadores4
Identificação interna do documento H2KELUIHE5-1PZKMF1
Figura 6. Saída da calculadora com as quatro operações aritméticas usando o tipo float.
Além disso, existe um operando que permite que se armazene o resto da 
divisão, também chamado de operação módulo. Esta operação é realizada com 
o operando % (por cento). Para exemplificarmos, vamos mostrar o resto da 
divisão de um número digitado pelo usuário, por 2, conforme Figura 7. Como 
sabemos, se o resto for 0, o número é par. Vamos ao código em C!
Figura 7. Uso do operador módulo.
5Operadores
Identificação interna do documento H2KELUIHE5-1PZKMF1
Como nós estamos utilizando a linguagem C, a seguir, você pode ver, na 
Tabela 1, a operação aritmética e o seu operando, bem como um exemplo de ex-
pressão de utilização em um programa de computador escrito na linguagem C.
Operação Operador Expressão
Soma + a= b+1;
Subtração - a= b-25 ;
Multiplicação * a= a*2 ;
Divisão / a=a/2 ;
Módulo % a= 4%2
Tabela 1. Operadores aritméticos.
Além dos operadores de atribuição e aritméticos, existem os operadores 
lógico-relacionais. Os operadores relacionais (Tabela 2, a seguir) são utiliza-
dos quando se precisa comparar variáveis e/ou valores do mesmo tipo. Uma 
operação relacional tem como resultado os valores lógicos verdadeiro ou falso.
Variáveis que podem ter somente dois tipos, como verdadeiro ou falso, 
são conhecidas em programação como variáveis do tipo booleano. Booleano 
vem da álgebra que usa esses valores, criada pelo matemático George Boole. 
O detalhe é que, em C até o compilador de 1999, nós não tínhamos esse 
tipo, sendo necessário que os programadores simulassem. Atualmente, basta 
que seja adicionada a biblioteca stdbool.h. Vamos usar bastante os operadores 
relacionais e o tipo bool que pode ter o valor 1 ou 0, quando estivermos uti-
lizando as estruturas de seleção. Por agora, vale a pena conhecer o operando 
e a sua função.
Operadores6
Identificação interna do documento H2KELUIHE5-1PZKMF1
Para saber mais sobre o tipo bool e a biblioteca stdbool, acesse: 
https://goo.gl/5g1xr2
Operador 
relacional
Exemplo : 
sejam a e b 
duas variáveis 
do mesmo 
tipo, como, 
por exemplo, 
a = 10 e b =5
Descrição Resultado
== a == b Avalie se a 
é igual b
0
> a > b Avalie se a é 
maior que b
1
< a < b Avalie se a é 
menor que b
0
>= a > = b Avalie se a 
é maior ou 
menor que b
1
<= a <= b Avaliese a 
é menor ou 
igual a b
0
!= a ! = b Avalie se a é 
diferente de b
1
Tabela 2. Operadores relacionais.
7Operadores
Identificação interna do documento H2KELUIHE5-1PZKMF1
Para mais detalhes da Álgebra Booleana, leia Scheinerman (2003), e o tipo bool em 
C. Acesse: 
https://goo.gl/3gSrrh
Por fim, temos os operadores lógicos que nos proporcionam escrever 
expressões lógicas, as quais realizam funções lógicas, dentre as quais temos: 
e, ou e não. Além de um operador lógico, também conhecido como conectivo, 
uma expressão lógica é formada por duas proposições. 
Uma proposição é uma afirmação que pode ser verdadeira ou falsa. Assim, 
uma expressão lógica é formada pela conexão de duas ou mais proposições por 
meio de um conector. Existe uma maneira de mapear todas as possibilidades 
de valores dessas proposições, bem como o valor da expressão — essa forma 
de mapeamento é denominada tabela-verdade.
Cada operador tem uma tabela-verdade. A seguir, você pode ver esse 
mapeamento com os 3 operadores, bem como os símbolos que os representam: 
e (&&), ou (||) e não (!). Vamos nomear uma das proposições de P e a outra 
de T, e, neste primeiro momento, ter true(1) ou false(0) como valores dessas 
proposições. Observe as Tabelas 3, 4 e 5.
P T P && T
True True True
True False False
False True False
False False False
Tabela 3. Tabela-verdade da operação E Lógico.
Operadores8
Identificação interna do documento H2KELUIHE5-1PZKMF1
P T P || T
True True True 
True False True
False True True
False False False
Tabela 4. Tabela-verdade da operação Ou Lógico.
P ! P
True False
Fale True
Tabela 5. Tabela-verdade da operação Não Lógico.
Da mesma forma do caso das operações e expressões relacionais, vamos 
usar bastante as tabelas-verdade e operadores lógicos quando estivermos 
tratando das estruturas de seleção.
Como mencionado anteriormente, existe um tipo de variável em C que 
representa o tipo booleano. Veja alguns detalhes, a seguir.
Para utilizá-la, é preciso a adição da biblioteca stdbool com a seguinte 
linha de código: # include <stdbool.h>
A declaração das variáveis é feita da seguinte forma: bool a.
A inicialização e atribuição podem ser feitas usando-se true/false ou 1/0.
Atribuir o valor verdadeiro para a variável a: a=true ; (a=1).
A resposta das operações lógicas será SEMPRE 0 e 1.
Para exemplificar, nas Figuras 8 e 9, segue um código-fonte e a execução 
de um programa que mostra o uso dos operadores lógicos: E, Ou e Não.
9Operadores
Identificação interna do documento H2KELUIHE5-1PZKMF1
Figuras 8 e 9. Operadores lógicos.
Para finalizar, observe a Tabela 6, com operadores lógicos em C.
Operação Operador
E &&
Ou ||
Não !
Tabela 6. Operadores lógicos.
Assim podemos fazer uma tabela-resumo (Tabela 7) com todos os opera-
dores que foram vistos até agora:
Operadores10
Identificação interna do documento H2KELUIHE5-1PZKMF1
Tipo Operação Operador
Aritmético Multiplicação *
Aritmético Divisão /
Aritmético Soma +
Aritmético Subtração -
Aritmético Módulo %
Relacional Menor que <
Relacional Menor que ou igual a <=
Relacional Maior que >
Relacional Maior que ou igual a >=
Relacional Igual a ==
Relacional Diferente de != 
Lógico E &&
Lógico Ou ||
Lógico Não !
Tabela 7. Resumo de todos os operadores: aritméticos, relacionais e lógicos.
Expressões com vários operadores e 
precedência
As expressões aritméticas, relacionais e lógicas podem ter vários operadores, 
e, para isso, existe uma ordem de precedência entre os operadores do mesmo 
tipo. A primeira regra e mais importante é: se existir, em uma expressão, uma 
subexpressão dentro de um parênteses, essa expressão deve ser a primeira a ser 
resolvida, ou seja, os parênteses, quando existentes, são sempre os primeiros 
a serem resolvidos.
Antes de avaliarmos uma expressão com vários tipos de operadores, vamos 
avaliar expressões com vários operadores, porém do mesmo tipo. Para isso, 
vamos usar a ordem de precedência respeitada pelo compilador da linguagem 
C. Entre esses operadores, começamos com os aritméticos. Observe a Tabela 8.
11Operadores
Identificação interna do documento H2KELUIHE5-1PZKMF1
Ordem de execução Operação Operador
1 Multiplicação *
2 Divisão /
3 Soma +
4 Subtração -
5 Módulo %
Tabela 8. Ordem de precedência dos operadores aritméticos.
O que isso quer dizer? Isso significa que, se em uma expressão existir 
uma multiplicação, uma divisão e uma soma, a ordem deve ser a seguinte: 
multiplicação, divisão e soma. Veja um exemplo na Figura 10.
Figura 10. Expressão com operadores aritméticos.
Nessa expressão, a multiplicação deve ser feita antes da subtração — basta 
seguir a regra de precedência da tabela mostrada anteriormente. Da mesma 
forma, existe uma ordem de precedência respeitada pelo compilador C, entre 
os operadores relacionais. Essa ordem pode ser observada na Tabela 9, a seguir.
Operadores12
Identificação interna do documento H2KELUIHE5-1PZKMF1
Ordem de execução Operação Operador
1 Menor que <
2 Menor que ou igual a <=
3 Maior que >
4 Maior que ou igual a >=
5 Igual a ==
6 Diferente de != 
Tabela 9. Ordem de precedência dos operadores relacionais.
Vamos a um exemplo. Observe a Figura 11.
Figura 11. Expressão com operadores relacionais.
Nessa expressão, as operações relacionais de maior e menor de cada lado da 
operação igual a devem ser feitas primeiro. Logo, em seguida, comparam-se 
os valores obtidos entre essas operações e, dependendo do valor de a, b, c e 
d, teremos um valor verdadeiro (true,1) ou falso (false,0).
13Operadores
Identificação interna do documento H2KELUIHE5-1PZKMF1
Para finalizar, temos a ordem de precedência dos nossos operadores lógicos. 
Observe a Tabela 10.
Ordem de execução Operação Operador
1 E &&
2 Ou ||
3 Não !
Tabela 10. Ordem de precedência dos operadores lógicos.
Para exemplificar, vamos usar a seguinte expressão, conforme a Figura 12. 
Figura 12. Expressão com operadores lógicos.
Seguindo as regras, a operação E é feita antes, para só em seguida a operação 
Ou ser executada. Agora, vamos colocar todos os operadores — aritméticos, 
relacionais e lógicos — em uma única tabela e reorganizar a ordem de pre-
cedência. Veja na Tabela 11.
Operadores14
Identificação interna do documento H2KELUIHE5-1PZKMF1
Ordem de execução Operação Operador
1 Multiplicação *
2 Divisão /
3 Soma +
4 Subtração -
5 Módulo %
6 Menor que <
7 Menor que ou igual a <=
8 Maior que >
9 Maior que ou igual a >=
10 Igual a ==
11 Diferente de != 
12 E &&
13 Ou ||
14 Não !
Tabela 11. Ordem de precedência de todos os operadores.
A ordem de precedência é a seguinte:
 � As operações aritméticas são realizadas primeiramente.
 � Em seguida, são realizadas as operações relacionais.
 � O próximo passo é realizar operações lógicas, na seguinte ordem (ver 
Figura 13).
Exemplificamos, descobrindo o valor da expressão: (y + z < x) OU (x>15) 
E (y < 55), sendo x igual a 15, y igual a 70 e z igual a 5.
15Operadores
Identificação interna do documento H2KELUIHE5-1PZKMF1
Figura 13. Expressão com operadores aritméticos, rela-
cionais e lógicos.
 � Primeiro, precisamos avaliar todas as operações que estão em parênteses.
 � O primeiro passo é realizar a operação y+z, que é igual a 75.
 � Agora, é preciso avaliar as operações relacionais.
 ■ (y+z<x) : (75<15), que é falso.
 ■ (x>15): (15>15), que é falso.
 ■ (y<55): (70<55) que é falso.
 � Se colocarmos os valores lógicos na expressão inicial, temos:
 ■ (falso) ou (falso) e (falso)
 � A operação e é realizada primeiro e, pela tabela-verdade, é possível ver 
que, quando temos dois valores falsos, o resultado é falso.
 � Assim, a expressão fica: falso ou falso, resultando em falso, e esse é o 
valor final dessa expressão.
Uma dica para evitar confusão é definir as precedências usando parên-
teses. As expressões dentro dos parênteses mais internos são resolvidas 
primeiramente.
Operadores de pré e pós-incremento/
decremento
Por fim e não menos importante,nós temos, neste capítulo, operadores de 
incremento e decremento. Estas operações são utilizadas para acelerar o 
processo de aumentar ou diminuir unidades de variáveis.
Operadores16
Identificação interna do documento H2KELUIHE5-1PZKMF1
O operador de incremento ++ adiciona a 1 a variável que utiliza esse 
operador. Já o operador de decremento -- subtrai 1 da variável. 
Essas operações podem ser feitas antes ou depois do uso da variável, ou seja, 
um pré ou pós-incremento e um pré ou pós-decremento. No pré-incremento 
(decremento), o valor será modificado na instrução que a variável está sendo 
avaliada. Já, no caso de pós, o valor da variável será modificado na próxima 
instrução.
 Para exemplificarmos, temos o seguinte código e sua saída de execução. 
Veja as Figuras 14 e 15.
Figura 14. Código-fonte para exemplificar o uso dos operadores de incremento e decre-
mento e suas formas de uso.
Figura 15. Saída da execução do código-fonte para exemplificar o uso 
dos operadores de incremento e decremento e suas formas de uso.
17Operadores
Identificação interna do documento H2KELUIHE5-1PZKMF1
Uma das grandes utilidades dos operadores de incremento ou decremento 
é no uso de variáveis contadoras. Imagine que você tenha que desenvolver 
um sistema de fichas para uma central de atendimento. Os números de ficha 
entregues para os usuários nada mais são do que valores que, a cada solicitação, 
aumenta-se 1, ou seja, vamos contando de 1 em 1.
Vamos criar um programa que conte de 1 até 5 de duas formas: como a 
operação de soma, usando o operador +, e com a operação de incremento, 
usando o operador ++. Veja as duas formas nos códigos da Figura 16, a seguir.
Figura 16. Contadores: uso do incremento.
Os dois programas realizam a mesma tarefa: contam de 1 a 5 e mostram esta 
contagem na tela. A diferença está na forma que isso pode ser feito. A forma 
reduzida é bastante utilizada em programação, e outro detalhe interessante é 
que podemos também incrementar valores diferentes de 1. Imagine contar de 
1 a 10, somente os números pares. A seguir, na Figura 17, serão mostradas as 
duas formas de se realizar essa tarefa: forma convencional e forma reduzida.
Operadores18
Identificação interna do documento H2KELUIHE5-1PZKMF1
Figura 17. Contadores: uso do incremento, para um contador de números pares.
BOOLEAN type support library. Cppreference.com, 2017. Disponível em: <http://
en.cppreference.com/w/c/types/boolean>. Acesso em: 22 fev. 2018.
SCHEINERMAN, E. R. Matemática Discreta: uma introdução. São Paulo: Thomson Pio-
neira, 2003.
Leituras recomendadas
PAES, R. B. Introdução à Programação com a Linguagem C. São Paulo: Novatec, 2016. 
296p.
PINHEIRO, F. A. C. Elementos de programação em C. Porto Alegre: Bookman, 2012. 548p.
19Operadores
Identificação interna do documento H2KELUIHE5-1PZKMF1
DICA DO PROFESSOR
Como usar operandos aritméticos e relacionais para resolver um problema real utilizando a 
linguagem C? Acompanhe o vídeo da Dica do Professor para receber orientações sobre o uso 
desses operadores e uma dica especial sobre o tipo booleando na linguagem C.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) Considerando o trecho de código escrito na linguagem C, qual é o valor da variável 
resultado1? 
 
A) 56.5.
B) É impossível determinar, pois em C não se pode fazer operações aritméticas com tipos 
diferentes.
C) 56.
D) 7.
E) 7.5.
2) Considerando o trecho de código, qual é o valor que será impresso na tela ao final da 
execução? 
 
A) 7.
B) 7.5.
C) 7.00.
 Não se pode realizar operações com números inteiros e armazenar em uma variável do D) 
tipo float. Portanto, esse código não é executado, havendo um erro de sintaxe.
E) Não é possível determinar, pois a variável resultado não foi inicializada.
3) Avalie o seguinte código, e diga qual é o resultado que será impresso. 
 
A) 20.10.
B) 11.
C) 8.
D) 15.7.
E) 10.10.
4) Assinale a opção que indica a diferença entre os operadores = e ==, ambos utilizados 
na linguagem C. 
A) = é um operando de atribuição, e == é um operando relacional que avalia se duas variáveis 
são iguais.
B) Não existe diferença, os dois operandos são de atribuição.
C) Não existe diferença, os dois operandos são relacionais, utilizados para avaliar se dois 
valores são iguais.
D) == é um operando de atribuição, e = é um operando relacional que avalia se duas variáveis 
são iguais.
E) Esses operandos não existem na linguagem C.
5) Qual é a função dos operadores ++ e -- na linguagem C, respectivamente? 
A) São operadores de incremento e decremento.
B) É o operador de soma e de subtração, respectivamente.
C) É o operador de decremento e de incremento, respectivamente.
D) Esses operadores não existem em C.
E) São operadores de multiplicação e de divisão, escritos de forma diferente.
NA PRÁTICA
Fernando foi contratado para desenvolver um programa para auxiliar o RH de uma empresa do 
segmento de vestuário com o cálculo de descontos e salários para uma folha de contra-cheque.
Após analisar a solicitação da empresa, Fernando concluiu que poderia utilizar operadores em 
programação C para resolver o problema.
 
Conteúdo interativo disponível na plataforma de ensino!
 
Com o programa desenvolvido por Fernando, a empresa conseguiu fazer a análise da folha de 
pagamento dos funcionários de forma satisfatória.
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Operadores aritméticos e relacionais
No vídeo, você vai ver o uso de operadores para desenvolver um programa no qual são usados 
operadores aritméticos e relacionais.
Conteúdo interativo disponível na plataforma de ensino!
Operadores lógicos e relacionais
No vídeo, você vai conhecer mais sobre operadores lógicos e relacionais.
Conteúdo interativo disponível na plataforma de ensino!
Programação em C
O que é o incremento de uma variável e para que ele serve? O vídeo vai mostrar o uso dos 
operadores de incremento e de decremento em C.
Conteúdo interativo disponível na plataforma de ensino!
Estruturas de Seleção
APRESENTAÇÃO
Em programação, podemos construir programas sequenciais, ou seja, que possuem somente um 
fluxo de execução. No entanto, há casos em que isso não é o suficiente para resolver um 
determinado problema. Uma estrutura de seleção é uma ferramenta utilizada para modificarmos 
o fluxo de execução de um programa. Com esse tipo de estrutura, é possível escolher um grupo 
de ações a serem executadas de acordo com o valor lógico de alguma expressão lógica e/ou 
relacional. 
 
Nesta Unidade de Aprendizagem, você estudará a construção de um algoritmo, os conceitos 
básicos envolvidos, os tipos e como funciona a estrutura de seleção.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Usar a estrutura de seleção if-else e switch.•
Criar programas que usam a estrutura de seleção simples, composta e encadeada.•
Praticar a resolução de problemas computacionais com a estrutura de seleção ternária.•
DESAFIO
Você foi contratado por uma empresa de desenvolvimento de software, e todos os novos 
integrantes do time em que você vai trabalhar passarão por um teste, que é uma forma de 
entrosamento. No teste, você deverá desenvolver o jogo Pedra-Papel-Tesoura junto com um 
colega. 
As regras do jogo Pedra-Papel-Tesoura são: 
Pedra ganha da tesoura (amassando-a ou quebrando-a). 
Tesoura ganha do papel (cortando-o). 
Papel ganha da pedra (embrulhando-a). 
No jogo, o usuário deve enfrentar o computador. Então, vocês precisam desenvolver alguma 
forma que o computador gere um valor randômico. Vocês tiveram uma ideia: representar cada 
jogada com números inteiros, usando uma biblioteca do C, que gera números aleatórios: a stdlib. 
 
O desafio é desenvolver o jogo e entregá-lo na reunião comemorativa, no primeiro dia de 
trabalho. 
INFOGRÁFICO
Quando devemos usar uma estruturaencadeada? Existe alguma forma correta de encadear if-
elses? Acompanhe, neste Infográfico, dicas de uso dessa estrutura. 
CONTEÚDO DO LIVRO
Todo programa de computador tem um fluxo de execução que pode ser sequencial, ou seja, sem 
nenhum desvio. Porém, para escrever programas cada vez mais complexos, é preciso que se 
tenha ferramentas para mudança de fluxo de acordo com algum comportamento do usuário, por 
exemplo.
Uma dessas estruturas é a de seleção, que pode ser simples ou composta, e que pode ser usada 
de forma simples ou encadeada. Além disso, existe uma ferramenta que proporciona o uso 
reduzido do conceito da estrutura de seleção.
Leia o capítulo Estruturas de seleção, da obra Algoritmos de programação, base teórica para 
esta Unidade de Aprendizagem, e conheça detalhes dessa estrutura.
Boa leitura.
ALGORITMOS DE 
PROGRAMAÇÃO 
Marcela Santos
Estruturas de seleção
Introdução
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Usar as estruturas de seleção if-else e switch.
� Criar programas que usam as estruturas de seleção simples, composta
e encadeada.
� Resolver problemas computacionais com a estrutura de seleção
ternária.
Objetivos de aprendizagem
Em programação, podemos construir programas sequenciais, ou seja, 
que possuem somente um fluxo de execução. Todavia, existem casos 
que isso não é o suficiente para resolver um determinado problema. Uma 
estrutura de decisão é uma ferramenta utilizada para modificarmos o fluxo 
de execução de um programa. Com esse tipo de estrutura, é possível 
escolher um grupo de ações a serem executadas de acordo com o valor 
lógico de alguma expressão lógica e/ou relacional. 
Neste capítulo, você estudará a construção de um algoritmo, os con-
ceitos básicos envolvidos, os tipos e o funcionamento da estrutura de 
seleção.
As estruturas de seleção if-else e switch
Quando criamos um programa de computador, utilizamos a seguinte sequência 
de operações na grande maioria das vezes: entrada de dados, processamento 
e saída. Para que essas operações sejam executadas de forma a resolver o 
problema ou a realizar uma determinada tarefa, é importante que ele siga um 
fluxo de execução que faça sentido, ou seja, que tenha uma determinada lógica.
Quando existe somente um fluxo de execução, ou seja, não há a necessidade 
de escolha entre dois ou mais caminhos, chamamos a execução de sequencial. 
Ela segue do início do código-fonte ao final e, toda vez que for executada, terá 
a mesma ordem de execução das instruções que compõem o código-fonte. 
Mas existem situações onde é preciso que o programa tenha mais de um 
fluxo de execução. Imagine que você esteja escrevendo um programa que 
calcule a média de um aluno e mostre, ao final, a situação dele de acordo 
com essa média.
Para exemplificar, vamos usar as seguintes regras:
 � Se a média for menor que 5, o aluno está reprovado.
 � Se a média for maior que 5 e menor que 7, ele estará em recuperação.
 � Acima de 7, ele será aprovado.
Não é possível que o aluno esteja em recuperação, aprovado e reprovado 
ao mesmo tempo. Então, o programa precisará ter mais de um fluxo de exe-
cução, e isso é obtido por meio da utilização de uma estrutura conhecida 
como estrutura de seleção. Esta permite que decisões sejam tomadas e ações 
diferentes sejam executadas.
Existem dois tipos de estrutura de seleção em C: if-else e switch — cada 
uma tem sua sintaxe e podem ser utilizadas em situações diferentes. Tomemos 
como exemplo um programa que, dado um número inteiro, tem como saída 
um texto mostrando se o número é maior que 0. Observe a Figura 1, a seguir.
Figura 1. Uso do if-simples.
Estruturas de seleção2
As linhas em destaque (6,7 e 8) mostram o uso da estrutura if. Nesse caso, 
o programa só vai ter um caminho diferente para seguir: quando o número 
for maior que zero. Por isso, foi usado somente o if (sem o else) e seu funcio-
namento pode ser visto no seguinte fluxograma, representado pela Figura 2.
Figura 2. Fluxograma do if-simples.
Os testes lógicos são construídos com os operadores relacionais somente, 
ou pode-se unir expressões relacionais com operadores lógicos. A sintaxe do 
if segue a seguinte regra, apresentada na Figura 3. 
Figura 3. Sintaxe do if-simples.
3Estruturas de seleção
Usando o mesmo exemplo, imagine agora que o programa deve, ao final 
da execução, dizer se o número é maior que zero ou se o número digitado é 
menor ou igual a zero. Diferentemente do primeiro exemplo, esse problema 
requer o desenvolvimento de dois fluxos de execução. Vamos dar uma olhada 
no código-fonte que resolve essa questão, na Figura 4.
Figura 4. Uso do if-else-composto.
Nas linhas em destaque, podemos ver o uso da estrutura if-else. Nesse caso, 
temos dois caminhos a tomar (por enquanto): escrever o texto referente ao número 
maior que zero; e, no caso contrário, se o número for menor ou igual a zero.
Estruturas de seleção4
A sintaxe e o funcionamento da estrutura if-else podem ser vistos a seguir, 
nas Figuras 5 e 6.
Figura 5. Sintaxe if-else-composta.
Figura 6. Fluxograma if-else-composto.
5Estruturas de seleção
O nosso segundo tipo de estrutura de seleção é o switch. Para exemplificar, 
imagine um programa que você digite o mês em formato numérico e ele retorne 
o mês em forma de texto. Na Figura 7, está representado o código-fonte que 
realiza essa tarefa.
Figura 7. Uso do switch.
Estruturas de seleção6
O switch acaba sendo uma alternativa mais simples para o if. Seu uso é 
bastante simples: quando comparamos uma variável com valores diferentes 
e temos ações específicas, caso essa variável seja igual a um dos valores 
comparados. Sua sintaxe segue as seguintes regras:
 � Você precisa definir qual variável o switch irá avaliar.
 � Em seguida, você tem uma sequência de casos, onde a variável é com-
parada com um valor.
 � Cada caso é feito usando-se a palavra reservada case, seguida do valor 
e dois pontos.
Um detalhe importante em cada caso é o fato de termos, como última linha, 
a palavra reservada break, que faz com que somente um caso seja avaliado 
por vez. Essa palavra quebra a execução do switch e faz com que o fluxo siga 
para a primeira linha após o switch.
O switch é bastante utilizado quando se deseja implementar um menu. 
Imagine que você esteja desenvolvendo um jogo que tenha níveis. Um possível 
menu pode ser feito da seguinte forma, conforme Figura 8.
Figura 8. Uso do switch, implementando menu.
7Estruturas de seleção
Um detalhe importante é o uso do default. Já percebeu para que ele serve? Caso a 
variável testada não seja igual a nenhum valor presente nos cases, o switch executa 
as instruções presentes no default. 
O case só serve quando o teste que queremos fazer é por meio da utilização 
do operador igual a (==). Se for preciso fazer vários testes, mas com outros 
operadores, precisamos encadear if-elses, como será visto a seguir.
As estruturas de seleção if-else e switch
Uma estrutura de seleção simples é aquela formada por um único if. Como 
vimos anteriormente, o if sozinho é usado quando temos somente um caminho 
para seguir no fluxo de execução do programa. 
Já, quando usamos somente um if-else, estamos usando uma estrutura de 
seleção composta. Ela é usada quando é preciso tomar uma decisão e existe um 
conjunto de instruções a ser executado, caso o teste seja verdadeiro ou falso. 
Porém, existem casos onde é preciso mais que dois caminhos a seguir no 
fluxo de execução do programa. Tomemos como exemplo o programa que 
diz se um número é maior, menor ou igual a zero. Do jeito que escrevemos o 
código anteriormente, é impossível saber se o número é 0 ou menor que zero. 
Precisamos, nesse caso, implementar um programa que tenha 3 caminhos a 
seguir:
 � maior que zero;
 � menor que zero;
 � igual a zero.
Estruturas de seleção8
Nesses casos, utilizamos estrutura de seleção encadeada, ou seja, uma 
dentro da outra. Segue o código do nosso problema, representado pela Figura9, 
agora com estrutura de seleção encadeada.
Figura 9. Código para exemplificar o uso da estrutura de seleção encadeada.
Seguem algumas dicas para a escrita da estrutura de seleção composta:
 � Quem tem teste lógico é sempre o if, o else nunca testa variável.
 � Cada if tem o teste lógico e o conjunto de chaves para delimitar o que 
será executado dentro do if.
 � Cada else tem seu conjunto de chaves para delimitar o que será exe-
cutado dentro do else.
 � Fica mais fácil se o que estiver dentro do if ou do else for indentado, 
ou seja, aplicamos um recuo (com o uso da tecla tab), para indicar a 
hierarquia do código.
9Estruturas de seleção
Lembra do exemplo da situação do aluno, lá do início do nosso capítulo? 
Vamos escrever o código para resolver esse problema. Observe a Figura 10.
Figura 10. Código para exemplificar o uso da estrutura de 
seleção encadeada (situação aluno).
A estrutura de seleção ternária
O operador ternário é uma maneira que a linguagem C tem de escrever uma 
estrutura if-else de forma compactada. Como exemplo, vamos escrever um 
programa que, dados dois números, mostra o maior deles.
Vamos implementar esse programa, primeiro somente com if-else e, depois, 
substituindo um destes pela estrutura ternária. Veja a Figura 11, a seguir.
Estruturas de seleção10
Figura 11. Comparação entre estrutura de seleção composta e estrutura de seleção ternária.
Do lado esquerdo, temos o código com o uso do if-else interno, para avaliar 
qual o maior número. Esse if-else pode ser substituído pelas linhas 9 e 10 do 
código à direita e, especificamente, pela linha 9, onde usamos a estrutura de 
seleção ternária. A sintaxe da estrutura de seleção ternária é representada em 
seguida, na Figura 12.
Figura 12. Sintaxe da estrutura de seleção ternária.
A variável de atribuição vai receber o valor de:
 � expressão 1, se a condição for verdadeira;
 � expressão 2, se a condição for falsa.
Lembre-se de que a condição pode ser feita por meio do uso de operadores relacionais 
e/ou lógicos.
11Estruturas de seleção
BOOLEAN type support library. Cppreference.com, 2017. Disponível em: <http://
en.cppreference.com/w/c/types/boolean>. Acesso em: 22 fev. 2018.
PAES, R. B. Introdução à Programação com a Linguagem C. São Paulo: Novatec, 2016. 
296p.
PINHEIRO, F. A. C. Elementos de programação em C. Porto Alegre: Bookman, 2012. 548p.
SCHEINERMAN, E. R. Matemática Discreta: uma introdução. São Paulo: Thomson 
Pioneira, 2003.
Leituras recomendadas
Estruturas de seleção12
DICA DO PROFESSOR
Vamos aprender como usar estruturas de seleção de forma encadeada, desenvolvendo um 
jogo de adivinhação? No vídeo, você terá orientações sobre essa estrutura de maneira prática e 
divetida.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) O seguinte programa deve receber um número e apresentar um texto indicando se esse 
número é par ou ímpar. 
 
O que deve ser escrito nas linhas 7 e 10 para que a saída seja de acordo com as imagens de 
saída de execução?
 
Na linha 7: printf("O numero %d eh parn",numero); na linha 10: printf("O numero %d eh A) 
imparn",numero);
B) Na linha 7: printf("O numero %d eh imparn",numero); na linha 10: printf("O numero %d 
eh parn",numero);
C) Na linha 7: printf("O numero eh parn",numero); na linha 10: printf("O numero eh 
imparn",numero);
D) Na linha 7: printf("O numero %d eh parn"); na linha 10: printf("O numero %d eh 
imparn");
E) Na linha 10: printf("O numero eh parn",numero); na linha 7: printf("O numero eh 
imparn",numero);
2) Qual a diferença entre uma estrutura de seleção simples e uma composta na 
linguagem C?
A) A estrutura simples é usada em programas simples e a composta em problemas mais 
complexos.
B) Não existe estrutura de seleção simples e composta em C.
C) A estrutura simples só tem if, ou seja, só se executa operações se o teste for verdadeiro. Já 
a estrutura composta tem if-else.
D) A estrutura composta só tem if, ou seja, só se executa operações se o teste for verdadeiro. 
Já a estrutura simples tem if-else.
E) Não existe diferença, cabendo ao programador escolher uma entre as duas.
3) 
A seguir, vemos a sintaxe da estrutura switch: 
 
switch (expressao){
case valor1:
comandos;
comandos;
break;
case valor2:
comandos;
comandos;
break;
case valor3:
comandos;
comandos;
break;
default:
comandos;
comandos;
 
}
 
Sobre ela, é correto afirmar:
 
A) Os valores (valor1, valor2...) podem ser um teste condicional, usando os operadores 
relacionais.
B) O código para o caso default é obrigatório.
C) A expressão pode conter qualquer operador: aritmético, lógico ou relacional.
D) Somente um dos cases é executado por vez.
E) O comando break não é permitido no interior dos grupos de comandos.
4) Como você pode reescrever o código a seguir, usando a estrutura de seleção ternária? Ou 
seja, se substituirmos as linhas 9 a 14, como deve estar escrita uma nova linha, usando o 
operador ternário para termos a mesma saída? 
A) maior=numero1>numero2?numero2:numero1;
B) maior=numero2>numero1?numero1:numero2;
C) maior=numero1>numero2?numero1:numero2;
D) maior=numero1>numero2?numero1::numero2;
E) Não é possível realizar esse tipo de operação com o operador ternário.
5) Qual estrutura está representada na imagem a seguir? 
A) Estrutura de seleção simples.
B) Estrutura de seleção composta.
C) Estrutura sequencial.
D) Não é possível, somente com o diagrama, saber qual é a estrutura.
E) Estrutura switch.
NA PRÁTICA
 
Priscila é desenvolvedora de sistemas e está trabalhando em um sistema para um posto de 
combustíveis. O posto tem a seguinte tabela de descontos: 
 
Álcool: 
 
- Até 25 litros, desconto de 5%. 
- Acima de 25, desconto de 7,5%. 
 
Gasolina: 
 
- Até 25 litros, desconto de 7%. 
- Acima de 25 litros, desconto de 9%. 
 
O programa solicitado para Priscila deve ter como entrada de dados: tipo de combustível e 
valor em litros que o carro foi abastecido. Como saída, o valor a pagar, sabendo que a 
gasolina é R$ 3,00 e o álcool é R$ 2,00. 
 
Como Priscila pode escrever esse programa em código C, usando estruturas de seleção? 
 
O código-fonte precisa ser compilado para poder ser executado: 
Conteúdo interativo disponível na plataforma de ensino!
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Me Salva! Programação em C
Assista ao vídeo que mostra como você pode fazer validar seus dados, usando o if.
Conteúdo interativo disponível na plataforma de ensino!
Estruturas Condicionais 1 - Curso de Algoritmos #07.
Para saber mais sobre estruturas condicionais, assista aos vídeos a seguir com exemplos e 
explicaçães a partir dos conceitos de algoritmos e lógica de programação.
Conteúdo interativo disponível na plataforma de ensino!
Estruturas Condicionais 2
Veja como criar algoritmos com estruturas condicionais aninhadas e estruturas de múltipla 
escolha.
Conteúdo interativo disponível na plataforma de ensino!
Estruturas de Repetição
APRESENTAÇÃO
Em muitas situações, não basta que tenhamos somente uma estrutura de seleção em um 
programa de computador ou a forma sequencial de implementação. Em resolução de 
problemas reais, é comum a necessidade de uso de estrutura de repetição, que seleciona, de 
certa forma, um trecho de código e faz com que ele seja executado um determinado número de 
vezes ou quando alguma operação acontecer. 
 
Nesta Unidade de Aprendizagem, você estudará a construção de um algoritmo usando 
praticamente todos os conceitos de programação, com destaque para os tipos de estrutura de 
repetição existentes.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Reconhecer o funcionamento da estrutura while.•
Implementar programas de computador usando o for.•
Entender como a estrutura do-while funciona.
 
•
DESAFIO
Você foi contratado para desenvolver um sistema a ser usado em uma enquete.A empresa que 
o contratou precisa tabelar os resultados da seguinte enquete, feita a uma grande quantidade de 
organizações:
Qual o melhor sistema operacional para uso em servidores?
As possíveis respostas são:
1- Windows Server.
2 - Unix.
3 - Linux.
4 - Netware.
5 - Mac OS.
6 - Outro.
O programa deverá ler os valores até ser informado o valor 0, que encerra a entrada dos dados. 
Não deverão ser aceitos valores além dos válidos para o programa (0 a 6).
Após os dados terem sido completamente informados, o programa deverá calcular a percentual 
de cada um dos concorrentes.
Ao final, devem ser mostrados todos os sistemas operacionais com a quantidade de votos e 
o percentual de cada um.
INFOGRÁFICO
Quer entender como a estrutura de repetição funciona? No Infográfico, podemos comparar o 
loop da montanha-russa com todos os passos de uma estrutura de repetição. 
CONTEÚDO DO LIVRO
Em programação, muitas vezes é preciso repetir um trecho de código para conseguir resolver um 
determinado problema ou realizar uma determinada tarefa. Em C, existem três tipos de estrutura 
de repetição: while, for e do-while.
No capítulo Estruturas de repetição, da obra Algoritmos de programação, que serve de base 
teórica para esta Unidade de Aprendizagem, você vai saber mais sobre cada um deles.
Boa leitura.
ALGORÍTMO DE 
PROGRAMAÇÃO
Marcela Santos
Estruturas de repetição
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Compreender o funcionamento da estrutura while.
 � Implementar programas de computador usando o for.
 � Entender como a estrutura do-while funciona.
Introdução
Em muitas situações, não basta que tenhamos somente uma estrutura 
de seleção em um programa de computador, tão pouco somente a 
forma sequencial de implementação. Em resolução de problemas reais, 
é comum a necessidade do uso de estrutura de repetição, que seleciona, 
de certa forma, um trecho de código e faz com que ele seja executo um 
determinado número de vezes ou quando alguma operação acontecer.
Neste capítulo, você estudará a construção de um algoritmo, usando 
praticamente todos os conceitos de programação, dando destaque aos 
tipos de estrutura de repetição existentes.
A estrutura while
Existem algumas situações em programação que precisamos repetir o mesmo 
trecho de código com valores diferentes para as nossas variáveis. Um programa 
que calcula a média de uma turma de 40 alunos vai repetir a mesma operação 
40 vezes: leitura da matrícula do aluno, leituras das notas, cálculo da média 
e, por fim, mostrar para o usuário o resultado desse processamento de dados.
Da mesma forma que as estruturas de seleção fazem um controle do fluxo 
de execução, as estruturas de repetição vão mudar o fluxo, repetindo um trecho 
de código um determinado número de vezes ou quando alguma operação for 
executada.
Podemos pensar a estrutura de repetição como o loop da montanha-russa, 
onde o carrinho vem em seu fluxo e faz um giro. Em programação, esse loop 
é conhecido como repetição.
O loop pode ficar repetindo um número X de vezes. Esse número pode ser 
determinado pelo programador ou pode ser um valor digitado pelo usuário. 
Em todos os casos, esse valor ficará armazenado em uma variável que é co-
nhecida como contadora. Um detalhe: você pode dar o nome que quiser para 
essa variável, mas lembre-se de que é legal o nome da variável ter relação 
com o significado do que ela armazena.
Além disso, o loop também pode ser controlado por algo que o usuário 
digita ou alguma operação interna a ele. Imagine que o cálculo da média seja 
digitado até que seja zero para a matrícula do aluno. O loop, então, encerraria 
como resultado de uma operação. Esse tipo de loop é obtido por meio de um 
teste condicional com uma variável, que é conhecida como variável de controle.
Em C, existem os seguintes loops: while, for e do-while. Vamos começar 
com o while. Para isso, vamos a um código simples, que mostre os números 
de 1 a 5, primeiro sem estrutura de repetição. Veja na Figura 1, a seguir.
Figura 1. Código simples sem estrutura de repetição.
Estruturas de repetição2
Como pode ser visto na Figura 1, repetimos as linha 5 e 6 por 5 vezes, 
que é a escrita na tela da variável contador. Nesse exemplo, inicializamos 
a variável contador com 0. Portanto, para que a contagem seja de 1 a 5, é 
necessário realizar primeiro um incremento de 1 nessa variável para depois 
exibirmos na tela.
Agora, vamos usar a estrutura de repetição while para realizar a mesma 
tarefa. Veja na Figura 2, a seguir.
Figura 2. Estrutura de repetição while. 
As linhas 5 a 8 mostram o uso da estrutura de repetição while. Sua sintaxe 
é a demonstrada na Figura 3:
Figura 3. Sintaxe da estrutura de repetição while.
3Estruturas de repetição
Alguns detalhes:
 � A condição é uma expressão relacional e/ou lógica com a variável de 
controle.
 � A variável de controle deve ser inicializada antes do loop.
 � A variável de controle precisa ser modificada dentro do loop de repetição.
Esses detalhes são importantes, pois, se eles não estiverem presentes no 
código, o loop pode ou não funcionar ou funcionar de forma errada. Para 
exemplificar, vamos a dois erros bastante comuns que podem acontecer, ou 
melhor, acontecem com todos que estão aprendendo a programar.
Veja este exemplo, na Figura 4.
Figura 4. Exemplo de problema de semântica.
Esse programa compila, mas, ao executar, nada acontece — trata-se de 
um problema de semântica. A linha em destaque é a que inicializa a variável 
de controle, contador. Ela foi inicializada com o valor 6, e na linha 5 temos 
a estrutura while.
Estruturas de repetição4
No while, é feito um teste condicional, o qual, na primeira rodada, é falso. 
O fluxo do programa não passa pelo loop (delimitado pelo conjunto de chaves) 
e vai direto para a linha 9, finalizando o código. 
Com esse código, deu para perceber que o bloco de operações dentro do 
while só será executado caso, ou melhor, enquanto o teste condicional for 
verdadeiro. Por isso, cuidado com o valor inicial de sua variável de controle. 
Vamos melhorar a sintaxe do while, na Figura 5.
Figura 5. Sintaxe do while.
Esse é o nosso primeiro problema comum em estrutura de repetição. Vamos 
ao segundo. Veja o código a seguir, na Figura 6.
Figura 6. Exemplo de problema de loop infinito.
5Estruturas de repetição
Dessa vez, o código compila, mas tem uma saída diferente: ele fica impri-
mindo na tela o valor 0, e isso vai ficar acontecendo para sempre ou, melhor 
dizendo, infinitas vezes. Esse problema é conhecido como loop infinito e 
acontece porque não houve modificação do valor da variável de controle dentro 
do loop, ou seja, o teste condicional vai dar sempre verdadeiro e a linha 6 vai 
ser executada para sempre.
Então, duas dicas valiosas, ao escrever uma estrutura de repetição no seu 
programa, são:
 � inicializar a variável de controle de forma conveniente.
 � ter uma linha dentro do loop, que realiza a modificação do valor da 
variável de controle.
Outro detalhe do uso do while é quando não tivermos a quantidade de vezes 
que a repetição irá acontecer. Veja o seguinte código da Figura 7.
Figura 7. Exemplo uso do while — não há quantidade de vezes da repetição. 
Ele soma todos os valores que são digitados. Não temos como saber quantas 
vezes a pessoa vai digitar um valor válido, mas sabemos que o loop irá parar 
quando o valor digitado, que será armazenado na variável número, for zero, 
pois o teste condicional é a expressão numero!=0, ou seja, o código irá repetir 
enquanto o número for diferente de zero.
Estruturas de repetição6
Outro detalhe para esse código é o uso da variável soma. Esse tipo de uso 
é o que chamamos de variável, que vai acumulando os valores, bastante útil 
em programação, como, por exemplo, para calcularmos média de valores. É 
como se a variável soma fosse uma grande caixa que, na primeira vez que 
passa pelo código, contém valor 0; depois, todos os númerosque são colocados 
lá dentro são somados com o valor que já existia. Veja a Figura 8, a seguir. 
Figura 8. Exemplo de variável soma.
45 1
0 9
0
soma soma soma soma
Cada passagem pelo loop
45 55 64
Então, o superpoder do while é que podemos usá-lo quando não sabemos 
a quantidade de vezes que o laço vai acontecer — e não se esqueça: o teste 
condicional do while é feito logo do início da sua execução. Vamos agora para 
o segundo tipo de estrutura de repetição: o for.
A estrutura de repetição for
A estrutura de repetição for também nos auxilia quando precisamos repetir 
um trecho de código. Sua principal diferença, quando comparada com o while 
e o do-while — que veremos a seguir —, é que só pode ser usado quando se 
sabe a quantidade de vezes que o loop vai acontecer.
7Estruturas de repetição
Vamos avaliar o seguinte código da Figura 9.
Figura 9. Exemplo de código com estrutura de repetição for.
Esse código também acumula, somando todos os valores que são digitados 
pelo usuário. A diferença está no uso da estrutura de repetição for. Para que 
ela seja usada, precisamos definir quantas vezes a repetição irá acontecer — 
nesse caso, isso é definido com a variável count.
A sintaxe da estrutura de repetição for é a seguinte:
Figura 10. Sintaxe do for.
O primeiro valor dentro dos parênteses é a variável de controle — nesse 
caso, declarada, dentro do próprio for, uma prática bastante comum em lin-
guagem C. O segundo termo é o teste condicional, que pode ser traduzido 
para o seguinte: enquanto o teste for verdadeiro, o loop continua; enquanto a 
variável i for menor que a variável count e o último termo, e como a variável 
i vai ser modificada, ou seja, a instrução que muda o valor da variável de 
controle, nesse caso, o i será incrementado de um em um.
Estruturas de repetição8
Os seguintes detalhes devem ser observados: 
 � A variável de controle não precisa ser declarada no for, mas deve levar 
ao seguinte: quando acabar o loop, a variável deixa de existir.
 � O teste condicional pode ser feito usando-se qualquer operador lógico 
e/ou relacional.
 � O último termo, também chamado de passo do loop, pode ser de in-
cremento, de decremento e do tamanho que for conveniente para o 
programa.
 � O for é delimitado por um conjunto de chaves, assim como o while.
 � O loop fica executando enquanto o teste condicional for verdadeiro, ou 
seja, ao chegar na última linha , o fluxo de execução volta para o teste 
e verifica se ele é verdadeiro ou falso.
Podemos ver o funcionamento do loop for com o seguinte fluxograma, 
representado na Figura 11:
Figura 11. Fluxograma com loop for.
9Estruturas de repetição
Vamos a mais um exemplo, veja o seguinte código, na Figura 12.
Figura 12. Código com loop for.
Muito parecido com o anterior, exceto pelo valor de count ser pedido 
ao usuário e não atribuído dentro do código. O programa continua sabendo 
quantas vezes o loop vai acontecer, só que agora foi o usuário do programa 
que definiu. Em ambos os casos, podemos usar o for, pois sabemos esse limite. 
E o while? Pode ser usado nesses casos também? A resposta é sim, o while é 
multiuso nesse aspecto. Vamos finalizar nossas estruturas de repetição com 
o último tipo: o do-while.
A estrutura de repetição do-while
Para finalizar, vamos à terceira estrutura de repetição: do-while. Como vimos 
anteriormente, existe uma diferença no uso de while e for, mas ambos têm 
algo em comum: o teste condicional é feito no início da estrutura. O do-while 
é uma estrutura de repetição onde o teste condicional é feito no fim, ou seja, o 
bloco de operações será executado pelo menos uma vez, independentemente 
do valor lógico do teste condicional.
Estruturas de repetição10
Vamos refazer o exemplo do acumulador de valores, agora usando o do-
-while. Observe a Figura 13.
Figura 13. Exemplo de acumulador de valores com do-while.
O do-while também funciona quando não sabemos quantas vezes a repetição 
vai acontecer, assim como o while. Um detalhe importante é que o bloco de 
código que está dentro da estrutura de repetição será executado pelo menos 
uma vez, visto que o teste condicional é feito somente no fim.
Também é preciso tomar os mesmos cuidados quanto ao loop infinito, ou 
seja, para que o loop aconteça de forma conveniente à resolução de um deter-
minando, é preciso que a variável de controle seja modificada dentro do loop.
A sintaxe de do-while pode ser vista na Figura 14.
Figura 14. Sintaxe de do-while.
11Estruturas de repetição
Para finalizarmos, observe o Quadro 1, com uma comparativa entre as 3 
estruturas de repetição existentes na linguagem C.
Nome da estrutura
Teste condicional 
é feito no início ou 
no fim do loop?
Necessidade de se 
saber quantas vezes 
o loop vai acontecer?
While Início Não
For Início Sim
Do-while Fim Não
Quadro 1. Síntese das três estruturas de repetição da linguagem C.
Ao se escolher qual estrutura usar, precisa-se analisar o problema e como se deseja 
resolvê-lo computacionalmente. A prática vai de ajudar sempre nessa escolha. Portanto, 
programe sempre. 
BOOLEAN type support library. Cppreference.com, 2017. Disponível em: <http://
en.cppreference.com/w/c/types/boolean>. Acesso em: 22 fev 2018. 
MIZRAHI, V. V. Treinamento em Linguagem C: curso completo em um volume. 2. ed. 
São Paulo: Pearson, 2008.
PAES, R. B. Introdução à Programação com a Linguagem C. São Paulo: Novatec, 2016.
PINHEIRO, F. A. C. Elementos de programação em C. Porto Alegre: Bookman, 2012. 548p.
SCHEINERMAN, E. R. Matemática Discreta: uma introdução. São Paulo: Thomson 
Pioneira, 2003.
Leituras recomendadas
Estruturas de repetição12
 
DICA DO PROFESSOR
O que é uma estrutura de repetição e como ela funciona? Acompanhe o vídeo e tenha 
orientações sobre esses conceitos e o modo como a linguagem C trata essas questões.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) O seguinte programa pede para o usuário um número e mostra a tabuada de multiplicação 
desse número. 
Foram retiradas as linhas 6 e 10 dessa estrutura, e agora você precisa adicioná-las para um 
correto funcionamento desse código. 
O que deve ser digitado nas linhas 6 e 10? 
A) na linha 6: contador=1; na linha 10: contador=contador*1;
B) na linha 6: contador=0; na linha 10: contador=contador+1;
C) na linha 6: contador=1; na linha 10: contador=contador+1;
D) na linha 6: contador=1; na linha 10: contador=contador-1;
E) na linha 6: contador=10; na linha 10: contador=contador+1;
Como podemos reescrever o seguinte trecho de código, utilizando como estrutura de 
repetição o for? 
 
#include <stdio.h>
int main(){
int qtd,contador;
float valor,soma;
soma=0;
contador=1;
printf(" Lista de Compras n");
while(contador<6)
{
printf("Digite a qtd: ");
scanf("%d",&qtd);
printf("Digite o valor por unidade: ");
scanf("%f",&valor);
valor=valor*qtd;
soma=soma+valor;
2) 
contador=contador+1;
}
printf("Valor total da compra: R$ %.2fn",soma);
return 0;
}
 
 
 
A) 
 
B) 
 
C) 
 
D) 
 
E) Esse tipo de programa não pode ser implementado usando-se o for.
3) Em que ocasião ocorre um loop infinito?
A) Quando a estrutura de repetição fica executando para sempre.
B) Quando o programa precisa de todo o poder de processamento do computador, algumas 
vezes chegando até a desligá-lo.
C) Quando a estrutura de repetição não consegue resolver o problema de forma correta, por 
este ser muito complexo.
D) Quando a variável de controle do loop não é inicializada.
E) Quando a repetição nunca é executada .
4) Qual a diferença entre a estrutura while e a do-while?
A) Na estrutura de repetição while, o teste condicional é feito no fim do loop; já na estrutura 
do-while, o teste é feito no início.
B) Na estrutura de repetição while, não é preciso modificar o valor da variável de controle; já 
na estrutura do-while, essa modificação é obrigatória.
C) Na estrutura de repetição while, o teste condicional é feito no início do loop; já na estruturado-while, o teste é feito no fim.
D) A while só pode ser usada quando se sabe quantas vezes o loop será executado; já na do-
while esse dado não é obrigatório.
E) Não existe diferença alguma entre as duas estruturas.
5) Em que ocasião podemos substituir a while pela for?
A) Somente quando se sabe quantas vezes a estrutura de repetição será executada.
B) Sempre é possível substituir uma estrutura while por uma for.
C) Nunca podemos substituir uma estrutura while por uma for.
D) Somente quando a while estiver efetuando operações aritméticas.
E) Somente quando não for preciso inicializar a variável de controle.
NA PRÁTICA
Marcela está, junto com seu time de desenvolvedores, analisando o código de um programa que 
realiza uma tarefa. Considera-se a população de duas cidades, A e B, sendo que A 
tem menos habitantes que B. O usuário entra com a taxa de crescimento de cada uma delas, e 
o programa precisa calcular em quantos anos a população que começou com menos 
habitantes irá ultrapassar a da outra cidade. 
 
Durante a análise, ela se deparou com um loop infinito. Aponte onde está o erro e como 
consertá-lo. 
 
Confira o que fez Marcela. 
 
Conteúdo interativo disponível na plataforma de ensino!
 
 
O código-fonte precisa ser compilado para poder ser executado: gcc napraticauaer.c 
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Programação em C - PLC0
Assista ao vídeo Me Salva! Programação em C - PLC07 - Comando 'for', para aprender um 
pouco mais sobre a estrutura de repetição for
Conteúdo interativo disponível na plataforma de ensino!
Unplugged - For Loop Fun - Lesson in Action
Assista ao vídeo Unplugged - For Loop Fun - Lesson in Action, para entender como um loop 
funciona de forma unplugged, ou seja, sem usar computação.
Conteúdo interativo disponível na plataforma de ensino!
Estruturas de Repetição 1 - Curso de Algoritmos #09
A estrutura de repetição ENQUANTO vai permitir que você execute blocos de comandos várias 
vezes e simplificar a forma de representar lógicas que vão construir programas.
Conteúdo interativo disponível na plataforma de ensino!
Estruturas de Repetição 2 - Curso de Algoritmos #10
A estrutura Repita..Ate é uma estrutura de repetição com teste lógico no final, o que permite que 
você execute o bloco interno pelo menos uma vez, independente do resultado do teste.
Conteúdo interativo disponível na plataforma de ensino!
Estruturas de Repetição 3 - Curso de Algoritmos #11
A estrutura Para.. Faça é uma estrutura de repetição com variável de controle, o que permite que 
você execute o bloco interno uma quantidade determinada de vezes.
Conteúdo interativo disponível na plataforma de ensino!
Hour of Code - Mark Zuckerburg teaches Repeat Loops
Assista ao vídeo Hour of Code - Mark Zuckerburg teaches Repeat Loops, no qual o fundador do 
Facebook explica como funciona o loop.
Conteúdo interativo disponível na plataforma de ensino!
Estrutura de Dados Homogêneas do Tipo 
Matriz
APRESENTAÇÃO
O uso de dispositivos computacionais cresceu de forma exponencial nos últimos anos. É por 
isso que, a cada dia, o mercado de trabalho está apresentando melhores oportunidades para os 
programadores. Contudo, é preciso estar atento porque, como em qualquer outro ramo de 
atividade, os melhores profissionais ganham destaque! Para que você seja um destes 
profissionais destacados, é fundamental conhecer as estruturas de dados que podem ser 
utilizadas na linguagem de programação com a qual você estiver trabalhando. 
Nesta Unidade de Aprendizagem, você vai aprender a diferenciar o conceito de variáveis 
simples, vetores e matrizes, além de aprender a manipular matrizes (inserir e consultar dados). 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Diferenciar o conceito de variáveis simples, vetores e matrizes.•
Descrever o conceito de matrizes com duas dimensões, elementos com tipos de dados 
iguais, uso de dois índices (linha x coluna). Apresentar formas de acesso aos elementos, 
com a indicação dos dois índices (tanto para escrita de um elemento quanto para 
recuperação do seu valor).
•
Descrever a necessidade de utilização de dois laços de repetição (em geral do tipo 
para...faça) para se percorrer uma matriz, seja para inicializar, ler ou escrever seus 
elementos.
•
DESAFIO
Quando você utilizar matrizes para resolver um problema, você precisará utilizar dois laços de 
repetição. Isso acontece porque o primeiro laço será utilizado para percorrer linhas, e o segundo 
laço será utilizado para percorrer colunas. Assim, se você quiser inserir um valor na matriz, 
precisará informar a linha e a coluna onde deseja inserir. Por exemplo, se quiser inserir o valor a 
na linha 2 e na coluna 3, você fará da seguinte forma: matriz[2,3] = a.
Utilizando laços de repetição, você consegue inserir dados em todos os campos da matriz, da 
seguinte forma:
para linha de 1 ate 10 passo 1 faca
 para coluna de 1 ate 10 passo 1 faca
 matriz[linha,coluna]=a
 fimpara
fimpara
 
 
Foi solicitado à sua equipe programar um jogo de damas. Para você, coube fazer a estrutura de 
dados do tabuleiro. Considere: 
1. O tabuleiro de damas é formado por casas: você pode considerar que cada posição da matriz 
representa uma casa. 
2. O tabuleiro de damas possui 8 colunas e 8 linhas. 
3. O jogo de damas possuirá dois jogadores, assim você precisa definir: informação que indica 
casa vazia, informação que indica as peças do jogador das peças brancas, informação que indica 
as peças do jogador de peças pretas, bem como a informação que permitirá identificar as damas 
de cada um dos jogadores. 
4. Você precisa inicializar o tabuleiro, colocando as informações: das casas vazias e das peças 
iniciais de cada jogador. 
5. Você precisa mostrar esse tabuleiro.
Bom trabalho!
INFOGRÁFICO
Veja agora um infográfico que sintetiza os conteúdos que você está estudando. Neste material 
estão contidas as definições e uma diferenciação entre variáveis simples, vetores e matrizes. 
Confira!
CONTEÚDO DO LIVRO
Faça a leitura do livro Algoritmos e Programação para aprender mais sobre a declaração e 
inicialização de variáveis, vetores e matrizes, e também para estudar a diferença entre cada um 
deles e a forma de utilização. Inicie seu estudo no capítulo 7.1 matrizes.
Boa leitura!
23
s é r i e l i v r o s d i d á t i c o s i n f o r m á t i c a u f r g s
algoritmos
e programação 
com exemplos em Pascal e C
nina edelweiss
maria aparecida castro livi
E22a Edelweiss, Nina.
 Algoritmos e programação com exemplos em Pascal e C 
 [recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro 
 Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014.
 Editado também como livro impresso em 2014.
 ISBN 978-85-8260-190-7
 1. Informática. 2. Algoritmos – Programação. I. Livi, 
 Maria Aparecida Castro. II. Título. 
CDU 004.421
 as autoras
Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni-
versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge-
nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora 
do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três 
livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais 
e internacionais. Participou de diversos projetos de pesquisa financiados por agências de 
fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e 
desenvolvimento de software.
Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da 
Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro-
fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na 
carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programaçãopara 
alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de 
interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial 
quanto a distância.
Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052
170 Algoritmos e Programação com Exemplos em Pascal e C
6.3.2 operações sobre mais de um vetor
Os trechos de código a seguir utilizam três vetores inteiros de 10 elementos chamados respec-
tivamente de original, pares e ímpares.
Constante: MAXI = 50
Variáveis: original, pares, ímpares (arranjo [1..MAXI] de inteiro)
O vetor original é preenchido por leitura e, a partir dele, devem ser gerados os vetores pa-
res e ímpares, com os valores pares e ímpares do vetor original. Os valores fornecidos no 
vetor original poderão ser pares e ímpares, só pares ou só ímpares. Então, os vetores pares 
e ímpares poderão terminar preenchidos com 0 a 10 elementos.
1 2 3 4 5
valor 5 8 -2 1 10
1 2 3 4 5
5 8 -2 1 1
Vetor original
Passo 1
1 2 3 4 5
5 8 -2 -2 1 Passo 2
etc.
…
figura 6.3 Deslocamento de valores do vetor.
Capítulo 6 Variáveis Estruturadas: Arranjos Unidimensionais 171
A seguir, temos os trechos que executam essas operações, finalizando com a escrita do vetor 
de pares, que é semelhante à escrita do vetor de ímpares.
a preenchimento do vetor original por leitura:
para i de 1 incr 1 até MAXI faça
 início
 escrever('Valor inteiro: ', i, ' = ')
 ler(original[i])
 fim
b preenchimento dos vetores pares e ímpares. Para acesso aos elementos desses vetores, 
são utilizadas como índices duas variáveis inteiras: i_par e i_ímpar, para os vetores 
pares e ímpares respectivamente. Essas variáveis indicam, sempre, a última posição 
ocupada no vetor correspondente e são inicializadas com zero, pois inicialmente esses 
dois vetores estão vazios:
i_par ← 0
i_ímpar ← 0
para i de 1 incr 1 até MAXI faça
 se original[i] mod 2 = 0
 então início
 i_par ← i_par + 1
 pares[i_par] ← original[i]
 fim
 senão início
 i_ímpar ← i_ímpar + 1
 ímpares[i_ímpar] ← original[i]
 fim
c apresentação dos valores contidos no vetor pares, lembrando que a última posição ocu-
pada é indicada pelo índice i_par:
 se i_par > 0
 então para i de 1 incr 1 até i_par faça
 escrever(pares[i])
 senão escrever ('Nenhum valor par encontrado')
Conforme pode ser observado, nesse problema os vetores pares e ímpares são preenchidos 
a partir do início, mas não obrigatoriamente de forma total, e não são inicializados. Para 
percorrê-los, os valores finais dos índices usados para gerá-los são utilizados como limite, o 
que garante que somente as posições efetivamente ocupadas são acessadas.
observações complementares. Em alguns problemas, ao serem preenchidos os vetores, 
a posição do dado no vetor também é informação. Isso acontece, por exemplo, no exercício 
que contabiliza a frequência absoluta de número de pontos obtidos por 500 candidatos a 
um concurso (Exercício 6.4 dos exercícios de fixação), em que o iésimo elemento do vetor freq 
indica quantos candidatos obtiveram i pontos no concurso. Nesse caso, alterar a posição do 
dado no vetor, sem maiores cuidados, provocará perda de informação.
172 Algoritmos e Programação com Exemplos em Pascal e C
Uma solução para evitar a perda dessa informação, no caso de ocorrerem trocas de posição 
dos elementos, é criar um vetor adicional que contenha, inicialmente, em cada posição, o 
valor do índice correspondente. Assim, ao realizar, por exemplo, uma reordenação dos dados 
no vetor freq, sempre que um par de dados tiver que trocar de posição, as posições corres-
pondentes do vetor adicional com os índices serão trocadas da mesma forma.
6.3.3 pesquisa e classificação de vetores
Duas operações sobre dados são frequentemente utilizadas na solução de problemas: pes-
quisa e classificação de vetores. A pesquisa envolve examinar um conjunto de dados 
procurando determinar a presença (ou ausência) de um ou mais valores no mesmo e, se 
presentes, sua localização. A classificação ou ordenação envolve rearranjar um conjunto de 
dados segundo alguma ordem predeterminada.
Boas soluções para essas duas operações se tornam importantes à medida que aumenta o vo-
lume dos dados a processar. Inúmeras estratégias para pesquisa e classificação de dados foram 
desenvolvidas (Knuth, 1997; Saraiva; Azeredo, 2008). Conforme o número de dados envolvidos, 
algumas estratégias podem ser extremamente interessantes ou totalmente catastróficas, seja sob 
o ponto de vista de exigência de recursos de armazenamento seja de tempo de execução.
Nos exercícios de fixação a seguir, são apresentados, a título de ilustração, dois métodos de 
pesquisa e dois de classificação. Outros métodos para essas tarefas são apresentados em 
outras seções deste livro.
6.4 
 exercícios de fixação
exercício 6.1 Preencher por leitura um vetor com valores reais que representam tempera-
turas. Determinar qual a menor temperatura. Escrever todo o conteúdo do vetor e a menor 
temperatura encontrada.
Algoritmo MenorTempComVet
{DETERMINA MENOR TEMPERATURA. USA UM VETOR}
 Constante: MAXTEMP = 200
 Entradas: vetor (arranjo [1..MAXTEMP] de real){TEMPERATURAS}
 Saídas: {VETOR DE TEMPERATURAS}
 menor (real) {MENOR TEMPERATURA}
 Variável auxiliar: j (inteiro)
início
 para j de 1 incr 1 até MAXTEMP faça
 ler (vetor[j] {PREENCHE VETOR POR LEITURA}
 menor ← vetor[1] {INICIALIZA MENOR COM PRIMEIRO ELEM. DO VETOR}
 para j de 2 incr 1 até MAXTEMP faça
 se vetor[j] < menor {PERCORRE VETOR COMPARANDO COM MENOR}
 então menor ← vetor[j] {TROCA CONTEÚDO DE MENOR SE NECESSÁRIO}
Capítulo 6 Variáveis Estruturadas: Arranjos Unidimensionais 173
 escrever('Vetor lido')
 para j de 1 incr 1 até MAXTEMP faça
 escrever(vetor[j]) {ESCREVE CONTEÚDO DO VETOR}
 escrever('Menor temperatura = ',menor) {ESCREVE MENOR TEMPERATURA}
fim
exercício 6.2 Preencher um vetor com valores inteiros por leitura. Gerar, a partir dele, um 
novo vetor apenas com os valores múltiplos de cinco contidos no vetor original. O novo vetor 
gerado deve ser preenchido de modo contínuo, ou seja, a partir do início, posição após posi-
ção. Apresentar o novo vetor gerado ou, se for o caso, uma mensagem informando que não 
existem valores com essa característica no vetor original.
Algoritmo GeraVetMult5
{LE UM VETOR – GERA E APRESENTA OUTRO, SÓ COM OS VALORES MÚLTIPLOS DE 5}
 Constante: MAX = 50
 Entradas: orig (arranjo [1..MAX] de inteiro) {VALORES ORIGINAIS}
 Saídas: mult5 (arranjo [1..MAX] de inteiro) {MÚLTIPLOS DE 5}
 Variáveis auxiliares:
 k (inteiro) {ÍNDICE PARA PERCORRER VETOR ORIG}
 contmult5 (inteiro) {ÍNDICE E CONTADOR DOS MÚLTIPLOS DE 5}
início
 para k de 1 incr 1 até MAX faça
 ler (orig[k]) {PREENCHE ORIG POR LEITURA}
 contmult5 ← 0 {INICIALIZA CONTADOR DE MÚLTIPLOS DE 5 EM ZERO}
 para k de 1 incr 1 até MAX faça {PERCORRE ORIG DO INÍCIO AO FINAL}
 se orig[k] mod 5 = 0 {TESTA SE VALOR CONTIDO EM ORIG É
 MÚLTIPLO DE 5}
 então início
 contmult5 ← contmult5 + 1
 {INCREMENTA CONTADOR DE MÚLTIPLOS DE 5}
 mult5[contmult5] ← orig[k] {COPIA VALOR PARA VETOR MULT5}
 fim
 se contmult5 = 0 {TESTA SE ENCONTROU ALGUM VALOR MÚLTIPLO DE 5}
 então escrever('Não há valores múltiplos de 5!')
 senão início {ESCREVE VALORES MÚLTIPLOS DE 5}
 escrever('Valores múltiplos de 5:')
 para k de 1 incr 1 até contmult5 faça
 escrever(mult5[k])
 fim
fim
exercício 6.3 Operações sobre conjuntos podem ser implementadas com o uso de vetores. 
A seguir é apresentada a criação do vetor intersecção vet_inters a partir dos valores de 
dois vetores inteiros de entrada, vet1 e vet2. Somente os valores que existam tanto em vet1 
quanto em vet2 devem ser transferidos para vet_inters.
174 Algoritmos e Programação com Exemplosem Pascal e C
Supõe-se que vet1 não tenha valores duplicados, o mesmo acontecendo com vet2, mas que 
entre eles possa haver valores iguais.
A estratégia de criação do vetor intersecção é selecionar, um após outro, os valores de vet1 
e, para cada valor, compará-lo com todos os valores de vet2, até que um valor igual seja 
encontrado ou que vet2 não tenha mais valores a serem examinados. O índice utilizado no 
vetor intersecção só é incrementado quando um novo valor é acrescentado a esse vetor. Dessa 
forma, ao concluir-se a tentativa de geração do vetor intersecção, pode-se saber se o vetor 
intersecção está vazio e, se ele não estiver, quantos elementos ele contém. Na apresentação 
dos valores do vetor intersecção, só as posições efetivamente ocupadas são acessadas.
Algoritmo GeraVetIntersc
{LÊ DOIS VETORES E GERA O VETOR INTERSECÇÃO. APRESENTA O VETOR GERADO 
OU UMA MENSAGEM CASO O VETOR INTERSECÇÃO SEJA VAZIO}
 Constante: MAX = 50
 Entradas:
 vet1, vet2 (arranjo [1..MAX] de inteiro) {VETORES DE ENTRADA}
 Saídas:
 vet_inters (arranjo [1..MAX] de inteiro) {VETOR INTERSECÇÃO}
 Variáveis auxiliares:
 i, j (inteiro) {ÍNDICES DOS VETORES VET1 E VET2}
 k (inteiro) {ÍNDICE DO VETOR VET_INTERS}
 igual (lógica)
início
 {LEITURA DOS DOIS VETORES DE ENTRADA}
 para i de 1 incr 1 até MAX faça
 ler (vet1[i])
 para i de 1 incr 1 até MAX faça
 ler (vet2[i])
 {GERAÇÃO DO VETOR INTERSECÇÃO}
 k ← 0 {INICIALIZA – ÍNDICE PARA VETOR VAZIO}
 para i de 1 incr 1 até MAX faça {I PERCORRE VET1}
 início
 j ← 1 {J VAI PERCORRER VET2}
 igual ← falso {INICIALIZA VARIÁVEL LÓGICA}
 repita
 se vet1[i] = vet2[j]
 então igual ← verdadeiro {ACHOU ELEM. IGUAL EM VET1 E VET2}
 j ← j + 1 {AVANÇA PARA PRÓXIMO ELEMENTO EM VET2}
 até (igual = verdadeiro) ou (j > MAX)
 se igual = verdadeiro
 então início
 k ← k + 1 {INCREMENTA ÍNDICE DE VET_INTERS}
 vet_inters[k] ← vet1[i] {COPIA ELEMENTO PARA VET_INTERS}
 fim
Capítulo 6 Variáveis Estruturadas: Arranjos Unidimensionais 175
 fim {PARA-FAÇA}
 {APRESENTAÇÃO DO RESULTADO: VETOR INTERSECÇÃO OU MENSAGEM}
 se k >0
 então início
 escrever('Conjunto intersecção')
 para i de 1 incr 1 até k faça
 escrever(vet_inters[i])
 fim
 senão escrever('Não há conjunto intersecção')
 fim
exercício 6.4 Contabilizar a frequência absoluta de número de pontos obtidos na prova por 
500 candidatos a um concurso. A quantidade de pontos varia de 0 a 120.
Na solução apresentada, o número de pontos é usado como índice para acesso ao vetor freq 
onde são realizadas as contagens. Dessa forma, o índice da posição onde o dado está arma-
zenado faz parte da informação. Notar que, como os índices de arranjos na pseudolinguagem 
iniciam em 1, o vetor de frequências terá tamanho igual ao valor máximo de pontos mais 
um, e o número de pontos dos candidatos será acrescido de um após a leitura, para servir de 
índice ao vetor freq.
Algoritmo FreqCandConcurs
{CONTABILIZA A FREQUÊNCIA ABSOLUTA DOS PONTOS DOS CANDIDATOS A UM CONCURSO}
 Constantes:
 MAXCAND = 500 {NÚMERO MÁXIMO DE CANDIDATOS}
 MAXPONTOS = 120 {LIMITE SUPERIOR DE PONTOS}
 Entradas:
 pontos (inteiro) {QUANTIDADE DE PONTOS OBTIDOS POR UM CANDIDATO}
 Saídas:
 freq (arranjo [1..MAXPONTOS + 1] de inteiro) {FREQUÊNCIA
 ABSOLUTA DOS PONTOS}
 Variáveis auxiliares:
 i (inteiro) {CONTADOR DE CANDIDATOS}
 k (inteiro) {ÍNDICE DO VETOR FREQ}
início
 para i de 1 incr 1 até (MAXPONTOS + 1) faça
 freq(i) = 0; {INICIALIZA COM ZEROS VETOR FREQ}
 para i de 1 incr 1 até MAXCAND faça {PARA CADA CANDIDATO}
 início
 repita
 ler (pontos) {LÊ PONTOS DO CANDIDATO}
 se pontos<0 ou pontos>MAXPONTOS {TESTA VALIDADE DE PONTOS}
 então escrever ('pontos inválidos') {IGNORA OS INVÁLIDOS}
 até pontos≥0 e pontos≤MAXPONTOS {ATÉ VALOR DE PONTOS VÁLIDO}
 freq[pontos + 1] ← freq[pontos + 1] + 1 {INCREMENTA FREQ}
 fim
176 Algoritmos e Programação com Exemplos em Pascal e C
 escrever ('Frequência absoluta de pontos')
 para k de 1 incr 1 até MAXPONTOS + 1
 escrever (k – 1, freq[k])
fim
exercício 6.5 Ler o número de identificação e o escore de 30 atletas (com verificação de 
correção dos dados) e apresentar os dados dos atletas com escore igual ou superior à média. 
Neste problema, os vetores usados para armazenar os números de identificação e os escores 
dos atletas têm correspondência de posição, conforme mostrado na Figura 6.4. Os dados do 
primeiro atleta serão armazenados na posição 1 de cada um dos dois vetores, os dados do 
segundo atleta na posição 2 de cada um dos dois vetores, etc.
Algoritmo AtletasEscore
{APRESENTA DADOS DE ATLETAS COM ESCORE IGUAL OU SUPERIOR À MÉDIA}
 Constantes:
 MAXATLETAS = 30 {NÚMERO MÁXIMO DE ATLETAS}
 MAXESCORE = 100 {NÚMERO MÁXIMO DE ESCORES}
 Entradas:
 número, escore (arranjo [1..MAXATLETAS] de inteiro)
 Saídas: {número, escore} {DADOS DE ALGUNS ATLETAS}
 Variáveis auxiliares:
 i (inteiro) {VALORES DOS ÍNDICES DOS VETORES}
 somatório (inteiro) {FAZ SOMATÓRIO DOS ESCORES}
 média (real) {MÉDIA DOS ESCORES}
início
 somatório ← 0 {INICIALIZA SOMATÓRIO DE ESCORES EM ZERO}
 para i de 1 incr 1 até MAXATLETAS faça {PARA CADA ATLETA}
 início
 repita
 ler (número[i]) {LEITURA DO NÚMERO DO ATLETA}
 se número[i] < 1 ou número[i] > MAXATLETAS
 {TESTA VALIDADE LEITURA}
 então escrever ('número inválido')
 até número[i] > 0 e número[i] ≤ MAXATLETAS
 repita
 ler (escore[i]) {LEITURA DO ESCORE DO ATLETA}
 se escore[i] < 0 ou escore[i] > MAXESCORE
 {TESTA VALIDADE ESCORE}
 então escrever ('escore inválido')
 até escore[i] ≥ 0 e escore[i] ≤ MAXESCORE
 somatório ← somatório + escore[i] {ACUMULA ESCORE LIDO}
 fim
 média ← somatório / MAXATLETAS {FAZ A MÉDIA DOS ESCORES}
 escrever ('Atletas com escore ≥ média')
 para i de 1 incr 1 até MAXATLETAS faça {PARA CADA ATLETA}
Capítulo 6 Variáveis Estruturadas: Arranjos Unidimensionais 177
 se escore[i] ≥ média {TESTA SE ESCORE É ≥ QUE MÉDIA}
 então escrever (número[i], escore[i]) {INFORMA DADOS ATLETA}
fim
1 2 3 4 5 6 7número
1 2 3 4 5 6 7 30
... 30
1 2 3 4 5 6 7escore 
99 87 70 98 100 79 95 88
... 30
D
a
d
o
s d
o
 a
lu
n
o
d
e có
d
ig
o
 1
 
D
a
d
o
s d
o
 a
lu
n
o
d
e có
d
ig
o
 5
 
figura 6.4 Vetores com dados de atletas: número de identificação e escore.
DICA DO PROFESSOR
O vídeo a seguir aborda a diferença de vetores, matrizes e variáveis simples. Além disso, dá a 
você o acesso a algumas dicas que facilitarão seu trabalho com matrizes. Assista!
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) Qual a principal diferença entre variáveis, vetores e matrizes? 
A) Variáveis e vetores armazenam um único valor; matriz, por ser bidimensional, permite 
armazenar mais de um valor.
B) Variáveis e vetores, por serem unidimensionais, armazenam um único tipo de dados. 
Matrizes, por serem bidimensionais, podem armazenar mais de um tipo de dados, desde 
que separados por linhas diferentes.
C) Matrizes necessitam de um laço de repetição para a manutenção dos valores. Nas 
variáveis, isso não é necessário.
D) Vetores necessitam de dois laços de repetição para a manutenção dos valores; nas 
variáveis, apenas um é necessário.
E) Variáveis armazenamapenas um valor; vetores e matrizes armazenam mais de um valor 
simultaneamente, sendo em vetores lado a lado e em matrizes, separado por linha e coluna.
2) Qual alternativa apresenta a sintaxe correta da declaração de uma matriz de strings? 
 
A) matriz: vetor [ ][ ] de string
B) matriz: conjunto [0..7][0..7] de string
C) matriz: vetor [0..7,0..7] de caracter
D) matriz: vetor [7, 7] de caracter
E) dados: matriz [0..7,0..7] de string
3) Qual alternativa descreve corretamente o processo de atribuição de valores para 
todos os elementos de uma matriz com 5 linhas e 7 colunas? 
A) para a de 1 ate 5 passo 1 faca
 
 para b de 1 ate 7 passo 1 faca
 
 matriz[a,b] <- x
 
 fimpara
 
fimpara
 
para a de 0 ate 5 passo 1 faca
 
 para b de 0 ate 7 passo 1 faca
 
B) 
 matriz[a,b] <- x
 
 fimpara
 
fimpara
 
C) para a de 0 ate 35 passo 1 faca
 
 matriz[a] <- x
 
 fimpara
 
fimpara
 
para a de 1 ate 7 passo 1 faca
 
 para b de 1 ate 5 passo 1 faca
 
 matriz[a,b] <- x
 
 fimpara
D) 
 
fimpara
 
E) para a ate 5 passo 1 faca
 
 para b ate 7 passo 1 faca
 
 matriz[a,b] <- x
 
 fimpara
 
fimpara
 
4) Qual alternativa NÃO é uma afirmação verdadeira sobre as estruturas de dados 
homogêneas? 
A) Matrizes também são chamadas de "arrays bidimensionais".
B) Ao adicionar um valor para uma variável, este valor está sendo salvo temporariamente no 
banco de dados.
C) Para efetuar a leitura de um valor que está salvo em uma matriz, é necessário referenciar 
os índices de linha e coluna, por exemplo, matriz[2,2].
D) Para ler todos os valores contidos em uma matriz, é necessário utilizar dois laços PARA e, 
em cada execução, verificar um índice da matriz.
E) Um exemplo de utilização de matrizes em software são os jogos de tabuleiro.
5) Para fins de apresentação de resultados, é necessário programar para que seja 
"quebrada" uma linha em um determinado momento da leitura de uma matriz, para 
que ela seja apresentada com as dimensões corretas. Dada uma matriz de 8x8, qual 
alternativa apresenta o código correto para exibição dos resultados com a quebra de 
linha ao final de cada linha da matriz? 
A) 
para linha de 0 ate 7 passo 1 faca
 
 para coluna de 0 ate 7 passo 1 faca
 
 escreva(tabuleiro[linha,coluna]," ")
 
 fimpara
 
 escreval(" ")
 
fimpara
 
 B) 
para linha de 0 ate 7 passo 1 faca
 
 escreval(" ")
 
 para coluna de 0 ate 7 passo 1 faca
 
 escreva(tabuleiro[linha,coluna]," ")
 
 fimpara
 
fimpara
 
 
para linha de 0 ate 7 passo 1 faca
 
 para coluna de 0 ate 7 passo 1 faca
 
 escreva(tabuleiro[linha,coluna]," ")
 
 fimpara
 
C) 
fimpara
 
D) 
para linha de 0 ate 7 passo 1 faca
 
 para coluna de 0 ate 7 passo 1 faca
 
 escreval(tabuleiro[linha,coluna]," ")
 
 fimpara
 
fimpara
 
 
para linha de 0 ate 7 passo 1 faca
 
 escreval(“ “)
 
 para coluna de 0 ate 7 passo 1 faca
 
 escreva(tabuleiro[linha,coluna]," ")
E) 
 
 fimpara
 
 escreval(“ “)
 
fimpara
 
NA PRÁTICA
 
 
Você foi contratado para desenvolver a estrutura de um jogo de Batalha Naval. Para construir 
esse jogo você recebeu as seguintes informações:
• O campo de batalha deve ter 5 linhas e 5 colunas (pequeno para auxiliar nos testes!)
• Pequenas embarcações ocupam duas casas subsequentes
• Médias embarcações ocupam três casas subsequentes
• Grandes embarcações ocupam 4 casas subsequentes
• Para simplificar o problema, as embarcações somente podem estar em uma única linha
Faça um programa que leia o campo de batalha e identifique onde estão as embarcações!
Mãos-a-obra! Você inicialmente precisa definir o seu campo de batalha, que será uma matriz 
5x5. Na sequência você precisa definir como irá codificar a informação de cada embarcação.
Aqui você tem duas alternativas: 
a) utilizar apenas dois códigos: 0 para indicar o vazio e 1 para indicar que tem embarcação; mas 
nesta situação quando duas embarcações estiverem juntas será difícil saber qual é. 
b utilizar: 0 para indicar o vazio, 2 para indicar embarcações pequenas, 3 para indicar 
embarcações médias e 4 para indicar embarcações grandes.
Na tabela a seguir você pode ver um exemplo do campo de batalha, onde na primeira linha se 
tem uma embarcação média, na segunda uma pequena, na terceira uma grande, na quarta duas 
pequenas e na última uma média. Lembre-se que o usuário pode não digitar corretamente a 
informação das embarcações!
 
 
Agora é sua vez! Temos certeza que consegue!
Clique para ver o código
SAIBA MAIS
http://lrq2.sagah.com.br/sagahcm/ua/11273/2/37/img_conteudo/Na_pratica_BATALHA.ALG
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Vetores - curso de algoritmos #14 - Gustavo Guanabara
Conteúdo interativo disponível na plataforma de ensino!
Matrizes - curso de algoritmos #15 - Gustavo Guanabara
Conteúdo interativo disponível na plataforma de ensino!
Variáveis, vetores e matrizes
Conteúdo interativo disponível na plataforma de ensino!
Estruturas Homogêneas: Vetores e Matrizes
Conteúdo interativo disponível na plataforma de ensino!
Introdução a Algoritmos
Conteúdo interativo disponível na plataforma de ensino!
Variáveis Indexadas (Vetores)
APRESENTAÇÃO
Vetores, arranjos simples ou estruturas de dados homogêneas de uma dimensão representam 
coleções lineares de elementos armazenados em sequência que são identificados por índices. A 
linguagem MATLAB fornece recursos poderosos para trabalhar com vetores, que vão desde 
simples operações até funções complexas, que realizam cálculos avançados com o objetivo de 
encontrar soluções para diversas questões do mundo real que podem ser representadas por 
expressões matemáticas.
Nesta Unidade de Aprendizagem, você vai estudar sobre a declaração de estruturas de dados 
homogêneas de uma dimensão e a construção de algoritmos em pseudocódigo e em MATLAB 
na solução de problemas.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Declarar estruturas de dados de uma dimensão (vetores) em pseudocódigo e linguagem 
MATLAB.
•
Construir algoritmos com estruturas de dados homogêneas (vetores) em pseudocódigo e 
linguagem MATLAB.
•
Aplicar as estruturas de dados homogêneas (vetores) na solução de problemas.•
INFOGRÁFICO
Um vetor é um arranjo de elementos dispostos de modo linear, como uma linha ou uma coluna 
de uma tabela (1 x N ou N x 1). Cada elemento do vetor possui um índice, que inicia com um e 
vai até a quantidade de elementos do arranjo. É por meio desse índice que as estruturas de 
repetição permitem realizar a navegação e acessar os elementos do vetor individualmente para 
ler, editar ou excluir dados.
 
Veja, no Infográfico a seguir, a ilustração da declaração de um vetor e como realizar a 
navegação em seus elementos por meio de uma estrutura de repetição.
CONTEÚDO DO LIVRO
Vetores são estruturas de dados homogêneas que armazenam coleções de elementos em 
sequência na memória. Na engenharia, aprender a desenvolver programas com vetores é uma 
atividade muito importante, uma vez que permite trabalhar com dados que podem ser tabuados e 
armazenados para a realização de diversas operações, como cálculos e simulações. Nesse 
contexto, a linguagem MATLAB possui diversos recursos que facilitam a manipulação e a 
execução de operações com vetores.
 
Para saber mais, leia o capítulo Variáveis indexadas (vetores), do livro Algoritmos e 
Programação, que serve como base teórica desta Unidade de Aprendizagem.
 
Boa leitura. 
 
Variáveis indexadas (vetores)
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
  Declarar estruturas de dados de uma dimensão (vetores) em pseu-
docódigo e linguagem MATLAB.
  Construir algoritmos com estruturas de dados homogêneas (vetores) 
em pseudocódigo e linguagem MATLAB.
  Aplicar asestruturas de dados homogêneas (vetores) na solução de 
problemas.
Introdução
Vetores, arranjos simples ou estruturas de dados homogêneas de uma 
dimensão representam coleções lineares de elementos armazenados em 
sequência que são identificados por índices. A linguagem MATLAB fornece 
recursos poderosos para trabalhar com vetores, que vão desde simples 
operações até funções complexas, que realizam cálculos avançados com 
o objetivo de encontrar soluções para diversas questões do mundo real 
que podem ser representadas por expressões matemáticas.
Neste capítulo, você vai estudar sobre a declaração de estruturas de 
dados homogêneas de uma dimensão e a construção de algoritmos em 
pseudocódigo e em MATLAB na solução de problemas.
Estruturas de dados de uma dimensão (vetores) 
em pseudocódigo e linguagem MATLAB
Uma estrutura de dados de uma dimensão, também conhecida como vetor, 
array ou arranjo simples (unidimensional), é uma lista ou relação de elementos 
dispostos em sequência. Essa estrutura, em comparação com uma tabela, é 
representada por uma linha ou uma coluna (PALM, 2013).
Um vetor é uma estrutura de elementos homogêneos, isto é, seus elementos 
são todos do mesmo tipo de dados, como uma relação de números inteiros, de 
números reais ou de strings. Isso significa que não é possível inserir elementos 
de tipos diferentes em um vetor, mesmo que a linguagem de programação não 
exija que a declaração do tipo de dados seja explícita (GILAT, 2012).
Algumas linguagens de programação exigem que as variáveis sejam declaradas com 
um tipo de dados específico, como Pascal, C, Java e outras. No entanto, há linguagens 
que realizam a conversão implícita de dados e, assim, não requerem que o tipo seja 
informado na declaração, como MATLAB, Visual Basic, PHP, etc. Nesse caso, um vetor que 
contém números inteiros e reais terá seus elementos convertidos para números reais.
Vetores são organizados por índices ou subscritos, que representam cada 
uma das posições da estrutura. Na linguagem MATLAB, o índice de um vetor 
inicia a partir da primeira posição, seguindo até o número total de elementos 
da estrutura, conforme ilustrado na Figura 1 (GILAT, 2012).
Figura 1. Estrutura de um vetor.
Os elementos de um vetor são armazenados em posições contíguas da 
memória do dispositivo ou da máquina virtual que o armazenam, por isso 
os elementos podem ser acessados diretamente por meio de seus índices 
(DEITEL; DEITEL, 2011).
A linguagem MATLAB foi desenvolvida especificamente para tratar com 
vetores de quaisquer dimensões. Dessa forma, qualquer relação de elementos 
pode ser tratada como um vetor, por exemplo, dados estatísticos de determinada 
população (GILAT, 2012). 
Variáveis indexadas (vetores)2
A declaração de um vetor em pseudocódigo pode ser realizada pela indica-
ção de um nome para a variável que representa o arranjo seguida da atribuição 
dos valores da lista, ou seja, dos valores dos elementos de cada posição:
Esse exemplo cria um vetor de cinco posições, cujos elementos foram 
inseridos automaticamente na sua declaração. É possível, ainda, declarar um 
vetor sem indicar os elementos na sua criação, podendo inseri-los posterior-
mente por meio de uma estrutura de repetição, conforme será apresentado 
adiante neste capítulo.
No MATLAB, a declaração é muito semelhante, bastando substituir o 
caractere-chave por colchete, além de substituir, opcionalmente, as vírgulas 
que separam os elementos pelo caractere espaço. Esse tipo de declaração se 
chama vetor de linha (PALM, 2013):
Um vetor de coluna no MATLAB é declarado quando seus elementos são 
separados pelo caractere ponto e vírgula, pela indicação de uma aspa simples 
no final ou por quebras de linha (operador de transposição). Nesse tipo de 
vetor, os elementos são exibidos um abaixo do outro (PALM, 2013):
É possível, ainda, criar um vetor com elementos espaçados de um fator 
constante no MATLAB. Para isso, deve-se indicar o valor do primeiro ele-
mento, o incremento e o valor do último elemento. Nesse tipo de declaração, os 
caracteres colchetes ou parênteses são opcionais (CHAPRA, 2013). Observe:
3Variáveis indexadas (vetores)
Se o incremento, que representa o parâmetro do meio, não for informado, 
o interpretador do MATLAB usará o valor 1, incrementando a sequência a 
cada número inteiro. No entanto, se o incremento superar o último valor, o 
vetor receberá até o último valor que não exceder o valor final (CHAPRA, 
2013). Observe:
Outra opção para declarar um vetor com atribuição de valores se dá por 
meio da função . Essa função cria um vetor com espaçamento linear, 
que identifica automaticamente os elementos intermediários do vetor por meio 
de um parâmetro que especifica a quantidade de elementos (GILAT, 2012).
Nesse exemplo, a função é usada para atribuir quatro valores, 
entre 1 e 10, para o vetor:
Algoritmos com estruturas de dados 
homogêneas (vetores) em pseudocódigo e 
linguagem MATLAB
Uma vez defi nidas as declarações das estruturas de dados homogêneas uni-
dimensionais, isto é, dos vetores, conforme visto anteriormente, é possível 
executar diversas ações com esses dados, como pesquisar, editar, concatenar 
e acrescentar elementos, entre outras.
Acessar elementos
Sabendo que o índice de um vetor inicia na posição 1, é possível acessar 
diretamente qualquer elemento do vetor a partir de seu índice, informando 
apenas a posição ou um intervalo, de acordo com os seguintes exemplos:
Variáveis indexadas (vetores)4
Editar elementos
A edição de um vetor também ocorre pela seleção do índice de seus ele-
mentos. Essa edição pode modifi car um único elemento ou uma faixa que 
indica a posição inicial e a posição fi nal. Se houver a atribuição para uma 
posição inexistente, essa posição será criada e seus elementos intermediários 
receberão 0 (CHAPRA, 2013). 
Além disso, é possível excluir elementos de um vetor pela atribuição de 
um valor nulo para determinada posição ou para uma faixa de posições. Nesse 
caso, o vetor reduz o seu tamanho para a quantidade de itens restantes.
Concatenar vetores
A concatenação de dois vetores se dá pela união de seus elementos. O resultado 
pode ser atribuído a outra variável ou a qualquer uma das variáveis que estão 
sendo concatenadas:
Operações com vetores
É possível realizar diversas operações com vetores, como soma, subtração, 
divisão, multiplicação, exponenciação e outras. As operações adição, subtração 
e multiplicação por um escalar podem ser realizadas de forma direta, usando 
os operadores conhecidos da computação: +, - e * (GILAT, 2012).
5Variáveis indexadas (vetores)
No entanto, as operações multiplicação, divisão e potenciação exigem 
uma representação um pouco diferente. Para isso, utiliza-se um ponto antes 
do operador na expressão, em uma representação conhecida no MATLAB 
por operações elemento por elemento (GILAT, 2012):
Para realizar operações entre vetores, é necessário que eles tenham a mesma dimensão, 
isto é, não é possível, por exemplo, somar dois vetores de dimensões diferentes, sendo 
um com cinco elementos e o outro com quatro. Caso haja uma tentativa de realizar 
uma operação com vetores de dimensões diferentes, o seguinte erro será apresentado 
pelo MATLAB: matrix dimensions must agree.
Percorrer vetores
É possível percorrer um vetor para realizar comparações ou operações com 
seus elementos. A navegação em um vetor se dá pelo índice dos elementos, 
que apontam para o conteúdo de cada posição, entre um e o número total de 
itens do arranjo (PALM, 2013).
O pseudocódigo de uma estrutura de repetição em um vetor é apresentado 
a seguir. Nessa estrutura, uma variável chamada índice indica a posição de 
cada elemento pela navegação na estrutura, permitindo, assim, imprimir o 
conteúdo de cada elemento:
Variáveis indexadas (vetores)6
Para percorrer um vetor de elementos com o MATLAB, é preciso usar uma 
das estruturas de repetição, como ou . O seguinte exemplo navega 
em um vetor de cincoposições e multiplica por dois apenas os elementos pares 
que compõem a estrutura. Observe:
Estruturas de dados homogêneas (vetores) na 
solução de problemas
A linguagem MATLAB é uma poderosa ferramenta para a solução de pro-
blemas matemáticos. Inúmeras funções nativas estão disponíveis para o uso 
em vetores, que facilitam e agilizam cálculos e operações nessas estruturas, 
conforme será apresentado a seguir.
Contagem de elementos
A instrução pode ser utilizada para obter a dimensão de um vetor, 
cujo resultado apresenta dois números: a quantidade de linhas e de colunas 
(CHAPRA, 2013). Outra forma de encontrar o número de elementos de um 
vetor se dá pela função , conforme os seguintes exemplos:
7Variáveis indexadas (vetores)
Seleção de elementos
Não raras vezes, é necessário encontrar e/ou selecionar elementos de um vetor 
de acordo com determinados critérios, como menor e maior, média, mediana 
e soma, entre outros (CHAPRA, 2013).
Seleção de índices e valores
Utilize a função para selecionar os índices dos elementos que satisfaçam 
a determinados critérios de pesquisa (GILAT, 2012). No exemplo a seguir, 
os índices são identifi cados e os valores dos elementos têm valor maior que 
o número 4.
Funções nativas
Diversas funções matemáticas estão disponíveis para o uso com vetores 
no MATLAB. Essas funções servem de apoio para a execução de cálculos 
avançados, que vão desde a soma e o produto de um vetor até funções mais 
complexas, como produto escalar, produto vetorial, seno, cosseno e tangente, 
entre outros (GILAT, 2012).
Variáveis indexadas (vetores)8
Geração de números aleatórios
Números aleatórios são importantes para a geração de dados que servem 
de base para diversas atividades da Engenharia, por exemplo, simulações. 
O MATLAB tem três formas diferentes de gerar números aleatórios para 
vetores, que produzem números diferentes a cada execução, conforme segue 
(GILAT, 2012).
Instrução rand
Essa instrução gera números aleatórios entre 0 e 1 uniformemente distribuídos. 
Se apenas um parâmetro for passado, uma matriz quadrada será produzida 
com números aleatórios. No entanto, para produzir um vetor com números 
aleatórios por meio da função , utilize um parâmetro para forçar a 
geração de apenas uma linha ou coluna.
9Variáveis indexadas (vetores)
Instrução randi
Essa instrução gera números aleatórios inteiros uniformemente distribuídos, 
entre 1 e o número passado como parâmetro. Havendo necessidade de gerar 
números por determinada faixa, utilize um parâmetro adicional que recebe 
um vetor e a dimensão da matriz, indicando a quantidade de linhas e colunas, 
conforme os seguintes exemplos.
Instrução randn
Essa instrução gera uma distribuição normalizada de números defi nidos pela 
média 0 e desvio padrão 1. Com isso, pode gerar variáveis escalares, vetoriais 
ou matriciais, cujos parâmetros defi nem as linhas e as colunas da matriz.
Você pode utilizar lookfor para obter detalhes das instruções e palavras reservadas 
do MATLAB. Exemplo: lookfor randi.
randi – pseudorandom integers from a uniform discrete distribution.
rng – control the random number generator used by RAND, RANDI, and RANDN.
randi – pseudorandom integers from a uniform discrete distribution.
randi – CODISTRIBUTED.RANDI Create a codistributed array of random integers.
randiLike – randiLike codistributed array.
randi – codistributed array of normally distributed pseudorandom numbers using 
codistributor.
randi – codistributed array of normally distributed pseudorandom numbers using 
codistributor.
randi – DISTRIBUTED.RANDI Create a distributed array of random integers.
randi – build a gpuArray of uniformly distributed pseudo-random integers.
randi – GPUARRAY.RANDI Create a gpuArray of random integers.
Variáveis indexadas (vetores)10
Entrada e saída de dados em vetores
Embora muitos problemas possam ser resolvidos pela defi nição de dados fi xos 
em variáveis, em outros casos pode ser necessário promover a interação do 
usuário com a aplicação, por meio da entrada e da saída de dados. 
Entrada de dados
No MATLAB, a entrada de dados em vetores pode ser realizada pelo teclado 
ou pela leitura de arquivos armazenados em alguma pasta no disco rígido ou 
em memória auxiliar, como um pen drive, por exemplo. Para isso, a instrução 
 pode ser utilizada para enviar uma mensagem ao usuário e, ao mesmo 
tempo, capturar a resposta inserida na aplicação (GILAT, 2012). 
Nesse exemplo, declaramos um vetor vazio e implementamos um laço 
de repetição para realizar a leitura de três posições. A instrução 
converte um número para string para formar a mensagem exibida ao usuário 
e a função captura a leitura para dentro do vetor. Observe:
Existem diversas formas de ler arquivos no MATLAB, porém, foge ao 
escopo deste capítulo explicar cada uma delas. Nesse sentido, trataremos a 
forma mais simplificada, que simplesmente carrega para um vetor os dados 
de um arquivo que estejam em formato compatível.
Essa entrada de dados facilita a execução de programas que têm dados já 
armazenados, isto é, que foram capturados por outras fontes, mas que podem 
ser trabalhados no MATLAB. Para carregar um arquivo, utilize a instrução 
 (GILAT, 2012).
Nesse exemplo, o MATLAB cria uma variável com o nome do arquivo 
e atribui o conteúdo do arquivo a ela. Na sequência, um laço de repetição 
percorre o vetor para exibir cada um dos elementos. Observe: o conteúdo do 
arquivo deve ser compatível com um vetor (Figura 2).
11Variáveis indexadas (vetores)
Figura 2. Arquivo que contém os dados de um vetor.
Saída de dados
No MATLAB, a saída pode ser realizada pela simples execução de uma 
variável – modo como foi apresentado até agora –, ou pelas instruções disp e 
fprintf. Para ambos os modos, é possível apresentar os dados de um vetor de 
forma única ou pela navegação em seus elementos por meio de uma estrutura 
de repetição (PALM, 2013).
A instrução é muito simples e exibe o conteúdo de uma variável, 
sem qualquer parâmetro adicional:
Já a função é mais elaborada e se comporta de forma seme-
lhante ao comando da linguagem C. Assim, é possível controlar a 
apresentação da saída dos dados, como definir o formato dos números, inserir 
quebras de linhas, etc.
Variáveis indexadas (vetores)12
Acesse o link ou o código a seguir e descubra outras infor-
mações sobre entrada e saída de dados no MATLAB.
https://goo.gl/h3kzMD 
CHAPRA, S. C. Métodos numéricos aplicados com MATLAB® para engenheiros e cientistas. 
3. ed. Porto Alegre: AMGH, 2013.
DEITEL, P. J.; DEITEL, H. M. Como Programar em C. 6. ed. São Paulo: Pearson, 2011.
GILAT, A. MATLAB com aplicações em engenharia. 4. ed. Porto Alegre: Bookman, 2012.
PALM III, W. J. Introdução ao MATLAB para engenheiros. 3. ed. Porto Alegre: AMGH, 2013.
13Variáveis indexadas (vetores)
Encerra aqui o trecho do livro disponibilizado para 
esta Unidade de Aprendizagem. Na Biblioteca Virtual 
da Instituição, você encontra a obra na íntegra.
 
DICA DO PROFESSOR
Vetores são estruturas de dados unidimensionais que têm a capacidade de armazenar uma 
sequência de elementos que podem ser identificados por um índice. Pelo índice, é possível 
percorrer cada um dos elementos do vetor para avaliar, comparar e realizar operações, como, por 
exemplo, contabilizar a quantidade de votos de um plenário e calcular seus respectivos valores 
percentuais.
 
Assista ao seguinte vídeo para conhecer a declaração, entrada e saída de vetores no MATLAB.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) Indique a alternativa que representa corretamente a declaração de um vetor de linha 
que contém os elementos ímpares entre 0 e 10 no MATLAB. 
A) v= [1; 3; 5; 7; 9];
B) v= [1: 3: 5: 7: 9];
C) v= [1:2:10];
D) v= (1 3 5 7 9);
E) v= [0:10, unpaired];
Considerando os dois vetores lineares v e w, declarados a seguir, marque a 2) 
alternativa que representa corretamente a operação de multiplicaçãode elementos na 
linguagem MATLAB, de modo que o conteúdo do vetor z seja 2, 12 e 30:
v= [1 3 5];
w= [2 4 6];
A) z= v * w;
B) z= v .* w;
C) z= v ** w;
D) z= multi(v, w);
E) z= prod(v, w);
3) Considerando os dois vetores v e w, declarados abaixo, indique a alternativa que 
apresenta o resultado correto da concatenação desses vetores em um vetor linear z, 
cujo conteúdo é: 1, 3, 5, 2, 4 e 6.
 
v= [1 3 5];
w= [2 4 6];
A) z= [v w];
B) z= [v; w];
C) z= [v + w];
D) z= [v & w];
E) z= concat(v, w);
4) Analise o seguinte algoritmo baseado na linguagem MATLAB e marque a alternativa 
que representa o conteúdo do vetor w:
 
v= [1:10] * 3;
w= [];
for i= 1 : length(v)
if mod(v(i), 2) ~= 0
w= [w v(i)];
end
end
A) 1, 3, 6, 9.
B) 3, 9, 15, 21, 27.
C) 6, 12, 18, 24, 30.
D) 9, 12, 15, 18, 21, 24, 27, 30.
E) 1, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30.
Dado o seguinte algoritmo escrito na linguagem MATLAB, indique a alternativa que 
representa o objetivo correto.
5) 
 
a= -5;
b= 5;
n= (b - a) * rand(1, 10) + a;
disp(round(n))
A) Gerar 5 números aleatórios entre -5 e 5.
B) Gerar 5 números aleatórios entre 1 e 10.
C) Gerar 10 números aleatórios entre 0 e 1.
D) Gerar 10 números aleatórios entre -5 e 5.
E) Gerar 10 números aleatórios entre 1 e 10.
NA PRÁTICA
MATLAB é uma linguagem de programação voltada para cálculos de álgebra bastante 
utilizados na engenharia, especialmente para a manipulação de estruturas de dados de uma 
dimensão, como vetores ou arrays.
Cálculos com vetores na álgebra podem ser realizados em diversas funções, como, por exemplo, 
o produto interno que calcula o tipo do ângulo entre dois vetores que representam a 
movimentação e a aceleração de uma partícula em relação ao solo.
Carlos é engenheiro e precisa realizar o cálculo do produto interno de dois vetores em R3, isto é, 
em um plano de três dimensões: x, y e z.
Acompanhe, na imagem a seguir, como Carlos resolveu o cálculo. 
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Lógica de programação - aula 15 - Vetores
No link a seguir, você terá acesso a um vídeo que apresentará a lógica de programação de 
vetores.
Conteúdo interativo disponível na plataforma de ensino!
Lógica de Programação - Vetores - Exemplo de uso no VisualG
No link a seguir, você terá acesso a um vídeo que trará um exemplo para auxiliar a compreender 
a lógica de programação com vetores.
Conteúdo interativo disponível na plataforma de ensino!
Curso de Introdução ao MATLAB - Aula 5: Criando Vetores
Nolink a seguir, você terá acesso a um vídeo que fará a criação e a manipulação de vetores com 
MATLAB.
Conteúdo interativo disponível na plataforma de ensino!
Correção de erros, Depuração e 
Documentação
APRESENTAÇÃO
Corrigir erros, essa passa a ser uma atividade de um desenvolvedor logo que termina seu código 
e tenta compilá-lo ou interpretá-lo. Durante sua vida de programador você terá que procurar 
pelos erros de diferentes naturezas, corrigí-los e documentar seu código para que todas 
essas tarefas sejam realizadas de forma mais eficiente por você ou por outro desenvolvedor 
ou desenvolvedora. 
Nesta Unidade de Aprendizagem, você estudará quais os tipos de erros que existem, como 
procurá-los usando o processo de depuração e estratégias para documentar seu código do mais 
simples ao mais complexo.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Identificar erros léxicos, sintáticos e semânticos em C e aplicar estratégias de correção.•
Conhecer o processo de depuração: estratégias e recursos do ambiente.•
Aplicar o processo de indentação de código e estratégias de documentação por 
comentários.
•
DESAFIO
Você faz parte do time de desenvolvimento de um sistema financeiro de uma empresa da sua 
cidade. Sua tarefa é a seguinte: de posse da especificação do que o sistema precisa fazer, você 
deve fazer uma análise no código, encontrando os erros e corrigido-os. 
 
A especificação é a seguinte: 
- O sistema a ser desenvolvido é uma calculadora com as operações: soma, subtração, 
multiplicação e divisão. 
- Os operadores serão representados por números inteiros de 1 a 4. 
- Se o usuário digitar um operador inválido, não deve ser pedido os operandos, ou seja, os 
números para a operação; - Se o usuário digitar 5, o programa deve ser encerrado e também não 
deverá ser pedido os operandos. 
- A entrada do sistema são 3 números: um operador e dois operandos. 
- A saída e o resultado da operação. 
- Depois de realizar a operação e mostrar o resultado o programa deve mostrar o menu de 
escolha de operações. 
 
O código que você deve analisar é o seguinte:
Você deve entregar um relatório contendo a linha do erro e como corrigí-la.
INFOGRÁFICO
Em que fase do desenvolvimento de um programa, é possível encontrar erros sintáticos e 
semânticos? Para qual etapa deve-se voltar para corrigir esses erros? 
 
Acompanhe no infográfico o que são erros sintáticos e semânticos e em que fase do 
desenvolvimento encontrá-los.
 
 
CONTEÚDO DO LIVRO
Em programação e usando-se a linguagem C, depois de desenvolver o código-fonte é preciso 
compilar para obter o programa executável. Porém podem acontecer alguns erros que impeçam 
que um programa seja gerado ou pode acontecer que o programa gerado não execute exatamente 
o que se deseja, ou seja o programa não resolve de forma correta o problema a que se propôs. 
 
O papel do desenvolvedor é procurar erros para corrigi-los e para isso a equipe de 
desenvolvimento pode usar ferramentas e traçar estratégias. Além disso se o código estiver 
bem documentado, fica mais legível e proporciona eficiência para todo o processo de 
desenvolvimento de sistemas. 
 
Leia mais no capítulo Correção de erros, depuração e documentação, da obra Algoritmos de 
Programação, que serve de base teórica para esta Unidade de Aprendizagem.
ALGORITMOS DE 
PROGRAMAÇÃO
Marcela Santos
Correção de erros, 
depuração e documentação
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Identificar erros léxicos, sintáticos e semânticos em C e aplicar estra-
tégias de correção.
 � Conhecer o processo de depuração: estratégias e recursos do ambiente.
 � Aplicar o processo de indentação de código e estratégias de docu-
mentação por comentários.
Introdução
A correção de erros passa a ser uma atividade de um desenvolvedor logo 
que termina seu código e tenta compilá-lo ou interpretá-lo. Durante sua 
vida de programador, você terá que procurar pelos erros de diferentes 
naturezas, corrigi-los e documentar seu código para que todas as ta-
refas sejam realizadas de forma mais eficiente por você ou por outro 
desenvolvedor.
Neste capítulo, você estudará os tipos de erros que existem, como 
procurá-los por meio do uso de processo de depuração e estratégias para 
documentar seu código, do mais simples ao mais complexo.
Erros léxicos, sintáticos e semânticos em C 
e estratégias de correção
Durante o processo de desenvolvimento de um programa de computador, o 
desenvolvedor pode encontrar alguns erros. Antes de entendermos o que é um 
erro sintático, vamos a uma definição de sintaxe e semântica em linguagem 
de programação.
Sintaxe é um conjunto de regras que define a forma de uma linguagem, 
estabelecendo a composição de suas estruturas básicas (palavras). Em outras 
palavras, sintaxe define as regras que precisam ser seguidas para se escrever 
um programa em uma determinada linguagem.
Dentre essas regras, existem:
 � Regras léxicas — que descrevem as combinações de caracteres possíveis 
para formarmos palavras reservadas, identificadores, operadores, etc.
 � Regras sintáticas — que descrevem a maneira correta de se formar 
instruções válidas (comandos, expressões, sub-rotinas, etc.).
Um erro sintático é ocasionado quando não seguimos uma regra sintática, 
e o mesmo ocorrepara um erro léxico. Em C, esses dois tipos de erros são 
detectados quando vamos compilar o código-fonte, ou seja, não conseguimos 
gerar o programa e precisamos voltar para a etapa de desenvolvimento para 
a realização do processo de depuração do código.
Aqui, a título de simplificação de classificação, adotaremos o termo “erro 
sintático” para os erros léxicos e sintáticos. São exemplos de erros sintáticos:
 � deixar de colocar o ponto e vírgula (;) no fim de uma instrução;
 � fazer uso de uma variável sem antes a ter declarado;
 � trocar o operador relacional == pelo operador de atribuição;
 � falta ou excesso de chaves { }.
Agora, para entendermos o terceiro tipo de erro, vamos primeiro ao conceito 
de semântica. Responsável por descrever como as construções da linguagem 
devem ser interpretadas e executadas, a semântica avalia a adequação do 
uso de estruturas, comandos e instruções. Violar uma regra semântica não 
impede que o programa seja executado, o problema é que ele não gerará o 
que se espera dele.
A estrutura if-else em C, por exemplo, tem a seguinte sintaxe (Figura 1).
Figura 1. Sintaxe if-else.
Correção de erros, depuração e documentação2
Sua semântica é: se o valor atual da expressão for verdadeiro, a instrução 
incorporada será selecionada para execução.
Para exemplificar, vamos avaliar o código apresentado na Figura 2 e desco-
brir se existem erros sintáticos (sintático ou léxico) ou semânticos. O código-
-fonte foi feito pensando-se em, dadas duas notas, calcular a média aritmética 
e mostrar aprovado, caso a média seja maior ou igual a 7, e reprovado, caso 
contrário.
Figura 2. Análise de código procurando erros: sintáticos e semânticos.
Ao tentarmos compilar esse código, a mensagem demonstrada na Figura 3, 
a seguir, aparece como saída.
Figura 3. Erro sintático.
Esse é um dos erros sintáticos, pois a variável média foi usada antes de ser 
declarada. Para consertarmos, basta declararmos essa variável. Agora, com 
3Correção de erros, depuração e documentação
a variável declarada, conseguimos rodar o programa, porém, para esse caso, 
onde o aluno tem média acima de 7, aparece reprovado como saída. Isso é 
conveniente? Não parece, não é mesmo?
O programa está escrito de forma correta, porém a lógica está trocada. 
Nesse caso, temos um erro semântico. A maneira correta para esse programa 
é a seguinte (Figura 4).
Figura 4. Correção de erros sintáticos e semânticos.
Depuração: estratégias e recursos do ambiente
Depuração ou debug é o processo de procurar erros no código-fonte e corrigi-
-los. Como mostrado na seção anterior, existem erros que impedem de o 
código ser compilado e outros que não. O processo de depuração visa a atacar 
os dois tipos de erros.
Correção de erros, depuração e documentação4
Este processo pode ser feito por meio da utilização de um debugger, que 
permite que o desenvolvedor veja o código sendo executado linha por linha 
ou crie pontos de parada para avaliar o comportamento do seu código.
Nos ambientes integrados de programação, existem debugger no próprio 
ambiente, permitindo que seu uso seja bastante amigável. São exemplos de 
IDE: Dev-C++, Code::Blocks, Visual Studio e Eclipse. Já, se você não está 
usando uma IDE, existe um debugger bastante difundido e que pode ser usado 
tanto no ambiente Windows como no Linux: o gdg.
Para ter mais detalhes sobre a ferramenta de debug do Linux, o GDG, acesse:
https://goo.gl/GMVDhw
A diferença é que, caso você não esteja usando um ambiente integrado, a 
depuração não será visual, mas em forma de texto. E esta é uma das estratégias 
quando se fala em depurar: use a ferramenta correta.
Em todos os casos, os recursos de ambiente auxiliam, mas uma boa inves-
tigada no seu código pode ser o primeiro passo e, algumas vezes, a estratégia 
mais rápida para encontrarmos um erro. 
Outro detalhe é quando estamos procurando um erro em um código bastante 
complexo e que talvez a melhor saída seja resolver o problema que o código 
está buscando despachar de maneira mais simples. Se essa forma existe, por 
que não fazê-la ao invés de ficar procurando erro em um código complexo?
Por falar da complexidade do código, outro detalhe que pode ajudar na 
debug do código é codificar por meio da tática do baby steps, ou seja, pequenos 
passos: tão logo o step tenha sido codificado, realiza-se testes simples. 
Esses testes podem ser manuais, como: entrada de dados e/ou impressão de 
valores de variáveis ao longo do seu código em lugares estratégicos. É muito 
comum, logo que estamos aprendendo a programar, codificar praticamente 
o programa inteiro.
Quanto maior a quantidade de erros, mais complicado fica para se fazer 
uma correção. Em resumo, uma ótima estratégia é errar o quanto antes, em 
pedaços menores do código, pois a correção torna-se mais acessível, e, ao 
final, todo o código construído por partes já estará corrigido.
5Correção de erros, depuração e documentação
Em síntese, podemos listar as seguintes estratégias de debug:
 � use a ferramenta correta;
 � foque na resolução do problema;
 � divida para conquistar, escreva pequenos trechos e faça testes;
 � utilize saída de dados em lugares estratégicos para ver o comportamento 
do seu programa.
Indentação de código e estratégias de 
documentação por comentários
Para finalizarmos este capítulo, vamos falar de como podemos criar estra-
tégias para escrever um código mais organizado, ou seja, que fique legível e 
contenha informações que auxiliem a sua leitura por qualquer desenvolvedor 
que conheça a linguagem de programação utilizada.
A primeira ferramenta é realizar a indentação do código. Esse processo 
consiste em alinhar os comandos, respeitando o nível de pertencimento entre 
eles. Dessa forma, fica claro quando uma estrutura está contida na outra, 
bem como onde ela começa e termina. Para se realizar a indentação, basta 
inserimos espaços em branco à esquerda de cada instrução, utilizando a tecla 
tab. Observe a Figura 5, a seguir.
Figura 5. Código com e sem indentação.
Correção de erros, depuração e documentação6
Em C, a indentação não é obrigatória, mas certamente ajuda muito na leitura 
do código e, quanto mais fácil de ler, mais rápido torna o processo de debug 
manual. A seguir, na Figura 6, você pode ver alguns estilos de indentação 
para todas as estruturas que vemos neste capítulo.
Figura 6. Estilos de indentação para estruturas bási-
cas: seleção e repetição.
Um detalhe importante é que podemos ter uma estrutura dentro de outra, 
portanto a indentação será uma ferramenta muito importante para apoiar o 
desenvolvimento de um código legível. Além da indentação, outra prática é 
documentar o código, utilizando-se comentários ao longo do programa. Um 
comentário é uma linha ou linhas existentes no código-fonte, mas que não 
serão compiladas ou interpretadas. 
7Correção de erros, depuração e documentação
Isso acontece porque existem marcadores, caracteres especiais, que sinali-
zam para as ferramentas de compilação (interpretação) que o que está escrito 
é um comentário e não um comando ou instrução. Existem comentários de 
uma linha ou várias linhas. 
Para comentários de uma linha, usamos // (barra barra). O que vier depois 
dessas duas barras será o comentário. Como estamos falando de documentação 
usando comentário, pode-se colocá-lo, por exemplo, logo no início para se ter 
um cabeçalho de documentação. Veja a Figura 7.
Figura 7. Uso de comentário de uma linha para documentar código-fonte.
Já o comentário de mais de uma linha é feito utilizando-se /* comentario */. 
Assim, pode-se realizar comentário de múltiplas linhas para documentar, por 
exemplo, o que uma estrutura de repetição executará, ou mesmo, qual o pro-
blema que o código-fonte deseja resolver, conforme demonstrado na Figura 8.
Figura 8. Uso de comentário de múltiplas linhas para documentar código-fonte.
Correção de erros, depuração e documentação8
Use comentários para documentar seu código, por exemplo, no início: 
descrição do que o algoritmofaz, como utilizá-lo, o que as variáveis mais 
importantes significam, as estruturas de dados e métodos especiais utilizados, 
o autor e a data de escrita. Uma dica é, quando o código mudar, lembrar-se 
de mudar o comentário também: comentário errado é pior que código sem 
comentário.
GNU DEBUGGER. Wikipédia, Flórida, 2017. Disponível em: https://pt.wikipedia.org/
wiki/GNU_Debugger. Acesso em: 23 fev. 2017.
Leituras recomendadas
BOOLEAN type support library. Cppreference.com, 2017. Disponível em: <http://
en.cppreference.com/w/c/types/boolean>. Acesso em: 22 fev. 2018.
MIZRAHI, V. V. Treinamento em Linguagem C: curso completo em um volume. 2. ed. 
São Paulo: Pearson, 2008.
PAES, R. B. Introdução à Programação com a Linguagem C. São Paulo: Novatec, 2016.
PINHEIRO, F. A. C. Elementos de programação em C. Porto Alegre: Bookman, 2012. 548p.
SCHEINERMAN, E. R. Matemática Discreta: uma introdução. São Paulo: Thomson 
Pioneira, 2003.
Referência
9Correção de erros, depuração e documentação
Encerra aqui o trecho do livro disponibilizado para 
esta Unidade de Aprendizagem. Na Biblioteca Virtual 
da Instituição, você encontra a obra na íntegra.
DICA DO PROFESSOR
Os comentários podem ser peça fundamental quando precisamos procurar erros, entender o que 
o código-fonte faz ou até mesmo dar manutenção em um código criado por outro 
desenvolvedor.
No vídeo da Dica do Professor, você terá orientações sobre o uso de comentários como 
estratégia de documentação.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) O que é um erro sintático em programação?
A) Não existem erros sintáticos em linguagem de programação.
B) Um erros sintático é um erro que causa a não compilação de um código em C e são 
caracterizados por um erro na formação das estruturas básicas da linguagem, falta de uma 
pontuação, não declaração de variáveis.
C) Erro sintático é um erro na lógica do programa, o programa é compilado mas não realiza a 
tarefa a qual foi desenvolvido, de forma correta.
D) Erros sintáticos são erros ocasionados pela falta de identação do código-fonte escrito em 
C.
E) Erros sintáticos são ocasionados pela escrita de forma incorreta de comentários dentro do 
código-fonte.
Com relação ao código em anexo, é correto afirmar que:2) 
#include <stdio.h> 
int main(){ 
int a,b; 
a=10; 
b=15; 
printf("a= %d, b=%d\n",a,b); 
temp=b; 
b=a; 
a=temp; 
printf("a= %d, b=%d\n",a,b); 
 
return 0; 
}
A) O código possui um erro sintático, por esse motivo não irá rodar e o erro aparecerá no 
momento da compilação.
B) O programa imprimirá a = 10, b = 15 em uma linha e, na seguinte, a = 15, b =10.
C) O programa imprimirá a = 10, b = 15 em uma linha e, na seguinte, a = 10, b =15.
D) O programa imprimirá a = 10, b =1 5 duas vezes na mesma linha.
E) O programa imprimirá a = 15, b = 10 em uma linha e, na seguinte, a = 15, b =10.
O seguinte código não será executado pois:
#include <stdio.h> 
int main(){ 
numero=10; 
//tete condicional 
if(numero<50){ 
printf("numero menor que 50"); 
3) 
} 
else{ 
printf("numero maior que 50"); 
} 
 
return 0; 
}
A) Existe um erro no comentário.
B) A identação do código está incorreta.
C) A variável numero não está declarada.
D) Existe um erro no teste condicional do if.
E) Existe um erro no comando dentro do else.
4) Do que se trata o processo de depuração em programação de computadores?
A) É o processo de encontrar erros (bugs) em um código fonte.
B) É o processo de compilar e executar um código-fonte.
C) É o processo de interpretar um código-fonte.
D) É o processo de transformar um algoritmo em um código-fonte
E) Não se trata de depeuração em software, somente em hardware.
5) Quais são os marcadores para comentário de única linha de de múltiplas linhas em 
C?
A) Para única linha: não existe comentário de linha única em C para múltipla linha: /* */
B) Para única linha: / / para múltipla linha: não existe comentário de múltipla linha em C
C) Para única linha: / / para múltipla linha: /* */
D) Para única linha: /* * / para múltipla linha: / /
E) Não existe comentários em C.
NA PRÁTICA
Daniela é programadora em uma empresa que constrói sistemas financeiros e precisa corrigir um 
sistema criado por seu colega de trabalho que não está mais na empresa. O sistema foi 
desenvolvido para uma organização educacional que pretende dar aumento de salário aos seus 
colaboradores. 
 
O problema é que Daniela só tem a especificação do sistema e o código não contem nenhuma 
linha de comentário para ajudá-la.
 
 
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Debugar código?
Quer entender o que é o processo de debug? Nesse video você pode aprender o que é e como 
realizar esse processo no seu código fonte.
Conteúdo interativo disponível na plataforma de ensino!
Comments in C - Ingles (habilitar legenda em português)
O vídeo aborda o uso de comentários em C e como escrevê-los.
Conteúdo interativo disponível na plataforma de ensino!
Como usar comentários?
Dicas para documentar o seu código em C. Programar em C - Fazer Comentários em C | 
Caractere Nova Linha n - Aula 3.
Conteúdo interativo disponível na plataforma de ensino!
Comandos básicos (entrada, saída, 
atribuição e declaração)
APRESENTAÇÃO
Nesta Unidade de Aprendizagem, estudaremos os comandos de entrada e saída de dados em um 
algoritmo através da representação em pseudolinguagem e fluxograma. 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Analisar algoritmos simples com comandos de entrada e saída em pseudolinguagem.•
Identificar algoritmos simples com comandos de entrada e saída em fluxograma.•
Aplicar comandos de entrada e saída na solução de problemas.•
DESAFIO
Muitas linguagens de programação possuem funções para inverter um número já pronto na 
linguagem. O nosso desafio é encontrar uma solução utilizando os comandos de entrada, saída e 
atribuição para que faça a inversão de um número inteiro de 4 dígitos.
O valor lido deve estar armazenado em uma única variável e, ao final, deverá ser impressa como 
saída somente uma variável com o valor invertido, e não 4 variáveis separadas. A inversão 
deverá ser desenvolvida utilizando comandos aritméticos, resto da divisão e divisão inteira.
Exemplo: 
Valor normal : 4567 
Valor invertido: 7654
a) Declare as variáveis necessárias e seus tipos para resolver o problema apresentado. Todos os 
valores da tabela devem ser atribuídos para as variáveis para serem utilizadas nos cálculos.
b) Identifique e descreva quais são os comandos de entrada necessários para solucionar o 
problema apresentado (representar em pseudolinguagem e fluxograma).
c) Analise o problema e descreva a sequência correta dos comandos de atribuições e cálculos 
necessários para a solução do problema apresentado (para inverter o número). (Representar em 
pseudolinguagem e fluxograma.)
d) Identifique e descreva quais são os comandos de saída necessários para solucionar o 
problema apresentado (representar em pseudolinguagem e fluxograma).
INFOGRÁFICO
O esquema mostra os principais temas que serão abordados nesta Unidade de Aprendizagem.
CONTEÚDO DO LIVRO
Os algoritmos sequenciais normalmente possuem uma estrutura básica com três etapas: entrada 
de dados, processamento (cálculos e atribuições) e saída de dados. Em alguns algoritmos, esse 
esquema básico pode não ter definida a entrada de dados, quando os valores já estão 
predefinidos no programa.
Para auxiliar nos estudos, acompanhe um trecho da seguinte obra: EDELWEISS, N.; LIVI, 
M.A.C. Algoritmos e programação com exemplos em Pascal e C - Vol. 23. Série Livros 
Didáticos Informática UFRGS. Porto Alegre: Bookman, 2014. O livro servirá como base para 
esta Unidade de Aprendizagem.
Boa leitura. 
23
s é r i e l i v r o s d i d á t i c o s i n f o r m á t i c a u f r g s
algoritmos
e programaçãocom exemplos em Pascal e C
nina edelweiss
maria aparecida castro livi
E22a Edelweiss, Nina.
 Algoritmos e programação com exemplos em Pascal e C 
 [recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro 
 Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014.
 Editado também como livro impresso em 2014.
 ISBN 978-85-8260-190-7
 1. Informática. 2. Algoritmos – Programação. I. Livi, 
 Maria Aparecida Castro. II. Título. 
CDU 004.421
 as autoras
Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni-
versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge-
nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora 
do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três 
livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais 
e internacionais. Participou de diversos projetos de pesquisa financiados por agências de 
fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e 
desenvolvimento de software.
Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da 
Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro-
fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na 
carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programação para 
alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de 
interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial 
quanto a distância.
Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052
32 Algoritmos e Programação com Exemplos em Pascal e C
2.3.1 expressões aritméticas
Expressões aritméticas são expressões cujos resultados são valores numéricos, inteiros ou 
fracionários. A sintaxe de uma expressão aritmética é a seguinte:
<operando> <operador aritmético> <operando>
Na pseudolinguagem utilizada neste livro, os operadores que podem ser usados em expres-
sões aritméticas são os mesmos utilizados nas expressões aritméticas comuns. Mas, da mes-
ma forma que nas linguagens de programação, o símbolo utilizado para a multiplicação é o 
asterisco, e o símbolo de divisão é a barra inclinada. A Tabela 2.1 mostra os operadores que 
podem ser utilizados em expressões aritméticas, na forma adotada pela pseudolinguagem.
Capítulo 2 Unidades Léxicas, Variáveis, Constantes e Expressões 33
tabela 2.1 Operadores aritméticos na pseudolinguagem
Operador Significado Observação
+ Soma -
- Subtração -
* Multiplicação -
/ Divisão -
** Potência -
Div Divisão inteira Operandos inteiros
Mod Resto da divisão inteira Operandos inteiros
Os operadores aritméticos têm diferentes precedências na execução das operações: primeiro são 
calculadas as potências, depois as multiplicações e as divisões e, no final, as somas e as subtra-
ções. Expressões com operadores de mesma precedência justapostos são avaliadas da esquerda 
para a direita. Essa ordem de precedência pode ser alterada através do uso de parênteses.
Os seguintes tipos de operandos podem ser utilizados:
1. valores numéricos literais;
2. variáveis numéricas;
3. chamadas a funções1 que devolvem um valor numérico;
4. expressões aritméticas, as quais podem incluir partes entre parênteses.
Se uma expressão aritmética incluir funções, essas terão precedência maior na execução.
Exemplos de expressões aritméticas:
a + 1
a * 2 + 7,32
( x / 2 ) / C – ( valor + 1 / 2 )
2 + cos(x) onde cos(x) é uma função
As expressões aritméticas devem ser escritas horizontalmente, em uma mesma linha, com 
eventuais valores fracionários expressos linearmente. Muitas vezes é necessário o emprego de 
parênteses para garantir a execução na ordem correta. A necessidade de linearização possibi-
lita a uma expressão aritmética ter sua aparência inicial bastante modificada, como no caso 
da expressão a seguir:
 A representação dessa expressão em pseudolinguagem fica:
a + ( ( b – 4 ) * ( a / 2 + 4 * z42) / ( c + d ) )
1 Uma FUNÇÃO é um subprograma. Pode receber parâmetros (valores) para realizar sua tarefa e 
normalmente devolve um valor em seu nome, sendo o tipo do valor devolvido o próprio tipo da função. 
Mais detalhes sobre definição de funções são vistos no Capítulo 9. 
34 Algoritmos e Programação com Exemplos em Pascal e C
Algumas funções básicas predefinidas já vêm embutidas nas linguagens de programação. Entre 
elas, funções matemáticas, como o cálculo do cosseno de um ângulo utilizado no exemplo an-
terior. Algumas dessas funções necessitam de alguma informação para calcular o que é pedido 
como, por exemplo, o valor do ângulo do qual se quer o cosseno. As informações requeridas 
são chamadas de parâmetros da função e são listadas logo após o nome da função, entre 
parênteses. Um parâmetro pode ser fornecido através de uma expressão cujo valor, depois de 
avaliado, será utilizado pela função.
Na Tabela 2.2 são listadas algumas funções que podem ser utilizadas na pseudolinguagem, 
definidas de forma idêntica ou similar àquela em que ocorrem na maioria das linguagens de 
programação.
tabela 2.2 Funções predefinidas na pseudolinguagem
Nome da função Parâmetro Significado
abs valor Valor absoluto do valor
sen ângulo Seno do ângulo
cos ângulo Cosseno do ângulo
tan ângulo Tangente do ângulo
arctan valor Arco cuja tangente tem o valor
sqrt valor Raiz quadrada do valor
sqr valor Quadrado do valor
pot base, expoente Base elevada ao expoente
ln valor Logaritmo neperiano
log valor Logaritmo na base 10
58 Algoritmos e Programação com Exemplos em Pascal e C
3.1 esquema básico dos algoritmos sequenciais
Os problemas puramente sequenciais geralmente incluem três atividades, que ocorrem nor-
malmente na ordem indicada a seguir: entrada de dados, processamento realizado sobre es-
ses dados (cálculos, comparações) e saída de dados ou apresentação dos resultados. Mesmo 
em problemas mais complexos, essas atividades constituem o esquema básico subjacente. 
O processamento e a saída de dados são elementos sempre presentes; já a entrada pode 
eventualmente não ocorrer, como nos casos em que o processamento se baseia em valores 
predefinidos e constantes.
Entradas são os dados fornecidos pelo usuário durante a execução do programa, sem os quais 
não é possível solucionar o problema. Existem casos em que alguns dados de entrada, pela 
sua constância e regularidade, podem ser utilizados como constantes em uma solução. No 
Exercício de Fixação 3.3 (discutido na Seção 3.6), em que um valor em reais é convertido para 
dólares, em um período de estabilidade da moeda americana a taxa de conversão para o dólar 
poderia ser colocada como um valor constante na expressão de cálculo. Mas caso fosse preciso 
alterar essa taxa, seria necessário alterar o código. Nesse, e em casos semelhantes, sugere-se 
optar pela solução mais genérica, em que mesmo os dados relativamente estáveis são sempre 
fornecidos como entradas.
As saídas de um problema são geralmente os elementos mais facilmente determináveis, uma 
vez que correspondem aos resultados esperados.
No problema apresentado no Algoritmo 1.1 (no Capítulo 1, Seção 1.1.4), em que é calculada 
a soma de dois valores, os dois valores a serem somados são as entradas que devem ser infor-
madas; o processamento é o cálculo da soma; e a saída é a soma calculada.
Na sequência veremos os comandos que permitirão a leitura dos dados de entrada, a produ-
ção de resultados e sua apresentação em um meio externo.
Capítulo 3 Algoritmos Sequenciais 59
3.2 
 comandos de entrada e de saída
Os comandos de entrada e de saída de dados fazem a ligação entre o programa e o usuá-
rio. Toda a comunicação entre o mundo virtual e o mundo real é feita através desses co-
mandos, sem os quais o usuário não ficaria ciente do que ocorre durante e ao término do 
processamento.
3.2.1 comando de entradade dados
Através de um comando de entrada de dados, o programador solicita que um ou mais 
dados sejam obtidos (lidos) pelo computador a partir de um dispositivo de entrada como, por 
exemplo, o teclado. Os valores lidos devem ser armazenados em variáveis na memória para 
que essas possam depois ser utilizadas pelo programa. Para isso, o comando de entrada de 
dados deve, além de solicitar a operação de leitura, informar os nomes das variáveis que irão 
armazenar os valores lidos.
Na pseudolinguagem, um comando de entrada de dados é identificado pela palavra reserva-
da ler, seguida da lista de variáveis que irão armazenar os valores lidos, as quais aparecem 
separadas por vírgulas e entre parênteses:
ler ( <lista de variáveis separadas por vírgulas> )
Por exemplo, o comando:
ler (nota)
pede que seja lido um valor no dispositivo de entrada de dados, dizendo ainda que o valor 
lido deve ser armazenado na variável denominada nota. Outro exemplo é o comando:
ler (a, b, c)
onde a, b e c são nomes de variáveis. Através desse comando serão lidos três valores de entra-
da, sendo o primeiro colocado na variável a, o segundo na b e o terceiro na c.
3.2.2 comando de saída de dados
Comandos de saída de dados são usados para transferir para fora do computador os re-
sultados que foram solicitados a fim de que esses sejam vistos pelo usuário ou utilizados em 
futuro processamento. Um comando de saída inicia sempre pela palavra reservada escrever, 
seguida da lista de valores que deverão ser informados, os quais aparecem separados por 
vírgulas e entre parênteses:
escrever ( <lista de valores de saída separados por vírgulas> )
A lista de valores de saída pode conter:
60 Algoritmos e Programação com Exemplos em Pascal e C
 ■ nomes das variáveis cujos conteúdos devem ser informados;
 ■ expressões que serão avaliadas, sendo seu resultado informado na saída;
 ■ strings formadas por cadeias de caracteres entre apóstrofos simples. As strings não são
analisadas pelo computador, sendo simplesmente copiadas para o dispositivo de saída.
Servem para explicar ao usuário o significado dos valores que são listados.
Por exemplo, o comando:
escrever (a, b)
vai transferir para a saída o valor contido na variável a, seguido do valor da variável b. Já o 
comando:
escrever (a * b + 1 / sin (c))
vai avaliar a expressão fornecida (a * b + 1 / sin (c)), transferindo para a saída somente 
seu resultado. Como exemplo da utilização de strings na saída, considere o comando:
escrever ('Maior valor: ', maior, ' Resultado: ' , soma)
Neste comando, maior e soma são nomes de variáveis. Supondo que o valor contido na variá-
vel maior seja 15 e que o valor de soma seja 20, a saída produzida seria a seguinte:
Maior valor: 15 Resultado: 20
3.2.3 formatação de entrada e saída
As linguagens de programação possibilitam definir como os dados deverão ser apresentados, 
ou seja, como as informações deverão ser fornecidas na entrada de dados e como os resul-
tados deverão ser dispostos na saída. Ao escrever um algoritmo, deve-se analisar somente 
quais as ações que devem integrá-lo para que represente uma solução adequada e correta 
para o problema que se pretende solucionar. Não é aconselhável definir formatos de entrada 
e saída neste momento, deixando para fazê-lo na tradução do algoritmo para uma linguagem 
de programação específica. Por isso, a pseudolinguagem utilizada ao longo deste livro não 
define a formatação de entrada e de saída de dados, deixando para mostrá-la nas seções 
específicas das linguagens Pascal e C.
3.3 comando de atribuição
No comando de atribuição, o resultado de uma expressão é atribuído a uma variável, ou 
seja, é colocado no espaço de memória reservado para essa variável. Se já existia algum valor 
armazenado na variável, ele é substituído pelo novo valor, e o valor anterior é perdido. Na 
pseudolinguagem, um comando de atribuição tem à esquerda o nome da variável que vai 
receber o valor, seguido de uma flecha direcionada para a esquerda, seguida à direita pela 
expressão cujo valor vai ser utilizado na atribuição. O sentido da flecha representa visualmente 
que o resultado da expressão é colocado na variável:
<variável> ← <expressão>
Capítulo 3 Algoritmos Sequenciais 61
Somente um nome de variável pode ser colocado à esquerda em um comando de atribuição. 
A execução do comando inicia avaliando a expressão à direita, colocando depois seu resulta-
do na variável à esquerda. Por exemplo, no comando:
a ← b + 1
o resultado da expressão b + 1 é atribuído à variável a.
O tipo da variável que vai receber a atribuição deve ser compatível com o resultado da expres-
são à direita. Dependendo do tipo dessa variável, três tipos de atribuição são identificados, os 
quais são analisados a seguir.
3.3.1 atribuição numérica
Se a variável for numérica, o valor da expressão deve ser também um valor numérico. O valor 
a ser atribuído à variável pode ser (1) informado diretamente através de um número, (2) o 
valor armazenado em outra variável numérica ou (3) o resultado de uma expressão aritmética. 
Pode ser utilizada qualquer expressão aritmética, incluindo nomes de variáveis e chamadas 
a funções. O nome da variável à qual vai ser atribuído o valor pode também ser utilizado na 
expressão aritmética – nesse caso, a expressão é avaliada com o valor que a variável conti-
nha antes da execução do comando, sendo esse valor perdido ao ser feita a atribuição do 
novo valor.
O tipo do valor a ser atribuído à variável deve ser compatível com o tipo da variável que vai 
receber a atribuição. Assim, variáveis inteiras devem receber valores inteiros, e variáveis reais 
devem receber valores reais. Uma exceção a essa regra, entretanto, é a atribuição de valores 
inteiros a variáveis reais.
Vamos supor que foram declaradas as seguintes variáveis:
i, k (inteiro)
a, r (real)
Utilizando essas variáveis, os comandos de atribuição a seguir são válidos:
i ← 10 { i RECEBE O VALOR 10 }
i ← k { i RECEBE O VALOR DA VARIÁVEL k }
i ← k – 2 { i RECEBE VALOR DA EXPRESSÃO ARITMÉTICA k – 2}
i ← i + k – 7 { VARIÁVEL PODE SER UTILIZADA NA EXPRESSÃO }
a ← 10 { VARIÁVEL REAL PODE RECEBER VALOR INTEIRO }
a ← 3,14 * sqr(r) { EXPRESSÃO π.r2 UTILIZANDO CHAMADA À FUNÇÃO }
Os comandos de atribuição a seguir são inválidos:
i ← a { VARIÁVEL INTEIRA NÃO PODE RECEBER VALOR REAL}
i ← i + a { EXPRESSÃO TEM RESULTADO REAL POIS a É REAL }
i ← a > r { EXPRESSÃO NÃO PODE SER LÓGICA }
a + b ← a { NO LADO ESQUERDO NÃO PODE TER EXPRESSÃO }
a, b ← 0 { SOMENTE UMA VARIÁVEL NO LADO ESQUERDO }
62 Algoritmos e Programação com Exemplos em Pascal e C
Uma construção bastante comum é a variável que vai receber o valor da atribuição ser tam-
bém utilizada na expressão à direita do sinal de atribuição. Nesses casos, a expressão é avalia-
da utilizando o valor contido na variável e, terminada a avaliação da expressão, seu resultado 
é colocado na variável, alterando então seu valor. Por exemplo, supondo que a variável a é 
inteira e contém o valor 5, o valor contido em a, após a execução do comando de atribuição 
a seguir, é 8:
a ← a + 3
3.3.2 atribuição lógica
Se a variável à esquerda do comando de atribuição for lógica, ela poderá receber somente um 
dos dois valores lógicos: verdadeiro ou falso. O valor lógico a ser atribuído pode (1) ser re-
presentado explicitamente através de uma dessas duas palavras reservadas, (2) ser o conteúdo 
de outra variável lógica ou (3) resultar da avaliação de uma expressão lógica.
Considerar as seguintes declarações:
i, k (inteiro)
x, y (lógico)
Os exemplos a seguir são comandos de atribuição lógica válidos:
x ← verdadeiro { VALOR LÓGICO INFORMADO EXPLICITAMENTE }
x ← y { x RECEBE VALOR LÓGICO DE y }
x ← i = k { x verdadeiro SE i IGUAL A k }
x ← i > 7 ou y { x RECEBE RESULTADO DA EXPRESSÃO LÓGICA }
Os comandos a seguir são inválidos:
x ← i { i É INTEIRO, NÃO É VALOR LÓGICO }
x ← x > 7 { ERRO NA EXPRESSÃO LÓGICA }
x ← k + 1 { EXPRESSÃO TEM VALOR INTEIRO, NÃOLÓGICO }
3.3.3 atribuição de caracteres
Se a variável for do tipo caractere, a expressão à direita deve resultar em um caractere; se a 
variável for do tipo string, a expressão deve resultar em uma string.
Considerar que foram declaradas as seguintes variáveis:
nome (string)
letra, letra2 (caractere)
Utilizando essas variáveis, os exemplos a seguir mostram comandos de atribuição válidos:
nome ← 'Ana Terra' { STRING ATRIBUÍDA À VARIÁVEL nome }
letra ← 'Z' { letra RECEBE CARACTERE 'Z' }
letra ← letra2 { letra RECEBE CARACTERE DE letra2 }
Capítulo 3 Algoritmos Sequenciais 63
Ainda utilizando as mesmas variáveis, os comandos a seguir são inválidos:
nome ← 10 { STRING NÃO PODE RECEBER VALOR NUMÉRICO }
letra ← i > 2 { CARACTERE NÃO PODE RECEBER VALOR LÓGICO }
letra ← nome { VARIÁVEL CARACTERE NÃO PODE RECEBER STRING }
letra ← letra + 10 { EXPRESSÃO À DIREITA ESTÁ INCORRETA}
Encerra aqui o trecho do livro disponibilizado 
para esta Unidade de Aprendizagem. Na 
Biblioteca Virtual da Instituição, você encontra 
a obra na íntegra.
DICA DO PROFESSOR
O comando de entrada permite que o algoritmo possa receber dados informados pelo usuário, 
que serão utilizados pelo algoritmo em seu processamento. Da mesma forma, o comando de 
saída permite ao usuário ter acesso aos resultados do processamento, mostrando mensagens e 
valores das variáveis e constantes.
Assista ao vídeo para conhecer um pouco mais sobre esse tema.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) Uma empresa da indústria automotiva recebeu como doação um forno para moldar 
ponteiras de eixo por calor, um equipamento importado muito antigo, que foi 
desenvolvido pelos funcionários de uma empresa americana. Esse equipamento 
utiliza um termômetro com a medida em Fahrenheit. 
Em função da dificuldade encontrada pelos operadores em realizar a conversão que 
não faz parte da medida utilizada no Brasil, a empresa está buscando um 
programador para desenvolver um algoritmo que receba a temperatura do operador 
em graus Celsius, converta-a em Fahrenheit e exiba a informação em Fahrenheit 
para o operador do equipamento.
A) Entrada: Leia(Celsius) Saída: Escreva(Fahrenheit)
B) Entrada: Leia (Fahrenheit) Saída: Escreva(Celsius)
C) Entrada: Leia (Fahrenheit,Celsius) Saída: Escreva(Fahrenheit)
D) Entrada: Não possui comandos de entrada Saída: Escreva(Fahrenheit)
E) Entrada: Leia (Celsius) Saída: Não possui comandos de saída
2) Uma empresa necessita calcular o salário reajustado do funcionário. Para isso, 
analise os algoritmos abaixo, e assinale o que traz as diretrizes solicitadas pela 
empresa listadas abaixo: - 
O valor do salário bruto será informado pelo usuário. 
- Todos os funcionários recebem um bônus de 20% sobre o valor do salário bruto 
como presente de final de ano. 
- Após o acréscimo do bônus, deverá ser descontado o imposto de 7% do salário 
reajustado. Ao término do algoritmo, deverá ser impresso na tela o valor final do 
salário com o bônus e depois o valor reajustado do salário do funcionário. 
Regras: 
Conteúdo interativo disponível na plataforma de ensino!
 
A) Estão corretas as alternativas I e II.
B) Apenas a alternativa I. 
C) Estão corretas as alternativas I e III.
D) Todas as alternativas.
E) Nenhuma das alternativas.
Considerando-se os comandos de entrada, comandos de saída e atribuição, analise as 
sentenças apresentadas abaixo. 
I. O comando de saída é utilizado para mostrar os dados na tela ou na impressora. 
3) 
II. O comando de entrada é utilizado para receber dados digitados pelo usuário, que 
serão armazenados em variáveis. 
III. O comando de entrada é representado pela palavra reservada Leia ou Ler, e o 
comando de saída é representado por Escreva ou Imprima. 
É INCORRETO apenas o que se afirma em: 
A) Alternativa I.
B) Alternativas I e II.
C) Alternativas I e III.
D) Todas as alternativas.
E) Nenhuma alternativa.
4) São dados os seguintes blocos aplicados na representação em fluxograma:
Quais figuras podem ser utilizadas para representar comandos de entrada? 
A) Figuras 1, 2 e 3.
B) Figuras 3 e 4.
C) Figuras 2, 5 e 6.
D) Figuras 4, 5 e 6.
E) Figura 2.
5) Os comandos de entrada e saída utilizam periféricos para introduzir os dados para 
serem processados e visualizar os dados após serem processados. Os periféricos de 
entrada enviam a informação para o computador, e os periféricos de saída 
transmitem a informação do computador para o usuário. Para isso, temos vários 
dispositivos-padrão utilizados como periféricos de entrada e de saída, e até mesmo 
periféricos que servem tanto para entrada como para saída (discos de 
armazenamento). 
Selecione o periférico básico que é considerado periférico de saída. 
A) Teclado.
B) Mouse.
C) Leitor de código de barras.
D) Impressora.
E) Câmera de vídeo.
NA PRÁTICA
Quanto de ração meus cachorros consomem? Quanto devo comprar? Para quantos dias duram a 
ração que comprei? 
Vamos desenvolver um algoritmo para auxiliar na questão de cálculo de quantos dias dura a raç
 
- A ração comprada é em quilos 
- A quantidade diária consumida pelo cachorro é sempre a mesma. 
- A quantidade de ração consumida diariamente é medida em gramas. 
- Temos 2 cachorros 
- Cada cachorro consome quantidade diferente de ração, em função do seu tamanho. Ex: 
Cachorro 1 consome 300 gramas e o Cachorro 2 consome 100 gramas diárias.
Quais serão os dados de entrada necessários para resolver o problema? 
Quantos quilos de ração foram comprados? 
Quantas gramas eles consomem diariamente: o cachorro1 e o cachorro2? 
Quais serão os dados de saída do problema? 
O Número de dias que a ração comprada vai durar para alimentar os 2 cachorros.
Uma solução proposta:
Algoritmo "consumo"
Var
Racao, cachorro1, cachorro2, Consumo_cachorro1, Consumo_cachorro2, Total_consumo_dia, 
Dias: real
Inicio
 Escreva("Digite a quantidade de ração comprada ( em quilos):" )
 Leia (Racao)
 Escreva("Digite a quantidade de ração consumida Cachorro 1 ( em gramas) por dia:”)
 Leia (cachorro1)
 Escreva("Digite a quantidade de ração consumida Cachorro 2 ( em gramas) por dia:”)
 Leia (cachorro2)
 // agora já temos os dados de entrada, podemos realizar as atribuições(cálculos)
 // calcula a quantidade de quilos consumidos por cada cachorro
 Consumo_cachorro1 <- cachorro1/1000
 Consumo_cachorro2 <- cachorro2/1000
 // soma o total de quilos consumidos pelos 2 animais
 Total_consumo_dia <- Consumo_cachorro1 + Consumo_cachorro2 // em quilos
 // calcula quantos dias vai dar a quantidade de ração comprada
 Dias <- Racao / Total_consumo_dia
 Escreva("Total de dias de duração da ração comprada : ” , Dias)
Fimalgoritmo
Em Fluxograma como ficaria a solução?
 
O que o algoritmo necessita de dado de entrada para resolver o problema?
Quais serão os dados de saída que o algoritmo vai mostrar para o usuário? O que precisamos 
exibir como saída?
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Lógica de programação - comandos de entrada e saída de dados
Assista o vídeo e aprenda mais sobre os comandos de entrada e saída de dados.
Conteúdo interativo disponível na plataforma de ensino!
Algoritmos em pseudocódigo e visualg
Veja nesse material sobre Pseudocódigo e Visualg (ferramenta para criação de algoritmos),
Conteúdo interativo disponível na plataforma de ensino!
Utilizando o MOD
Veja esse vídeo aula sobre operadores aritméticos, em especial sobre o resto da divisão (MOD) 
e a diferença entre ele e a divisão.
Conteúdo interativo disponível na plataforma de ensino!
Conceitos básicos e tipos de dados
APRESENTAÇÃO
Nesta unidade, estudaremos a representação interna de dados em um computador, declaração de 
variáveis, constantes e definição de tipos de dados básicos que são aplicados no 
desenvolvimento de algoritmos. 
Bons estudos.
Ao final destaUnidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Reconhecer a representação interna de dados em um computador.•
Diferenciar variáveis e constantes.•
Demonstrar de forma correta os tipos de dados na solução de problemas.•
DESAFIO
Pensar é preciso e muito!! .... para que os nossos algoritmos manipulem os seus dados 
corretamente e gerem como saída dados corretos e confiáveis. Assim, vamos analisar uma 
situação para auxiliar uma família a controlar seus gastos de forma cronológica (por dia), 
necessitando, desta forma, um auxílio para gerenciar e organizar as suas despesas durante este 
mês. Ao final, a família deseja receber a informação do total gasto com todas as despesas e 
quais as despesas que ainda não estão quitadas, informando o valor total já quitado e o valor 
total ainda não quitado das despesas do mês.
Levando em consideração o problema apresentado, responda:
a) Declare todas as variáveis/constantes necessárias para solucionar o problema ( conforme 
regras apresentadas na unidade para definição dos identificadores) e faça uma pequena descrição 
sobre qual a sua função/descrição no problema apresentado.
b) Defina os tipos de cada identificador(variável/constante) declarado na letra a, conforme 
sintaxe apresentada na unidade de aprendizagem.
c) Justifique o porquê da escolha de cada tipo de dado para as variáveis/constantes definidas na 
letra b.
d) Descreva qual será o conjunto de dados que cada identificador definido na letra b poderá 
receber para a solução do problema proposto.
INFOGRÁFICO
O esquema mostra os principais temas que serão abordados nesta unidade.
CONTEÚDO DO LIVRO
Para a construção de algoritmos e programas eficientes e eficazes, precisamos compreender e 
manipular de forma correta todos os dados gerenciados por ele. Os dados em um computador 
devem ser armazenados de acordo com o tipo de informação que se deseja representar e com o 
tipo de operação que será realizada com este dado. Desta forma, a representação correta e 
adequada de uma informação permite a otimização dos recursos computacionais disponíveis, 
assim como acelerar o seu processamento.
Para auxiliá-lo, acompanhe um trecho da obra Algoritmos e Programação com exemplos em 
Pascal e C de Nina Edelweiss. O livro servirá como base para a nossa Unidade de 
Aprendizagem. Neste segundo Capítulo, será apresentada a forma de definição e manipulação 
dos dados que são necessários para a solução de problemas através de algoritmos.
Boa leitura.
23
s é r i e l i v r o s d i d á t i c o s i n f o r m á t i c a u f r g s
algoritmos
e programação 
com exemplos em Pascal e C
nina edelweiss
maria aparecida castro livi
E22a Edelweiss, Nina.
 Algoritmos e programação com exemplos em Pascal e C 
 [recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro 
 Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014.
 Editado também como livro impresso em 2014.
 ISBN 978-85-8260-190-7
 1. Informática. 2. Algoritmos – Programação. I. Livi, 
 Maria Aparecida Castro. II. Título. 
CDU 004.421
 as autoras
Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni-
versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge-
nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora 
do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três 
livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais 
e internacionais. Participou de diversos projetos de pesquisa financiados por agências de 
fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e 
desenvolvimento de software.
Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da 
Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro-
fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na 
carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programação para 
alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de 
interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial 
quanto a distância.
Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052
■ ■ Este primeiro capítulo discute algoritmos, 
formas de expressar algoritmos, 
etapas para a construção de um algoritmo 
e de um programa, paradigmas de programação, 
programação estruturada e fundamentos 
de representação interna de dados. 
Introduz, ainda, as linguagens 
de programação Pascal e C, utilizadas 
no livro.
fundamentos
capítulo 1
6 Algoritmos e Programação com Exemplos em Pascal e C
Computadores constituem uma poderosa ferramenta para auxiliar o trabalho do homem. O 
uso mais comum dos computadores é por meio de aplicativos já desenvolvidos e disponíveis, 
tais como editores de texto, planilhas eletrônicas, sistemas de gerenciamento de bancos de 
dados, programas de acesso à Internet e jogos. Entretanto, por vezes, as pessoas desenvol-
vem soluções específicas para determinadas aplicações, de modo a permitir que as informa-
ções dessas aplicações possam ser acessadas e manipuladas de forma mais segura, rápida e 
eficiente ou com um custo mais baixo. Este livro trata dessa segunda forma de uso dos com-
putadores, ou seja, de como um usuário pode projetar e desenvolver soluções próprias para 
resolver problemas específicos de seu interesse.
Este primeiro capítulo apresenta alguns conceitos básicos utilizados no restante do livro: o 
que vem a ser um algoritmo, formas de expressar algoritmos, etapas para a construção de um 
algoritmo e de um programa, algumas considerações a respeito das linguagens de programa-
ção utilizadas, o que vem a ser a programação estruturada, que é a técnica de programação 
adotada no desenvolvimento dos programas aqui apresentados, e alguns fundamentos de 
representação interna de dados.
1.1 
 o que é um algoritmo
Vejamos como são solucionados alguns problemas do cotidiano.
exemplo 1: Telefone público. Para utilizar um telefone público como um “orelhão” ou 
similar, as operações que devemos realizar estão especificadas junto a esse telefone, sendo 
mais ou menos assim:
 1. leve o fone ao ouvido;
 2. insira seu cartão no orifício apropriado;
 3. espere o sinal para discar;
 4. assim que ouvir o sinal, disque o número desejado;
 5. ao final da ligação, retorne o fone para a posição em que se encontrava;
 6. retire seu cartão.
Esse conjunto de operações é o que se denomina algoritmo. Qualquer pessoa pode executar 
essas operações, na ordem especificada, para fazer suas ligações telefônicas, desde que pos-
sua um cartão específico e conheça o número para o qual quer telefonar.
exemplo 2: Compra de um livro. Uma compra em um estabelecimento comercial também 
obedece a uma sequência de ações predeterminadas. Por exemplo, para comprar um livro em 
uma livraria deve-se:
 1. entrar na livraria;
 2. verificar se o livro está disponível. Para isso, precisa-se conhecer (1) o título e o autor do 
livro e (2) ter disponibilidade financeira para a compra. Caso a compra venha a ser efetu-
ada, deve-se:
a. levar o livro até o balcão;
b. esperar que a compra seja registrada no caixa;
Capítulo 1 Fundamentos 7
c. pagar o valor correspondente;
d. esperar que seja feito o pacote;
e. levar o livro comprado.
 3. sair da livraria.
Os dois exemplos apresentados são resolvidos por uma sequência de ações bem definidas, 
que devem ser executadas em uma determinada ordem. Outras aplicações de nosso dia a dia 
podem ser detalhadas de forma semelhante: uma receita de um bolo, o acesso a terminais 
eletrônicos de bancos, a troca do pneu de um carro, etc.
definição de algoritmo. Um algoritmo é definido como uma sequência finita de opera-
ções que, quando executadas na ordem estabelecida, atingem um objetivo determinado em 
um tempo finito.
Um algoritmo deve atenderaos seguintes requisitos:
 ■ possuir um estado inicial;
 ■ consistir de uma sequência lógica finita de ações claras e precisas;
 ■ produzir dados de saída corretos;
 ■ possuir estado final previsível (deve sempre terminar).
Além de definir algoritmos para resolver problemas do dia a dia, podemos também desenvol-
ver algoritmos que podem ser transformados, total ou parcialmente, em programas e execu-
tados em computadores. Este livro concentra-se em problemas resolvidos através de algorit-
mos que podem ser integralmente executados por computadores.
1.1.1 algoritmos executados por um computador
Para que um algoritmo possa ser totalmente executado por um computador é necessário 
identificar claramente quais as ações que essa máquina pode executar. O exemplo a seguir 
permite identificar, através de uma simulação, algumas das ações básicas que um computa-
dor executa e como isso é feito.
Vamos supor que um professor, na sala de aula, mostre aos alunos como é calculada a média 
das notas de uma prova. Para simplificar, suponhamos que a turma tenha somente cinco 
alunos. As provas estão sobre sua mesa, já corrigidas. O professor desenha uma grade no 
quadro, dando nome a cada um dos espaços nos quais vai escrever a nota de cada aluno: 
Nota1, Nota2, etc. (Figura 1.1). Acrescenta mais um espaço para escrever os resultados de 
seus cálculos, que chama de Resultado.
Para formalizar o que está fazendo, ele escreveu a sequência de ações que está executando 
em uma folha sobre sua mesa. Ele inicia pegando a primeira prova, olha sua nota (vamos 
supor que seja 10) e escreve essa nota no espaço reservado para ela, que chamou de Nota1. 
Essa prova ele coloca em uma segunda pilha sobre a mesa, pois já foi usada e não deve ser 
considerada uma segunda vez para calcular a média. Em seguida, faz o mesmo para a segun-
da prova (nota 8), escrevendo seu valor em Nota2 e colocando-a na pilha das já utilizadas. Ele 
repete essa operação para cada uma das provas restantes.
8 Algoritmos e Programação com Exemplos em Pascal e C
Obtidas todas as notas das provas, o professor passa a realizar as operações que vão calcular 
a média. Inicialmente, precisa somar todas as notas. Em cima da sua mesa, está uma cal-
culadora. Ele consulta cada um dos valores das notas que escreveu no quadro e utiliza essa 
calculadora para fazer sua soma:
Soma = Nota1 + Nota2 + Nota3 + Nota4 + Nota5
O resultado da soma ele escreve no espaço que chamou de Resultado (Figura 1.2a).
Feita a soma, ela deve ser dividida por cinco para que seja obtida a média das notas. Utili-
zando novamente a calculadora, o professor consulta o que escreveu no espaço Resultado 
(onde está a soma) e divide este valor por cinco. Como não vai mais precisar do valor da soma, 
o professor utiliza o mesmo espaço, chamado Resultado, para escrever o valor obtido para 
a média, apagando o valor anterior (Figura 1.2b).
Finalizando, o professor escreve as cinco notas obtidas nas provas e a média em uma folha, 
utilizando uma máquina de escrever, para informar à direção da escola.
7
Xxxx
Xxxx
xxxx
Qweqweq
wewerwr
tyutu6
hjhk567
123456
Máquina de
escrever
Máquina de
calcular
Sequência
de ações
Provas
corrigidas
10 8 7
Nota1 Nota2 Nota3 Nota4 Nota5 Resultado
Quadro
Professor
8
Xxxx
Xxxx
xxxx
Provas
já usadas
figura 1.1 Simulação de um algoritmo.
Capítulo 1 Fundamentos 9
A sequência de ações que foram executadas foi a seguinte:
 1. ler a nota da primeira prova e escrevê-la em Nota1;
 2. ler a nota da prova seguinte e escrevê-la em Nota2;
 3. ler a nota da prova seguinte e escrevê-la em Nota3;
 4. ler a nota da prova seguinte e escrevê-la em Nota4;
 5. ler a nota da prova seguinte e escrevê-la em Nota5;
 6. somar os valores escritos nos espaços Nota1, Nota2, Nota3, Nota4 e 
Nota5. Escrever o resultado da soma em Resultado;
 7. dividir o valor escrito em Resultado por cinco e escrever o valor deste 
cálculo em Resultado;
 8. usando a máquina de escrever, escrever os valores contidos em Nota1, 
Nota2, Nota3, Nota4, Nota5 e Resultado;
 9. terminar a execução desta tarefa.
Essa sequência de operações caracteriza um algoritmo, sendo que todas as ações realizadas 
nesse algoritmo podem ser executadas por um computador. A tradução desse algoritmo para 
uma linguagem que um computador possa interpretar gera o programa que deve ser exe-
cutado pelo computador. O professor corresponde à unidade central de processamento (UCP 
ou, mais comumente, CPU, de Central Processing Unit), responsável pela execução desse pro-
grama. Essa unidade organiza o processamento e garante que as instruções sejam executadas 
na ordem correta.
10 8 7 5 9 39
10 8 7 5 9 7,8
(a)
(b)
Quadro
Quadro
Nota1 Nota2 Nota3 Nota4 Nota5 Resultado
Nota1 Nota2 Nota3 Nota4 Nota5 Resultado
figura 1.2 Valores durante a simulação.
10 Algoritmos e Programação com Exemplos em Pascal e C
Fazendo um paralelo entre o exemplo e um computador real, os espaços desenhados na gra-
de do quadro constituem a memória principal do computador, que é composta por espaços 
acessados pelos programas através de nomes dados pelo programador.
Nesses espaços são guardadas, durante o processamento, informações lidas na entrada e re-
sultados de processamentos, como no exemplo visto. Cada um desses espaços só pode conter 
um valor a cada momento, perdendo o valor anterior se um novo valor for armazenado nele, 
como ocorreu quando se escreveu a média em Resultado, apagando o valor da soma que 
lá estava. Denomina-se variável cada um desses espaços utilizados para guardar valores, 
denotando que seu valor pode variar ao longo do tempo. As instruções de um programa que 
está sendo executado também são armazenadas na memória principal. Todas as informações 
armazenadas nas variáveis da memória principal são perdidas no momento em que termina 
a execução do programa.
Unidades de memória secundária podem ser utilizadas para guardar informações (dados) a 
fim de serem utilizadas em outra ocasião. Exemplos de dispositivos de memória secundária 
são HDs (Hard Disks), CDs, DVDs e pendrives.
A comunicação do computador com o usuário durante o processamento e ao seu final é feita 
através de unidades de entrada e saída. No exemplo anterior, a pilha de provas corresponde 
à unidade de entrada do computador, através da qual são obtidos os valores que serão utili-
zados no processamento. A unidade de entrada mais usada para interação entre o usuário e 
o programa durante a execução é o teclado do computador. Quando se trata de imagens, a 
unidade de entrada pode ser, por exemplo, uma máquina fotográfica ou um scanner.
A máquina de escrever corresponde à unidade de saída, que informa aos usuários o resul-
tado do processamento. Exemplos de unidades de saída são o vídeo do computador e uma 
impressora.
As unidades de entrada e saída de dados constituem as únicas interfaces do computador com 
seu usuário. Observe que, sem as unidades de entrada e saída, não é possível fornecer dados 
ao computador nem saber dos resultados produzidos.
A máquina de calcular corresponde à unidade aritmética e lógica do computador, responsá-
vel pelos cálculos e inferências necessários ao processamento. Sua utilização fica totalmente 
transparente ao usuário, que somente é informado dos resultados do processamento.
Resumindo, um computador processa dados. Processar compreende executar atividades 
como, por exemplo, comparações, realização de operações aritméticas, ordenações. A partir 
de dados (de entrada), processando-os, o computador produz resultados (saídas). Na figu-
ra 1.3, vê-se um esquema simplificado da organização funcional de um computador. Nela 
podem ser observados os sentidos em que as informações fluem durante a execução de um 
programa: o sistema central do computador compreende a CPU e a memória principal; na 
CPU estão as unidades de controle e de aritmética e lógica; a unidade de controle tem acesso 
à memória principal, às unidades de entrada e de saída de dados e aos dispositivos de me-
mória secundária.
Capítulo1 Fundamentos 11
1.1.2 comandos básicos executados por um computador
Analisando o exemplo anterior, identificamos as primeiras ações que podem ser executadas 
por um computador:
 ■ obter um dado de uma unidade de entrada de dados, também chamada de leitura de 
um dado;
 ■ informar um resultado através de uma unidade de saída, também chamada de escrita de 
uma informação ou saída de um dado;
 ■ resolver expressões aritméticas e lógicas;
 ■ colocar o resultado de uma expressão em uma variável.
Essas ações são denominadas instruções ou comandos. Outros comandos serão vistos ao 
longo deste livro.
1.1.3 da necessidade do desenvolvimento de algoritmos para 
solucionar problemas computacionais
Nas atividades cotidianas já vistas, é sem dúvida necessária alguma organização por parte de 
quem vai realizar a tarefa. No uso do telefone, retirar o fone do gancho e digitar o número e, 
só depois, inserir o cartão não será uma boa estratégia, assim como, no caso da livraria, levar 
o livro sem passar pelo caixa também resultará em problemas. Nessas atividades, no entanto, 
grande parte das pessoas não necessita colocar por escrito os passos a realizar para cumprir 
a tarefa. Porém, quando se trata de problemas a solucionar por computador, a sequência de 
Unidade
de
entrada
Unidade
de
saída
Unidade
de
memória auxiliar
Memória
principal 
Unidade Central de
Processamento - UCP 
Sistema central
Unidade
aritmética e
lógica 
Unidade
de
controle
figura 1.3 Esquema simplificado de um computador.
12 Algoritmos e Programação com Exemplos em Pascal e C
ações que o computador deve realizar é por vezes bastante extensa e nem sempre conhecida 
e óbvia. Para a programação de computadores, a análise cuidadosa dos elementos envolvidos 
em um problema e a organização criteriosa da sequência de passos necessários à sua solução 
(algoritmo) devem obrigatoriamente preceder a escrita do programa que busque solucionar 
o problema. Para problemas mais complexos, o recomendável é desenvolver um algoritmo 
detalhado antes de passar à etapa de codificação, mas para problemas mais simples, o algo-
ritmo pode especificar apenas os passos principais.
1.1.4 formas de expressar um algoritmo
Em geral, no desenvolvimento de algoritmos computacionais não são utilizadas nem as lin-
guagens de programação nem a linguagem natural, mas formas mais simplificadas de lingua-
gens. As formas mais usuais de representação de algoritmos são a linguagem textual, alguma 
pseudolinguagem e o fluxograma. Para exemplificar cada uma delas vamos usar o seguinte 
exemplo: obter a soma de dois valores numéricos quaisquer.
linguagem textual. Foi a forma utilizada para introduzir o conceito de algoritmo nos exem-
plos anteriores. Analisando o problema aqui colocado, para obter a soma de dois valores é 
preciso realizar três operações na ordem a seguir:
 1. obter os dois valores
 2. realizar a soma
 3. informar o resultado
pseudolinguagem. Para padronizar a forma de expressar algoritmos são definidas pseu-
dolinguagens. Uma pseudolinguagem geralmente é bastante semelhante a uma linguagem 
de programação, sem, entretanto, entrar em detalhes como, por exemplo, formatação de in-
formações de entrada e de saída. As operações básicas que podem ser executadas pelo com-
putador são representadas através de palavras padronizadas, expressas na linguagem falada 
(no nosso caso, em Português). Algumas construções também são padronizadas, como as 
que especificam onde armazenar valores obtidos e calculados, bem como a forma de calcular 
expressões aritméticas e lógicas.
Antecipando o que será visto nos capítulos a seguir, o algoritmo do exemplo recém-discutido 
é expresso na pseudolinguagem utilizada neste livro como:
Algoritmo 1.1 – Soma2
{INFORMAR A SOMA DE 2 VALORES}
 Entradas: valor1, valor2 (real)
 Saídas: soma (real)
início
 ler (valor1, valor2) {ENTRADA DOS 2 VALORES}
 soma ← valor1 + valor2 {CALCULA A SOMA}
 escrever (soma) {INFORMA A SOMA}
fim
Capítulo 1 Fundamentos 13
fluxograma. Trata-se de uma representação gráfica que possibilita uma interpretação visual 
do algoritmo. Cada ação é representada por um bloco, sendo os blocos interligados por linhas 
dirigidas (setas) que representam o fluxo de execução. Cada forma de bloco representa uma 
ação. A Figura 1.4 mostra alguns blocos utilizados em fluxogramas neste livro, juntamente 
com as ações que eles representam. São adotadas as formas propostas na padronização feita 
pela ANSI (American National Standards Institute) em 1963 (Chapin, 1970), com algumas 
adaptações. Outras formas de blocos serão introduzidas ao longo do texto. A representação 
do algoritmo do exemplo acima está na Figura 1.5.
A representação através de fluxogramas não é adequada para algoritmos muito extensos, 
com grande número de ações a executar. Utilizaremos a representação de fluxogramas so-
mente como apoio para a compreensão das diferentes construções que podem ser utilizadas 
nos algoritmos.
1.1.5 eficácia e eficiência de algoritmos
Dois aspectos diferentes devem ser analisados quando se constrói um algoritmo para ser exe-
cutado em um computador: sua eficácia (exatidão) e sua eficiência.
eficácia (corretude) de um algoritmo. Um algoritmo deve realizar corretamente a tarefa 
para a qual foi construído. Além de fazer o que se espera, o algoritmo deve fornecer o resul-
tado correto para quaisquer que sejam os dados fornecidos como entrada. A eficácia de um 
algoritmo deve ser exaustivamente testada antes que ele seja implementado em um compu-
tador, o que levou ao desenvolvimento de diversas técnicas de testes, incluindo testes formais. 
A forma mais simples de testar um algoritmo é através de um “teste de mesa”, no qual se si-
ENTRADA
lista de variáveis
variável expressão
Ponto em que inicia a execução do algoritmo.
Ponto em que termina a execução do algoritmo.
Entrada de dados: leitura de informações
para preencher a lista de variáveis.
Saída de dados: informa conteúdos das
variáveis da lista.
Atribuição: variável recebe o resultado da
expressão.
início
fim
SAÍDA
lista de variáveis
figura 1.4 Blocos de fluxograma.
14 Algoritmos e Programação com Exemplos em Pascal e C
mula com lápis e papel sua execução, com conjuntos diferentes de dados de entrada. No final 
de cada capítulo deste livro, são indicados alguns cuidados a adotar para verificar a exatidão 
dos algoritmos durante os testes.
eficiência de um algoritmo. A solução de um problema através de um algoritmo não é 
necessariamente única. Na maioria dos casos, algoritmos diferentes podem ser construídos 
para realizar uma mesma tarefa. Neste livro será enfatizada a utilização de técnicas que levam 
à construção de algoritmos mais eficientes. Entretanto, em alguns casos não se pode dizer a 
priori qual a melhor solução. Pode-se, sim, calcular qual a forma mais eficiente, com base em 
dois critérios: tempo de execução e espaço de memória ocupado. Aspectos de eficiência de 
algoritmos são vistos em outro livro desta série (Toscani; Veloso, 2012).
Um exemplo da diferença entre eficácia e eficiência pode ser observado na receita de ovo 
mexido mostrada a seguir:
 1. ligar o fogão em fogo baixo;
 2. separar 1 ovo, 1 colher de sobremesa de manteiga e sal a gosto;
 3. quebrar o ovo em uma tigela;
 4. colocar sal na tigela;
 5. misturar levemente o ovo e o sal, com um garfo;
 6. aquecer a manteiga na frigideira até que comece a derreter;
 7. jogar o ovo na frigideira, mexendo com uma colher até ficar firme;
 8. retirar da frigideira e servir.
ENTRADA
valor1, valor2
soma valor1 + valor2
início
fim
SAÍDA
soma
figura 1.5 Fluxograma da soma de dois números.
Capítulo 1 Fundamentos 15
Se analisarmos o algoritmo acima, podemos observar que, embora o ovo mexido seja obtido, 
garantindo a eficácia da receita, existe uma clara ineficiência em relação ao gasto de gás, uma 
vez que ligar o fogão não é pré-requisito para a quebra do ovo e mistura do ovo e do sal. Já 
em outras ações, como as especificadas nos passos 3 e 4,a sequência não é relevante.
Se modificarmos apenas a sequência das ações, conforme indicado abaixo, então teremos um 
algoritmo eficaz e mais eficiente:
 1. separar 1 ovo, 1 colher de sobremesa de manteiga e sal a gosto;
 2. quebrar o ovo em uma tigela;
 3. colocar sal nesta tigela;
 4. misturar levemente o ovo e o sal, com um garfo;
 5. ligar o fogão em fogo baixo;
 6. aquecer a manteiga na frigideira até que comece a derreter;
 7. jogar o ovo na frigideira, misturando com uma colher até ficar firme;
 8. retirar da frigideira e servir.
1.2 
 etapas de construção de um programa
A construção de um algoritmo para dar suporte computacional a uma aplicação do mundo 
real deve ser feita com todo cuidado para que ele realmente execute as tarefas que se quer 
de forma correta e em tempo razoável. Programar não é uma atividade trivial, muito antes 
pelo contrário, requer muito cuidado e atenção. A dificuldade em gerar bons programas 
levou à definição de técnicas específicas que iniciam frequentemente com a construção de 
um algoritmo.
A forma mais simples de garantir a qualidade de um programa é construí-lo seguindo uma 
série de etapas. Parte-se de uma análise inicial da realidade envolvida na aplicação, desenvol-
vendo a solução de forma gradual, e chega-se ao produto final: um programa que executa as 
funcionalidades necessárias à aplicação.
A seguir, são explicadas as etapas que devem ser cumpridas para assegurar a construção de 
um programa correto (Figura 1.6). Observe que este processo não é puramente sequencial, 
mas, em cada etapa, pode ser necessário voltar a alguma etapa anterior para desenvolver com 
mais detalhes algum aspecto.
 ■ análise detalhada do problema. Inicia-se com uma análise detalhada do problema, 
identificando os aspectos que são relevantes para a sua solução. No Algoritmo 1.1, o 
problema é:
Informar a soma de dois valores.
 ■ especificação dos requisitos do problema. Nessa etapa são identificados e especi-
ficados os resultados que deverão ser produzidos (saídas) e os dados que serão neces-
sários para a execução da tarefa requerida (entradas). No Algoritmo 1.1, os dados de 
entrada e saída são:
16 Algoritmos e Programação com Exemplos em Pascal e C
Entradas: dois valores numéricos, digitados via teclado.
Saída: a soma dos dois valores, mostrada na tela.
Esse é um problema simples, adequado à introdução dos conceitos iniciais. Contudo, na 
prática, não apenas os objetivos podem ser mais complexos como a identificação de en-
tradas e saídas pode incluir formatos e valores válidos, bem como quantidades de valores 
e a especificação de outros dispositivos de entrada e saída.
 ■ construção de um algoritmo. A etapa seguinte é o projeto de um algoritmo que 
solucione o problema, ou seja, de um conjunto finito de ações que, quando executadas 
na ordem estabelecida, levem ao resultado desejado em um tempo finito. É importante 
notar que mesmo os problemas mais simples tendem a ter mais de uma solução possí-
vel, devendo ser determinada a solução que será adotada. Nesta etapa já devem ser cria-
dos nomes de variáveis que irão armazenar os valores de entrada e os valores gerados 
durante o processamento. O Algoritmo 1.1. representa uma possível solução alcançada 
nesta etapa.
 ■ validação do algoritmo. Em seguida, deve ser feita a validação lógica do algoritmo 
desenvolvido. Essa validação muitas vezes é feita através de um teste de mesa, ou seja, 
simulando sua execução com dados virtuais. Procura-se, através desses testes, verificar se 
a solução proposta atinge o objetivo. Devem ser feitos testes tanto com valores corretos 
como incorretos. No exemplo que está sendo utilizado aqui, os dados para testes devem 
incluir valores nulos, positivos e negativos, como por exemplo:
Problema
Entradas
e saídas
Verificação do
programa
Manutenção
Construção do
algoritmo
Análise
Validação do
algoritmo
Construção do
programa
figura 1.6 Etapas da construção de um programa.
Capítulo 1 Fundamentos 17
Valor1 Valor2 Soma
 0 0 0
26 12 38
-4 –10 –14
12 –10 2
-5 2 –3
 ■ codificação do programa. É a tradução do algoritmo criado para resolver o problema 
para uma linguagem de programação. Os programas em Pascal e C gerados a partir do 
algoritmo desenvolvido para o exemplo (Algoritmo 1.1) são apresentados no Capítulo 3.
 ■ verificação do programa. Consiste nas verificações sintática (compilação) e semântica 
(teste e depuração) do programa gerado. Os mesmos valores utilizados no teste de mesa 
podem ser utilizados para testar o programa gerado.
 ■ manutenção. Uma vez considerado pronto, o programa passa a ser utilizado por usuá-
rios. A etapa de manutenção do programa inicia no momento em que ele é liberado para 
execução, e acompanha todo seu tempo de vida útil. A manutenção tem por finalidade 
corrigir eventuais erros detectados, assim como adicionar novas funcionalidades.
Cada uma dessas fases é importante, devendo ser respeitada e valorizada para se chegar a 
programas de qualidade. Neste sentido, aqui são fornecidos subsídios a fim de que todas as 
etapas sejam consideradas durante a escrita de programas como, por exemplo, a indicação 
de valores que devem ser utilizados nos testes de cada comando e conselhos para deixar os 
programas legíveis, de modo a facilitar a sua manutenção.
1.3 
 paradigmas de programação
O programa realmente executado por um computador é escrito em uma linguagem com-
preendida pela máquina, por isso denominada linguagem de máquina, na qual as instru-
ções são codificadas no sistema de numeração binário. A utilização direta de linguagem de 
máquina é bastante complicada. Para tornar a escrita de programas mais acessível a usuá-
rios comuns foram desenvolvidas linguagens de mais alto nível, denominadas linguagens de 
programação. São linguagens que permitem a especificação das instruções que deverão ser 
executadas pelo computador através de uma linguagem mais próxima da linguagem natural.
Um programa escrito numa linguagem de programação, denominado programa-fonte, deve 
ser primeiro traduzido para linguagem de máquina, para só então ser executado pelo com-
putador. A tradução do programa-fonte para o programa em linguagem de máquina corres-
pondente é feita por um outro programa, específico para a linguagem utilizada, denominado 
compilador (Figura 1.7).
Na busca de uma forma simples, clara e precisa de escrever programas, diversas linguagens 
de programação foram desenvolvidas nos últimos anos. Toda linguagem possui uma sintaxe 
bem definida, que determina as construções corretas a serem utilizadas para a elaboração 
de programas. Além disso, cada linguagem de programação utiliza um conjunto de concei-
18 Algoritmos e Programação com Exemplos em Pascal e C
tos adotados na solução de problemas, o qual corresponde à semântica desta linguagem, 
ou seja, à forma como construções sintaticamente corretas são executadas. Esses conceitos 
possibilitam diferentes abordagens de problemas e formulações de soluções, isto é, seguem 
diferentes paradigmas de programação.
A palavra “paradigma” corresponde a um modelo ou padrão de como uma realidade é entendi-
da e de como se interage com essa realidade. Aqui, um paradigma de programação corresponde 
à forma como a solução está estruturada e será executada no programa gerado, incluindo téc-
nicas e conceitos específicos, bem como os recursos disponibilizados. Os principais paradigmas 
das linguagens de programação são (Ghezzi; Jazayeri, 1987; Melo, Silva, 2003; Sebesta, 2003):
 ■ imperativo ou procedural, no qual um programa é composto por uma sequência de 
comandos a serem executados pelo computador em uma determinada ordem. Dentre as 
linguagens de programação voltadas a esse paradigma destacam-se Pascal, C, Fortran, 
Cobol, PL/1, Basic, Algol, Modula e Ada, entre outras;
 ■ funcional, em que um programa é composto pela declaração de funções que transfor-
mam a(s) entrada(s) na(s) saída(s) desejada(s). Exemplos de linguagens funcionais são 
Lisp, ML, Miranda, Haskell eOCaml;
 ■ lógico, que utiliza a avaliação de condições lógicas como base para a escrita dos progra-
mas. Um programa é composto por regras que disparam ações a partir da identificação 
de premissas. Um exemplo desse paradigma é a linguagem Prolog;
 ■ orientação a objetos, em que o mundo real é representado por meio de classes de 
objetos e das operações que podem ser realizadas sobre eles, as quais definem seu com-
portamento. Herança e polimorfismo são conceitos básicos adotados nesse paradigma. 
Smalltalk, C++, Java, PascalOO, Delphi, C#, Eiffel e Simula são exemplos de linguagens 
orientadas a objetos.
A forma de escrever um programa em cada um desses paradigmas é bastante diferente. Neste 
livro será considerado somente o paradigma imperativo ou procedural. Essa opção, para 
um primeiro curso em programação, justifica-se pelas seguintes razões:
 ■ o paradigma imperativo permite representar de uma forma intuitiva os problemas do dia 
a dia, que geralmente são executados através de sequências de ações;
Programa-fonte
Programa em
linguagem de 
programação
Programa em
linguagem de
máquina
COMPILADOR
Programa executável
figura 1.7 Tradução de programa-fonte para executável.
Capítulo 1 Fundamentos 19
 ■ historicamente, os primeiros programas foram desenvolvidos utilizando linguagens impe-
rativas, sendo esse um paradigma dominante e bem estabelecido;
 ■ existe um grande número de algoritmos e de sistemas implementados em linguagens 
que seguem esse paradigma, os quais podem ser utilizados como base para o desenvol-
vimento de novos programas.
A opção de utilizar as linguagens Pascal e C neste livro deu-se por serem essas as linguagens 
mais utilizadas como introdutórias à programação na maior parte dos cursos brasileiros de 
ciência da computação, informática e engenharia da computação.
A linguagem Pascal foi definida por Niklaus Wirth em 1970 (Wirth, 1971, 1972, 1978) 
com a finalidade de ser utilizada em aplicações de propósito geral e, principalmente, para 
ensino de programação. Uma característica importante de Pascal é que foi, desde sua criação, 
pensada para dar suporte à programação estruturada. Pascal serviu de base para o desenvol-
vimento de diversas outras linguagens de programação (Ghezzi; Jazayeri, 1987). Portanto, o 
aprendizado de novas linguagens de programação, sobretudo as que seguem o paradigma 
imperativo, se torna mais fácil para quem conhece Pascal.
A linguagem C foi desenvolvida por Dennis Ritchie nos anos 1970 (Kernighan; Ritchie, 1988) 
com o propósito de ser uma linguagem para a programação de sistemas. É hoje largamente 
utilizada em universidades e no desenvolvimento de software básico.
1.4 
 programação estruturada
A programação estruturada (Jackson, 1975) pode ser vista como um subconjunto do pa-
radigma imperativo. Baseia-se no princípio de que o fluxo do programa deve ser estruturado, 
devendo esse fluxo ficar evidente a partir da estrutura sintática do programa. A estruturação 
deve ser garantida em dois níveis: de comandos e de unidades.
No nível de comandos, a programação estruturada fundamenta-se no princípio básico de que 
um programa deve possuir um único ponto de entrada e um único ponto de saída, existindo 
de “1 a n” caminhos definidos desde o princípio até o fim do programa e sendo todas as ins-
truções executáveis, sem que apareçam repetições (loops) infinitas de alguns comandos. Nes-
se ambiente, o programa deve ser composto por blocos elementares de instruções (coman-
dos), interconectados através de apenas três mecanismos de controle de fluxo de execução: 
sequência, seleção e iteração. Cada bloco elementar, por sua vez, é delimitado por um ponto 
de início – necessariamente no topo do bloco – e por um ponto de término – necessariamente 
no fim do bloco – de execução, ambos muito bem definidos. Os três mecanismos de controle 
do fluxo de execução estão representados na Figura 1.8 através de fluxogramas, nos quais se 
observa claramente os pontos de entrada e de saída de cada bloco de instruções. Alguns dos 
blocos que constam nessa figura serão vistos nos próximos capítulos deste livro.
Uma característica fundamental da programação estruturada é que o uso de desvios incondi-
cionais no programa, implementados pelo comando GOTO (VÁ PARA), é totalmente proibido. 
20 Algoritmos e Programação com Exemplos em Pascal e C
Embora esse tipo de comando, em alguns casos, possa facilitar a construção de um progra-
ma, dificulta enormemente sua compreensão e manutenção.
No nível de unidades, a programação estruturada baseia-se na ideia proposta em 1972 pelo 
cientista de computação E. W. Dijkstra: “A arte de programar consiste na arte de organizar 
e dominar a complexidade dos sistemas”. A programação estruturada enfatiza a utilização 
de unidades separadas de programas, chamadas de módulos, que são ativadas através de 
comandos especiais. Propõe que os programas sejam divididos em um conjunto de subpro-
gramas menores, cada um com seu objetivo específico e bem definido, mais fáceis de imple-
mentar e de testar (seguindo a tática de “dividir para conquistar”).
O desenvolvimento de programas deve ser feito de forma descendente, com a decomposição 
do problema inicial em módulos ou estruturas hierárquicas, de modo a dividir ações comple-
xas em uma sequência de ações mais simples, desenvolvidas de forma mais fácil. Essa técnica 
decorre da programação estruturada e é também conhecida como programação modular.
Resumindo, a programação estruturada consiste em:
 ■ uso de um número muito limitado de estruturas de controle;
 ■ desenvolvimento de algoritmos por fases ou refinamentos sucessivos;
 ■ decomposição do algoritmo total em módulos.
Essas técnicas para a solução de problemas visam à correção da solução desenvolvida, bem 
como à simplicidade dessa solução, garantindo uma melhor compreensão do que é feito e 
facilitando a manutenção dos programas por outras pessoas além do desenvolvedor inicial.
Neste texto será utilizada a programação estruturada, incentivando o desenvolvimento de 
programas através de módulos, de forma a garantir a qualidade dos programas construídos 
(Farrer et al., 1999). Seguindo os preceitos da programação estruturada, comandos do tipo 
GOTO (VÁ PARA), que alteram o fluxo de execução incondicionalmente, não serão tratados 
neste livro.
Sequência Seleção Iteração
figura 1.8 Estruturas de controle de fluxo de execução na programação estruturada.
Capítulo 1 Fundamentos 21
1.5 
 elementos de representação interna de dados
Internamente, os computadores digitais operam usando o sistema numérico binário, que 
utiliza apenas os símbolos 0 e 1. Na memória e nos dispositivos de armazenamento, o com-
ponente conceitual básico e a menor unidade de armazenamento de informação é o bit. Bit 
vem do Inglês binary digit, ou seja, dígito binário, e um bit pode memorizar somente um 
entre dois valores: zero ou um. Qualquer valor numérico pode ser expresso por uma sucessão 
de bits usando o sistema de numeração binário.
Para representar caracteres, são utilizados códigos armazenados em conjuntos de bits. Os 
códigos mais comuns armazenam os caracteres em bytes, que são conjuntos de 8 bits. Nos 
códigos de representação de caracteres, cada caractere tem associado a si, por convenção, 
uma sequência específica de zeros e uns. Três códigos de representação de caracteres são 
bastante utilizados: ASCII (7 bits por caractere), EBCDIC (8 bits por caractere) e UNICODE (16, 
32 ou mais bits).
Tanto o ASCII (American Standard Code for Information Interchange), que é o código utiliza-
do pela maioria dos microcomputadores e em alguns periféricos de equipamentos de grande 
porte, quanto o EBCDIC (Extended Binary Coded Decimal Interchange Code) utilizam um byte 
para representar cada caractere, sendo que, na representação do conjunto de caracteres ASCII 
padrão, o bit mais significativo (bit mais à esquerda) do byte é sempre igual a 0. A represen-
tação dos caracteres A e Z nos dois códigos é:
Caracteres EBCDIC ASCII
A 11000001 0100 0001
Z 1110 1001 0101 1010
O UNICODE é promovido e desenvolvido pelo Unicode Consortium. Busca permitir aos com-
putadores representar e manipular textos de forma consistente nos múltiplos sistemas de 
escrita existentes. Atualmente, ele compreende mais de 100.000 caracteres. Dependendo do 
conjunto de caracteres que esteja em uso em uma aplicação, um, dois ou mais bytes podem 
ser utilizados na representação dos caracteres.
As unidades de medida utilizadas para quantificar a memória principal e indicar a capacidade 
de armazenamento de dispositivos são:
K quilo (mil) 103
M mega (milhão) 106
G giga (bilhão) 109
T tera (trilhão) 1012
O sistema métrico de unidades de medida utiliza os mesmos prefixos, mas o valor exato de 
cada um deles em informática é levemente superior. Como o sistema de numeração utilizado 
22 Algoritmos e Programação com Exemplos em Pascal e C
internamente em computadores é o binário (base 2), as capacidades são representadas como 
potências de 2:
K 1.024 210
M 1.048.576 220
etc...
A grafia dos valores expressos em múltiplos de bytes pode variar. Assim, por exemplo, 512 
quilobytes podem ser escritos como 512K, 512KB, 512kB ou 512Kb. Já os valores expressos 
em bits, via de regra, são escritos por extenso, como em 512 quilobits.
1.6 
 dicas
Critérios que devem ser observados ao construir um algoritmo:
 ■ procurar soluções simples para proporcionar clareza e facilidade de entendimento do 
algoritmo;
 ■ construir o algoritmo através de refinamentos sucessivos;
 ■ seguir todas as etapas necessárias para a construção de um algoritmo de qualidade;
 ■ identificar o algoritmo, definindo sempre um nome para ele no cabeçalho. Este nome 
deve traduzir, de forma concisa, seu objetivo. Por exemplo: Algoritmo 1.1 – Soma2 
indica, através do nome, que será feita a soma de dois valores;
 ■ definir, também no cabeçalho, o objetivo do algoritmo, suas entradas e suas saídas;
 ■ nunca utilizar desvios incondicionais, como GOTO (VÁ PARA).
1.7 
 testes
Testes de mesa. É importante efetuar, sempre que possível, testes de mesa para verificar a efi-
cácia (corretude) de um algoritmo antes de implementá-lo em uma linguagem de programa-
ção. Nestes testes, deve-se utilizar diferentes conjuntos de dados de entrada, procurando usar 
dados que cubram a maior quantidade possível de situações que poderão ocorrer durante a 
utilização do algoritmo. Quando o algoritmo deve funcionar apenas para um intervalo defini-
do de valores, é recomendável que se simule a execução para valores válidos, valores limítrofes 
válidos e inválidos e valores inválidos acima e abaixo do limite estabelecido. Por exemplo, se um 
determinado algoritmo deve funcionar para valores inteiros, no intervalo de 1 a 10, inclusive, 
o teste de mesa deveria incluir a simulação da execução para, no mínimo, os valores 0, 1, 10, 
11 e um valor negativo.
■ ■ Este capítulo apresenta as 
unidades léxicas de linguagens de programação 
imperativas, como Pascal e C. 
Discute as declarações de variáveis, 
de constantes e de 
tipos, bem como a representação de expressões 
aritméticas e lógicas. 
Neste capítulo, e nos que o sucedem, 
todos os conceitos são apresentados e analisados 
inicialmente em linguagem algorítmica, 
sendo a seguir comentados e exemplificados em 
Pascal e C.
constantes e expressões
unidades léxicas, variáveis, 
capítulo 2
26 Algoritmos e Programação com Exemplos em Pascal e C
Para que um algoritmo se transforme em um programa executável, é necessário que esse seja 
inicialmente traduzido para uma linguagem de programação pelo compilador corresponden-
te, que irá gerar o programa a ser executado. Essa tradução é feita com base na gramática da 
linguagem. Nesse processo, cada símbolo, cada palavra e cada construção sintática utilizados 
no programa devem ser reconhecidos pelo compilador. Isso é possível porque toda linguagem 
de programação possui uma gramática bem definida que rege a escrita dos programas, ou 
seja, que define sua sintaxe.
A primeira representação da gramática de uma linguagem de programação foi apresentada 
por John Backus, em 1959, para expressar a gramática da linguagem Algol. Esta notação deu 
origem à BNF (Backus-Naur Form ou Backus Normal Form) (Knuth, 2003; Wiki, 2012), 
que se tornou a forma mais utilizada para representar a gramática de linguagens de progra-
mação. Neste livro, é utilizada uma forma simplificada da BNF (ver Apêndice) para representar 
a gramática da pseudolinguagem e das linguagens Pascal e C.
As gramáticas das linguagens de programação imperativas são bastante parecidas no que se 
refere a unidades léxicas e comandos disponíveis. Esses elementos são apresentados a partir 
deste capítulo, que inicia apresentando as unidades léxicas de linguagens de programação 
imperativas. A seguir, ele mostra como devem ser feitas as declarações de variáveis, de cons-
tantes e de tipos, incluindo a análise de diferentes tipos de variáveis e dos valores que podem 
conter. Por fim, esse capítulo apresenta as expressões aritméticas e lógicas e suas represen-
tações. Outros tipos de declarações serão vistos mais adiante neste livro. Todos os conceitos 
são apresentados e analisados na linguagem algorítmica, sendo depois traduzidos para as 
linguagens de programação Pascal e C.
2.1 
 componentes das linguagens de programação
Os componentes básicos de uma linguagem de programação são denominados unidades 
léxicas. As unidades léxicas mais simples, analisadas a seguir, são valores literais, identificado-
res, palavras reservadas, símbolos especiais e comentários.
2.1.1 literais
Literais são valores representados explicitamente no programa e que não mudam durante a 
execução. Podem ser números, valores lógicos, caracteres ou strings.
números. Usualmente é utilizada a notação decimal para representar números nos progra-
mas, embora se saiba que internamente eles sejam representados na forma binária. Podem 
ser utilizados valores numéricos inteiros ou fracionários (chamados de reais), positivos ou 
negativos. Os números são representados na linguagem algorítmica exatamente como apare-
cem nas expressões aritméticas em português.
Ex.: 123 –45 +6,7
As linguagens de programação geralmente também permitem uma forma alternativa de es-
crita, mais compacta, de números muito grandes ou muito pequenos, denominada notação 
Capítulo 2 Unidades Léxicas, Variáveis, Constantes e Expressões 27
exponencial, científica ou de ponto flutuante. Nessa notação, um número real é representado 
por um valor inteiro (denominado mantissa) multiplicado por potências de 10 (indicadas pelo 
seu expoente). Por exemplo, o valor 3.000.000.000.000 seria representado como 3 x 1011. 
Tanto a mantissa como o expoente podem ter sinal (positivo ou negativo). Cada linguagem de 
programação define uma forma para a representação de números em notação exponencial, 
conforme será visto nas seções correspondentes a Pascal e C.
valores lógicos. Os valores lógicos (ou booleanos) verdadeiro e falso podem ser utiliza-
dos diretamente nos programas quando for feita alguma comparação.
caracteres. Permitem representar um símbolo ASCII qualquer, como uma letra do alfa-
beto, um dígito numérico (aqui, sem conotação quantitativa, apenas como representação 
de um símbolo) ou um caractere especial (um espaço em branco também corresponde a 
um caractere especial). Nos programas, os caracteres são geralmente representados entre 
apóstrofos. Essa é também a forma utilizada na pseudolinguagem aqui empregada.
Ex.: 'A' 'b' '4' '+'
strings. São sequências de um ou mais caracteres. Quaisquer caracteres podem ser utiliza-
dos (letras, dígitos e símbolos), incluindo o símbolo que representa um espaço em branco. 
Strings normalmente são representadas entre apóstrofos em um programa, forma também 
utilizada na pseudolinguagem.
Ex.: 'Ana Maria' 'A12B3' 'a$b' '91340-330/1'
2.1.2 identificadores
São as palavras criadas pelo programador para denominar o próprioprograma ou elementos 
dentro do mesmo, tais como: variáveis, constantes ou subprogramas. Toda linguagem de 
programação define regras específicas para a formação de identificadores, para que eles 
possam ser reconhecidos pelo compilador.
Na pseudolinguagem utilizada neste livro, um identificador deve sempre iniciar por uma letra, 
seguida de qualquer número de letras e dígitos, incluindo o símbolo “_” (sublinhado), por ser 
essa a forma mais frequentemente utilizada em linguagens de programação. Tratando-se de 
uma pseudolinguagem, a acentuação e a letra “ç” também podem ser utilizadas de forma 
a traduzir de forma mais fiel os valores que devem ser representados. A pseudolinguagem 
não diferencia letras maiúsculas de minúsculas, mas se recomenda que sejam usadas apenas 
minúsculas nos nomes de identificadores, reservando as maiúsculas para iniciais e para casos 
específicos que serão destacados oportunamente.
Exemplos de identificadores:
 valor
 número1
 a7b21
 Nome_Sobrenome
28 Algoritmos e Programação com Exemplos em Pascal e C
2.1.3 palavras reservadas
São identificadores que têm um significado especial na linguagem, representando comandos 
e operadores, ou identificando subprogramas já embutidos na linguagem. As palavras re-
servadas não podem ser utilizadas como identificadores definidos pelo programador.
Algumas das palavras reservadas definidas na pseudolinguagem são:
início
fim
se
então
escrever
ler
função
2.1.4 símbolos especiais
Símbolos especiais servem para delimitar ações, separar elementos, efetuar operações ou 
indicar ações específicas. Na pseudolinguagem aqui adotada, também existem alguns símbo-
los especiais com significado específico, como:
← + ( ) < > : ;
2.1.5 comentários
Comentários são recursos oferecidos pelas linguagens de programação que permitem, por 
exemplo, a inclusão de esclarecimentos sobre o que o programa faz e como isso é feito. Os 
comentários são identificados e delimitados por símbolos especiais e podem compreender 
quaisquer sequências de caracteres. Todo o conteúdo compreendido entre os símbolos deli-
mitadores de comentários é ignorado pelo compilador durante a tradução do programa, ser-
vindo apenas para documentar e facilitar o entendimento pelos seres humanos que tiverem 
acesso ao código do programa. Na pseudolinguagem, os comentários são delimitados pelos 
símbolos “{” e “}”.
Exemplo de comentário: { Este é um comentário @#$% }
2.2 
 declarações
Todos os itens utilizados em um programa devem ser declarados antes de sua utilização. Os 
nomes e as características desses itens são definidos através de declarações. Nesta seção, 
são analisadas declarações de variáveis, de tipos de dados e de constantes. Outras declarações 
são vistas em capítulos subsequentes.
Capítulo 2 Unidades Léxicas, Variáveis, Constantes e Expressões 29
2.2.1 declaração de variáveis
Uma variável representa um espaço de memória identificado e reservado para guardar um 
valor durante o processamento. Ressalte-se que somente um valor pode estar armazenado 
em uma variável em um determinado momento. Caso seja definido um novo valor para uma 
variável, o anterior será perdido.
Sempre que um programador decidir utilizar uma variável em seu programa, ele deverá informar 
seu nome e o tipo de valores que ela irá armazenar. Isso faz com que, ao final da compilação do 
programa, exista um espaço reservado para essa variável na memória principal do computador, 
com um determinado endereço físico. O tamanho do espaço alocado para a variável depende 
do tipo definido para ela. Uma vez alocada a variável, ela passa a ser referenciada no programa 
através do nome dado pelo programador, não sendo necessário saber seu endereço físico.
Variáveis de dois tipos, bastante diferentes no seu conteúdo e forma de uso, podem ser utiliza-
das em um programa: (1) variáveis que armazenam os valores manipulados no programa e (2) 
variáveis que guardam endereços físicos de memória, denominadas ponteiros. Esse segundo 
tipo de variável será tratado mais adiante, no Capítulo 14. Até lá, sempre que forem feitas refe-
rências a variáveis se estará tratando das que armazenam valores e não endereços de memória.
Toda variável utilizada pelo programa deve ser declarada no seu início, através de uma decla-
ração de variáveis, em que são definidos seu nome e o tipo de dados que poderá armazenar.
Os tipos de dados utilizados nas linguagens de programação se classificam, de acordo com 
os valores que podem armazenar, em:
 ■ tipos simples:
 ■ numéricos;
 ■ alfanuméricos;
 ■ lógicos ou booleanos;
 ■ ponteiros.
 ■ tipos compostos:
 ■ arranjos;
 ■ registros;
 ■ enumerações;
 ■ conjuntos;
 ■ arquivos.
Inicialmente serão analisados somente os três primeiros tipos de dados simples. O tipo pontei-
ro e os tipos compostos serão gradualmente apresentados ao longo deste livro.
Os nomes dados aos tipos de dados simples na pseudolinguagem são:
 ■ inteiro, para armazenar somente valores numéricos inteiros;
 ■ real, em que são armazenados valores numéricos fracionários;
 ■ caractere, para armazenar somente um caractere alfanumérico, utilizando a codifica-
ção de caracteres ASCII, que representa qualquer caractere em 8 bits;
30 Algoritmos e Programação com Exemplos em Pascal e C
 ■ string, em que são armazenadas cadeias de caracteres alfanuméricos;
 ■ lógico, para variáveis que podem armazenar somente um dos dois valores lógicos, ver-
dadeiro ou falso.
Uma opção na declaração de uma variável simples do tipo string é definir o número de ca-
racteres que poderá conter por meio de um inteiro entre colchetes. Por exemplo, uma variável 
definida com o tipo string[3] poderá conter somente três caracteres, enquanto que uma 
variável definida com o tipo string, sem limitação de tamanho, poderá ter o número de 
caracteres permitido na linguagem de programação utilizada.
No Capítulo 1 ressaltou-se a importância de identificar os valores de entrada e de saída de um 
algoritmo. Esses valores são armazenados em variáveis. Na pseudolinguagem, sugere-se que 
as variáveis sejam definidas em conjuntos separados, identificando (1) as variáveis de entrada, 
que servirão para valores fornecidos ao programa, (2) as de saída, que vão armazenar os valo-
res que serão informados pelo programa, resultantes de seu processamento, e (3) as variáveis 
auxiliares, que servirão somente para guardar valores durante o processamento. A sintaxe da 
declaração de variáveis é a seguinte:
Entradas: <lista de nomes de variáveis com seus tipos>
Saídas: <lista de nomes de variáveis com seus tipos>
Variáveis auxiliares: <lista de nomes de variáveis com seus tipos>
Os nomes escolhidos pelo programador para cada variável devem ser seguidos do tipo da 
variável entre parênteses:
nome (string)
valor (real)
Várias variáveis do mesmo tipo podem ser agrupadas em uma lista de nomes separados por 
vírgula, seguida pelo tipo correspondente:
int1, int2, int3 (inteiro)
Um exemplo do cabeçalho de um algoritmo, incluindo as declarações das variáveis já identifi-
cadas conforme sua futura utilização, é mostrado a seguir:
Algoritmo – MédiaEMaiorValor
 {INFORMA A MÉDIA DE 2 VALORES E QUAL O MAIOR DELES}
 Entradas: valor1, valor2 (real)
 Saídas: média (real)
 maior (real)
 Variáveis auxiliares: aux (real)
2.2.2 declaração de tipos de dados
As linguagens de programação geralmente permitem a definição de novos tipos de da-
dos. Um novo tipo é identificado através de um nome dado pelo programador. Sua defini-
ção se baseia em um tipo-base, anteriormente definido ou predefinido na linguagem. Na 
Encerra aqui o trecho do livro disponibilizado para 
esta Unidade de Aprendizagem. Na Biblioteca Virtual 
da Instituição, você encontra a obra na íntegra. 
 
DICA DO PROFESSOR
Conhecer a forma correta de definição e manipulação dos tipos de dados é muito 
importante para o desenvolvimento de algoritmos/programas, para que desta forma 
consigamos solucionar os problemas de forma eficiente e eficaz.Assista ao vídeo para conhecer um pouco mais sobre este tema.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) Verificamos na unidade de aprendizagem que para a definição de um identificador, 
ou seja, o nome de uma variável ou constante, possuímos regras, e estas precisam ser 
seguidas na construção dos algoritmos. Como boa prática de Programação e não de 
forma obrigatória, para facilitar a compreensão dos algoritmos, devemos sempre 
procurar definir os nomes para os identificadores sempre baseados no conteúdo que 
elas armazenarão. Como exemplo podemos citar o identificador para armazenar o 
salário do funcionário, e para esta, utilizar na sua definição com o nome de "idade", 
sendo que ela vai armazenar o salário do funcionário e não a idade dele. O nome 
correto para este identificador deveria ser "salario" ou de forma abreviada "sal" 
para assim já identificar o seu conteúdo e facilitar a análise dos algoritmos. 
 
Considerando as regras apresentadas no material da unidade, para a definição dos 
identificadores, avalie as alternativas de nomes a seguir. 
 
I) Valor1 
II) Média Total 
III) A+B 
IV) SalTotal 
V) 1Nota 
 
É correto apenas o que se afirma em: 
A) I e II estão corretas.
B) I, II e III estão corretas.
C) I e IV estão corretas.
D) I, IV e V estão corretas.
E) Todas as alternativas.
2) Na especificação de memória de computador, costuma-se utilizar como unidade de 
medida o Byte e seus múltiplos (KB, MB, GB, TB, PB, etc.). 
Analise as alternativas abaixo e realize as devidas conversões. Dentre as alternativas 
abaixo, quais corresponde ao valor equivalente a 1,5 MB (1,5 megabyte)?
I) 1.536 KB ou 1.048.576 Bytes 
II) 1.572.864 Bytes ou 1.536 KB 
III) 1.572.864 KB ou 1.536Bytes 
IV) 0,0014 GB ou 1.536Bytes
É correto apenas o que se afirma em:
A) I e II estão corretas.
B) II e IV estão corretas.
C) III e IV estão corretas.
D) I, III e IV estão corretas.
E) Apenas a afirmativa II está correta.
3) Uma das principais funções do computador é a manipulação de informações, mas 
para que esta manipulação seja correta, necessitamos da definição correta dos tipos 
que serão manipulados na memória do computador, para que este possa transformar 
os dados na forma digital e processá-los. O tipo de dado é um conjunto definido de 
objetos que tem em comum o mesmo comportamento diante de um conjunto de 
operações definidos e aplicados. Neste contexto, precisamos conhecer muito bem o 
que queremos guardar para, assim, selecionar o melhor "recipiente" para guardá-los 
e manipulá-los. Considerando o conceito de variáveis e constantes e os seus tipos 
básicos, analise as sentenças a seguir. 
 
I) A _________________ é um nome de um endereço de memória de um determinado 
conteúdo, podendo este variar ao longo do tempo. 
II) A ________________ é um nome de um endereço de memória de um determinado 
conteúdo, sendo este um valor fixo , não podendo este variar ao longo do tempo. 
III) O tipo ________________ pode armazenar caracteres individuais ou conjuntos de 
caracteres também denominados de strings/conjunto de caracteres. 
IV) O tipo _______________ pode armazenar valores inteiros positivos e negativos. 
V) O tipo _______________ pode armazenar valores fracionários positivos e 
negativos. 
VI) O tipo _______________ pode armazenar somente um conjunto de dois valores 
com significados opostos que geralmente são representados por 0(zero) e 1(um) ou 
Verdadeiro (V) e falso (F). 
 
Complete as sentenças conforme alternativas apresentadas abaixo. É correta a ordem 
apresentada apenas em:
A) Variável-Constante-Caractere-Inteiro-Real-Lógico
B) Constante-Variável-Caractere-Inteiro-Real-Lógico
C) Variável-Constante-Caractere-Real-Inteiro-Lógico
D) Variável-Constante-Lógico-Inteiro-Real-Caractere
E) Constante-Variável-Lógico-Real-Inteiro-Caractere
4) A cada ano as configurações de computadores aumentam sua capacidade de 
processamento e armazenamento de informações. Hoje é comum encontrar 
computadores com 8 GB de memória RAM, 1 TB de disco rígido(unidade 
secundária) no mercado. Certamente esta configuração já se tornará obsoleta em 
poucos anos, devido ao avanço contínuo da tecnologia nesta área. Como comparação 
de tamanho de memória, analisamos um livro, onde uma página armazenada em 
formato ASCII, em torno de 50 linhas e 80 caracteres por linha, ou seja, em torno de 
4000 caracteres por página. Assim, um livro de 500 páginas armazena em torno de 
2.000.000 de caracteres. 
 
Neste contexto, um disco rígido de 1TB poderia guardar em torno de quantos livros 
deste tipo? 
A) Aproximadamente 5.000 livros
B) Aproximadamente 500.000 livros
C) Aproximadamente 50.000 livros
D) Aproximadamente 30.000 livros
E) Aproximadamente 300.000 livros
Levando em consideração o tipo de sistema de numeração utilizado pelos 
computadores digitais, analise as afirmativas abaixo e identifique se a mesma é V-
Verdadeira ou F-Falsa. ,I) O Bit é a menor unidade de informação utilizada pelo 
computador. Este tem atribuições lógicas 0 ou 1.
II) O Byte é conjunto de 8 bits e pode ter até 28 = 256 configurações diferentes. 
III) No sistema de numeração binário, a notação que é utilizada possui apenas 2 
algarismos ou dígitos para representar uma quantidade desejada, o 0 e o 1.
5) 
É correto apenas o que se afirma em:
A) F-F-F
B) V-F-V
C) V-F-F
D) V-V-V
E) F-V-V
NA PRÁTICA
Vamos ver agora algumas situações práticas de armazenamento de produtos no nosso dia 
a dia e qual a sua relação com o armazenamento de dados em um computador.
Você já analisou uma geladeira?
E a diversidade de produtos guardados dentro da geladeira?
E ainda a diversidade de recipientes existentes nela para guardar toda esta variedade de 
produtos?
Acompanhe na imagem a seguir esta relação com tipos de dados.
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Variáveis e Tipos
Conteúdo interativo disponível na plataforma de ensino!
Comandos condicionais simples 
(fluxograma)
APRESENTAÇÃO
Na construção de programas, muitas vezes é necessário desviar o fluxo de execução e executar 
somente determinados blocos de comandos se uma determinada condição for atendida.Nesta 
Unidade de Aprendizagem, estudaremos a solução de problemas através da utilização de 
estruturas condicionais simples no desenvolvimento de algoritmos em forma de fluxograma. 
Veremos também sua estrutura básica e a análise de aplicações práticas. 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Analisar algoritmos com estruturas condicionais simples em fluxograma.•
Identificar problemas que necessitam de comandos condicionais simples para a sua 
solução.
•
Resolver problemas através da aplicação de comandos condicionais simples em 
fluxograma.
•
DESAFIO
Um aluno de determinada instituição de ensino superior particular deseja realizar o cálculo do 
valor da mensalidade do seu curso de Engenharia para o próximo ano. Para a resolução do 
problema, leve em consideração as seguintes informações:
- a instituição aplicará um reajuste ao final do ano, o qual deverá ser informado para o 
algoritmo;
- cada turno é composto por quatro créditos, assim, a entrada deve ser em créditos e não em 
turnos que o aluno pretende estudar. Não são aceitos créditos quebrados, somente inteiros;
- para calcular o valor da parcela, o algoritmo necessita como entrada a quantidade de parcelas 
que o aluno deseja para o semestre.
- A instituição quer estimular financeiramente o aluno a matricular-se em mais créditos, criando 
uma nova regra para o próximo ano. Alunos que efetuarem matrícula entre 14 e 24 créditos 
receberão um desconto de 18% no valor total da mensalidade.
Considerando as informações apresentadas, desenvolva um algoritmo em fluxograma que 
receba os dados de entrada necessários, calcule o reajuste e o valor da parcela e exibaao final as 
seguintes informações:
- o valor total antigo do semestre; 
- o valor total da mensalidade nova com o reajuste do semestre; 
- o valor somente do aumento do semestre (reajuste); 
- o total de créditos cursados; 
- o número de parcelas. 
- o valor de cada parcela (do valor reajustado).
Poderá ser utilizado qualquer software para construir o fluxograma (DIA, PowerPoint, editor de 
texto, visio...), ou pode ser desenvolvido manualmente. Muitos são os softwares para 
desenvolver os fluxogramas, mas a maioria são pagos. 
Software DIA para Windows.
Baixe aqui 
INFOGRÁFICO
http://download.cnet.com/Dia/3001-2075_4-10833704.html?hlndr=1
CONTEÚDO DO LIVRO
As estruturas de controle permitem testar uma condição (expressão lógica) antes de executar 
uma instrução, ou conjunto de instruções, desviando o fluxo de execução do programa. Assim, a 
execução de determinada ação está atrelada ao resultado da condição analisada, quebrando a 
linearidade de execução do programa.
Para compreender melhor a estrutura de controle de seleção simples através de fluxograma, 
acompanhe um trecho da seguinte obra: EDELWEISS, N.; LIVI, M.A.C. Algoritmos e 
programação com exemplos em Pascal e C - Vol. 23. Série Livros Didáticos Informática 
UFRGS. O livro servirá como base para esta Unidade de Aprendizagem. No capítulo 
selecionado, serão apresentados a estrutura básica de funcionamento do comando de seleção 
simples e alguns exemplos desenvolvidos em fluxograma.
Boa leitura.
23
s é r i e l i v r o s d i d á t i c o s i n f o r m á t i c a u f r g s
algoritmos
e programação 
com exemplos em Pascal e C
nina edelweiss
maria aparecida castro livi
E22a Edelweiss, Nina.
 Algoritmos e programação com exemplos em Pascal e C 
 [recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro 
 Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014.
 Editado também como livro impresso em 2014.
 ISBN 978-85-8260-190-7
 1. Informática. 2. Algoritmos – Programação. I. Livi, 
 Maria Aparecida Castro. II. Título. 
CDU 004.421
 as autoras
Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni-
versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge-
nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora 
do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três 
livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais 
e internacionais. Participou de diversos projetos de pesquisa financiados por agências de 
fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e 
desenvolvimento de software.
Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da 
Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro-
fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na 
carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programação para 
alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de 
interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial 
quanto a distância.
Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052
■ ■ Neste capítulo, 
são apresentados os comandos de 
seleção simples, 
dupla e múltipla. São analisadas, 
ainda, as possibilidades 
de aninhamento de comandos e 
o conceito de comando 
composto.
estruturas condicionais 
capítulo 4
e de seleção
90 Algoritmos e Programação com Exemplos em Pascal e C
Os algoritmos que solucionam os problemas apresentados até o momento são puramente 
sequenciais: todas as instruções são executadas na ordem em que foram definidas, uma após 
a outra, sem exceção. Este capítulo introduz uma nova classe de problemas, na qual uma ou 
mais ações podem ou não ser executadas, dependendo da avaliação prévia de condições. Para 
resolver esses problemas são apresentados três novos comandos que possibilitam a alteração 
do fluxo sequencial de execução de um programa.
No capítulo anterior, foi resolvido o problema do cálculo da média aritmética de três notas 
de um aluno em uma disciplina. Estendendo essa aplicação, o professor que utiliza esse pro-
grama quer que, além da média das notas obtidas na disciplina, seja informado se o aluno 
foi aprovado (no caso de sua média ser igual ou superior a 6). Essa informação não pode ser 
obtida somente com o conjunto de comandos do Capítulo 3, uma vez que requer a análise 
de uma condição e a execução de uma ação somente se a condição analisada for verdadeira.
Outra possibilidade é fornecer não apenas a informação de aprovação, mas também a de 
reprovação. Nesse caso, também condicionada ao conteúdo da média calculada, ocorre a 
execução de apenas uma de duas ações mutuamente exclusivas: se a média for maior ou igual 
a 6, o programa informa que o aluno foi aprovado; caso contrário, se a média for inferior a 6, 
informa que o aluno foi reprovado.
Seguindo adiante nesse raciocínio, pode-se escrever um trecho de programa em que, depen-
dendo da média obtida, também é informado o conceito correspondente à média calculada. 
Aqui, diferentes faixas de valor de uma mesma informação desencadeiam ações diferentes, 
também mutuamente exclusivas, isto é, a execução de uma ou mais instruções específicas 
está associada ao valor da informação.
Os comandos que solucionam esses problemas são apresentados neste capítulo.
4.1 
 comando de seleção simples
Um comando de seleção simples, também chamado de comando condicional, permite 
que a execução de um trecho do programa dependa do fato de uma condição ser verdadeira, 
isto é, vincula a execução de um ou mais comandos ao resultado obtido na avaliação de uma 
expressão lógica (também denominada expressão condicional). O comando de seleção sim-
ples é sempre composto por uma condição e um comando. A condição é expressa por uma 
expressão lógica, cuja avaliação produz um resultado verdadeiro ou falso. A sintaxe de um 
comando de seleção simples é:
se <expressão lógica>
então <comando>
Observe que o comando somente é executado se o resultado da expressão lógica for verda-
deiro; se o resultado for falso, nada é executado.
Por meio do comando de seleção simples pode-se, por exemplo, condicionar a exibição da infor-
mação de que um aluno foi aprovado somente para o caso de sua média ser igual ou superior a 6:
Capítulo 4 Estruturas Condicionais e de Seleção 91
se média ≥ 6
então escrever('Aprovado')
A execução do comando escrever ocorre apenas quando a condição for verdadeira, ou seja, 
quando o conteúdo da média for igual ou superior a 6. Nada é executado se a média for 
inferior a 6.
A Figura 4.1 representa o fluxograma de um comando de seleção simples. Um novo tipo de 
bloco, com formato de losango, é utilizado para representar a realização de um teste, escre-
vendo-se dentro desse bloco a expressão lógica a ser avaliada. Esse bloco tem duas saídas, 
uma para o caso da expressão ser avaliada como verdadeira, e outra para quando o resultado 
da avaliação da expressão for falso. As informações que correspondem a cada saída devem 
estar claramente identificadas. O fluxograma mostra com clareza que nada é executado no 
caso do resultado da avaliação da expressão ser falso.
<expressão lógica>
verdadeiro
falso
<comando>
figura 4.1 Fluxograma de um comando de seleção simples.
O algoritmo a seguir informa, além da média de um aluno, se ele foi aprovado:
Algoritmo 4.1 – Média2
{INFORMA A MÉDIA DAS 3 NOTAS DE UM ALUNO E SE ELE FOI APROVADO}
 Entradas: nota1, nota2, nota3 (real)
 Saídas: média (real)
 {Informação de aprovado}
início
 ler (nota1, nota2, nota3) {ENTRADA DAS 3 NOTAS}
 média ←(nota1 + nota2 + nota3)/3
 escrever (média) {INFORMA MÉDIA CALCULADA}
 se média ≥ 6
 então escrever('Aprovado') {INFORMA SE ALUNO FOI APROVADO}
fim
92 Algoritmose Programação com Exemplos em Pascal e C
A Figura 4.2 apresenta o fluxograma relativo a esse algoritmo.
ENTRADA
nota1, nota2, nota3
SAÍDA 
média
início
fim
( nota1 + nota2 + nota3 )
média
3
média 6
falso
verdadeiro
SAÍDA
‘Aprovado’ 
figura 4.2 Fluxograma de um exemplo com comando de seleção simples.
4.2 
 comando composto
Na sintaxe do comando de seleção simples nota-se que somente um comando pode ser exe-
cutado caso a condição seja verdadeira. Mas o que fazer quando se quer executar vários co-
mandos condicionados à avaliação de uma mesma expressão lógica? Por exemplo, supondo 
que, na aplicação anterior, se queira saber a média somente no caso das três notas lidas serem 
iguais ou superiores a 6, então a média deve ser calculada e informada somente se a condição 
for verdadeira.
Para que isso seja possível, é necessário que dois comandos, o de cálculo da média e o de 
saída dessa média, sejam executados quando a condição for verdadeira. Como a sintaxe do 
comando de seleção simples exige a execução de um único comando, faz-se necessária a de-
finição de um novo tipo de comando, denominado comando composto.
Na pseudolinguagem aqui utilizada, um comando composto é delimitado pelas palavras re-
servadas início e fim. Sintaticamente, trata-se de um único comando. Quaisquer comandos 
podem ser incluídos dentro de um comando composto. Algumas linguagens de programação 
permitem, inclusive, a definição de novas variáveis dentro de um comando composto, as 
quais são alocadas na memória apenas no momento em que inicia a execução desse coman-
Capítulo 4 Estruturas Condicionais e de Seleção 93
do e são liberadas no término da execução do comando. Contudo, essa possibilidade não será 
considerada neste livro.
O problema proposto no início desta seção pode ser resolvido com a utilização desse novo 
recurso, conforme mostrado no Algoritmo Média3:
Algoritmo 4.2 – Média3
{INFORMA MÉDIA DO ALUNO SOMENTE SE SUAS 3 NOTAS FOREM IGUAIS OU SUPE-
RIORES A 6}
 Entradas: nota1, nota2, nota3 (real)
 Saídas: média (real)
 {Informação de aprovado}
início
 ler (nota1, nota2, nota3) {ENTRADA DAS 3 NOTAS}
 se (nota1 ≥ 6) e (nota2 ≥ 6) e (nota3 ≥ 6)
 então início {COMANDO COMPOSTO}
 média ← (nota1 + nota2 + nota3) / 3 {CALCULA MÉDIA}
 escrever (média) {INFORMA MÉDIA}
 fim
fim
O fluxograma desse algoritmo, apresentado na Figura 4.3, mostra com clareza que o conjunto 
de comandos pode não ser executado, dependendo do resultado da condição.
ENTRADA
nota1, nota2, nota3 
início
nota1 6 e nota2 6
e nota3 6 
falso
verdadeiro
( nota1 + nota2 + nota3 )
média
3
SAÍDA
média
fim
figura 4.3 Fluxograma de comando de seleção simples com comando composto.
Encerra aqui o trecho do livro disponibilizado para 
esta Unidade de Aprendizagem. Na Biblioteca Virtual 
da Instituição, você encontra a obra na íntegra. 
DICA DO PROFESSOR
Até o momento, os valores de entrada ou os comandos do algoritmos não importavam, o fluxo 
de execução era sempre único, ou seja, as instruções a serem executadas eram sempre as 
mesmas. A partir da aplicação das estruturas de controle, será possível desenvolver algoritmos 
com um maior grau de complexidade e flexibilidade, desviando o seu fluxo de execução.
Assista ao vídeo para conhecer um pouco mais sobre essa estrutura, além de compreender e 
analisar algumas soluções práticas apresentadas de aplicação dos comandos de seleção simples 
em forma de fluxograma.
Conteúdo interativo disponível na plataforma de ensino!
 
EXERCÍCIOS
1) Considerando-se que a=2, b=6, c= 7 e d= 3, informe se as expressões lógicas 
apresentadas abaixo são V (Verdadeiras) ou F (Falsas).
I - ( a <= b+3 ) e ( c = b ) 
II – (( a+2 ) >10 ) ou (a + b) = (b+a) 
III - não (a = c) e (d = a)
A) V-V-V
B) V-F-V
C) V-V-F
D) F-V-F
E) F-F-F
2) Dada a seguinte situação: leia um número inteiro e verifique se é par. Se for par, deverá 
imprimir a seguinte mensagem: “O número xx é par”. Analise os fluxogramas 
apresentados nas alternativas abaixo:
A) Apenas a alternativa I.
B) São verdadeiras as alternativas II e IV.
C) É verdadeira a alternativa III.
D) São verdadeiras as alternativas II e III.
E) Todas as alternativas.
Observe o fluxograma:3) 
Selecione a alternativa que preenche corretamente a expressão lógica do comando de 
controle simples no fluxograma apresentado.
A) (num >0) e (num <1)
B) num > 0
C) num < 0
D) num = 0
E) (num >0 ) ou ( num <1)
Após a execução do algoritmo em fluxograma:4) 
Em C estará armazenado o valor falso se, originalmente:
A) A > B
B) A <= B
C) A >= B
D) A < B
E) A = B
Com relação às estruturas de controle e as características do comando de seleção 5) 
simples, analise as alternativas abaixo. 
I – O comando de seleção simples é também conhecido por comando condicional. 
II – As estruturas de controle executam todos os comandos um após o outro de forma 
linear. 
III – Em um comando de seleção simples, a execução de um trecho de programa está 
vinculada ao fato de uma condição ser verdadeira.
É incorreto o que se afirma:
A) Apenas na alternativa I.
B) Apenas na alternativa II.
C) Nas alternativas I e II, as informações são falsas.
D) Na alternativas I e III, as informações são falsas.
E) Todas as alternativas são falsas.
NA PRÁTICA
Tomada de decisão no nosso cotidiano:
Ao acordar e nos preparamos para sair ao trabalho, realizamos uma série de ações até ficarmos 
prontos, como:
• Tomar banho
• Pentear o cabelo
• Vestir camisa
• Vestir casaco
• Calçar os sapatos
...
Mas, se pararmos para pensar um pouco, o nosso mundo não é tão perfeito, ou “certinho”, sem 
dúvidas ou qualquer tipo de variação. Você já imaginou executar os passos acima todos os dias?
Imagine se a temperatura estiver 38 graus no dia!
Você vai suar muito durante o trabalho!
 
Dessa forma, se pensarmos no nosso dia a dia, podemos verificar que, já ao levantarmos, uma 
das nossas primeiras ações é verificar como está o tempo e decidir como iremos nos vestir para 
ir ao trabalho.
• Esse é o nosso mundo, com muitas dúvidas e muitas variações no dia a dia, as quais 
exigem tomadas de decisão • 
- Poderíamos solucionar o problema apresentado acima da seguinte forma:
• Tomar banho
• Pentear o cabelo
• Vestir camisa
• Vestir calça
• Se estiver frio, vestir casaco
• Calçar os sapatos
...
 
O comando de vestir casaco já está no nosso algoritmo. Somente agora sua execução está 
atrelada ao resultado do teste (se estiver muito frio) ser verdadeiro. Se o resultado for falso, é 
porque está quente, e o casaco não será usado. Analise a solução em fluxograma apresentada 
abaixo.
Vamos criar um fluxograma para demonstrar o comando condicional simples?
Mas, se pararmos para pensar um pouco, o nosso mundo não é tão perfeito, ou “certinho”, sem 
dúvidas ou qualquer tipo de variação. Você já imaginou executar os passos acima todos os dias?
Imagine se a temperatura estiver 38 graus no dia!
O comando de decisão simples nos faz pensar computacionalmente as nossas atividades 
diárias, que muitas vezes executamos de forma automática:
- Que produtos comprar no mercado? Tem dinheiro? Está de carro? Vários são os fatores que 
envolvem a tomada de decisão.
- O que comer? Está com fome? O que deseja comer?
- Onde comer? Quanto de dinheiro tem para gastar?
• Chegamos ao final do dia exaustos de tanto testar e executar os comandos condicionais 
no nosso cotidiano • 
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Software DIA para desenvolver diagramas e fluxogramas
Conteúdo interativo disponível na plataforma de ensino!
Tutorial ferramenta DIA
Conteúdo interativo disponível na plataforma de ensino!
Comandos condicionais compostos 
(fluxograma)
APRESENTAÇÃO
Na construção de programas utilizando comandos de seleção duplos ou compostos, as duas 
alternativas dependem da mesma condição, uma da condição verdadeira eoutra da condição 
falsa, aumentando, dessa forma, a flexibilidade e o grau de complexidade dos algoritmos. 
Nesta Unidade de Aprendizagem, estudaremos a solução de problemas através da utilização de 
comandos de seleção compostos ou duplos no desenvolvimento de algoritmos em forma de 
fluxograma, assim como sua estrutura básica de funcionamento e análise de aplicações práticas. 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Analisar algoritmos com comandos condicionais duplos ou compostos em fluxograma.•
Desenvolver algoritmos em fluxograma que precisam, para a sua solução, de comandos 
condicionais duplos ou compostos.
•
Compreender a estrutura básica de um comando de seleção duplo ou composto em 
fluxograma.
•
DESAFIO
Uma escola particular de segundo grau está desenvolvendo um projeto de benefícios para captar 
novos alunos e beneficiar famílias com rendas mais baixas. Atualmente, o valor anual para um 
aluno fica em torno de R$ 10.000,00.
Dado o valor normal da mensalidade, será atribuído um benefício com desconto desse valor 
aplicado a famílias que atendem aos seguintes critérios:
Junto às empresas do setor comercial do município, a direção da escola conseguiu uma bolsa de 
estudos que será oferecida em forma de gratuidade para alunos carentes. A bolsa será oferecida 
às famílias da seguinte forma:
O valor da bolsa será descontado do valor da mensalidade.
Para o recebimento dos valores de desconto e de bolsa, um dos familiares deverá desenvolver 
trabalho voluntário junto à comunidade escolar.
Para cada R$ 10,00 recebido, o representante da família (que poderá ser qualquer pessoa 
maior de idade) deverá trabalhar uma hora durante o ano vigente da matrícula.
Calcule o total de horas que a família deverá trabalhar junto à comunidade escolar, 
desenvolvendo atividades de limpeza, concerto, eventos, entre outras atividades que ficam a 
critério da necessidade da comunidade escolar e das habilidades da família. 
 
Vamos desenvolver um algoritmo para auxiliar a escola a calcular o valor da mensalidade para 
os alunos e a quantidade de horas voluntárias? 
 
Desenvolva um algoritmo em fluxograma que receba os dados de entrada (o valor da 
mensalidade deverá ser lido, pois sempre sofre reajustes) necessários para resolver o problema, 
calcule e imprima: 
 
- o valor de desconto da mensalidade 
- o valor da bolsa de estudos 
- o valor final da mensalidade 
- o total de horas de trabalho voluntário
INFOGRÁFICO
Acompanhe o esquema com os comandos de seleção composta em fluxograma.
CONTEÚDO DO LIVRO
As estruturas de controle de seleção composta são aplicadas em situações em que duas 
alternativas dependem da mesma expressão lógica, uma da condição verdadeira (então) e a outra 
da condição falsa (senão).
Para compreender melhor a estrutura de controle de seleção composta através de fluxograma, 
acompanhe um trecho da seguinte obra: Algoritmos e programação com exemplos em Pascal 
e C - Vol. 23. O livro serve como base para esta Unidade de Aprendizagem.
23
s é r i e l i v r o s d i d á t i c o s i n f o r m á t i c a u f r g s
algoritmos
e programação 
com exemplos em Pascal e C
nina edelweiss
maria aparecida castro livi
E22a Edelweiss, Nina.
 Algoritmos e programação com exemplos em Pascal e C 
 [recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro 
 Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014.
 Editado também como livro impresso em 2014.
 ISBN 978-85-8260-190-7
 1. Informática. 2. Algoritmos – Programação. I. Livi, 
 Maria Aparecida Castro. II. Título. 
CDU 004.421
 as autoras
Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni-
versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge-
nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora 
do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três 
livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais 
e internacionais. Participou de diversos projetos de pesquisa financiados por agências de 
fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e 
desenvolvimento de software.
Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da 
Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro-
fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na 
carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programação para 
alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de 
interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial 
quanto a distância.
Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052
94 Algoritmos e Programação com Exemplos em Pascal e C
4.3 
 comando de seleção dupla
Supondo que, além de informar a média das três notas do aluno, também se queira que o 
programa informe se ele foi aprovado (quando a média for igual ou superior a 6) ou repro-
vado (média inferior a 6). Dois comandos, se-então, são necessários para imprimir essas 
mensagens:
se média ≥ 6
então escrever('Aprovado') {INFORMA SE O ALUNO FOI APROVADO}
se média < 6
então escrever('Reprovado') {INFORMA SE O ALUNO FOI REPROVADO}
Os dois comandos implementam ações mutuamente exclusivas e dependem da avaliação de 
uma mesma condição, sendo uma das ações associada ao resultado verdadeiro e outra ao 
resultado falso. Para evitar a repetição da comparação, pode ser utilizado um comando de 
seleção dupla que, a partir do resultado da avaliação de uma condição, seleciona um de 
dois comandos para ser executado. Sua sintaxe é:
se <expressão lógica>
então <comando>
senão <comando>
Somente um comando pode ser definido em cada uma das cláusulas então e senão. Esse 
comando pode ser simples ou composto, como no caso do comando de seleção simples. O 
exemplo anterior, resolvido através de dois comandos de seleção simples, equivale ao seguinte 
comando de seleção dupla:
se média ≥ 6
então escrever('Aprovado')
senão escrever('Reprovado')
O fluxograma que representa esse comando, mostrado na Figura 4.4, mostra claramente que 
o fluxo do programa passa por apenas um dos dois comandos, o qual é selecionado pelo 
resultado da expressão lógica.
O algoritmo que calcula a média de três notas e informa se o aluno foi aprovado ou reprova-
do é o seguinte:
Algoritmo 4.3 – Média4
{INFORMA A MÉDIA DO ALUNO E SE FOI APROVADO OU REPROVADO}
 Entradas: nota1, nota2, nota3 (real)
 Saídas: média (real)
 {Informação de aprovado ou reprovado}
início
 ler (nota1, nota2, nota3) {ENTRADA DAS 3 NOTAS}
 média ← (nota1+nota2+nota3)/3
 escrever (média) {INFORMA MÉDIA CALCULADA}
Capítulo 4 Estruturas Condicionais e de Seleção 95
 se média ≥ 6
 então escrever('Aprovado') {INFORMA SE O ALUNO FOI APROVADO}
 senão escrever('Reprovado') {INFORMA SE O ALUNO FOI REPROVADO}
fim
4.4 
 comandos de seleção aninhados
Conforme visto, somente um comando pode ser utilizado nas cláusulas então e senão, mas 
não há restrição quanto ao tipo de comando. Pode, inclusive, ser usado um novo comando de 
seleção – simples ou dupla. Nesse caso, diz-se que os comandos de seleção estão aninhados 
ou encadeados.
Estendendo um pouco mais a aplicação de apoio a um professor, suponha que se queira ob-
ter o conceito do aluno com base na sua média, de acordo com a seguinte conversão:
Conceito A: Média ≥ 9,0
Conceito B: 9,0 > Média ≥ 7,5
Conceito C: 7,5 > Média ≥ 6,0
Conceito D: Média < 6,0
A solução pode ser implementada através de uma sequência de comandos condicionais (op-
ção 1):
se média ≥ 9 
então conceito ← 'A'
se (média < 9) e (média ≥ 7,5)
então conceito ← 'B'
se (média < 7,5) e (média ≥ 6,0)
então conceito ← 'C'
se (média < 6)
então conceito ← 'D'<expressão lógica> verdadeirofalso
<comando><comando>
figura 4.4 Fluxograma do comando de seleção dupla.
96 Algoritmos e Programação com Exemplos em Pascal e C
Nessa sequência de comandos, somente uma das condições será verdadeira e, apesar disso, 
todas as condições serão sempre avaliadas, desnecessariamente. Para evitar isso, o algorit-
mo a seguir calcula a média e o conceito, utilizando comandos de seleção dupla aninhados 
(opção 2). Note que, uma vez encontrada uma condição verdadeira, as que estão após ela, 
na cláusula senão, não são mais avaliadas. Cabe ressaltar que, nessa solução, não foi feita a 
análise da validade dos dados de entrada, partindo-se do pressuposto que eles foram corre-
tamente informados.
Algoritmo 4.4 – MédiaConceito1
{INFORMA A MÉDIA E O CONCEITO DE UM ALUNO}
 Entradas: nota1, nota2, nota3 (real)
 Saídas: média (real)
 conceito (caractere)
início
 ler (nota1, nota2, nota3) {ENTRADA DAS 3 NOTAS}
 média ← (nota1+nota2+nota3)/3 {CÁLCULO DA MÉDIA}
 escrever (média) {INFORMA MÉDIA CALCULADA}
 se média ≥ 9 {CÁLCULO DO CONCEITO}
 então conceito ← 'A'
 senão se média ≥ 7,5
 então conceito ← 'B'
 senão se média ≥ 6,0
 então conceito ← 'C'
 senão conceito ← 'D' {MÉDIA < 6}
 escrever (conceito) {INFORMA CONCEITO}
fim
Nesse algoritmo, o trecho de programa que calcula o conceito corresponde a um único co-
mando de seleção dupla. Se a média for igual ou superior a 9,0, o conceito “A” é atribuído 
ao aluno e a execução desse comando termina. No caso dessa condição não ser verdadeira, 
então é avaliada a segunda condição, que verifica se a média é igual ou superior a 7,5. Se essa 
condição for verdadeira, o aluno recebe o conceito “B” e o comando é concluído. Se não for 
verdadeira, então a média é novamente analisada, dessa vez verificando se é maior ou igual 
a 6,0. Finalmente, independentemente da condição ser verdadeira ou falsa, o comando é 
encerrado com a atribuição do conceito “C” (expressão verdadeira) ou “D” (expressão falsa).
A compreensão do funcionamento dos comandos de seleção aninhados é bem mais clara do 
que a da sequência de comandos condicionais (opção 1). Além disso, a segunda opção de re-
presentação realiza menos comparações do que a primeira, o que diminui o tempo de execução.
uso de indentação para delimitar comandos aninhados. A pseudolinguagem utilizada 
neste livro faz uso da indentação para mostrar visualmente o escopo de cada um dos coman-
Capítulo 4 Estruturas Condicionais e de Seleção 97
dos de seleção aninhados. Sem a indentação, é bem mais difícil visualizar o funcionamento 
dos comandos aninhados, como pode ser observado na reescrita do trecho do Algoritmo 4.4 
que examina a média:
se média ≥ 9 
então conceito ← 'A'
senão se média ≥ 7,5
então conceito ← 'B'
senão se média ≥ 6,0
então conceito ← 'C'
senão conceito ← 'D' {MÉDIA < 6}
Contudo, a indentação por si só não garante a correção do código e pode até mesmo masca-
rar erros se não corresponder à sintaxe do código utilizado. No trecho a seguir, no comando 
de seleção dupla, o comando da cláusula então é um comando condicional. A indentação 
utilizada faz crer que a cláusula senão pertence ao comando mais externo, quando, pela sin-
taxe, ela pertence ao mais interno:
se nota1 = 10 {COMANDO DE SELEÇÃO DUPLA}
então se média > 9 {COMANDO CONDICIONAL}
 então escrever ('Parabéns pela boa média!')
senão escrever ('A primeira nota não é 10! ')
A indentação que reflete a sintaxe do que está escrito é:
se nota1 = 10 {COMANDO SELEÇÃO DUPLA TRATADO COMO CONDICIONAL}
então se média > 9 {COMANDO CONDICIONAL TRATADO COMO SELEÇÃO DUPLA}
 então escrever ('Parabéns pela boa média!')
 senão escrever ('A primeira nota não é 10!')
Da forma como está o trecho, independentemente da indentação utilizada, se a Nota1 forne-
cida for 10 e a média não for superior a 9, será produzida a mensagem ‘A primeira nota não 
é 10!’, que claramente está incorreta. Nesse caso, o problema pode ser corrigido através do 
uso dos delimitadores de um comando composto, para indicar que somente a cláusula então 
faz parte do comando que testa a condição “se média > 9”:
se nota1 = 10 {COMANDO DE SELEÇÃO DUPLA}
então início {COMANDO COMPOSTO}
 se média > 9 {COMANDO CONDICIONAL}
 então escrever ('Parabéns pela boa média! )
 fim
senão escrever ('A primeira nota não é 10!')
Encerra aqui o trecho do livro disponibilizado para 
esta Unidade de Aprendizagem. Na Biblioteca Virtual 
da Instituição, você encontra a obra na íntegra.
DICA DO PROFESSOR
Com a aplicação de comandos de seleção compostos, aumentamos o grau de complexidade e 
flexibilidade dos nossos algoritmos. Com a sua utilização, é possível diferenciar a execução de 
um comando ou um conjunto de comandos, se determinada condição é verdadeira, e também 
executar outro comando ou conjunto de comandos quando o resultado da condição for falso, 
permitindo, dessa forma, a execução diferenciada de comandos em ambas as situações.
Assista ao vídeo para conhecer um pouco mais sobre a estrutura de comandos de seleção 
composta e para compreender, analisar e testar algumas soluções práticas apresentadas em 
forma de fluxograma.
Conteúdo interativo disponível na plataforma de ensino!
v
EXERCÍCIOS
1) Considerando os valores para as variáveis k=9, p=5 e x=6. Analise as expressões lógicas e 
aplique o teste de mesa dos trechos condicionais compostos dos fluxogramas nas sentenças 
a seguir:
A) Apenas a opção III escreve "Verdadeiro".
B) Apenas as opções I e II escrevem "Verdadeiro".
C) Apenas a opção I escreve "Falso".
D) Todos as opções escrevem "Falso".
E) Todos as opções escrevem "Verdadeiro".
2) Dado o problema: Ler três valores L1, L2 e L3 que representam os lados de um triângulo. 
Verifique se os lados formam um triângulo equilátero, sabendo que, para formar um 
triângulo equilátero, é preciso ter os três lados iguais. Caso possa ser formado um triângulo 
equilátero, exiba a mensagem “Forma um triângulo equilátero”; caso contrário, exiba a 
mensagem “Não forma um triângulo equilátero”. 
 
Analise e avalie os fluxogramas abaixo.
 
 
É correto o fluxograma que se apresenta em: ,
A) Fluxograma I.
B) Fluxograma II.
C) Fluxograma III.
D) Todas as alternativas estão corretas.
E) Nenhuma alternativa correta.
Dado o fluxograma que recebe três valores de entrada, L1, L2 e L3, que representam os 
lados de um triângulo. Para que seja formado um triângulo isóscele, ele necessita ter o 
comprimento de dois lados iguais. Os três lados não podem iguais para que o triângulo não 
se torne equilátero. 
 
Analise o fluxograma abaixo.
3) 
Selecione a alternativa que representa corretamente a expressão lógica para o problema 
apresentado. ,
A) ((L1=L2) ou (L1=L3) ou (L2=L3)).
B) ((L1=L2) ou (L1=L3) ou (L2=L3)) e ((L1=L2) e L2=L3).
C) ((L1=L2) e (L1=L3) e (L2=L3)).
D) ((L1=L2) ou (L1=L3) ou (L2=L3)) e nao((L1=L2) e (L2=L3 )).
E) (L1=L2) ou (L2=L3).
Dado o algoritmo em fluxograma,
 
4) 
Realize o teste de mesa para o algoritmo em fluxograma apresentado acima para os valores 
de n sendo 3 e 6. 
Selecione a alternativa que preenche corretamente com o valor de x ao término do 
algoritmo, com os valores 3 e 6, respectivamente.
A) x = 9 e x = 72.
B) x = 12 e x = 48.
C) x = 9 e x = 48.
D) x = 12 e x = 72.
E) Nenhuma alternativa está correta.
5) Com relação a estruturas condicionais estudadas, qual o comando de decisão que 
pode executar vários comandos se uma determinada expressão lógica for falsa? 
A) Comando de seleção simples.
B) Comando de seleção simples com comando composto.
C) Comando de seleção composta.
D) Comando de seleção composta com comando composto.
E) Estrutura sequencial.
NA PRÁTICA
TAXA DE ÁGUA E ESGOTO
Os comandos condicionais compostos são muito utilizados no nosso dia a dia e são 
aplicados em situações em que duas alternativas dependem da mesma expressãológica, 
uma da condição verdadeira (então) e a outra da condição falsa (senão), podendo, dessa 
forma, determinar ações diferentes dependendo do resultado da análise da expressão 
lógica. Se for verdadeiro, vai executar um conjunto de ações; se for falso, executará outro 
conjunto de ações, conforme exemplo de fluxograma apresentado abaixo.
No fluxograma acima, pode-se perceber que as ações para a condição “Está frio?” são diferentes 
para o verdadeiro e para o falso. 
 
Outro exemplo que sentimos no nosso bolso durante todos os meses é o pagamento da conta de 
água e esgoto. 
 
Levando como case de estudo um município da região sul do Brasil por meio de informações do 
Serviço Social Autônomo Municipal de Água e Esgoto (SAMAE ), o município possui 
pagamentos diferenciados de consumidores em situação de vulnerabilidade social, o que é 
denominado Tarifa Social de Água e Esgoto, que prevê descontos diferenciados de até 60% para 
os consumidores. O programa tem por objetivo auxiliar as pessoas de baixa renda e diminuir os 
registros clandestinos.
As famílias que se enquadram nessa categoria devem possuir:
Renda familiar – até três salários mínimos ou meio salário mínimo por pessoa/mês. 
Aposentados, pensionista e pessoas com deficiência e residem sozinhas – até um salário 
mínimo.
Após a comprovação de enquadramento nesses critérios, o consumidor deverá encaminhar ao 
SAMAE a solicitação de Tarifa Social, juntamente com o comprovante emitido pela Fundação 
de Ação Social (FAS). 
 
O desconto referente à taxa é de 60% para até 10 m³ de água consumidos. É necessário 
comprovar a cada dois anos, junto ao SAMAE, a regularidade da inscrição no Cadastro Único 
da FAS. Para essa condição, utilizaremos o comando de seleção composto. 
 
Como entrada para o cálculo da taxa, necessitamos do consumo em m3 da residência e se ela 
está cadastrada em situação de vulnerabilidade social. 
 
Veja uma proposta de fluxograma para o problema:
Vários municípios e estados regulamentam a tarifa social e possuem descontos diferenciados 
entre as faixas de consumo. A taxa social é um projeto do governo para reduzir as ligações 
clandestinas e intensificar o uso racional da água.
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Lógica de Programação - Desvio Condicional Composto
Vídeo sobre Lógica de Programação - Desvio Condicional Composto (SE...ENTÃO...SENÃO) 
(If Then Else) - Controle de Decisão
Conteúdo interativo disponível na plataforma de ensino!
Comandos condicionais de múltipla 
escolha 
APRESENTAÇÃO
Em muitas situações práticas, a utilização de comando de seleção encadeado torna o algoritmo 
difícil de desenvolver e até mesmo de validar. Por isso, substituir o comando de seleção 
encadeado pelo comando de seleção múltipla é uma boa opção em aplicações que permitem essa 
alteração.
Nesta Unidade de Aprendizagem, estudaremos a solução de problemas através da utilização de 
estruturas condicionais de seleção múltipla no desenvolvimento de algoritmos em forma de 
fluxograma, sua estrutura básica, análise e teste de aplicações práticas. 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Analisar algoritmos com estruturas de seleção múltipla em fluxograma.•
Identificar problemas que podem ser resolvidos com a aplicação de comando de seleção 
múltipla.
•
Construir algoritmos em fluxograma que necessitam de comandos de seleção múltipla para 
a solução.
•
DESAFIO
Desenvolva um algoritmo em fluxograma para criar uma minicalculadora com algumas 
operações básicas. O algoritmo deve solicitar ao usuário dois valores reais (operandos) e o 
símbolo da operação que deseja realizar com os dois valores lidos.
Para a solução desse problema, deve-se utilizar o comando de seleção múltipla.
O menu que deverá aparecer para o usuário será:
Se o operador “+” for digitado, deverá realizar a soma dos dois valores.
Se o operador “-” for digitado, deverá realizar a subtração dos dois valores, o primeiro menos o 
segundo.
Se o operador “*“ for digitado, deverá realizar a multiplicação dos dois valores.
Se o operador “/“ for digitado, deverá realizar a divisão do maior valor pelo menor valor. 
Deverá, primeiramente, encontrar quem é o maior e quem é o menor.
Se for digitado um operador diferente de “+”, “-“, “*” e “/”, deverá mostrar a frase “Operador 
inválido” e não permitir a realização e impressão de nenhum cálculo.
Ao final, deve ser impresso o resultado da operação, caso seja digitada uma operação válida.
O fluxograma poderá ser desenvolvido em qualquer ferramenta (editor de texto, PowerPoint, 
Visio, DIA, ou feito à mão e escaneado para entregar). Entregue o fluxograma em um arquivo.
INFOGRÁFICO
A partir da imagem você visualiza os temas que serão tratados nesta Unidade de Aprendizagem, 
os mesmos fornecem uma base para compreender os comandos que envolvem múltipla escolha.
CONTEÚDO DO LIVRO
As estruturas de seleção múltipla são aplicadas em situações nas quais pode haver uma ou mais 
condições a serem testadas e um comando ou um conjunto de comandos diferentes a serem 
executados em cada uma delas.
Para melhor compreender a estrutura de controle de seleção múltipla através de fluxograma, 
acompanhe um trecho da seguinte obra: EDELWEISS, N.; LIVI, M.A.C. Algoritmos e 
programação com exemplos em Pascal e C - Vol. 23. Série Livros Didáticos Informática 
UFRGS. Porto Alegre: Bookman, 2014.
O livro servirá como base para esta Unidade de Aprendizagem. No capítulo selecionado, serão 
apresentados a estrutura básica de funcionamento do comando de seleção múltipla e alguns 
exemplos de aplicações desenvolvidas.
23
s é r i e l i v r o s d i d á t i c o s i n f o r m á t i c a u f r g s
algoritmos
e programação 
com exemplos em Pascal e C
nina edelweiss
maria aparecida castro livi
E22a Edelweiss, Nina.
 Algoritmos e programação com exemplos em Pascal e C 
 [recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro 
 Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014.
 Editado também como livro impresso em 2014.
 ISBN 978-85-8260-190-7
 1. Informática. 2. Algoritmos – Programação. I. Livi, 
 Maria Aparecida Castro. II. Título. 
CDU 004.421
 as autoras
Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni-
versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge-
nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora 
do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três 
livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais 
e internacionais. Participou de diversos projetos de pesquisa financiados por agências de 
fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e 
desenvolvimento de software.
Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da 
Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro-
fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na 
carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programação para 
alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de 
interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial 
quanto a distância.
Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052
98 Algoritmos e Programação com Exemplos em Pascal e C
4.5 
 comando de seleção múltipla
O comando de seleção múltipla seleciona uma dentre diversas opções, com base na ava-
liação de uma expressão. Na pseudolinguagem aqui utilizada, a sintaxe deste comando é:
caso <expressão> seja
 <rótulo 1>: <comando 1>
 <rótulo 2>: <comando 2>
 ...
 <rótulo n>: <comando n>
 [ senão <comandos> ]
fim caso
onde ossímbolos “[” e “]” significam que essa linha é opcional.
O comando inicia com um cabeçalho caso <expressão> seja, seguido de uma série de 
comandos rotulados, ou seja, comandos precedidos por um valor seguido do caractere “:”. 
O resultado da avaliação da expressão utilizada no cabeçalho e os valores representados nos 
rótulos devem ser todos do mesmo tipo e corresponder a um valor ordinal como, por exem-
plo, inteiro ou caractere. Cada rótulo corresponde a somente um comando. Um comando 
composto pode ser utilizado caso se queira executar mais de uma ação para um determina-
do rótulo.
Depois de avaliada a expressão, seu resultado é comparado com cada um dos rótulos, na 
ordem em que são definidos. Somente o comando associado ao primeiro rótulo que for igual 
ao resultado da expressão é executado. Só a igualdade é verificada. Se o valor da expressão 
não for igual a qualquer dos rótulos, nada será executado pelo comando. Opcionalmente, 
poderá ser utilizada a cláusula senão, que indica o comando a ser executado caso nenhum 
dos rótulos corresponda ao valor da expressão do cabeçalho. O final do comando de seleção 
múltipla é indicado pelas palavras reservadas fim caso. Por exemplo, supondo que a variável 
a seja uma variável do tipo inteiro:
caso a seja
 1: a ← 0 {COMANDO SIMPLES PARA O CASO a = 1}
 2: início {COMANDO COMPOSTO PARA O CASO a = 2}
 ler(a)
 escrever(a)
 fim
 3: a ← a + 1 {COMANDO SIMPLES PARA O CASO a = 3}
 senão escrever(a) {CLÁUSULA OPCIONAL PARA OUTROS VALORES DE a}
fim caso
Um comando de seleção múltipla equivale a um comando de seleção dupla com outros co-
mandos de seleção dupla aninhados nele. O exemplo anterior equivale a:
Capítulo 4 Estruturas Condicionais e de Seleção 99
se a = 1
então a ← 0 {COMANDO SIMPLES PARA O CASO a = 1}
senão se a = 2
 então início {COMANDO COMPOSTO PARA O CASO a = 2}
 ler(a)
 escrever(a)
 fim
 senão se a = 3
 então a ← a + 1 {COMANDO SIMPLES PARA O CASO a = 3}
 senão escrever(a) {CLÁUSULA OPCIONAL}
Uma vantagem de usar o comando de seleção múltipla em lugar desses comandos aninhados 
está na possibilidade de utilizar somente um nível de indentação, o que torna mais clara a 
visualização das alternativas existentes.
A Figura 4.5 representa o fluxograma correspondente ao exemplo anterior. Pode-se observar 
que o fluxo do programa somente passará por um dos comandos associados aos rótulos.
a = 1 a 0 verdadeiro
a = 2
a = 3 a a + 1 
verdadeiro
verdadeiro
falso
falso
falso
SAÍDA
a
ENTRADA
a
SAÍDA
a
figura 4.5 Fluxograma de um comando de seleção múltipla.
O algoritmo a seguir, que calcula e informa a média e o conceito de um aluno, ilustra a utili-
zação de rótulos do tipo caractere em um comando de seleção múltipla:
Algoritmo 4.5 – MédiaConceito2
{INFORMA MÉDIA E CONCEITO DE UM ALUNO}
 Entradas: nota1, nota2, nota3 (real)
 Saídas: média (real)
 Informação do conceito do aluno
 Variável auxiliar: conceito (char)
100 Algoritmos e Programação com Exemplos em Pascal e C
início
 ler (nota1, nota2, nota3) {ENTRADA DAS 3 NOTAS}
 média ← (nota1 + nota2 + nota3) / 3 {CALCULA MÉDIA}
 escrever (média) {INFORMA MÉDIA}
 se média ≥ 9 {CÁLCULO DO CONCEITO}
 então conceito ← 'A'
 senão se média ≥ 7,5
 então conceito ← 'B'
 senão se média ≥ 6,0
 então conceito ← 'C'
 senão conceito ← 'D' {MÉDIA < 6}
 caso conceito seja {INFORMA CONCEITO}
 'A': escrever('Conceito A – Parabéns!')
 'B': escrever('Conceito B')
 'C': escrever('Conceito C')
 'D': escrever('Conceito D – Você foi reprovado')
 fim caso
 fim
A implementação do comando de seleção múltipla varia, dependendo da linguagem de pro-
gramação utilizada. Algumas linguagens permitem que um comando seja rotulado com uma 
lista de valores, ou mesmo com um intervalo. No exemplo a seguir, nota somente pode con-
ter um valor inteiro:
caso nota seja 
 0..5: escrever('Reprovado'){RÓTULO DO TIPO INTERVALO}
 6, 7, 8, 9, 10: escrever('Aprovado') {LISTA DE RÓTULOS}
fim caso
O primeiro comando é rotulado com o intervalo 0..5, representando os valores inteiros 
0, 1, 2, 3, 4 e 5. O comando associado ao intervalo será executado quando o valor da variável 
nota for um desses valores. O segundo comando apresenta uma lista de rótulos. Se o valor da 
variável nota for igual a um deles, o segundo comando será executado. Observar que a utili-
zação desses dois tipos de rótulos gerou um comando conciso e muito fácil de compreender.
4.6 
 exercícios de fixação
exercício 4.1 Ler um número inteiro. Se o número lido for positivo, escrever uma mensagem 
indicando se ele é par ou ímpar.
Algoritmo ParOuÍmpar
{INFORMA SE UM VALOR LIDO DO TECLADO É PAR OU ÍMPAR}
 Entrada: valor (inteiro) {VALOR A SER TESTADO}
 Saída: Mensagem de 'par' ou 'ímpar'
DICA DO PROFESSOR
Em situações nas quais há um grande número de alternativas em um comando de seleção, 
sempre que possível, deve-se optar pelo comando de seleção múltipla, pois ele também 
seleciona uma dentre várias opções, com base na avaliação de uma expressão. O comando de 
seleção múltipla é uma forma diferente de escrever o comando se-então-senão encadeado.
Assista ao vídeo para conhecer um pouco mais sobre essa estrutura e sobre as expressões lógicas 
aplicadas, além de compreender e analisar algumas soluções práticas e o teste de mesa do 
comando de seleção múltipla em forma de fluxograma.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
Observe o fluxograma:1) 
 
Analise as alternativas abaixo com relação ao algoritmo apresentado. É correto o que se 
afirma em:
A) Os valores atribuídos para a variável “valor” são iguais para todos os dias da semana.
B) O algoritmo armazena um valor diferente na variável “valor” conforme o dia da semana, 
sendo esses de 1 a 7. Caso seja digitado um dia diferente de 1, 2, 3, 4, 5, 6 e 7, ele exibe a 
frase " O dia da semana é inválido" e imprime o conteúdo da variável “Valor” como sendo 
zero (0).
C) Se for introduzido o número 4 para a variável dia, o valor que será impresso na tela será 
7.0.
D) Se não fosse permitido imprimir o valor zero quando fosse digitado um valor de dia 
inválido, somente imprimir o valor quando fosse digitado um valor de 1 a 7, a solução 
seria excluir o comando de escreva “valor” antes do fim do algoritmo.
E) O comando de saída Escreva “Dia da semana inválido” é obrigatório na estrutura de um 
comando de seleção múltipla; sem esse comando, a estrutura não funciona.
Observe o fluxograma: 2) 
Dados os valores de entrada para a=100 e cod =1, qual será o valor armazenado na variável 
D após executar o trecho de fluxograma apresentado acima?
A) 100
B) 130
C) 1
D) 120
E) Nenhuma alternativa correta.
Uma empresa de confecções deseja gratificar seus funcionários durante um mês de 
trabalho em função do aumento de produção e também em função do mês da mulher. Para 
isso, deverá ser realizado o cálculo do bônus através do gênero dos funcionários. O 
fluxograma deve receber como dado de entrada a idade e o sexo de uma pessoa, podendo 
ser “F” para feminino e “M” para masculino. Então, deverá calcular e imprimir o valor do 
bônus que receberá conforme regras apresentadas na tabela abaixo.
 
Analise o fluxograma abaixo, o qual apresenta uma proposta para a questão.
3) 
Avalie as sentenças apresentadas com relação ao fluxograma desenvolvido. É correto o que 
se afirma em:
A) No fluxograma, o valor atribuído para o Bônus para idade>21 é de 50.00 e para idade<=21 
é de 60.00. Assim, os valores atribuídos ao Bônus para sexo=“M” estão invertidos para os 
intervalos de idades apresentados na tabela.
B) Com valores de entrada para idade = 22 e sexo = “F”, o valor do bônus que será impresso 
ao final do algoritmo será 65.00.
C) Com valores de entrada para idade=25 e sexo=“M”, o valor do Bônusque será impresso 
ao final do algoritmo será zero(0).
D) O algoritmo utiliza o comando de seleção simples, e na condição Sexo=“F”, também 
possui um comando de seleção simples.
E) Com valores de entrada para idade = 19 e sexo =“F’’, o valor do Bônus que será impresso 
ao final do algoritmo será 0.
Os comandos condicionais são estruturas muito utilizadas na solução de problemas nos 
quais é necessária a seleção de uma dentre várias opções, sendo baseadas em um mesmo 
teste condicional, podendo este ser verdadeiro ou falso. Analise a tabela apresentada 
abaixo, que representa, a partir de um código, qual será a alíquota a ser aplicada de 
imposto.
4) 
 
Com base na análise do número de testes a ser realizado e a performance do algoritmo, 
selecione qual a melhor estrutura apresentada nas alternativas abaixo a ser utilizada para 
resolver e calcular o imposto baseado em um determinado código.
A) Comando de seleção simples.
B) Comando de seleção simples de comando composto.
C) Estrutura sequencial.
D) Estrutura de repetição.
E) Comando de seleção múltipla.
Considerando o conceito e a aplicação de comandos de seleção múltipla, analise as 
alternativas abaixo. 
I – Utilizado em situações que exigem a escolha de uma dentre várias alternativas.
II – O comando de seleção múltipla é uma maneira diferente de escrever um 
comando de seleção composto se-então-senão-fimse encadeado.
III – Os problemas representados com comandos de seleção compostos nunca podem 
ser representados por comandos de seleção múltipla.
5) 
Identifique as alternativas verdadeiras (V) e falsas (F) e selecione a alternativa 
correta.
A) V, F, V.
B) F, F, V.
C) V, V, F.
D) Todas as alternativas são verdadeiras.
E) Todas as alternativas são falsas.
NA PRÁTICA
% de INSS- Enquadramento do grau de risco
O enquadramento do grau de risco, assim como a definição da alíquota que as empresas pagam, 
é calculado conforme o risco de acidente de trabalho (RAT). Como vimos, um problema pode 
ter várias soluções, e este problema pode ser resolvido aplicando o comando de seleção 
composto encadeado, ou, também, pode ser solucionado através da aplicação de um comando de 
seleção múltipla. A tabela abaixo representa resumidamente a classificação do grau de risco e 
suas alíquotas.
O grau de risco no qual cada empresa está enquadrada é determinado pelo seu Código de 
Atividade Econômica identificado através do CNPJ da empresa. A tabela completa pode ser 
consultada no site da Previdência.
Site da Previdência
Conteúdo interativo disponível na plataforma de ensino!
 
Vamos desenvolver um algoritmo em fluxograma para determinar e imprimir a alíquota do 
INSS sobre o risco de acidente do trabalho (RAT) para as empresas utilizando seleção múltipla?
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Exemplo de aplicação
Conteúdo interativo disponível na plataforma de ensino!
Desenvolvimento de algoritmos 
sequenciais através de fluxogramas
APRESENTAÇÃO
Nesta Unidade de Aprendizagem, estudaremos a solução de problemas através do 
desenvolvimento de algoritmos sequenciais em forma de fluxogramas, além de abordarmos a 
análise e o estudo de várias aplicações práticas. 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Analisar algoritmos sequenciais em forma de fluxograma.•
Desenvolver algoritmos sequenciais através de fluxogramas.•
Usar os fluxogramas para representar a resolução de problemas.•
DESAFIO
Uma empresa comprou um torno e, em função do aumento das despesas fixas, está com 
dificuldades para cumprir com o pagamento da prestação do mês, que já está em atraso. 
Faça um algoritmo em fluxograma para calcular e imprimir o valor de uma prestação em atraso. 
Para o seu desenvolvimento, o usuário da empresa necessita informar o valor normal da 
prestação, a taxa de juros paga ao mês e o número de dias que a prestação está atrasada. Para o 
problema, considere o mês composto por 30 dias. O gestor quer visualizar os seguintes dados ao 
final do algoritmo: valor (em R$) do juro a ser pago e o valor total da parcela com os juros.
Exemplo:
Valor da prestação: R$ 1.000,00 
Juros ao mês: 10 
Dias de atraso: 6
Juros a pagar = R$ 20,00 
Valor total = R$ 1020,00
 
Analise o problema apresentado e responda:
a) Quais são os dados de entrada?
b) Qual a sequência correta do processamento para solucionar o problema?
c) Quais são os dados de saída?
d) Represente a sua solução em forma de fluxograma. Você pode utilizar qualquer editor para 
construir o fluxograma. Entregue em forma de imagem.
INFOGRÁFICO
O esquema mostra os principais temas que serão abordados nesta Unidade de Aprendizagem. 
CONTEÚDO DO LIVRO
A aplicação de fluxograma é muito útil para compreender e descrever a sequência de instruções 
que um processo deve executar.
Para auxiliar nos estudos, acompanhe um trecho da obra Algoritmos e programação com 
exemplos em Pascal e C - Vol. 23. O livro serve como base para esta Unidade de 
Aprendizagem.
Boa leitura!
23
s é r i e l i v r o s d i d á t i c o s i n f o r m á t i c a u f r g s
algoritmos
e programação 
com exemplos em Pascal e C
nina edelweiss
maria aparecida castro livi
E22a Edelweiss, Nina.
 Algoritmos e programação com exemplos em Pascal e C 
 [recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro 
 Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014.
 Editado também como livro impresso em 2014.
 ISBN 978-85-8260-190-7
 1. Informática. 2. Algoritmos – Programação. I. Livi, 
 Maria Aparecida Castro. II. Título. 
CDU 004.421
 as autoras
Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni-
versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge-
nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora 
do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três 
livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais 
e internacionais. Participou de diversos projetos de pesquisa financiados por agências de 
fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e 
desenvolvimento de software.
Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da 
Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro-
fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na 
carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programação para 
alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de 
interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial 
quanto a distância.
Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052
■ ■ Este primeiro capítulo discute algoritmos, 
formas de expressar algoritmos, 
etapas para a construção de um algoritmo 
e de um programa, paradigmas de programação, 
programação estruturada e fundamentos 
de representação interna de dados. 
Introduz, ainda, as linguagens 
de programação Pascal e C, utilizadas 
no livro.
fundamentos
capítulo 1
6 Algoritmos e Programação com Exemplos em Pascal e C
Computadores constituem uma poderosa ferramenta para auxiliar o trabalho do homem. O 
uso mais comum dos computadores é por meio de aplicativos já desenvolvidos e disponíveis, 
tais como editores de texto, planilhas eletrônicas, sistemas de gerenciamento de bancos de 
dados, programas de acesso à Internet e jogos. Entretanto, por vezes, as pessoas desenvol-
vem soluções específicas para determinadas aplicações, de modo a permitir que as informa-
ções dessas aplicações possam ser acessadas e manipuladas de forma mais segura, rápida e 
eficiente ou com um custo mais baixo. Este livro trata dessa segunda forma de uso dos com-putadores, ou seja, de como um usuário pode projetar e desenvolver soluções próprias para 
resolver problemas específicos de seu interesse.
Este primeiro capítulo apresenta alguns conceitos básicos utilizados no restante do livro: o 
que vem a ser um algoritmo, formas de expressar algoritmos, etapas para a construção de um 
algoritmo e de um programa, algumas considerações a respeito das linguagens de programa-
ção utilizadas, o que vem a ser a programação estruturada, que é a técnica de programação 
adotada no desenvolvimento dos programas aqui apresentados, e alguns fundamentos de 
representação interna de dados.
1.1 
 o que é um algoritmo
Vejamos como são solucionados alguns problemas do cotidiano.
exemplo 1: Telefone público. Para utilizar um telefone público como um “orelhão” ou 
similar, as operações que devemos realizar estão especificadas junto a esse telefone, sendo 
mais ou menos assim:
 1. leve o fone ao ouvido;
 2. insira seu cartão no orifício apropriado;
 3. espere o sinal para discar;
 4. assim que ouvir o sinal, disque o número desejado;
 5. ao final da ligação, retorne o fone para a posição em que se encontrava;
 6. retire seu cartão.
Esse conjunto de operações é o que se denomina algoritmo. Qualquer pessoa pode executar 
essas operações, na ordem especificada, para fazer suas ligações telefônicas, desde que pos-
sua um cartão específico e conheça o número para o qual quer telefonar.
exemplo 2: Compra de um livro. Uma compra em um estabelecimento comercial também 
obedece a uma sequência de ações predeterminadas. Por exemplo, para comprar um livro em 
uma livraria deve-se:
 1. entrar na livraria;
 2. verificar se o livro está disponível. Para isso, precisa-se conhecer (1) o título e o autor do 
livro e (2) ter disponibilidade financeira para a compra. Caso a compra venha a ser efetu-
ada, deve-se:
a. levar o livro até o balcão;
b. esperar que a compra seja registrada no caixa;
Capítulo 1 Fundamentos 7
c. pagar o valor correspondente;
d. esperar que seja feito o pacote;
e. levar o livro comprado.
 3. sair da livraria.
Os dois exemplos apresentados são resolvidos por uma sequência de ações bem definidas, 
que devem ser executadas em uma determinada ordem. Outras aplicações de nosso dia a dia 
podem ser detalhadas de forma semelhante: uma receita de um bolo, o acesso a terminais 
eletrônicos de bancos, a troca do pneu de um carro, etc.
definição de algoritmo. Um algoritmo é definido como uma sequência finita de opera-
ções que, quando executadas na ordem estabelecida, atingem um objetivo determinado em 
um tempo finito.
Um algoritmo deve atender aos seguintes requisitos:
 ■ possuir um estado inicial;
 ■ consistir de uma sequência lógica finita de ações claras e precisas;
 ■ produzir dados de saída corretos;
 ■ possuir estado final previsível (deve sempre terminar).
Além de definir algoritmos para resolver problemas do dia a dia, podemos também desenvol-
ver algoritmos que podem ser transformados, total ou parcialmente, em programas e execu-
tados em computadores. Este livro concentra-se em problemas resolvidos através de algorit-
mos que podem ser integralmente executados por computadores.
1.1.1 algoritmos executados por um computador
Para que um algoritmo possa ser totalmente executado por um computador é necessário 
identificar claramente quais as ações que essa máquina pode executar. O exemplo a seguir 
permite identificar, através de uma simulação, algumas das ações básicas que um computa-
dor executa e como isso é feito.
Vamos supor que um professor, na sala de aula, mostre aos alunos como é calculada a média 
das notas de uma prova. Para simplificar, suponhamos que a turma tenha somente cinco 
alunos. As provas estão sobre sua mesa, já corrigidas. O professor desenha uma grade no 
quadro, dando nome a cada um dos espaços nos quais vai escrever a nota de cada aluno: 
Nota1, Nota2, etc. (Figura 1.1). Acrescenta mais um espaço para escrever os resultados de 
seus cálculos, que chama de Resultado.
Para formalizar o que está fazendo, ele escreveu a sequência de ações que está executando 
em uma folha sobre sua mesa. Ele inicia pegando a primeira prova, olha sua nota (vamos 
supor que seja 10) e escreve essa nota no espaço reservado para ela, que chamou de Nota1. 
Essa prova ele coloca em uma segunda pilha sobre a mesa, pois já foi usada e não deve ser 
considerada uma segunda vez para calcular a média. Em seguida, faz o mesmo para a segun-
da prova (nota 8), escrevendo seu valor em Nota2 e colocando-a na pilha das já utilizadas. Ele 
repete essa operação para cada uma das provas restantes.
8 Algoritmos e Programação com Exemplos em Pascal e C
Obtidas todas as notas das provas, o professor passa a realizar as operações que vão calcular 
a média. Inicialmente, precisa somar todas as notas. Em cima da sua mesa, está uma cal-
culadora. Ele consulta cada um dos valores das notas que escreveu no quadro e utiliza essa 
calculadora para fazer sua soma:
Soma = Nota1 + Nota2 + Nota3 + Nota4 + Nota5
O resultado da soma ele escreve no espaço que chamou de Resultado (Figura 1.2a).
Feita a soma, ela deve ser dividida por cinco para que seja obtida a média das notas. Utili-
zando novamente a calculadora, o professor consulta o que escreveu no espaço Resultado 
(onde está a soma) e divide este valor por cinco. Como não vai mais precisar do valor da soma, 
o professor utiliza o mesmo espaço, chamado Resultado, para escrever o valor obtido para 
a média, apagando o valor anterior (Figura 1.2b).
Finalizando, o professor escreve as cinco notas obtidas nas provas e a média em uma folha, 
utilizando uma máquina de escrever, para informar à direção da escola.
7
Xxxx
Xxxx
xxxx
Qweqweq
wewerwr
tyutu6
hjhk567
123456
Máquina de
escrever
Máquina de
calcular
Sequência
de ações
Provas
corrigidas
10 8 7
Nota1 Nota2 Nota3 Nota4 Nota5 Resultado
Quadro
Professor
8
Xxxx
Xxxx
xxxx
Provas
já usadas
figura 1.1 Simulação de um algoritmo.
Capítulo 1 Fundamentos 9
A sequência de ações que foram executadas foi a seguinte:
 1. ler a nota da primeira prova e escrevê-la em Nota1;
 2. ler a nota da prova seguinte e escrevê-la em Nota2;
 3. ler a nota da prova seguinte e escrevê-la em Nota3;
 4. ler a nota da prova seguinte e escrevê-la em Nota4;
 5. ler a nota da prova seguinte e escrevê-la em Nota5;
 6. somar os valores escritos nos espaços Nota1, Nota2, Nota3, Nota4 e 
Nota5. Escrever o resultado da soma em Resultado;
 7. dividir o valor escrito em Resultado por cinco e escrever o valor deste 
cálculo em Resultado;
 8. usando a máquina de escrever, escrever os valores contidos em Nota1, 
Nota2, Nota3, Nota4, Nota5 e Resultado;
 9. terminar a execução desta tarefa.
Essa sequência de operações caracteriza um algoritmo, sendo que todas as ações realizadas 
nesse algoritmo podem ser executadas por um computador. A tradução desse algoritmo para 
uma linguagem que um computador possa interpretar gera o programa que deve ser exe-
cutado pelo computador. O professor corresponde à unidade central de processamento (UCP 
ou, mais comumente, CPU, de Central Processing Unit), responsável pela execução desse pro-
grama. Essa unidade organiza o processamento e garante que as instruções sejam executadas 
na ordem correta.
10 8 7 5 9 39
10 8 7 5 9 7,8
(a)
(b)
Quadro
Quadro
Nota1 Nota2 Nota3 Nota4 Nota5 Resultado
Nota1 Nota2 Nota3 Nota4 Nota5 Resultado
figura 1.2 Valores durante a simulação.
10 Algoritmos e Programação com Exemplos em Pascal e C
Fazendo um paralelo entre o exemplo e um computador real, os espaços desenhados na gra-
de do quadro constituem a memória principal do computador, que é composta por espaços 
acessados pelos programas através de nomes dados pelo programador.
Nesses espaços são guardadas, durante o processamento, informações lidas na entrada e re-
sultados de processamentos, como no exemplo visto. Cada um desses espaços só pode conter 
um valor a cada momento, perdendo o valor anterior se um novo valor for armazenado nele, 
como ocorreu quandose escreveu a média em Resultado, apagando o valor da soma que 
lá estava. Denomina-se variável cada um desses espaços utilizados para guardar valores, 
denotando que seu valor pode variar ao longo do tempo. As instruções de um programa que 
está sendo executado também são armazenadas na memória principal. Todas as informações 
armazenadas nas variáveis da memória principal são perdidas no momento em que termina 
a execução do programa.
Unidades de memória secundária podem ser utilizadas para guardar informações (dados) a 
fim de serem utilizadas em outra ocasião. Exemplos de dispositivos de memória secundária 
são HDs (Hard Disks), CDs, DVDs e pendrives.
A comunicação do computador com o usuário durante o processamento e ao seu final é feita 
através de unidades de entrada e saída. No exemplo anterior, a pilha de provas corresponde 
à unidade de entrada do computador, através da qual são obtidos os valores que serão utili-
zados no processamento. A unidade de entrada mais usada para interação entre o usuário e 
o programa durante a execução é o teclado do computador. Quando se trata de imagens, a 
unidade de entrada pode ser, por exemplo, uma máquina fotográfica ou um scanner.
A máquina de escrever corresponde à unidade de saída, que informa aos usuários o resul-
tado do processamento. Exemplos de unidades de saída são o vídeo do computador e uma 
impressora.
As unidades de entrada e saída de dados constituem as únicas interfaces do computador com 
seu usuário. Observe que, sem as unidades de entrada e saída, não é possível fornecer dados 
ao computador nem saber dos resultados produzidos.
A máquina de calcular corresponde à unidade aritmética e lógica do computador, responsá-
vel pelos cálculos e inferências necessários ao processamento. Sua utilização fica totalmente 
transparente ao usuário, que somente é informado dos resultados do processamento.
Resumindo, um computador processa dados. Processar compreende executar atividades 
como, por exemplo, comparações, realização de operações aritméticas, ordenações. A partir 
de dados (de entrada), processando-os, o computador produz resultados (saídas). Na figu-
ra 1.3, vê-se um esquema simplificado da organização funcional de um computador. Nela 
podem ser observados os sentidos em que as informações fluem durante a execução de um 
programa: o sistema central do computador compreende a CPU e a memória principal; na 
CPU estão as unidades de controle e de aritmética e lógica; a unidade de controle tem acesso 
à memória principal, às unidades de entrada e de saída de dados e aos dispositivos de me-
mória secundária.
Capítulo 1 Fundamentos 11
1.1.2 comandos básicos executados por um computador
Analisando o exemplo anterior, identificamos as primeiras ações que podem ser executadas 
por um computador:
 ■ obter um dado de uma unidade de entrada de dados, também chamada de leitura de 
um dado;
 ■ informar um resultado através de uma unidade de saída, também chamada de escrita de 
uma informação ou saída de um dado;
 ■ resolver expressões aritméticas e lógicas;
 ■ colocar o resultado de uma expressão em uma variável.
Essas ações são denominadas instruções ou comandos. Outros comandos serão vistos ao 
longo deste livro.
1.1.3 da necessidade do desenvolvimento de algoritmos para 
solucionar problemas computacionais
Nas atividades cotidianas já vistas, é sem dúvida necessária alguma organização por parte de 
quem vai realizar a tarefa. No uso do telefone, retirar o fone do gancho e digitar o número e, 
só depois, inserir o cartão não será uma boa estratégia, assim como, no caso da livraria, levar 
o livro sem passar pelo caixa também resultará em problemas. Nessas atividades, no entanto, 
grande parte das pessoas não necessita colocar por escrito os passos a realizar para cumprir 
a tarefa. Porém, quando se trata de problemas a solucionar por computador, a sequência de 
Unidade
de
entrada
Unidade
de
saída
Unidade
de
memória auxiliar
Memória
principal 
Unidade Central de
Processamento - UCP 
Sistema central
Unidade
aritmética e
lógica 
Unidade
de
controle
figura 1.3 Esquema simplificado de um computador.
12 Algoritmos e Programação com Exemplos em Pascal e C
ações que o computador deve realizar é por vezes bastante extensa e nem sempre conhecida 
e óbvia. Para a programação de computadores, a análise cuidadosa dos elementos envolvidos 
em um problema e a organização criteriosa da sequência de passos necessários à sua solução 
(algoritmo) devem obrigatoriamente preceder a escrita do programa que busque solucionar 
o problema. Para problemas mais complexos, o recomendável é desenvolver um algoritmo 
detalhado antes de passar à etapa de codificação, mas para problemas mais simples, o algo-
ritmo pode especificar apenas os passos principais.
1.1.4 formas de expressar um algoritmo
Em geral, no desenvolvimento de algoritmos computacionais não são utilizadas nem as lin-
guagens de programação nem a linguagem natural, mas formas mais simplificadas de lingua-
gens. As formas mais usuais de representação de algoritmos são a linguagem textual, alguma 
pseudolinguagem e o fluxograma. Para exemplificar cada uma delas vamos usar o seguinte 
exemplo: obter a soma de dois valores numéricos quaisquer.
linguagem textual. Foi a forma utilizada para introduzir o conceito de algoritmo nos exem-
plos anteriores. Analisando o problema aqui colocado, para obter a soma de dois valores é 
preciso realizar três operações na ordem a seguir:
 1. obter os dois valores
 2. realizar a soma
 3. informar o resultado
pseudolinguagem. Para padronizar a forma de expressar algoritmos são definidas pseu-
dolinguagens. Uma pseudolinguagem geralmente é bastante semelhante a uma linguagem 
de programação, sem, entretanto, entrar em detalhes como, por exemplo, formatação de in-
formações de entrada e de saída. As operações básicas que podem ser executadas pelo com-
putador são representadas através de palavras padronizadas, expressas na linguagem falada 
(no nosso caso, em Português). Algumas construções também são padronizadas, como as 
que especificam onde armazenar valores obtidos e calculados, bem como a forma de calcular 
expressões aritméticas e lógicas.
Antecipando o que será visto nos capítulos a seguir, o algoritmo do exemplo recém-discutido 
é expresso na pseudolinguagem utilizada neste livro como:
Algoritmo 1.1 – Soma2
{INFORMAR A SOMA DE 2 VALORES}
 Entradas: valor1, valor2 (real)
 Saídas: soma (real)
início
 ler (valor1, valor2) {ENTRADA DOS 2 VALORES}
 soma ← valor1 + valor2 {CALCULA A SOMA}
 escrever (soma) {INFORMA A SOMA}
fim
Capítulo 1 Fundamentos 13
fluxograma. Trata-se de uma representação gráfica que possibilita uma interpretação visual 
do algoritmo. Cada ação é representada por um bloco, sendo os blocos interligados por linhas 
dirigidas (setas) que representam o fluxo de execução. Cada forma de bloco representa uma 
ação. A Figura 1.4 mostra alguns blocos utilizados em fluxogramas neste livro, juntamente 
com as ações que eles representam. São adotadas as formas propostas na padronização feita 
pela ANSI (American National Standards Institute) em 1963 (Chapin, 1970), com algumas 
adaptações. Outras formas de blocos serão introduzidas ao longo do texto. A representação 
do algoritmo do exemplo acima está na Figura 1.5.
A representação através de fluxogramas não é adequada para algoritmos muito extensos, 
com grande número de ações a executar. Utilizaremos a representação de fluxogramas so-
mente como apoio para a compreensão das diferentes construções que podem ser utilizadas 
nos algoritmos.
1.1.5 eficácia e eficiência de algoritmos
Dois aspectos diferentes devem ser analisados quando se constrói um algoritmo para ser exe-
cutado em um computador: sua eficácia (exatidão) e sua eficiência.
eficácia (corretude) de um algoritmo. Um algoritmo deve realizar corretamente a tarefa 
para a qual foi construído. Além de fazer o que se espera, o algoritmo deve fornecer o resul-
tado correto para quaisquer que sejam os dadosfornecidos como entrada. A eficácia de um 
algoritmo deve ser exaustivamente testada antes que ele seja implementado em um compu-
tador, o que levou ao desenvolvimento de diversas técnicas de testes, incluindo testes formais. 
A forma mais simples de testar um algoritmo é através de um “teste de mesa”, no qual se si-
ENTRADA
lista de variáveis
variável expressão
Ponto em que inicia a execução do algoritmo.
Ponto em que termina a execução do algoritmo.
Entrada de dados: leitura de informações
para preencher a lista de variáveis.
Saída de dados: informa conteúdos das
variáveis da lista.
Atribuição: variável recebe o resultado da
expressão.
início
fim
SAÍDA
lista de variáveis
figura 1.4 Blocos de fluxograma.
14 Algoritmos e Programação com Exemplos em Pascal e C
mula com lápis e papel sua execução, com conjuntos diferentes de dados de entrada. No final 
de cada capítulo deste livro, são indicados alguns cuidados a adotar para verificar a exatidão 
dos algoritmos durante os testes.
eficiência de um algoritmo. A solução de um problema através de um algoritmo não é 
necessariamente única. Na maioria dos casos, algoritmos diferentes podem ser construídos 
para realizar uma mesma tarefa. Neste livro será enfatizada a utilização de técnicas que levam 
à construção de algoritmos mais eficientes. Entretanto, em alguns casos não se pode dizer a 
priori qual a melhor solução. Pode-se, sim, calcular qual a forma mais eficiente, com base em 
dois critérios: tempo de execução e espaço de memória ocupado. Aspectos de eficiência de 
algoritmos são vistos em outro livro desta série (Toscani; Veloso, 2012).
Um exemplo da diferença entre eficácia e eficiência pode ser observado na receita de ovo 
mexido mostrada a seguir:
 1. ligar o fogão em fogo baixo;
 2. separar 1 ovo, 1 colher de sobremesa de manteiga e sal a gosto;
 3. quebrar o ovo em uma tigela;
 4. colocar sal na tigela;
 5. misturar levemente o ovo e o sal, com um garfo;
 6. aquecer a manteiga na frigideira até que comece a derreter;
 7. jogar o ovo na frigideira, mexendo com uma colher até ficar firme;
 8. retirar da frigideira e servir.
ENTRADA
valor1, valor2
soma valor1 + valor2
início
fim
SAÍDA
soma
figura 1.5 Fluxograma da soma de dois números.
Capítulo 1 Fundamentos 15
Se analisarmos o algoritmo acima, podemos observar que, embora o ovo mexido seja obtido, 
garantindo a eficácia da receita, existe uma clara ineficiência em relação ao gasto de gás, uma 
vez que ligar o fogão não é pré-requisito para a quebra do ovo e mistura do ovo e do sal. Já 
em outras ações, como as especificadas nos passos 3 e 4, a sequência não é relevante.
Se modificarmos apenas a sequência das ações, conforme indicado abaixo, então teremos um 
algoritmo eficaz e mais eficiente:
 1. separar 1 ovo, 1 colher de sobremesa de manteiga e sal a gosto;
 2. quebrar o ovo em uma tigela;
 3. colocar sal nesta tigela;
 4. misturar levemente o ovo e o sal, com um garfo;
 5. ligar o fogão em fogo baixo;
 6. aquecer a manteiga na frigideira até que comece a derreter;
 7. jogar o ovo na frigideira, misturando com uma colher até ficar firme;
 8. retirar da frigideira e servir.
1.2 
 etapas de construção de um programa
A construção de um algoritmo para dar suporte computacional a uma aplicação do mundo 
real deve ser feita com todo cuidado para que ele realmente execute as tarefas que se quer 
de forma correta e em tempo razoável. Programar não é uma atividade trivial, muito antes 
pelo contrário, requer muito cuidado e atenção. A dificuldade em gerar bons programas 
levou à definição de técnicas específicas que iniciam frequentemente com a construção de 
um algoritmo.
A forma mais simples de garantir a qualidade de um programa é construí-lo seguindo uma 
série de etapas. Parte-se de uma análise inicial da realidade envolvida na aplicação, desenvol-
vendo a solução de forma gradual, e chega-se ao produto final: um programa que executa as 
funcionalidades necessárias à aplicação.
A seguir, são explicadas as etapas que devem ser cumpridas para assegurar a construção de 
um programa correto (Figura 1.6). Observe que este processo não é puramente sequencial, 
mas, em cada etapa, pode ser necessário voltar a alguma etapa anterior para desenvolver com 
mais detalhes algum aspecto.
 ■ análise detalhada do problema. Inicia-se com uma análise detalhada do problema, 
identificando os aspectos que são relevantes para a sua solução. No Algoritmo 1.1, o 
problema é:
Informar a soma de dois valores.
 ■ especificação dos requisitos do problema. Nessa etapa são identificados e especi-
ficados os resultados que deverão ser produzidos (saídas) e os dados que serão neces-
sários para a execução da tarefa requerida (entradas). No Algoritmo 1.1, os dados de 
entrada e saída são:
16 Algoritmos e Programação com Exemplos em Pascal e C
Entradas: dois valores numéricos, digitados via teclado.
Saída: a soma dos dois valores, mostrada na tela.
Esse é um problema simples, adequado à introdução dos conceitos iniciais. Contudo, na 
prática, não apenas os objetivos podem ser mais complexos como a identificação de en-
tradas e saídas pode incluir formatos e valores válidos, bem como quantidades de valores 
e a especificação de outros dispositivos de entrada e saída.
 ■ construção de um algoritmo. A etapa seguinte é o projeto de um algoritmo que 
solucione o problema, ou seja, de um conjunto finito de ações que, quando executadas 
na ordem estabelecida, levem ao resultado desejado em um tempo finito. É importante 
notar que mesmo os problemas mais simples tendem a ter mais de uma solução possí-
vel, devendo ser determinada a solução que será adotada. Nesta etapa já devem ser cria-
dos nomes de variáveis que irão armazenar os valores de entrada e os valores gerados 
durante o processamento. O Algoritmo 1.1. representa uma possível solução alcançada 
nesta etapa.
 ■ validação do algoritmo. Em seguida, deve ser feita a validação lógica do algoritmo 
desenvolvido. Essa validação muitas vezes é feita através de um teste de mesa, ou seja, 
simulando sua execução com dados virtuais. Procura-se, através desses testes, verificar se 
a solução proposta atinge o objetivo. Devem ser feitos testes tanto com valores corretos 
como incorretos. No exemplo que está sendo utilizado aqui, os dados para testes devem 
incluir valores nulos, positivos e negativos, como por exemplo:
Problema
Entradas
e saídas
Verificação do
programa
Manutenção
Construção do
algoritmo
Análise
Validação do
algoritmo
Construção do
programa
figura 1.6 Etapas da construção de um programa.
Capítulo 1 Fundamentos 17
Valor1 Valor2 Soma
 0 0 0
26 12 38
-4 –10 –14
12 –10 2
-5 2 –3
 ■ codificação do programa. É a tradução do algoritmo criado para resolver o problema 
para uma linguagem de programação. Os programas em Pascal e C gerados a partir do 
algoritmo desenvolvido para o exemplo (Algoritmo 1.1) são apresentados no Capítulo 3.
 ■ verificação do programa. Consiste nas verificações sintática (compilação) e semântica 
(teste e depuração) do programa gerado. Os mesmos valores utilizados no teste de mesa 
podem ser utilizados para testar o programa gerado.
 ■ manutenção. Uma vez considerado pronto, o programa passa a ser utilizado por usuá-
rios. A etapa de manutenção do programa inicia no momento em que ele é liberado para 
execução, e acompanha todo seu tempo de vida útil. A manutenção tem por finalidade 
corrigir eventuais erros detectados, assim como adicionar novas funcionalidades.
Cada uma dessas fases é importante, devendo ser respeitada e valorizada para se chegar a 
programas de qualidade. Neste sentido, aqui são fornecidos subsídios a fim de que todas as 
etapas sejam consideradas durante a escrita de programas como, por exemplo, a indicação 
de valores que devem ser utilizados nos testes de cada comando e conselhos para deixar os 
programas legíveis, de modo a facilitar a sua manutenção.
1.3 
 paradigmas de programação
O programa realmente executado por um computador é escritoem uma linguagem com-
preendida pela máquina, por isso denominada linguagem de máquina, na qual as instru-
ções são codificadas no sistema de numeração binário. A utilização direta de linguagem de 
máquina é bastante complicada. Para tornar a escrita de programas mais acessível a usuá-
rios comuns foram desenvolvidas linguagens de mais alto nível, denominadas linguagens de 
programação. São linguagens que permitem a especificação das instruções que deverão ser 
executadas pelo computador através de uma linguagem mais próxima da linguagem natural.
Um programa escrito numa linguagem de programação, denominado programa-fonte, deve 
ser primeiro traduzido para linguagem de máquina, para só então ser executado pelo com-
putador. A tradução do programa-fonte para o programa em linguagem de máquina corres-
pondente é feita por um outro programa, específico para a linguagem utilizada, denominado 
compilador (Figura 1.7).
Na busca de uma forma simples, clara e precisa de escrever programas, diversas linguagens 
de programação foram desenvolvidas nos últimos anos. Toda linguagem possui uma sintaxe 
bem definida, que determina as construções corretas a serem utilizadas para a elaboração 
de programas. Além disso, cada linguagem de programação utiliza um conjunto de concei-
18 Algoritmos e Programação com Exemplos em Pascal e C
tos adotados na solução de problemas, o qual corresponde à semântica desta linguagem, 
ou seja, à forma como construções sintaticamente corretas são executadas. Esses conceitos 
possibilitam diferentes abordagens de problemas e formulações de soluções, isto é, seguem 
diferentes paradigmas de programação.
A palavra “paradigma” corresponde a um modelo ou padrão de como uma realidade é entendi-
da e de como se interage com essa realidade. Aqui, um paradigma de programação corresponde 
à forma como a solução está estruturada e será executada no programa gerado, incluindo téc-
nicas e conceitos específicos, bem como os recursos disponibilizados. Os principais paradigmas 
das linguagens de programação são (Ghezzi; Jazayeri, 1987; Melo, Silva, 2003; Sebesta, 2003):
 ■ imperativo ou procedural, no qual um programa é composto por uma sequência de 
comandos a serem executados pelo computador em uma determinada ordem. Dentre as 
linguagens de programação voltadas a esse paradigma destacam-se Pascal, C, Fortran, 
Cobol, PL/1, Basic, Algol, Modula e Ada, entre outras;
 ■ funcional, em que um programa é composto pela declaração de funções que transfor-
mam a(s) entrada(s) na(s) saída(s) desejada(s). Exemplos de linguagens funcionais são 
Lisp, ML, Miranda, Haskell e OCaml;
 ■ lógico, que utiliza a avaliação de condições lógicas como base para a escrita dos progra-
mas. Um programa é composto por regras que disparam ações a partir da identificação 
de premissas. Um exemplo desse paradigma é a linguagem Prolog;
 ■ orientação a objetos, em que o mundo real é representado por meio de classes de 
objetos e das operações que podem ser realizadas sobre eles, as quais definem seu com-
portamento. Herança e polimorfismo são conceitos básicos adotados nesse paradigma. 
Smalltalk, C++, Java, PascalOO, Delphi, C#, Eiffel e Simula são exemplos de linguagens 
orientadas a objetos.
A forma de escrever um programa em cada um desses paradigmas é bastante diferente. Neste 
livro será considerado somente o paradigma imperativo ou procedural. Essa opção, para 
um primeiro curso em programação, justifica-se pelas seguintes razões:
 ■ o paradigma imperativo permite representar de uma forma intuitiva os problemas do dia 
a dia, que geralmente são executados através de sequências de ações;
Programa-fonte
Programa em
linguagem de 
programação
Programa em
linguagem de
máquina
COMPILADOR
Programa executável
figura 1.7 Tradução de programa-fonte para executável.
Capítulo 1 Fundamentos 19
 ■ historicamente, os primeiros programas foram desenvolvidos utilizando linguagens impe-
rativas, sendo esse um paradigma dominante e bem estabelecido;
 ■ existe um grande número de algoritmos e de sistemas implementados em linguagens 
que seguem esse paradigma, os quais podem ser utilizados como base para o desenvol-
vimento de novos programas.
A opção de utilizar as linguagens Pascal e C neste livro deu-se por serem essas as linguagens 
mais utilizadas como introdutórias à programação na maior parte dos cursos brasileiros de 
ciência da computação, informática e engenharia da computação.
A linguagem Pascal foi definida por Niklaus Wirth em 1970 (Wirth, 1971, 1972, 1978) 
com a finalidade de ser utilizada em aplicações de propósito geral e, principalmente, para 
ensino de programação. Uma característica importante de Pascal é que foi, desde sua criação, 
pensada para dar suporte à programação estruturada. Pascal serviu de base para o desenvol-
vimento de diversas outras linguagens de programação (Ghezzi; Jazayeri, 1987). Portanto, o 
aprendizado de novas linguagens de programação, sobretudo as que seguem o paradigma 
imperativo, se torna mais fácil para quem conhece Pascal.
A linguagem C foi desenvolvida por Dennis Ritchie nos anos 1970 (Kernighan; Ritchie, 1988) 
com o propósito de ser uma linguagem para a programação de sistemas. É hoje largamente 
utilizada em universidades e no desenvolvimento de software básico.
1.4 
 programação estruturada
A programação estruturada (Jackson, 1975) pode ser vista como um subconjunto do pa-
radigma imperativo. Baseia-se no princípio de que o fluxo do programa deve ser estruturado, 
devendo esse fluxo ficar evidente a partir da estrutura sintática do programa. A estruturação 
deve ser garantida em dois níveis: de comandos e de unidades.
No nível de comandos, a programação estruturada fundamenta-se no princípio básico de que 
um programa deve possuir um único ponto de entrada e um único ponto de saída, existindo 
de “1 a n” caminhos definidos desde o princípio até o fim do programa e sendo todas as ins-
truções executáveis, sem que apareçam repetições (loops) infinitas de alguns comandos. Nes-
se ambiente, o programa deve ser composto por blocos elementares de instruções (coman-
dos), interconectados através de apenas três mecanismos de controle de fluxo de execução: 
sequência, seleção e iteração. Cada bloco elementar, por sua vez, é delimitado por um ponto 
de início – necessariamente no topo do bloco – e por um ponto de término – necessariamente 
no fim do bloco – de execução, ambos muito bem definidos. Os três mecanismos de controle 
do fluxo de execução estão representados na Figura 1.8 através de fluxogramas, nos quais se 
observa claramente os pontos de entrada e de saída de cada bloco de instruções. Alguns dos 
blocos que constam nessa figura serão vistos nos próximos capítulos deste livro.
Uma característica fundamental da programação estruturada é que o uso de desvios incondi-
cionais no programa, implementados pelo comando GOTO (VÁ PARA), é totalmente proibido. 
20 Algoritmos e Programação com Exemplos em Pascal e C
Embora esse tipo de comando, em alguns casos, possa facilitar a construção de um progra-
ma, dificulta enormemente sua compreensão e manutenção.
No nível de unidades, a programação estruturada baseia-se na ideia proposta em 1972 pelo 
cientista de computação E. W. Dijkstra: “A arte de programar consiste na arte de organizar 
e dominar a complexidade dos sistemas”. A programação estruturada enfatiza a utilização 
de unidades separadas de programas, chamadas de módulos, que são ativadas através de 
comandos especiais. Propõe que os programas sejam divididos em um conjunto de subpro-
gramas menores, cada um com seu objetivo específico e bem definido, mais fáceis de imple-
mentar e de testar (seguindo a tática de “dividir para conquistar”).
O desenvolvimento de programas deve ser feito de forma descendente, com a decomposição 
do problema inicial em módulos ou estruturas hierárquicas, de modo a dividir ações comple-
xas em uma sequência de ações mais simples, desenvolvidas de forma mais fácil. Essa técnica 
decorre da programação estruturadae é também conhecida como programação modular.
Resumindo, a programação estruturada consiste em:
 ■ uso de um número muito limitado de estruturas de controle;
 ■ desenvolvimento de algoritmos por fases ou refinamentos sucessivos;
 ■ decomposição do algoritmo total em módulos.
Essas técnicas para a solução de problemas visam à correção da solução desenvolvida, bem 
como à simplicidade dessa solução, garantindo uma melhor compreensão do que é feito e 
facilitando a manutenção dos programas por outras pessoas além do desenvolvedor inicial.
Neste texto será utilizada a programação estruturada, incentivando o desenvolvimento de 
programas através de módulos, de forma a garantir a qualidade dos programas construídos 
(Farrer et al., 1999). Seguindo os preceitos da programação estruturada, comandos do tipo 
GOTO (VÁ PARA), que alteram o fluxo de execução incondicionalmente, não serão tratados 
neste livro.
Sequência Seleção Iteração
figura 1.8 Estruturas de controle de fluxo de execução na programação estruturada.
Capítulo 1 Fundamentos 21
1.5 
 elementos de representação interna de dados
Internamente, os computadores digitais operam usando o sistema numérico binário, que 
utiliza apenas os símbolos 0 e 1. Na memória e nos dispositivos de armazenamento, o com-
ponente conceitual básico e a menor unidade de armazenamento de informação é o bit. Bit 
vem do Inglês binary digit, ou seja, dígito binário, e um bit pode memorizar somente um 
entre dois valores: zero ou um. Qualquer valor numérico pode ser expresso por uma sucessão 
de bits usando o sistema de numeração binário.
Para representar caracteres, são utilizados códigos armazenados em conjuntos de bits. Os 
códigos mais comuns armazenam os caracteres em bytes, que são conjuntos de 8 bits. Nos 
códigos de representação de caracteres, cada caractere tem associado a si, por convenção, 
uma sequência específica de zeros e uns. Três códigos de representação de caracteres são 
bastante utilizados: ASCII (7 bits por caractere), EBCDIC (8 bits por caractere) e UNICODE (16, 
32 ou mais bits).
Tanto o ASCII (American Standard Code for Information Interchange), que é o código utiliza-
do pela maioria dos microcomputadores e em alguns periféricos de equipamentos de grande 
porte, quanto o EBCDIC (Extended Binary Coded Decimal Interchange Code) utilizam um byte 
para representar cada caractere, sendo que, na representação do conjunto de caracteres ASCII 
padrão, o bit mais significativo (bit mais à esquerda) do byte é sempre igual a 0. A represen-
tação dos caracteres A e Z nos dois códigos é:
Caracteres EBCDIC ASCII
A 1100 0001 0100 0001
Z 1110 1001 0101 1010
O UNICODE é promovido e desenvolvido pelo Unicode Consortium. Busca permitir aos com-
putadores representar e manipular textos de forma consistente nos múltiplos sistemas de 
escrita existentes. Atualmente, ele compreende mais de 100.000 caracteres. Dependendo do 
conjunto de caracteres que esteja em uso em uma aplicação, um, dois ou mais bytes podem 
ser utilizados na representação dos caracteres.
As unidades de medida utilizadas para quantificar a memória principal e indicar a capacidade 
de armazenamento de dispositivos são:
K quilo (mil) 103
M mega (milhão) 106
G giga (bilhão) 109
T tera (trilhão) 1012
O sistema métrico de unidades de medida utiliza os mesmos prefixos, mas o valor exato de 
cada um deles em informática é levemente superior. Como o sistema de numeração utilizado 
22 Algoritmos e Programação com Exemplos em Pascal e C
internamente em computadores é o binário (base 2), as capacidades são representadas como 
potências de 2:
K 1.024 210
M 1.048.576 220
etc...
A grafia dos valores expressos em múltiplos de bytes pode variar. Assim, por exemplo, 512 
quilobytes podem ser escritos como 512K, 512KB, 512kB ou 512Kb. Já os valores expressos 
em bits, via de regra, são escritos por extenso, como em 512 quilobits.
1.6 dicas
Critérios que devem ser observados ao construir um algoritmo:
 ■ procurar soluções simples para proporcionar clareza e facilidade de entendimento do
algoritmo;
 ■ construir o algoritmo através de refinamentos sucessivos;
 ■ seguir todas as etapas necessárias para a construção de um algoritmo de qualidade;
 ■ identificar o algoritmo, definindo sempre um nome para ele no cabeçalho. Este nome
deve traduzir, de forma concisa, seu objetivo. Por exemplo: Algoritmo 1.1 – Soma2
indica, através do nome, que será feita a soma de dois valores;
 ■ definir, também no cabeçalho, o objetivo do algoritmo, suas entradas e suas saídas;
 ■ nunca utilizar desvios incondicionais, como GOTO (VÁ PARA).
1.7 testes
Testes de mesa. É importante efetuar, sempre que possível, testes de mesa para verificar a efi-
cácia (corretude) de um algoritmo antes de implementá-lo em uma linguagem de programa-
ção. Nestes testes, deve-se utilizar diferentes conjuntos de dados de entrada, procurando usar 
dados que cubram a maior quantidade possível de situações que poderão ocorrer durante a 
utilização do algoritmo. Quando o algoritmo deve funcionar apenas para um intervalo defini-
do de valores, é recomendável que se simule a execução para valores válidos, valores limítrofes 
válidos e inválidos e valores inválidos acima e abaixo do limite estabelecido. Por exemplo, se um 
determinado algoritmo deve funcionar para valores inteiros, no intervalo de 1 a 10, inclusive, 
o teste de mesa deveria incluir a simulação da execução para, no mínimo, os valores 0, 1, 10,
11 e um valor negativo.
■ ■ Este capítulo trata da 
construção de algoritmos sequenciais. 
São analisados os comandos 
de entrada de dados, de saída de dados e 
de atribuição. É apresentada
a estrutura de um
algoritmo completo, com cabeçalho, 
declarações, comandos e 
comentários, bem como sua tradução
para as linguagens 
Pascal e C.
algoritmos sequenciais 
capítulo 3
58 Algoritmos e Programação com Exemplos em Pascal e C
A partir deste capítulo, passarão a ser analisados problemas reais e serão mostrados algorit-
mos possíveis para solucioná-los via computador. A complexidade dos algoritmos aumentará 
gradativamente e, em cada capítulo, haverá a introdução de novos elementos, que ampliarão 
a gama de problemas passíveis de solução computacional.
No Capítulo 1 foi introduzido o conceito de algoritmo, tendo sido identificados alguns co-
mandos básicos executados por um computador, como entrada e saída de dados e atribuição 
de um valor a uma variável. O Capítulo 2 tratou de variáveis e expressões, incluindo suas 
formas de representação.
Neste capítulo os elementos já introduzidos são utilizados na escrita dos primeiros programas 
completos gerados a partir de algoritmos puramente sequenciais. Os programas são 
desenvolvidos na pseudolinguagem e, logo após, convertidos para as linguagens de progra-
mação Pascal e C.
3.1 
 esquema básico dos algoritmos sequenciais
Os problemas puramente sequenciais geralmente incluem três atividades, que ocorrem nor-
malmente na ordem indicada a seguir: entrada de dados, processamento realizado sobre es-
ses dados (cálculos, comparações) e saída de dados ou apresentação dos resultados. Mesmo 
em problemas mais complexos, essas atividades constituem o esquema básico subjacente. 
O processamento e a saída de dados são elementos sempre presentes; já a entrada pode 
eventualmente não ocorrer, como nos casos em que o processamento se baseia em valores 
predefinidos e constantes.
Entradas são os dados fornecidos pelo usuário durante a execução do programa, sem os quais 
não é possível solucionar o problema. Existem casos em que alguns dados de entrada, pela 
sua constância e regularidade, podem ser utilizados como constantes em uma solução. No 
Exercício de Fixação 3.3 (discutido na Seção 3.6), em que um valor em reais é convertido para 
dólares, em um período de estabilidade da moeda americana a taxa de conversão para o dólar 
poderia ser colocada como um valor constante na expressão de cálculo. Mas caso fosse preciso 
alterar essa taxa, seria necessário alterar

Mais conteúdos dessa disciplina