Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

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

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

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

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

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

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

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

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

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

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

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

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

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

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

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

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

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

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

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

Prévia do material em texto

Construção de 
Algoritmos
Construção 
de Algoritmos
1ª edição
2018
Presidente do Grupo Splice
Reitor
Diretor Administrativo Financeiro
Diretora da Educação a Distância
Gestor do Instituto de Ciências Sociais Aplicadas
Gestora do Instituto da Área da Saúde
Gestora do Instituto de Ciências Exatas
Autoria
Parecerista Validador
Antônio Roberto Beldi
João Paulo Barros Beldi
Claudio Geraldo Amorim de Souza
Jucimara Roesler
Henry Julio Kupty
Marcela Unes Pereira Renno
Regiane Burger
Ronan Loschi Rodrigues Ferreira
Fabiano Prado Marques
*Todos os gráficos, tabelas e esquemas são creditados à autoria, salvo quando indicada a referência.
Informamos que é de inteira responsabilidade da autoria a emissão de conceitos. Nenhuma parte
desta publicação poderá ser reproduzida por qualquer meio ou forma sem autorização. A violação dos
direitos autorais é crime estabelecido pela Lei n.º 9.610/98 e punido pelo artigo 184 do Código Penal.
4
Sumário
Sumário
Unidade 1
1. Introdução aos Conceitos de Algoritmo e Ambientes 
de Desenvolvimento (IDE) em C ....................................8
Unidade 2
2. Tipos de Dados, Constantes, Variáveis, Operadores 
e Expressões em C ........................................................27
Unidade 3
3. Função de Entrada e Função de Saída em C ..........44
Unidade 4
4. Estruturas Condicionais ou de Decisão .................61
Unidade 5
5. Estruturas de Repetição: While e Do-While ..........78
Unidade 6
6. Estruturas de Repetição: For ...................................95
5
Sumário
Unidade 7
7. Estrutura de Dados: Vetores e Matrizes .............. 107
Unidade 8
8. Aplicação de Estruturas Condicionais, Estruturas de 
Repetição, Vetores e Matrizes em C para Solução de 
Problemas ................................................................... 120
6
Palavras do professor
Seja bem-vindo à disciplina de Construção de Algoritmos. A proposta 
principal deste estudo é contextualizar o tema de maneira que você tenha 
condições de compreender do que se trata e de que modo utilizará a 
construção de algoritmos em sua prática e escolha profissional.
Aqui, além das dicas e boas práticas de programação, você encontrará 
os conceitos e os componentes de algoritmos como base para a progra-
mação de computadores, ambiente de desenvolvimento (IDE) de progra-
mas em linguagem C, tipos de dados, constantes, variáveis, operadores e 
expressões em C. Também serão encontrados os comandos de entrada e 
saída, as estruturas condicionais, as estruturas de repetição, bem como o 
tratamento de dados por meio de estruturas homogêneas (vetor e matriz). 
Além disso, você será convidado a desenvolver um projeto de software na 
linguagem C aplicado a problemas reais. Isso não é inspirador?
Ao final desta disciplina, você conseguirá compreender os conceitos de 
algoritmos, desenvolver os seus primeiros programas de computador 
na linguagem C e, assim, aplicá-los a problemas reais. Desse modo, será 
possível conhecer mais sobre a sua futura carreira profissional e decidir 
melhor sobre os caminhos a serem percorridos. Esses caminhos podem 
ser como empreendedor individual, empresário, concursado ou contra-
tado tanto na área de programação de computadores quanto nas outras 
áreas da tecnologia da informação. Bons estudos!
7
Objetivos da disciplina
• Descrever os conceitos de algoritmo.
• Usar um ambiente de desenvolvimento (IDE) de programas em 
linguagem C.
• Identificar os tipos de dados, constantes, variáveis, operadores e 
expressões em C.
• Praticar os comandos de entrada e saída, as estruturas condicio-
nais, as estruturas de repetição, bem como o tratamento de dados 
por meio de estruturas homogêneas (vetor e matriz) na lingua-
gem C.
• Criar seus primeiros programas de computador na linguagem C e 
aplicá-los a problemas reais.
• Formular um projeto de um software na linguagem C aplicado a 
problemas reais.
8
 1Unidade 11. Introdução aos Conceitos de 
Algoritmo e Ambientes de 
Desenvolvimento (IDE) em C
Para iniciar seus estudos
Nesta unidade, será iniciada uma agradável viagem pelo aprendizado 
sobre construção de algoritmos. Durante o estudo da unidade, você con-
seguirá compreender o contexto do algoritmo e da programação, bem 
como escrever o seu primeiro algoritmo sequencial. Para isso, é impor-
tante organizar seus horários e o seu ambiente de estudos. Gostou? 
Então, vamos em frente!
Objetivos de Aprendizagem
• Definir computador, algoritmos e linguagem de programação.
• Apontar as fases de um algoritmo e de um programa de 
computador.
• Usar a lógica na solução de problemas.
• Identificar as funcionalidades de um ambiente de desenvolvi-
mento (IDE). 
• Criar um primeiro algoritmo sequencial.
9
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
Introdução da unidade
Nesta unidade, você estudará os conceitos iniciais para começar no desenvolvimento de programas de compu-
tador. Inicialmente, serão apresentados conceitos sobre computador, linguagem de programação e algoritmo, 
bem como as fases de um algoritmo. Além disso, você verá o uso da lógica na resolução de problemas pessoais 
e profissionais. Ao final, conhecerá um ambiente de desenvolvimento (IDE) em linguagem C, no qual poderá 
desenvolver os programas durante esta disciplina.
1.1 Introdução aos conceitos de algoritmo e ambientes de 
desenvolvimento (IDE) em C 
1.1.1 Conceitos de computador e de linguagem de programação
1.1.1.1 Computador
Segundo Manzano (2016, p. 14), o computador pode ser entendido como “uma coleção de componentes inter-
ligados com o objetivo de efetuar (processar) operações aritméticas e lógicas de grandes quantidades de dados”. 
Ainda de acordo com o mesmo autor, o computador possui:
• Unidades de entrada de dados (exemplo: teclado).
• Unidades de saída de dados (exemplo: monitor).
• Unidades de armazenamento (exemplo: memórias).
• Unidades de processamento de dados (exemplo: unidade central de processamento – CPU ou processador).
A Figura 1 mostra um esquema básico de um computador.
Figura 1 – Esquema básico de um computador
 
Entrada de 
dados 
Saída de 
dados 
Processamento de 
dados 
Memória principal de armazenamento 
temporário de dados 
Memória secundária de armazenamento 
permanente de dados 
Fonte: Elaborada pelo autor.
10
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
1.1.1.2 Linguagem de programação 
Hardware é a parte física do computador, e software, a parte virtual, ou seja, os programas. Para que um computa-
dor funcione, ele precisa tanto do hardware quanto do software adequados. Aqui, você estudará sobre a progra-
mação do computador, que está relacionada à construção de softwares. 
Os hardwares do computador são os dispositivos físicos que permitem a entrada, o proces-
samento, o armazenamento e a saída dos dados (CARVALHO, 2017). Para saber mais sobre 
hardwares, acesse o site Clube do Hardware.
Saiba mais
Sem os programas, o computador não pode funcionar – é como se os programas fossem a parte inteligente do 
computador. É aí que entram o algoritmo e a programação, pois, se o computador não for programado adequa-
damente, ele simplesmente não funcionará. E é aqui que você entra, pois somente os seres humanos podem 
programar o computador, inclusive quando essa programação permite que o computador possa “aprender” a se 
“autoprogramar” (MANZANO, 2016).
Para programar o computador e “ensiná-lo” a executar alguma tarefa ou a fazer o que você desejar, é neces-
sário que você aprenda a construir instruções e rotinas computacionais por meio de uma linguagem que o 
computador possa “entender” – essa linguagem é chamada de linguagem de programação. Segundo Medina 
(2006), considera-se a linguagem de programação como um conjunto de instruções e, ainda de acordo com o 
mesmo autor, existem basicamente dois tipos de linguagem de programação: as de baixo nível e as de altonível 
(MEDINA, 2006). 
As linguagens de baixo nível, também conhecidas como linguagem de máquina, são complexas de programar 
e, por isso, exigem muito conhecimento. Normalmente, pessoas especializadas e com aptidão utilizam essas 
linguagens de máquina para programar computadores, sendo um exemplo clássico a linguagem assembly (MAN-
ZANO, 2016).
As linguagens de programação de alto nível, por sua vez, são aquelas cujas instruções estarão mais próximas da 
linguagem natural, independentemente do idioma. Para Manzano (2016, p. 22), “as linguagens de alto nível pos-
sibilitam maior facilidade de comunicação, pelo fato de serem próximas à comunicação humana, pois se baseiam 
no idioma inglês”. Como exemplos de linguagem de alto nível, é possível citar: C, C++, C#, Java, JavaScript, Phy-
thon, entre outras.
Para saber mais sobre as outras linguagens de programação de alto nível, acesse o site da 
Academia do Código. 
Saiba mais
11
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
Agora que você já sabe o que é e para que serve uma linguagem de programação, deve estar se perguntando 
como o computador entende uma linguagem de alto nível já que todos os computadores só entendem a lingua-
gem de máquina baseada em 0 (zero) e 1 (um). 
Está curioso para saber? Então, vamos lá. Durante a execução de um programa, existe um programa – que alguém 
criou, é claro – denominado compilador. Os compiladores possuem o poder de “pegar” um código criado em 
uma linguagem de alto nível e transformá-lo em uma linguagem que o computador entenda, ou seja, em uma 
linguagem de máquina. 
Segundo Medina (2006, p. 16), “o compilador é um programa de computador que gera um 
arquivo em linguagem de máquina”. Para saber mais, acesse o site da Academia do Código.
Fique atento!
Muito bem, agora você deve estar se perguntado: “Qual linguagem de programação utilizaremos durante o 
nosso estudo?”. Utilizaremos a linguagem de programação C. E quais as razões para se utilizar a linguagem C? 
Bom, vamos lá. Inicialmente, a linguagem C serve para o desenvolvimento de qualquer projeto, sendo potente, 
flexível, rápida, portável, popular, modular e de alto nível; além disso possui bibliotecas poderosas, entre outras 
vantagens (DALMAS, 2016). 
A linguagem C foi desenvolvida por Dennis M. Ritchie em 1972 com o objetivo de ser utilizada no desen-
volvimento do sistema operacional Unix e com uma linguagem capaz de utilizar recursos internos do com-
putador. A linguagem C possui grande aceitação e é padronizada pelo instituto de normas técnicas (ANSI) 
(MANZANO, 2013). 
Por que a linguagem C é tão antiga e igualmente poderosa? Para melhor reflexão, consulte: 
MANZANO, José Augusto N. G.; OLIVEIRA, Jayr F. de. Estudo Dirigido de Linguagem C. 17. 
ed. São Paulo: Editora Érica, 2013. 
Os programadores mais experientes costumam dizer que um programador consegue desenvolver seus códigos 
em qualquer linguagem de programação e atribuem isso ao conhecimento, que antecede ao ato de programar, 
que se refere à lógica de programação e à construção de algoritmos. Isso seria como conhecer as leis de trânsito 
e ter aulas de direção (lógica e algoritmos) antes de sair dirigindo o carro (programar). Verdade ou não, é preciso 
ser prudente; então, antes de entrar a fundo na linguagem de programação C, conheça agora um pouco sobre 
algoritmos e lógica de programação – assim, estará mais preparado para seguir “viagem”. 
12
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
1.2 Conceito de algoritmo 
Para Medina (2006, p. 15), entende-se programa de computador como “um conjunto de instruções que será exe-
cutado pelo processador em uma determinada sequência e que levará o computador a executar alguma tarefa”. 
Segundo Guimarães (2018), programar é basicamente construir algoritmos. 
Para Manzano (2016, p. 24), algoritmos “na ciência da computação (informática) está associada a um conjunto 
de regras e operações bem definidas e ordenadas, destinadas à solução de um problema ou de uma classe de 
problemas, em um número finito de passos”. Já para Soffner (2013, p. 21), ”algoritmo é um conjunto de passos, 
passível de repetição, que resolve um problema”. 
Em outras palavras, algoritmo é uma sequência – finita – de passos logicamente ordenados e que resolve deter-
minado problema, sendo escrito em uma pseudolinguagem de programação ou pseudocódigo, com regras 
muito próximas da linguagem natural, o que justifica o seu uso. Assim, em termos computacionais, todo algo-
ritmo precisará ser reescrito em uma linguagem de programação para ser “entendido” pelo computador.
Um algoritmo pode ser apresentado na forma de texto ou na forma gráfica por meio de blocos. Nos dois casos, 
será necessário entender o problema a ser resolvido, os dados de entrada, os processamentos necessários, bem 
como as saídas (resultados) alcançadas (MANZANO, 2016).
Com base na definição que diz que um algoritmo é uma sequência finita de passos, logica-
mente ordenados, e que resolve determinado problema, como você escreveria um algoritmo 
para trocar uma lâmpada?
Exemplificando o significado de algoritmos em uma linguagem mais natural, você pode pensar em uma receita 
de bolo como sendo um algoritmo. Sim, é isso mesmo. Veja só: uma receita de bolo é, antes de tudo, uma sequên-
cia finita de passos, logicamente ordenados e que resolve determinado problema. Os passos são, por exemplo, 
pegar os ingredientes e misturá-los de maneira lógica e ordenada, pois não se pode colocar o bolo para assar 
antes de preparar a mistura. E o que resolve determinado problema é que não se pode fazer um bolo de chocolate 
com uma receita de bolo de laranja. Quem deve ter atenção na hora de criar e executar a receita? Isso mesmo, o 
cozinheiro. E quem deve ter atenção na hora de criar o algoritmo e o programa de computador? Isso mesmo, o 
programador – no caso, você!
Agora você entendeu que não se pode resolver um problema computacional criando um programa de computa-
dor com o objetivo de resolver outro problema, já sabe também que é tão importante entender e analisar o pro-
blema antes de criar o algoritmo ou o programa que o resolverá. Com isso, poderá entender que, do mesmo jeito 
que uma pessoa pode seguir uma receita e preparar um bolo, um computador pode ser condicionado a seguir os 
códigos programados e executar determinada tarefa.
13
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
O Facebook criou em São Paulo seu primeiro centro de treinamento na América Latina 
voltado à formação de programadores e empreendedores. Estima-se que o déficit de 
profissionais em áreas de tecnologia – incluindo programadores – do país é de mais de 
160 mil trabalhadores. Saiba mais no site Forbes Brasil (FORBES BRASIL, 2018).
1.3 Fases de um algoritmo
Existem diferentes paradigmas que podem ser utilizados na hora de se programar, sendo o mais utilizado o da 
programação estruturada, na qual o algoritmo é criado de forma sequencial ou linear. Outro paradigma muito 
utilizado é o da programação orientada a objetos, que não é o foco deste estudo (MANZANO, 2015). 
No paradigma da programação orientada a objetos (POO), a construção do código baseia-
-se na composição e interação entre diversas unidades chamadas de objetos. Para conhecer 
mais sobre a POO, consulte HORSTMANN, Cay. Conceitos de computação com o essencial 
de C++ [recurso eletrônico]. Trad. Carlos Arthur Lang Lisbôa e Maria Lúcia Blanck Lisbôa. 3. 
ed. Porto Alegre: Bookman, 2008.
Fique atento!
Segundo Manzano (2015), a programação estruturada possui vantagens, como: construção mais rápida do algo-
ritmo, facilidade de encontrar erros, leitura do código simplificada, e atualização e manutenção descomplicadas. 
A construção de um algoritmo passa pelas seguintes fases: 
Fase 1 – Defina bem o problema a ser resolvido.
Fase2 – Entenda os detalhes do problema.
Fase 3 – Defina os dados de entrada que serão passados para o algoritmo.
Fase 4 – Defina os dados de saída que serão devolvidos pelo algoritmo.
Fase 5 – Defina o processamento, ou seja, os cálculos e os comandos necessários e a ordem destes para executar 
a tarefa e resolver o problema.
Fase 6 – Construa o algoritmo.
14
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
Um projeto de programação passa pela criação do algoritmo, que, posteriormente, será passado para uma lin-
guagem de programação e, finalmente, se tornará um programa de computador. A construção do algoritmo 
ocorrerá por meio de diagramas ou de texto. A norma internacional ISO 5807:1985(E) regulamenta a construção 
de algoritmos por meio de diagramas e fluxogramas. Já a construção por meio de texto é baseada na Program 
Design Language (PDL), que, no Brasil, é conhecido como português estruturado ou portugol.
Em computação:
• Sintaxe é a forma como se escreve um comando.
• Semântica é o significado do comando, ou seja, o que ele fará ao ser executado. 
Fique atento!
A seguir, serão apresentados dois exemplos de algoritmo: um escrito em portugol; outro, em diagrama de bloco. 
Para isso, serão seguidas as seis fases já citadas:
Fase 1 – Defina bem o problema a ser resolvido. 
Problema: faça um algoritmo que leia dois números inteiros, calcule e imprima a soma desses números.
Fase 2 – Entenda os detalhes do problema.
Entendendo o problema: serão necessários dois números, que ficarão armazenados na memória do computador. 
A memória do computador é um dispositivo que permite armazenar dados de forma temporária ou permanente. 
O primeiro ficará armazenado na região A da memória; o segundo, na região B da memória. Já o resultado da 
soma ficará em uma terceira região, ou seja, na região X da “memória”. Para somá-los, será necessário o operador 
de adição (+). Seguindo as regras da PDL/portugol, deve ser utilizada uma seta para indicar a atribuição dos valo-
res para A, B e C; a palavra Início indicará o começo do algoritmo, e a palavra Fim, o final. A palavra Leia indicará 
que um dado foi lido e armazenado em A ou em B, e a palavra Escreva indicará que um dado foi mostrado em 
um dispositivo de saída – no caso, um monitor.
Você deve ter percebido que, por mais simples que o problema possa ser, é preciso entender seus detalhes para, 
assim, construir um algoritmo capaz de resolvê-lo. 
Fase 3 – Defina os dados de entrada que serão passados para o algoritmo.
Serão passados dois números inteiros: o primeiro para A, e o segundo para B.
Fase 4 – Defina os dados de saída que serão devolvidos pelo algoritmo.
A saída será o resultado da soma dos dois números inteiros, que ficará armazenada em C e, posteriormente, será 
mostrada para o usuário.
15
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
Fase 5 – Defina o processamento, ou seja, os cálculos e os comandos necessários e a ordem destes para executar 
a tarefa e resolver o problema.
O processamento será a realização da soma dos valores utilizando o operador de adição (+) e, posteriormente, a 
seta para armazenar o resultado em C.
Fase 6 – Construa o algoritmo.
Algoritmo textual seguindo as regras do PDL/portugol:
Início
 INTEIRO: A, B, X
 Leia (A)
 Leia (B)
 X ← A+B
 Escreva (X)
Fim
Algoritmo em bloco seguindo as regras da ISO 5807:1985(E):
//Regiões de armazenamento de dados
//Entrada de dados
//Processamento
//Saída de dados
Início
INTEIRO: A, B, X
 Leia (A)
Leia (B)
X  A+B
Escreva (X)
Fim
A forma mais conhecida e utilizada para a construção de algoritmos é a textual, seguindo 
as regras do PDL ou, no Brasil, o português estruturado ou portugol. O portugol possui um 
conjunto de regras e comandos que são definidos por meio de sintaxes e semânticas.
Início
A, B, X 
X � A+B 
Escreva (X) 
 Fim 
16
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
Para saber mais sobre a construção de algortimos por meio da utilização da ferramenta 
textual portugol ou da ferramenta gráfica ISO 5807:1985(E), consulte: MANZANO, José 
Augusto N. G.; OLIVEIRA, Jayr F. de. Algoritmos Lógica para Desenvolvimento de Pro-
gramação de Computadores. 28. ed. São Paulo: Editora Érica, 2016; GUIMARÃES, Ângelo 
de Moura; LAGES, Newton Alberto de Castilho. Algoritmos e estrutura de dados. reimp. 
Rio de Janeiro: LTC, 2008; FORBELLONE, André Luiz Villar; EBERSPACHER, Henri Frederico. 
Lógica de programação: a construção de algoritmos e estruturas de dados. 3. ed. São 
Paulo: Prentice, 2005.
Saiba mais
1.4 Uso da lógica na resolução de problemas
O raciocínio lógico requer conhecimento, versatilidade, experiência, criatividade, ponderação, calma, autodis-
ciplina, entre outros atributos. É preciso, portanto, saber como pensar. Segundo Manzano (2016, p. 27), “é a 
sequência coerente, regular e necessária de acontecimentos, de coisas ou fatos, ou até mesmo a maneira do 
raciocínio particular que cabe a um indivíduo ou a um grupo”.
Para Forbellone (2005), é importante perceber o uso da lógica para a resolução de problemas no dia a dia, uma 
vez que, para executarmos as tarefas do nosso dia a dia, enviamos “ordens” ao nosso cérebro, e isso é feito de 
forma lógica. Veja um exemplo:
• A porta do carro está fechada.
• Preciso entrar dentro do carro.
• Logo, primeiramente, terei que abrir a porta para conseguir entrar no carro.
Sim, parece simples, mas utilizamos a lógica para executarmos todas as tarefas do nosso dia a dia e, muitas vezes, 
por variados motivos, nos “atrapalhamos” em alguma coisa; aí temos que repensar a forma lógica de fazer para 
que a execução dê certo. Agora, você deve estar se perguntando: “Mas o que a lógica tem a ver com a programa-
ção de computadores?”. A melhor resposta seria “tudo”!
Segundo Manzano (2016, p.27) o raciocínio lógico usado na prática da programação de computa-
dores pode ser entendido como uma técnica de se encadear pensamentos com o intuito de aten-
der a um certo objetivo. A lógica de programação objetiva o estabelecimento de uma sequência 
organizada de passos que serão executados por um computador, na forma de um programa.
Na construção de algoritmos e de programas de computador, além de empregar o raciocínio lógico, o progra-
mador precisa saber a definição de valor lógico. Segundo Soffner (2013), um valor lógico só pode ser falso ou 
verdadeiro, e esses valores podem ser obtidos por meio de sentenças, proposições ou expressões. 
17
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
Veja um exemplo de expressão não computacional:
a) Nove é maior que vinte?
O resultado lógico para a expressão acima é falso.
Agora, um exemplo de uma expressão computacional:
a) A<=B
Observe que o resultado dependerá do valor de A e do valor de B. Por exemplo, se o valor de A for igual a cinco (5) 
e o valor de B for igual a dez 10, o resultado lógico, nesse caso, será igual a verdadeiro.
Para saber mais sobre a lógica e a programação de computadores, consulte: SILVA, Flávio 
Soares Corrêa da; FINGER, Marcelo; MELO, Ana Cristina Vieira de. Lógica para computação. 
São Paulo: Cengage Learning, 2006.
Saiba mais
Segundo Forbellone (2005), o estudo da lógica permite a construção mais coerente e correta de algoritmos (por 
exemplo, utilizando o portugol como ferramenta textual) e, consequentemente, a construção mais correta de 
programas de computador (utilizando as linguagens de programação).
1.5 Ambientes de desenvolvimento (IDE) em linguagem C
Um ambiente de desenvolvimento integrado (IDE) permite a construção de programas de computador por meio 
de ferramentas simples (como um editor de texto para a digitação do código), em uma linguagem de programa-
ção suportada pelo IDE, bem como de compiladores, quetransformarão o código digitado em uma linguagem de 
baixo nível, que poderá ser entendida e executada pelo computador a fim de realizar uma tarefa. Recursos como 
salvar e abrir também fazem parte de um IDE.
Existem diversos IDEs disponíveis. Alguns são proprietários ou pagos, e outros são livres ou gratuitos. Para este 
estudo, você pode utilizar um software livre e gratuito, como o Dev C++. Para fazer o download do Dev C++, acesse 
o site do projeto Dev C++.
Para saber mais sobre o IDE Dev C++, acesse o site do projeto Dev C++. 
Fique atento!
18
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
Após realizar o download do IDE Dev C++, você pode realizar a instalação do IDE. Para isso, siga os passos a seguir 
(FIGURAS 2 a 17).
1º passo: dê um duplo clique no arquivo de instalação e aguarde.
Figura 2 – Tela de instalação do IDE Dev C++
Fonte: Elaborada pelo autor.
2º passo: escolha o idioma de instalação e clique em OK.
Figura 3 – Tela de instalação do IDE Dev C++
Fonte: Elaborada pelo autor.
3º passo: leia o contrato de licença e clique em Aceito.
Figura 4 – Tela de instalação do IDE Dev C++
Fonte: Elaborada pelo autor.
19
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
4º passo: marque a instalação de todos os componentes e clique em Seguinte.
Figura 5 – Tela de instalação do IDE Dev C++
Fonte: Elaborada pelo autor.
5º passo: escolha o local de instalação do IDE em seu computador (dica: aceite a sugestão de pasta de destino).
Figura 6 – Tela de instalação do IDE Dev C++
Fonte: Elaborada pelo autor.
20
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
6º passo: aguarde enquanto o IDE é instalado em seu computador.
Figura 7 – Tela de instalação do IDE Dev C++
Fonte: Elaborada pelo autor.
7º passo: ao final da instalação, clique em Terminar.
Figura 8 – Tela de instalação do IDE Dev C++
Fonte: Elaborada pelo autor.
21
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
8º passo: escolha o idioma Portugese (Brazil).
Figura 9 – Tela de instalação do IDE Dev C++
Fonte: Elaborada pelo autor.
9º passo: clique em Next.
Figura 10 – Tela de instalação do IDE Dev C++
Fonte: Elaborada pelo autor.
22
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
10º passo: clique em Next novamente.
Figura 11 – Tela de instalação do IDE Dev C++
Fonte: Elaborada pelo autor.
11º passo: parabéns! O IDE Dev C++ foi instalado com sucesso. Agora, para criar o seu primeiro projeto, clique 
em: Arquivo → Novo → Projeto.
Figura 12 – Tela de criação de um novo projeto no IDE Dev C++
Fonte: Elaborada pelo autor.
23
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
12º passo: clique em Projeto C → Console Application → Ok.
Figura 13 – Tela de criação de um novo projeto no IDE Dev C++
Fonte: Elaborada pelo autor.
13º passo: crie uma pasta em seu computador e salve o projeto (dica: não modifique o nome do projeto e crie 
uma nova pasta para cada novo projeto).
Figura 14 – Tela de criação de um novo projeto no IDE Dev C++
Fonte: Elaborada pelo autor.
24
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
14º passo: salve o arquivo principal (Main) na mesma pasta do projeto, sempre.
Figura 15 – Tela de criação de um novo projeto no IDE Dev C++
Fonte: Elaborada pelo autor.
15º passo: muito bom! Agora você testará o IDE construindo o seu primeiro programa em C. Para isso, copie o 
código a seguir e cole no editor de texto; em seguida, clique em Salvar e, depois, em Compilar e executar.
Figura 16 – Tela de programação do IDE Dev C++
Compilar e executar
Fonte: Elaborada pelo autor.
Copie e cole o código a seguir no editor de textos do IDE.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(int argc, char *argv[]){
 setlocale(LC_ALL, “Portuguese”);
 printf(“OLÁ MUNDO!”);
 return 0;
}
25
Construção de Algoritmos | Unidade 1 - Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
16º passo: observe a saída que foi gerada pelo IDE.
Figura 17 – Tela de execução do IDE Dev C++
Fonte: Elaborada pelo autor.
Com o Dev C++ instalado, o seu ambiente de programação está preparado. Agora você está pronto para seguir 
em frente. Vamos lá?
O IDE Dev C++ foi feito para ser instalado no sistema operacional Windows. Caso utilize o 
Linux, então prefira o IDE Code:Blocks, disponível no site Codeblocks. Se você utilizar o OS 
X, então prefira o IDE Xcode. Consulte também MANZANO, José Augusto N. G.; MATOS, Eci-
valdo; LOURENÇO, André Evandro. Algoritmos: técnicas de programação. 2. ed. São Paulo: 
Érica, 2015. 
Fique atento!
Síntese da unidade
Nesta unidade, foram apresentados os conceitos iniciais de programas de computador, computador, linguagem 
de programação e algoritmos, bem como as fases de um algoritmo. Além disso, você aprendeu a utilizar a lógica 
na resolução de problemas pessoais e profissionais. Por fim, entendeu o que é um ambiente de desenvolvimento 
(IDE) em linguagem C.
26
Considerações finais
Parabéns, você chegou ao final da unidade 1 desta disciplina e deu o 
primeiro passo para iniciar a construção de algoritmos e de programas 
de computador. Ao estudar os conceitos de algoritmos e de ambientes 
de desenvolvimento integrado (IDEs), é possível estabelecer uma maior 
proximidade com o computador e com a linguagem de programação C. 
Agora, siga em frente!
27
 2Unidade 22. Tipos de Dados, Constantes, 
Variáveis, Operadores e 
Expressões em C
Para iniciar seus estudos
Nesta unidade, continuaremos a nossa agradável viagem pelo aprendi-
zado sobre algoritmos e programação. Durante a viagem, você conseguirá 
compreender os componentes de um programa em C, como: constan-
tes, variáveis, operadores e expressões. Para continuar, é importante você 
organizar seus horários e ambiente de estudos. Então, vamos em frente!
Objetivos de Aprendizagem
• Identificar os componentes de um programa em C.
• Definir os tipos de dados de um programa em C.
• Criar constantes e variáveis em C.
• Usar os operadores aritméticos, lógicos e de atribuição em C. 
• Praticar expressões matemáticas, lógicas e mistas em C.
28
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Introdução da unidade
Nesta unidade, você continuará os estudos sobre os conceitos iniciais para começar no desenvolvimento de pro-
gramas de computador. Primeiramente, serão apresentados conceitos sobre a programação em C referentes 
a: componentes de um programa, tipos de dados, constantes e variáveis, operadores aritméticos, lógicos e de 
atribuição. Além disso, ao final, você verá como resolver expressões matemáticas, lógicas e mistas em C e como 
essas expressões podem ser utilizadas nos programas de computador.
2.1 Componentes de um algoritmo em C
Para Celes Filho (2004), o ciclo de desenvolvimento de um programa passa por vários componentes até ficar 
pronto, e o programador utiliza ferramentas como IDE, editores, compiladores. Normalmente, os programas em 
C são compostos de um conjunto de arquivos devidamente ligados para que a tarefa possa ser executada com 
sucesso. 
Pinheiro (2012), por sua vez, afirma que os programas em C são escritos em forma de texto e, em seguida, tradu-
zidos para a linguagem de máquina, sendo essa tradução feita por um compilador. A Figura 18 mostra o processo 
de compilação de um programa em C:
Figura 18 – Processo de compilação de um programa em C
Código-fonte
(Funções)
Código-objeto Código-executável
Bibliotecas
Compilação
Fonte: Adaptado de MANZANO, 2015.
Os componentesnecessários para a construção e compilação de um programa em C são: 
Bibliotecas: são blocos de códigos prontos que permitem que funções de aplicação geral estejam prontas para 
serem executadas. São armazenadas em arquivos com a extensão .h. Em C, as bibliotecas são colocadas no topo 
do código.
29
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Para conhecer mais sobre as bibliotecas-padrão para a linguagem de programação C, con-
sulte Celes Filho (2004) e Manzano (2015).
Saiba mais
Código-fonte: refere-se a comandos, em formato de texto, escritos com as regras da linguagem de programa-
ção em C. É armazenado em arquivos com extensão .c.
Código-objeto: é o código gerado automaticamente na linguagem de máquina. É armazenado em arquivos .s.
Código executável: é um arquivo gerado automaticamente na linguagem de máquina e que o computador 
pode executar. É armazenado em arquivos com a extensão .exe.
Comentários: são textos livres inseridos no código a fim de documentar, explicar e descrever os aspectos do pro-
grama. Ajudam na manutenção e no desenvolvimento em equipe. Para fazer comentários em C, é preciso utilizar 
a sintaxe correta, ou seja, a forma correta do comando. Um comentário em C pode ser feito em uma ou várias 
linhas; para isso, são utilizados os comandos //, /* e */. Além disso, um comentário é normalmente destacado de 
outra cor pelo IDE, não faz parte do código e não será compilado – desde que feito da forma correta, não gerará 
erros.
Veja as sintaxes e os exemplos a seguir:
Sintaxe 1:
// comentário em uma linha
Exemplo 1: 
// isto é um comentário em uma linha
Sintaxe 2:
/* início de um comentário com várias linhas
...
Fim do comentário */
Exemplo 2:
/* isto é um comentário em várias linhas
...
Fim do comentário */
30
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Ponto e vírgula (;): os comandos na linguagem C precisam de um ponto e vírgula (;) no final para indicar que o 
comando terminou. Nesse sentido, o ponto e vírgula (;) funciona como um terminador de comandos. 
Veja o exemplo a seguir:
printf (“Exemplo de aplicação do ponto e vírgula no final de cada comando em C.”);
Agora, veja o mesmo exemplo sem o ponto e vírgula, ou seja, com erro:
printf (“Contraexemplo de aplicação do ponto e vírgula no final de cada comando em C.”)
Parece que não mudou nada? Sim! Mas, caso você se esqueça de colocar o ponto e vírgula (;) no final dos coman-
dos, será gerado um erro, e a compilação do programa será paralizada até que o erro seja encontrado e resolvido. 
Funções: na linguagem de programação em C, o código-fonte é criado de forma estruturada por meio de módu-
los chamados de funções. Um programa em C pode conter diversas funções. Uma função pode ser entendida 
como um bloco de código que executa uma tarefa específica, e um conjunto de funções compõe um programa 
que resolverá um problema específico. Criar funções permite uma programação mais organizada e evita a repeti-
ção de códigos, já que uma mesma função pode ser chamada várias vezes dentro de um programa (CELES FILHO, 
2004). 
Todo programa em C precisa conter uma função principal chamada de main, que será a função responsável por 
iniciar a execução do programa. Todas as funções precisam ter início e fim; na linguagem C, o início é represen-
tado por uma chave aberta ({), e o fim, por uma chave (}).
Exemplo de uma função principal (main):
void main( ){
 <comandos;> 
}
Você verá a seguir os tipos primitivos de dados para a linguagem C. Todas as funções retornam algum valor ao 
final da sua execução, e esses valores poderão ser um dos tipos desses dados. Existe, porém, um tipo de função 
que dará um retorno “sem valor” ou um retorno com o dado diferente de um dos tipos primitivos. Portanto, os 
retornos dessas funções serão do tipo VOID, que, em inglês, significa vazio.
Além de poder criar suas próprias funções – o que é mais comum –, a linguagem de progra-
mação em C permite ainda que o programador utilize um conjunto de funções preexistentes, 
como funções matemáticas, funções de conversão e funções de calendário. Para mais deta-
lhes sobre as funções preexsietntes na linguagem C, consulte Manzano (2015).
Fique atento!
31
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Para construir e executar as funções em C, saiba que:
• Argumento: é o local da memória que contém o valor que é usado durante a chamada de uma função. 
Esses valores serão de um dos tipos primitivos de dados.
• Parâmetro formal: é o local da memória que recebe o valor contido nos argumentos. Tal valor será de um 
dos tipos primitivos de dados.
É importante que esses locais da memória do computador não recebam o mesmo nome a fim de evitar erros. A 
forma geral para se definir uma função na linguagem C é:
<tipo> <nome>(declaração de parâmetros){
 comandos; 
 return; 
}
Onde: 
<tipo> // tipo de retorno da função 
<nome> // identificador (nome) da função 
(declaração de parâmetros) // parâmetros de entrada da função 
{ // início da função
comandos; // corpo da função (comandos em C) 
return // retorna o valor da função 
} // fim da função
Veja a seguir um exemplo de função principal (main) em C, que imprimirá como saída de dados a mensagem 
“Meu primeiro programa em C”:
#include <stdio.h> // Biblioteca básica de entrada e saída E/S 
void main( ) // Cabeçalho da função sem os parâmetros.
{ // Início 
 printf (“Meu primeiro programa em C!\n”); // Corpo da função 
} // Fim
Obs.: crie um novo projeto utilizando o DEV C++ que você instalou no seu computador. Em seguida copie, cole e 
teste o código anterior.
32
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Durante a construção dos programas, além dos comentários, é importante a boa prática de 
identar o código, pois esta é uma forma de organizar as linhas de código para facilitar a lei-
tura do mesmo. Alguns IDEs permitem uma configuração que faz isso automaticamente; 
outros, não. Para saber como identar os códigos, consulte na web por Regras de estilo para 
código-fonte em C/C++.
Saiba mais
Segundo Celes Filho (2004, p. 41), “a linguagem C exige que se coloque o protótipo da função antes de ela ser 
chamada. O protótipo de uma função consiste na repetição da linha do cabeçalho seguida de ponto e vírgula (;)”.
2.1.1 Tipos de dados
Um programa de computador precisa basicamente que sejam fornecidos dados de entrada, que ocorra o pro-
cessamento dos dados e que sejam gerados os dados de saída. O processamento desses dados pode gerar infor-
mações e conhecimentos úteis para o usuário. O programador precisa indicar quais tipos de dados poderão ser 
tratados por determinado programa. Os tipos primitivos de dados predefinidos e suportados pela linguagem C 
são: o conjunto dos números inteiros, o conjunto dos números reais, os caracteres ou letras e os valores lógicos 
(verdadeiro e falso). Para identificar esses tipos de dados, a linguagem C utiliza palavras reservadas em sua sintaxe 
(MIZRAHI, 2009):
Palavras reservadas podem ser entendidas como os comandos e as instruções próprias de 
uma linguagem de programação. Só podem ser utilizadas para as regras e finalidades para as 
quais foram desenvolvidas. O uso incorreto de uma palavra reservada gerará erro.
Fique atento!
• Int (tipo de dado inteiro). Exemplos: 9, 21, 33.
• Float (tipo de dado real). Exemplos: 3.2, 7.5, 9.9.
• Double (tipo de dado real). A diferença para o float é que um double possui 64 bits, e não 32 bits.
• Char (tipo de dado, caractere ou letra). Exemplos: “a”, “b”, “c”.
• Void: nenhum valor.
Na linguagem C, não existe um tipo primitivo de dados que suporte uma cadeia de caracteres, como, por exem-
plo, uma palavra. Para esses casos, existem funções predefinidas que possibilitam ao programador trataruma 
cadeia de caracteres. No caso, a linguagem C identificará uma cadeia de caracteres por meio de uma biblioteca 
33
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
que permita trabalhar com um dado do tipo string. Para isso, o programador precisará utilizar a biblioteca pre-
definida <string.h>. Uma das alternativas, nesse caso, será a utilização da função de conversão predefinida 
gets( ) para ler uma string pelo teclado. A função strlen( ) pode ser utilizada para saber o tamanho da String, ou 
seja, a quantidade de caracteres, incluindo os espaços.
Na linguagem de programação em C, os tipos primitivos de dados – int, float, double, char 
e void – podem ter variações de acordo com o tamanho do dado que será manipulado, pois 
todo dado ocupará um espaço na memória do computador (MIZRAHI, 2009).
Fique atento!
2.1.1.1 Inteiros (int)
Os dados numéricos fazem parte do conjunto dos números inteiros; portanto, não entram letras, nem números 
com fração. Um valor do tipo int ocupará 4 bytes (o equivalente a 32 bits) de memória de um computador com o 
sistema operacional Windows. Na Tabela 1, é possível ver as variações do tipo inteiro. A palavra reservada unsig-
ned indica um valor sem o sinal negativo.
Durante a execução de um programa de computador, um número inteiro poderá representar, por exemplo, a 
idade de uma pessoa.
Tabela 1 – Variações do tipo inteiro (int) em C
Tipo de dado inteiro Faixa de abrangência Tamanho
unsigned short int de 0 a 65.535 16 bits
short / short int / signed int / signed short int de -32.768 a 32.767 16 bits
unsigned int / unsigned long int de 0 a 4.292.967.295 32 bits
int / long / long int / signed long int de -2.147.483.648 a 2.147.483.647 32 bits
Fonte: MANZANO, 2013.
Para saber quais são as unidades de medida computacionais, como bit (b), byte (B), kilobyte 
(KB), megabyte (MB), gigabyte (GB), terabyte (TB), entre outros, consulte na web por: “Você usa 
corretamente as unidades de grandeza da informática?”.
Saiba mais
34
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
2.1.1.2 Real (float)
Os dados numéricos fazem parte do conjunto dos números reais ou fracionários; portanto, só não entram letras. 
Um valor do tipo float ocupará 4 bytes (o equivalente a 32 bits) de memória de um computador com o sistema 
operacional Windows. Na Tabela 2, é possível ver as variações do tipo real. A palavra reservada long indica um 
valor real que ocupará acima de 4 bytes na memória do computador. 
Durante a execução de um programa de computador, um número real poderá representar, por exemplo, a altura 
de uma pessoa.
Tabela 2 – Variações do tipo real (float) em C
Tipo de dado real Faixa de abrangência Tamanho
float de -3.438 a 3.438 32 bits
double de -1.7308 a 1.7308 64 bits
long double de -3.44932 a 1.14932 96 bits
Fonte: MANZANO, 2013.
2.1.1.3 Caractere (char)
Letras, símbolos e números são dados do tipo caractere desde que estejam entre aspas simples (‘ ’). Um valor do 
tipo char ocupará 1 byte (o equivalente a 8 bits) de memória de um computador com o sistema operacional Win-
dows. Na Tabela 3, você poderá ver as variações do tipo char. As aspas duplas (“ ”) serão utilizadas em uma cadeia 
de caracteres, ou seja, nas strings. 
Tabela 3 – Variações do tipo caractere (char) em C
Tipo de dado inteiro Faixa de abrangência Tamanho
char / signed char de -128 até 127 8 bits
unsigned char de 0 até 255 8 bits
char Pode ser considerado signed char ou unsigned 
char, dependendo do sistema
8 bits
Fonte: MANZANO, 2013.
Durante a execução de um programa de computador, um caractere poderá representar, por exemplo, o sexo de 
uma pessoa, sendo: ‘F’ (feminino) ou ‘M’ (masculino).
Na linguagem C, é possível converter um tipo de dado em outro. Essa operação é chamada 
de casting (conversão). A sintaxe (tipo) valor permite realizar a conversão. Para saber mais 
sobre a conversão de tipos de dados em C, consulte Manzano (2015).
Saiba mais
35
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Agora que você conhece os tipos primitivos de dados aceitos pela linguagem de programação em C, chegou a 
hora de saber como esses dados podem ser armazenados na memória do computador e manipulados pelo pro-
cessador. As próximas seções abordarão esse assunto. Siga em frente! 
2.1.2 Definição e declaração de variáveis e constantes
Quando se trata de computação, mais especificamente de programação de computadores, os termos variável 
e constante devem ser entendidos como uma região da memória do computador que receberá um dado de 
determinado tipo. Tanto uma variável quanto uma constante só conseguem armazenar um valor de um tipo por 
vez. A diferença é que, em uma constante, esse valor não poderá ser alterado durante a execução do programa; 
logo, será constante enquanto o programa existir – daí vem a definição de constante. Por exemplo, o valor de Pi 
(3,1416) é, por definição, um valor constante e, portanto, não poderia sofrer variações (MONZANO, 2015).
Já em uma variável, é possível programar para que o valor armazenado sofra variações durante a execução do 
programa; logo, vem o nome variável. 
Por exemplo, uma região da memória que armazenará o valor do resultado da soma entre dois números é uma 
variável, pois o valor da soma poderá variar dependendo dos valores do primeiro e do segundo número (CELES 
FILHO, 2004). 
Resumindo: constante é uma região da memória do computador que pode receber um valor de determinado tipo 
e este valor não poderá mudar durante a execução do programa. Variável é uma região da memória do compu-
tador que pode receber um valor de determinado tipo e este valor poderá mudar/variar durante a execução do 
programa.
A região da memória do computador, seja ela uma constante ou uma variável, precisará ser identificada, ou seja, 
você, programador, terá que dar um nome a essa região. Para nomear constantes e variáveis, é necessário que o 
nome:
• Comece, obrigatoriamente, com uma letra ou com o caractere underline (_).
• Seja exclusivo e possua, no máximo, 32 caracteres. 
• Não tenha espaço em branco, nem caracteres especiais, como acentos, símbolos, cedilha, etc.
• Não use palavras reservadas da linguagem C.
Uma dica importante é escolher nomes curtos e significativos tanto para constantes como 
para as variáveis. Normalmente, as variáveis são mais utilizadas do que as constantes.
Fique atento!
Uma constante que fosse armazenar o valor 3,1416 poderia receber o nome de Pi. Já uma variável que fosse 
receber resultados da soma poderia receber o nome de SOMA, e uma variável que fosse receber nomes de alunos 
poderia receber o nome de NOME_DO_ALUNO.
36
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
A linguagem C é case sensitive. Isso significa que ela diferencia letras maiúsculas de letras 
minúsculas. Assim, a variável nomeada soma e a outra com o nome SOMA seriam entendi-
das, pela linguagem C, como duas variáveis distintas, ou seja, regiões diferentes da memória 
do computador.
Para declarar ou criar uma constante em C, utiliza-se uma das seguintes sintaxes:
#define <rótulo> <valor> 
ou
const <tipo> <rótulo> = <valor>;
Exemplos de declarações de constantes utilizando a palavra reservada #define:
#define X 10 // definição da constante X que armazena um valor do tipo inteiro.
#define X 3.5 // definição da constante X que armazena um valor do tipo real.
#define X “joão” // definição da constante X que armazena cadeia de caracteres.
#define X ‘c’ // definição da constante X que armazena um caractere.
Exemplo de declarações de variáveis utilizando a palavra reservada const:
const int X = 1; // definição da constante X que armazena um valor do tipo inteiro.
const float PI = 3.1416; // definição da constante PI que armazena um float.
const char LETRA = ‘a’; // definição da constanteLETRA que armazena um valor do tipo caractere.
A declaração de constantes utilizando o #define não ocupa espaço na memória do compu-
tador. Para saber mais, consulte Manzano (2015).
Fique atento!
37
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Para declarar ou criar uma variável em C, utiliza-se a seguinte sintaxe:
<tipo> <nome_da_variável>;
A declaração de uma variável pode acontecer de duas formas: direta e indireta. Na forma direta, o programador 
atribuirá um valor inicial para a variável enquanto escreve o código. Já na forma indireta, quem atribuirá um 
valor para a variável será o usuário, no momento da entrada de dados, enquanto estiver utilizando o programa 
(PINHEIRO, 2012).
Exemplos de declaração direta de variáveis:
• int X = 10.
• float Y = 7.9.
• double Z = 999999.999999.
• char LETRA = ‘A’.
Uma variável do tipo double poderá armazenar um número real de até 64 bits, enquanto uma variável do tipo 
float poderá armazenar um número de até 32 bits (MIZRAHI, 2009).
Exemplos de declaração indireta de variáveis:
• int X.
• float Y.
• char LETRA.
2.1.3 Operador de atribuição
Você já deve ter percebido o uso do símbolo “=” para atribuir um valor a uma constante ou variável. Por exemplo: 
int X = 2 significa que a variável X recebeu o valor 2 ou que o valor 2 foi atribuído para a variável X.
Na linguagem C, o operador de igualdade é “==”. Por exemplo: A==B é o mesmo que conferir 
se o conteúdo da variável A é igual ao conteúdo da variável B.
Esse e outros operadores serão estudados nas próximas seções.
Fique atento!
2.1.4 Operadores matemáticos
Operadores matemáticos ou aritméticos permitem realizar operações utilizando constantes e/ou variáveis. 
Alguns operadores são aplicados apenas a tipos específicos; por exemplo, os operadores ++, -- e % são aplicados 
somente quando o tipo é int (PINHEIRO, 2012). 
38
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Esses operadores são classificados em dois tipos: unário e binário. Operadores unários são aplicados em apenas 
uma variável. Já os operadores binários são aplicados em um conjunto de variáveis – por exemplo, em adição, 
divisão, multiplicação e exponenciação. O Quadro 1 apresenta os operadores unários e binários matemáticos da 
linguagem C (SCHILDT, 1996).
Quadro 1 – Operadores matemáticos e/ou aritméticos em C
Operação Operador em C Tipo Sintaxe
Adição unária + Unário +a
Adição + Binário a + b
Incremento pré-fixado de 1 em 1 ++ Unário ++a
Incremento pós-fixado de 1 em 1 ++ Unário a++
Atribuição por adição cumulativa += Binário a += b
Subtração unária - Unário -a
Subtração - Binário a - b
Decremento pré-fixado de 1 em 1 -- Unário --a
Decremento pós-fixado ' Unário a'
Atribuição por subtração cumulativa -= Binário a -= b
Multiplicação * Binário a * b
Atribuição por multiplicação *= Binário a *= b
Divisão / Binário a / b
Atribuição por divisão cumulativa /= Binário a /= b
Módulo (resto) % Binário a % b
Atribuição por módulo (resto) cumulativo %= Binário a %= b
Fonte: Adaptado de MANZANO, 2015.
Para saber mais sobre os operadores aritméticos em C, consulte Pinheiro (2012).
Saiba mais
2.1.5 Operadores relacionais
Operadores relacionais são aplicados com a finalidade de estabelecer uma relação entre constantes e/ou variá-
veis. O Quadro 2 apresenta os operadores relacionais da linguagem C.
Quadro 2 – Operadores relacionais em C
Operador Relação Sintaxe
< Menor que a < b
> Maior que a > b
39
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Operador Relação Sintaxe
<= Menor ou igual a <= b
>= Maior ou igual a >= b
== Igual a == b
!= Diferente a != b
Fonte: Adaptado de PINHEIRO, 2012.
Dica: para um melhor entendimento sobre a sintaxe dos operadores relacionais, pense em 
dois valores, sendo um para a variável a, e outro para a variável b. Pensou? Agora, anote esses 
valores, volte no Quadro 2 e faça a respectiva substituição. Como resultado, você deverá 
encontrar o valor lógico verdadeiro ou o valor lógico falso.
Fique atento!
2.1.6 Operadores lógicos
Operadores lógicos permitem operações de negação, conjunção ou disjunção, sendo o resultado verdadeiro (1) 
ou falso (0).
Quadro 3 – Operadores lógicos em C
Operador lógico Operação Sintaxe
E/AND && Conjunção a && b
Ou/OR || Disjunção a || b
Não/NOT ! Negação !a
Fonte: Adaptado de PINHEIRO, 2012.
2.1.7 Expressões matemáticas
As expressões aritméticas ou matemáticas na linguagem C são formadas com operadores e funções predefinidas 
cujos operandos são constantes e/ou variáveis dos tipos int ou float. A seguir, é possível observar um exemplo de 
expressão aritmética.
X = A + B - 2 * C / sqrt(D)
40
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Onde:
A, B, C, D, X Variáveis. 
2 Valor constante.
Sqrt ( ) Função predefinida que retorna o valor da raiz quadrada.
+, -, *, / = Operadores aritméticos.
= Operador de atribuição.
O resultado de uma expressão aritmética dependerá dos valores armazenados nas variáveis e/ou constantes.
2.1.8 Expressões lógicas
As expressões lógicas na linguagem C são formadas com operadores lógicos de conjunção (AND) e de disjunção 
(OR), cujos operandos são constantes e/ou variáveis do tipo lógico. A seguir, é possível observar um exemplo de 
expressão lógica.
X = A && B OR C
Onde: 
A, B, C, X Variáveis. 
&& , OR Operadores lógicos.
Os resultados possíveis para as expressões lógicas podem ser observados por meio de tabelas-verdade. Compu-
tacionalmente, você deve considerar V = 1 e F = 0. Veja:
Quadro 4 – Tabela-verdade para o operador lógico de conjunção AND (&&)
A Operador lógico B Resultado lógico
V && V V
V && F F
F && V F
F && F F
Fonte: Elaborado pelo autor.
41
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Quadro 5 – Tabela-verdade para o operador lógico de disjunção OR (||)
A Operador lógico B Resultado lógico
V || V V
V || F V
F || V V
F || F F
Fonte: Elaborado pelo autor.
2.1.9 Expressões mistas e tabela de prioridades
As expressões mistas na linguagem C são formadas com operadores aritméticos, lógicos e relacionais, cujos ope-
randos são constantes e/ou variáveis dos tipos primitivos. A seguir, é possível observar um exemplo de expressão 
mista na linguagem C.
X = (A + B) <= 2 && C OR D
Onde:
A, B, C, D, X Variáveis. 
2 Valor constante.
<= Operador relacional.
+ Operador aritmético.
= Operador de atribuição.
&& , || Operadores lógicos.
O resultado final da expressão mista dependerá dos valores armazenados nas variáveis e da ordem de resolução 
das operações, que deverá seguir a ordem de prioridade de operações. A ordem de prioridades de operações em 
C é apresentada no Quadro 6.
Quadro 6 – Precedência dos operadores na linguagem C
Ordem de precedência Operador
1º ( ) [ ] -> .
2º Sizeof & * (type) - -- ++ ~ ! 
3º * / %
4º + -
5º << >>
42
Construção de Algoritmos | Unidade 2 - Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
Ordem de precedência Operador
6º < <= > >=
7º == !=
8º &
9º ^
10 |
11 &&
12 ||
13 : ?
14 etc -= += = 
15 ,
Fonte: Elaborado pelo autor.
Operadores no mesmo nível de precedência devem ser executados da esquerda para a direita na ordem em que 
aparecerem.
Veja um exemplo de solução de uma expressão mista:
Considere a expressão mista X = (A + B) <= 2 && C OR D e os respectivos valores para as variáveis A, B, C, D; 2, 3, 
V e F. Agora, faça a substituição dos valores na expressão e acompanhe a resolução que seguiu a procedência do 
Quadro 6:
X = (A + B) <= 2 && C OR D
X = (2+3) <= 2 && V OR F
X = 5 <= 2 && V OR F
X = F && V OR F
X = F OR F
X = F
No caso deste último exemplo, a variável X armazenará um valor lógico, lembrando que, computacionalmente, V 
é o mesmo que o valor de nível lógicoalto 1, e F é o mesmo que o valor lógico de nível = 0.
Síntese da unidade
Nesta unidade, você compreendeu os componentes de um programa em C, como: constantes, variáveis, ope-
radores, atribuições e expressões. Para continuar, é importante que você organize seus horários e ambiente de 
estudos.
43
Considerações finais
Parabéns, você chegou ao final da unidade 2 desta disciplina. Você deu 
mais um passo importante para iniciar a construção de algoritmos e de 
programas de computador. Agora, siga em frente!
44
 3Unidade 33. Função de Entrada e Função 
de Saída em C
Para iniciar seus estudos
Durante o estudo desta unidade, você compreenderá os conceitos e as 
funções de entrada e saída de dados na linguagem de programação C. 
Para isso, é importante organizar seus horários e seu ambiente de estudos.
Objetivos de Aprendizagem
• Recordar as funções de entrada e de saída em C.
• Diferenciar as funções de entrada e de saída em C.
• Usar as funções de entrada e de saída em C.
45
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Introdução da unidade
Nesta unidade, você estudará sobre as funções de entrada e de saída da linguagem de programação C. Primeira-
mente, ser-lhe-ão apresentados os conceitos sobre a função de saída de dados e, em seguida, os conceitos sobre 
a função de entrada de dados. Ao final, você aprenderá a aplicar simultaneamente as funções de entrada e saída 
de dados para a programação de computadores.
3.1 Função de entrada e função de saída em C
As funções de entrada e de saída de dados permitem uma interação direta com o usuário, seja por meio dos dis-
positivos de entrada de dados, bem como pelos dispositivos de saída de dados. Além disso, a maioria dos progra-
mas utiliza-se das funções de entrada e de saída de dados para ler os dados do usuário, processá-los e produzir 
os dados de saída. Por isso, recomenda-se uma atenção especial ao conteúdo desta unidade.
3.1.1 Função de saída em C printf
A saída de dados de um programa acontece por meio de unidades de saída de dados, como monitor, impressora 
e fone de ouvido. Isso ocorre após o computador processar os dados fornecidos por uma unidade de entrada, 
gerando-se, assim, uma saída. Essa saída de dados é, normalmente, apresentada ao usuário.
As saídas de dados podem ocorrer para fornecer alguma informação, apresentar resultados do processamento, 
solicitar ou passar alguma informação de orientação ao usuário. 
A linguagem C faz a saída dos dados em um dispositivo de saída de dados executando a função printf( ). Para que 
a função printf( ) seja reconhecida e executada, o programador precisará incluir, no cabeçalho do programa, a 
biblioteca-padrão de entrada/saída stdio.h (standard input/output), utilizando a diretiva de compilação #include. 
Essa biblioteca contém o código da função printf( ). A sintaxe da função de saída de dados, printf( ), na lingua-
gem C, tem o seguinte formato (FORBELLONE, 2015):
printf(<”mensagem_de_texto”>, <lista_de-valores> );
Onde:
• printf – função de saída na linguagem C, contida na biblioteca stdio.h.
• “mensagem_de_texto” – podendo conter:
• Textos, que serão reproduzidos na saída (pode haver mais de um texto).
• Os textos são livres e podem estar intercalados com outros componentes da <mensagem de texto>.
• Referências, que serão substituídas por um valor declarado no segundo parâmetro da função printf().
46
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
• A referência indica o tipo de dado que deverá ser inserido naquela posição da <mensagem de 
texto>.
• A primeira referência está associada ao primeiro valor, a segunda referência ao segundo valor, e 
assim por diante.
• Uma referência é identificada pelo caractere especial “%”, seguida do tipo de dado do valor, sendo:
• %d ou &i para o tipo int.
• %f para o tipo float.
• %c para o tipo char.
• %s para uma cadeia de caracteres (string).
• Comandos, que atuarão para modificar a execução da saída de dados.
• Um comando é identificado pelo caractere “\”, seguido de outro caractere.
• Os comandos mais comuns são: 
• “\n”, para avançar para a próxima linha (newline).
• “\t” para avançar para o próxima posição de tabulação (horizontal tab).
• “\a” para o alerta sonoro (alert beep).
• “\b” para retroceder uma posição (backspace).
• “\” para retornar à primeira posição da linha (carriage return).
• “\0” caractere vazio (null character).
• lista_de_valores, podendo ser:
• Uma constante do mesmo tipo da referência.
• Uma variável do mesmo tipo da referência.
• Uma expressão aritmética, cujo resultado seja do tipo da referência.
• Uma função, cujo valor retornado seja do tipo da referência.
Exemplo 1: neste exemplo, considere a saída de dados como uma mensagem de texto qualquer.
printf (“Mensagem de texto qualquer! \n”);
Nesse caso, a saída de dados será uma mensagem que aparecerá para o usuário, conforme está mostrado na 
Figura 19. Observe que apenas o conteúdo de texto entre aspas aparece como saída. O comando “\n” não apa-
rece na tela, mas fez com que o cursor se posicionasse no início da próxima linha.
47
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Figura 19 – Representação de uma saída de dados
Mensagem de texto qualquer!
Fonte: Elaborada pelo autor.
Exemplo 2: neste exemplo, a saída de dados será a altura de uma pessoa. Nesse caso, o valor é mostrado como 
uma literal numérica de conteúdo 1.8:
printf (“%f \n”, 1.8);
A mensagem que aparecerá para o usuário está representada na Figura 20.
Figura 20 – Representação de uma saída de dados
1.8
Fonte: Elaborada pelo autor.
48
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Exemplo 3: neste exemplo, a saída de dados também será a altura de uma pessoa. Nesse caso, considere que o 
conteúdo está armazenado na variável, identificada como altura, com o valor 1.87. Agora observe que a unidade 
“metros” é outro texto que aparece na mensagem, após o valor da variável altura.
printf (“A altura é igual a %0.2f metros! \n”, altura);
A mensagem que aparecerá para o usuário está representada na Figura 21.
Figura 21 – Representação de uma saída de dados
A altura é igual a 1.87 
metros!
Fonte: Elaborada pelo autor.
O comando \n executa o avanço do cursor para a próxima linha. Logo, \n\n\n avançará 3 
vezes, saltando 2 linhas.
A referência %0.2f indica que um valor do tipo float aparecerá com duas casas decimais.
Fique atento!
Veja no Quadro 7 uma síntese dos códigos de formato de saída para a linguagem C.
49
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Quadro 7 – Síntese dos códigos de controle de saída para a linguagem C
%i ou %d Permite a saída de um dado do tipo int.
%x ou %X Permite a saída de um dado do tipo int em hexadecimal.
%f Permite a saída de um dado real do tipo float ou double.
%e ou %E Permite a saída de um dado em notação científica 
(mantissa e expoente).
%c Permite a saída de um dado do tipo char.
%s Permite a saída de uma cadeia de caracteres (string).
%% Terá um % na saída.
Fonte: Adaptado de MANZANO, 2016.
3.1.2 Função de entrada em C – scanf 
A entrada de dados de um programa ou a leitura de dados acontece por meio de unidades de entrada de dados, 
como teclado, mouse ou tela com tecnologia touchscreen, que é sensível ao toque. Então, quando um usuário 
digita em um teclado, clica em um mouse ou toca em uma tela touchscreen, os dados são enviados para o compu-
tador por meio de sinais elétricos (DALMAS, 2016).
Esses sinais elétricos são, incialmente, convertidos pelo computador para valores binários (representados por 0 e 
1) e armazenados em memória em bits, bytes, kilobytes, megabytes, gigabytes, terabytes. Para o usuário, esses valores 
são os dados de entrada, por exemplo: um número, uma letra, uma frase, etc. Esses dados são armazenados em 
endereços de memória, associados a nomes de variáveis, sendo utilizados pelo computador durantea execução 
dos programas (MANZANO, 2016).
A linguagem C faz a entrada dos dados de um dispositivo de entrada de dados executando a função scanf( ). 
Para que a função scanf( ) seja reconhecida e executada, o programador precisará incluir, no cabeçalho do pro-
grama, a biblioteca-padrão de entrada/saída stdio.h (standard input/output), utilizando a diretiva de compilação 
#include. Essa biblioteca contém o código da função scanf( ). A sintaxe da função de entrada de dados, scanf( 
), na linguagem C tem o seguinte formato:
scanf(<”código_de_controle”>, <&variável>);
Onde:
scanf – função de entrada na linguagem C.
• código_de_controle – identifica um tipo de dados (int, float, char), precedido de %. Por exemplo: “%i” 
permitirá a leitura de um dado do tipo inteiro.
• & – operador de endereço, que indica a localização (endereço) da variável na memória do computador.
• Variável – identificador (nome) da variável, que identifica o endereço de memória onde o valor lido será 
armazenado. A variável deve ser do mesmo tipo que consta no código_de_controle.
50
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Veja a seguir alguns exemplos de execução da função de entrada de dados. 
Exemplo 1: neste exemplo, considere a entrada de dados como sendo a idade de uma pessoa, cujo valor será 
armazenado no endereço de memória identificado pelo nome da variável idade.
scanf(“%i”, &idade);
Nesse caso, o dado de entrada ficará armazenado no endereço da variável idade. Entende-se, então, que a idade 
de uma pessoa será um dado do tipo primitivo int (inteiro).
Exemplo 2: neste exemplo, considere a entrada de dados como sendo a altura de uma pessoa.
scanf(“%f”, &altura);
Nesse caso, o dado de entrada ficará armazenado no endereço da variável altura. Entende-se, então, que a altura 
de uma pessoa será um dado do tipo primitivo float (real).
Exemplo 3: neste exemplo, considere a entrada de dados como sendo uma letra do alfabeto:
scanf(“%c”, &letra);
Nesse caso, o dado de entrada ficará armazenado no endereço da variável letra. Entende-se, então, que uma 
letra será um dado do tipo primitivo char (caractere).
Exemplo 4: neste exemplo, considere a entrada de dados como sendo uma frase (cadeia de caracteres).
scanf(“%s”, &frase);
Nesse caso, o dado de entrada ficará armazenado no endereço da variável frase. Entende-se, então, que uma 
frase será um dado do tipo char com várias ocorrências (cadeia de caracteres).
O Quadro 8 apresenta uma síntese dos códigos de formato de entrada para a linguagem C.
Quadro 8 – Síntese dos códigos de controle de entrada para a linguagem C
%i Permite a leitura de um dado do tipo int (inteiro).
%d Permite a leitura de um dado do tipo int (inteiro).
%f Permite a leitura de um dado do tipo float (real).
%f Permite a leitura de um dado do tipo double (real).
%c Permite a leitura de um dado do tipo char (caractere).
%s Permite a leitura de uma cadeia de caracteres do tipo char (string).
Fonte: Adaptado de MANZANO, 2016.
51
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Os comandos da linguagem C são escritos com letras minúsculas, sendo essa uma exigência 
da maioria dos compiladores atuais.
Fique atento!
3.1.3 Aplicação das funções de entrada e saída em C
Durante a programação de computadores, o funcionamento das funções de entrada e de saída acontece, na 
maioria das vezes, de forma simultânea, dependendo da necessidade do problema a ser resolvido. Agora que as 
funções de entrada e de saída de dados já foram apresentadas, será possível desenvolver e testar os primeiros 
programas de computador. Veja os exemplos de problemas a seguir e, posteriormente, copie e teste cada um 
deles no Dev C++.
Problema 1: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
da idade de uma pessoa. Em seguida, esse programa deve imprimir uma mensagem informando a idade digitada. 
#include <stdio.h>
int main( ){
 int idade;
 printf(“Digite a idade da pessoa: \n”);
 scanf(“%i”, &idade);
 printf(“A idade digitada foi = %i anos!\n”, idade);
 return 0;
}
Obs.: neste exemplo, suponha que o usuário tenha digitado o valor 18 para a idade da pessoa.
Nesse caso, a mensagem que aparecerá para o usuário está representada na Figura 22.
Figura 22 – Representação de uma saída de dados
Digite a idade da pessoa:
18
A idade digitada 
foi = 18 anos!
Fonte: Elaborada pelo autor.
52
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Problema 2: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
da idade e a altura de uma pessoa. Em seguida, esse programa deve imprimir uma mensagem informando a 
idade e a altura digitadas.
#include <stdio.h>
int main( ){
 int idade;
 float altura;
 printf(“Digite a idade da pessoa: \n”);
 scanf(“%i”, &idade);
 printf(“Digite a altura da pessoa: \n”);
 scanf(“%f”, &altura);
 printf(“A idade digitada foi = %i anos!\n”, idade);
 printf(“A altura digitada foi = %0.2f metros!\n”, altura);
 return 0;
}
Obs.: neste exemplo, suponha que o usuário tenha digitado o valor 18 para a idade da pessoa e o valor 1.7 para 
a sua altura.
Nesse caso, a mensagem que aparecerá para o usuário está representada na Figura 23.
Figura 23 – Representação de uma saída de dados
Digite a idade da pessoa:
18
Digite a altura da pessoa:
1.7
A idade digitada foi = 18 anos!
A altura digitada foi = 1.70 metros!
Fonte: Elaborada pelo autor.
Na linguagem de programação C, durante a entrada de dados, a vírgula dos dados do tipo 
float ou double é representada pelo ponto decimal. Portanto, para entrar com o valor 1,7 do 
exemplo, o usuário deve digitar 1.7.
Fique atento!
53
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Problema 3: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
de cinco letras do alfabeto do idioma português. Em seguida, esse programa deve imprimir cada uma das letras, 
na mesma ordem em que foram digitadas. A impressão deve ocorrer tanto com uma letra por linha como com 
todas as letras na mesma linha.
#include <stdio.h>
int main( ){
 char letra1, letra2, letra3, letra4, letra5;
 printf(“Digite a primeira letra: \n”);
 scanf(“%c”, &letra1);
 fflush(stdin);
 printf(“Digite a segunda letra: \n”);
 scanf(“%c”, &letra2);
 fflush(stdin);
 printf(“Digite a terceira letra: \n”);
 scanf(“%c”, &letra3);
 fflush(stdin);
 printf(“Digite a quarta letra: \n”);
 scanf(“%c”, &letra4);
 fflush(stdin);
 printf(“Digite a quinta letra: \n”);
 scanf(“%c”, &letra5);
 printf(“\n”);
 printf(“Primeira letra digitada = %c.\n”, letra1);
 printf(“Segunda letra digitada = %c.\n”, letra2);
 printf(“Terceira letra digitada = %c.\n”, letra3);
 printf(“Quarta letra digitada = %c.\n”, letra4);
 printf(“Quinta letra digitada = %c.\n\n\n”, letra5);
 printf(“Todas as letras na mesma linha e na ordem em que foram digitadas = %c, %c, 
%c, %c, %c.”, letra1, letra2, letra3, letra4, letra5);
 return 0;
}
Obs.: neste exemplo, suponha que o usuário tenha digitado as letras a, e, i, o, u.
Nesse caso, a mensagem que aparecerá para o usuário está representada na Figura 24.
54
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Figura 24 – Representação de uma saída de dados
Digite a primeira letra:
a
Digite a segunda letra:
e
Digite a terceira letra:
i
Digite a quarta letra:
o
Digite a quinta letra:
u
Primeira letra digitada = a.
Segunda letra digitada = e.
Terceira letra digitada = i.
Quarta letra digitada = o.
Quinta letra digitada = u.
Todas as letras na mesma linha e na ordem em que foram digitadas = a, e, i, o, u.
Fonte: Elaborada pelo autor.
A função fflush(stdin) será muito útil quando for necessário ler mais de um caractere pelo 
teclado.Essa função exclui os caracteres não lidos (lixo) que ficaram na “memória” ou buffer 
do teclado, assim como os caracteres de controle utilizados pelo sistema operacional.
Saiba mais
Problema 4: escreva um programa de computador utilizando a linguagem C que imprima a mensagem OLÁ 
MUNDO dentro e no centro de uma “caixa”.
55
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
#include <stdio.h>
#include <locale.h>
int main( )n{
 setlocale(LC_ALL, “Portuguese”);
 printf(“------------------------------------------------\n”);
 printf(“| |\n”);
 printf(“| |\n”);
 printf(“| |\n”);
 printf(“| OLÁ MUNDO! |\n”);
 printf(“| |\n”);
 printf(“| |\n”);
 printf(“| |\n”);
 printf(“------------------------------------------------\n”);
 return 0;
}
Obs.: neste exemplo, não foi necessária a entrada de dados, apenas de saída, pois não foi necessário solicitar 
nenhuma informação para o usuário.
Nesse caso, a mensagem que aparecerá para o usuário está mostrada na Figura 25.
Figura 25 – Representação de uma saída de dados
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| |
| OLÁ MUNDO! |
| |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Fonte: Elaborada pelo autor.
A inclusão da biblioteca #include <locale.h> e da função setlocale(LC_ALL, “Portuguese”) 
permitirá que o compilador acentue corretamente as palavras, mas o usuário deve informar os 
dados do tipo float ou double com vírgula, e não mais com ponto decimal.
Saiba mais
56
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Problema 5: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) cinco 
valores numéricos reais. Em seguida, esse programa deve calcular o valor da média dos números digitados e 
imprimir o valor da média.
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
 float n1, n2, n3, n4, n5, soma, media;
 printf(“Digite o valor do primeiro número: \n”);
 scanf(“%f”, &n1);
 printf(“Digite o valor do segundo número: \n”);
 scanf(“%f”, &n2);
 printf(“Digite o valor do terceiro número: \n”);
 scanf(“%f”, &n3);
 printf(“Digite o valor do quarto número: \n”);
 scanf(“%f”, &n4);
 printf(“Digite o valor do quinto número: \n”);
 scanf(“%f”, &n5);
 soma = n1 +n2 + n3 + n4 + n5;
 media = soma / 5.0;
 printf(“O valor da média entre os números digitados: %.2f, %.2f, %.2f, %.2f, 
%.2f é = %.2f.”, n1, n2, n3, n4, n5, media);
 return 0;
}
Obs.: neste exemplo, suponha que o usuário tenha digitado os valores 3; 7,5; 9; 10 e 32,5. Observe que os núme-
ros foram digitados com vírgula ao invés do ponto decimal; isto se deu devido à utilização da função setloca-
le(LC_ALL, “Portuguese”);. Observe também que os números mostrados na saída estão com duas casas deci-
mais; isso se deve às referências aos valores na função printf() estarem especificadas como %.2f e com vírgulas 
devido à função setlocale();
Nesse caso, a mensagem que aparecerá para o usuário está representada na Figura 26.
57
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Figura 26 – Representação de uma saída de dados
Digite o valor do primeiro número:
__ 3
Digite o valor do segundo número:
__ 7,5
Digite o valor do terceiro número:
__ 9
Digite o valor do quarto número:
__ 10
Digite o valor do quinto número:
__ 32,5
O valor da média entre os números digitados: 
3,00, 7,50, 9,00, 10,00, 32,50 é = 12,40.
Fonte: Elaborada pelo autor.
Problema 6: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) três 
números reais e imprima as somas parciais desses números.
#include <stdio.h>
#include <locale.h>
int main() {
 setlocale(LC_ALL, “Portuguese”);
 float num1, num2, num3, somaParcial;
 
 printf(“Informar o primeiro número: “);
 scanf(“%f”, &num1);
 printf(“Informar o segundo número: “);
 scanf(“%f”, &num2);
 printf(“Informar o terceiro número: “);
 scanf(“%f”, &num3);
 somaParcial = 0.0;
 printf(“SomaParcial = %.2f\n”, somaParcial);
 somaParcial = somaParcial + num1;
 printf(“SomaParcial + %.2f = %.2f\n”, num1, somaParcial);
 somaParcial += num2;
 printf(“SomaParcial + %.2f = %.2f\n”, num2, somaParcial);
 somaParcial += num3;
 printf(“SomaParcial + %.2f = %.2f\n”, num3, somaParcial);
 
 return 0;
}
58
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
Saída do programa:
Informar o primeiro número: 10,5
Informar o segundo número: 20,3
Informar o terceiro número: 40,5
SomaParcial = 0,00
SomaParcial + 10,50 = 10,50
SomaParcial + 20,30 = 30,80
SomaParcial + 40,50 = 71,30
Problema 7: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) as letras 
“a” e “r” e imprima a palavra “arara” chamando a função printf() uma única vez.
#include <stdio.h>
int main(){
 char letra1, letra2;
 
 printf(“Informar o primeira letra: “);
 scanf(“%c”, &letra1);
 fflush(stdin);
 printf(“Informar o segunda letra: “);
 scanf(“%c”, &letra2);
 fflush(stdin);
 printf(“Palavra = %c%c%c%c%c\n”, letra1, letra2, 
letra1, letra2, letra1);
 return 0;
}
Saída do programa:
Informar a primeira letra: a
Informar a segunda letra: r
Palavra = arara
Problema 8: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) três 
números inteiros e imprima (exiba) sua soma e seu produto, deixando uma linha em branco entrar após as entra-
das e entre linhas impressas (exibidas).
59
Construção de Algoritmos | Unidade 3 - Função de Entrada e Função de Saída em C
#include <stdio.h>
#include <locale.h>
int main(){
 setlocale(LC_ALL, “Portuguese”);
 
 int num1, num2, num3, soma, produto;
 
 printf(“Informar o primeiro número: “);
 scanf(“%d”, &num1);
 printf(“Informar o segundo número: “);
 scanf(“%d”, &num2);
 printf(“Informar o terceiro número: “);
 scanf(“%d”, &num3);
 soma = num1 + num2 + num3;
 produto = num1 * num2 * num3;
 printf(“\n”);
 printf(“Soma de %d + %d + %d = %d\n”, num1, num2, num3, soma);
 printf(“\n”);
 printf(“Produto de %d x %d x %d = %d\n”, num1, num2, num3, produto);
 
 return 0;
}
Saída do programa:
Informar o primeiro número: 10
Informar o segundo número: 20
Informar o terceiro número: 30
Soma de 10 + 20 + 30 = 60
Produto de 10 x 20 x 30 = 6000
Síntese da unidade
Por meio desta unidade, você foi capaz de entender os conceitos sobre as funções de entrada e saída para a 
linguagem de programação C. Além disso, foi possível testar pequenos programas e observar a aplicação dessas 
funções na prática.
60
Considerações finais
Parabéns, você chegou ao final da unidade 3 desta disciplina e aprendeu 
a aplicar as funções de entrada e de saída de dados para a programação 
de computadores utilizando a linguagem C. Com isso, o seu poder para 
construir programas de computador ficou maior. Agora, siga em frente!
61
 4Unidade 44. Estruturas Condicionais ou de 
Decisão
Para iniciar seus estudos
Durante o estudo desta unidade, você compreenderá os conceitos e 
comandos das estruturas de decisão na linguagem de programação 
C. Para seguir em frente, é importante organizar seus horários e seu 
ambiente de estudos.
Objetivos de Aprendizagem
• Definir as estruturas de decisão.
• Diferenciar as estruturas de decisão simples (if), dupla (if-else) e 
encadeada (if-else-if), bem como a decisão por valor (switch-case).
• Empregar as estruturas de decisão em pequenos programas de 
computador.
62
Construçãode Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
Introdução da unidade
Nesta unidade, você estudará sobre as estruturas de decisão da linguagem de programação C. Primeiramente, 
ser-lhe-ão apresentados conceitos sobre a estrutura de decisão simples e, na sequência, sobre as estruturas 
de decisão dupla e encadeada. Por último, você verá a estrutura de decisão por teste de valor, conhecida como 
switch-case. Ao final, verá como são aplicadas as estruturas de decisão para a programação de computadores e 
poderá observar como o poder de programar fica maior com essas estruturas, pois elas permitem resolver pro-
blemas mais elaborados.
4.1 Estruturas de decisão ou de controle de fluxo
As estruturas de decisão permitem o controle e o desvio do fluxo durante a execução de um programa de com-
putadores. Essas estruturas são fundamentais para a programação de computadores em qualquer linguagem 
de programação, inclusive na linguagem C. Sem essas estruturas, os programas de computador seriam muito 
limitados, pois suas instruções ou comandos só poderiam ser executados em sequência, ou seja, uma instrução 
ou comando por vez. Com as estruturas de decisão, o programador tem condições de resolver problemas mais 
elaborados e com mais de uma opção de solução (DALMAS, 2016).
As estruturas de decisão fazem o controle do fluxo de execução do programa com base em condições que são 
avaliadas; além disso, com base no resultado dessa avaliação, determinarão quais blocos de instruções serão 
executados e quais serão ignorados. As condições utilizam expressões com operadores relacionais e operadores 
lógicos, sendo que o seu resultado é um valor lógico – VERDADEIRO ou FALSO. Uma condição é avaliada, bem 
como uma decisão é tomada diante do resultado dessa avaliação.
Veja, por exemplo, a condição formada pela expressão (A < B), que utiliza o operador relacional “<” (menor que). 
Se o valor da variável A for menor que o valor da variável B, o resultado da avaliação será VERDADEIRO. Se o valor 
da variável A for maior ou igual ao valor da variável B, o resultado da avaliação será FALSO. O resultado da avalia-
ção da expressão será utilizado para a tomada de decisão de qual bloco de instruções será executado em seguida 
e qual bloco será ignorado. 
As estruturas de decisão simples, dupla e encadeada mantêm o controle de fluxo de execução utilizando o 
comando if (SE, no Portugol). O comando if contém uma condição formada por uma expressão com operado-
res relacionais e operadores lógicos. Tal condição, ao ser avaliada, dará um resultado VERDADEIRO ou FALSO, 
determinando o controle do fluxo de execução do código do programa, seguindo o caminho do resultado VER-
DADEIRO ou o caminho do resultado FALSO. Nos dois casos, os caminhos a serem seguidos serão determinados 
pelo programador, que codifica a expressão a ser avaliada de acordo com as necessidades do problema a ser 
resolvido. Conforme a estrutura de decisão utilizada, o programa decide entre um ou vários caminhos possíveis, 
dependendo de cada problema a ser resolvido (GUIMARÃES, 2008).
Outro exemplo de caminho a ser seguido por uma tomada de decisão pode ser o seguinte: pense numa média 
de notas lida como dado de entrada, cujo valor deve estar entre zero e dez. Pensou? Muito bem, agora, SE a nota 
que você pensou for maior ou igual a seis, então o resultado de saída poderia ser a mensagem “APROVADO”; 
caso contrário, a mensagem poderia ser “REPROVADO” ou, ainda, se a média estivesse num intervalo específico 
– por exemplo, entre 5 e 5.9 –, o resultado poderia ser “RECUPERAÇÃO”. Ou seja, nesse caso, há três caminhos 
possíveis, e apenas um poderá ser seguido, e isto dependerá do resultado da avaliação da condição (MÉDIA ≥ 6).
63
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
Para a programação de computadores, a quantidade de caminhos disponíveis para o fluxo de execução do código 
e o tipo de condição a ser avaliada ajudarão na escolha de qual estrutura de decisão utilizar, lembrando que as 
estruturas de decisão disponíveis são: estrutura de decisão simples (if), estrutura de decisão dupla (if-else), estru-
tura de decisão encadeada (if-else-if) e a estrutura de decisão múltipla por valor (switch-case). A relação entre qual 
estrutura utilizar e a quantidade de caminhos disponíveis para a decisão é apresentada no Quadro 9.
Quadro 9 – Relação de qual estrutura utilizar e a quantidade de caminhos disponíveis para a decisão
Estrutura de decisão condicional Quantidade de caminhos (fluxo)
Simples: if (se) Um único caminho
Dupla composta: if-else (se-senão) Dois caminhos
Encadeada: if-else-if (se-senão-se) Três ou mais caminhos sequenciais
Múltipla por valor: switch-case (seleção de múltiplos valores) Múltiplos caminhos sequenciais ou não
Fonte: Elaborado pelo autor.
Apenas um caminho por vez poderá ser seguido pelo fluxo, mesmo que vários estejam dis-
poníveis. Essa decisão dependerá do resultado da condição a ser analisada. Resumidamente, 
entende-se que, se o resultado lógico da condição for VERDADEIRO, então “vá por esse 
caminho” senão “vá por aquele outro caminho” e assim por diante! 
Fique atento!
As possibilidades de caminhos a serem seguidos durante a execução de um programa de computador também 
podem ser representadas por meio de fluxogramas. Esse tipo de representação serve para ajudar o programador a 
entender melhor o problema, bem como a sua solução antes mesmo de iniciar o desenvolvimento do código. O foco 
aqui não é o estudo de fluxogramas, e sim o estudo dos comandos na linguagem de programação C. No entanto, 
para facilitar o entendimento daqui para frente, a Figura 27 mostra um exemplo de fluxograma em que, depen-
dendo do resultado da condição, ou seja, dependendo da decisão, o fluxo pode ir por um caminho ou por outro.
Figura 27 – Fluxograma de tomada de decisão
Fonte: SHUTTERSTOCK, 2018.
64
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
4.1.1 Estrutura de decisão simples (if)
A estrutura de decisão simples na linguagem de programação C é representada pela seguinte sintaxe:
if (<condição>)
 Instrução;
 ... o código pode ter continuidade após a condição;
Para essa sintaxe, a instrução será executada quando o resultado da condição for VERDADEIRO e não será execu-
tada quando o resultado da condição for FALSO. A instrução pode ser comandos da linguagem C e dependerá de 
cada problema a ser solucionado. Observe, então, que só existe um caminho possível para que a instrução seja 
executada, e esse caminho depende do resultado da condição.
Pode ser necessário executar duas ou mais instruções quando o resultado da condição for VERDADEIRO. Nesse 
caso, será necessário utilizar os delimitadores de início ({) e de fim (}) da linguagem C para limitar o bloco de 
instruções que serão executadas. A sintaxe da estrutura condicional simples para esses casos é apresentada a 
seguir:
if (<condição>){
 Instrução1;
 Instrução2; 
 Instrução3; 
 Instrução4; 
 ...
 InstruçãoX;
}
... o código pode ter continuidade após a condição;
Observe que, nessa sintaxe, cada instrução termina com um ponto e vírgula e que todas serão executadas 
somente SE o resultado da condição for VERDADEIRO.
Veja agora alguns exemplos de problemas e, posteriormente, copie e teste cada um deles no Dev C++.
Problema 1: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
da idade de uma pessoa. Em seguida, esse programa deve imprimir uma mensagem informando que a pessoa é 
maior de idade caso a idade informada seja maior ou igual a 18 anos.
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
65
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
 int idade;
 printf(“Digite a idade da pessoa: \n”);
 scanf(“%i”, &idade);
 if (idade >= 18)
 printf(“A pessoa é maior de idade!: \n”);
 return 0;
}
Obs.: neste exemplo, caso o usuário entre com um valor abaixo de18, o programa não dará nenhuma resposta. 
Isso está correto, pois o enunciado do Problema 1 pediu para imprimir a mensagem somente quando a pessoa 
for maior de idade. Em outras palavras, há um único caminho.
Problema 2: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
de uma letra qualquer do alfabeto português. Em seguida, esse programa deve imprimir uma mensagem infor-
mando se a letra lida é uma vogal caso seja “a”, “e”, “i”, “o”, “u” ou “A”, “E”, “I”, “O”, “U”.
 
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
 char letra;
 
 printf(“Digite uma letra\n”);
 scanf(“%c”,&letra); 
 if((letra == ‘a’)|| (letra == ‘e’)||
 (letra == ‘i’)|| (letra == ‘o’)||
 (letra == ‘u’)||(letra == ‘A’)||
 (letra == ‘E’)||(letra==’I’)||
 (letra == ‘O’)||(letra == ‘U’))
 printf(“É Vogal!\n”);
 return 0;
}
Obs.: neste exemplo, caso o usuário entre com o valor de uma consoante, o programa não dará nenhuma res-
posta. E isso está correto, pois o enunciado do Problema 2 pediu para imprimir a mensagem somente quando a 
letra lida corresponder a uma das vogais, ou seja, havia apenas um único caminho.
Problema 3: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
da altura de uma pessoa. Em seguida, esse programa deve imprimir uma mensagem informando se a pessoa tem 
estatura alta caso o valor informado esteja entre 1,9 metro e 2,3 metros.
66
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
 float altura;
 printf(“Digite a altura de uma pessoa:\n”);
 scanf(“%f”,&altura); 
 if(altura >= 1,9) && (altura <= 2,3)
 printf(“A pessoa possui estatura alta.\n”);
 return 0;
}
Obs.: neste exemplo, caso o usuário entre com um valor para a variável altura que esteja fora do intervalo estabe-
lecido, o programa não dará nenhuma resposta. E isso está correto, pois o enunciado do Problema 3 pediu para 
imprimir a mensagem somente quando a altura informada estiver dentro do intervalo estabelecido, ou seja, aqui 
também havia um único caminho.
4.1.2 Estrutura de decisão dupla (if-else):
A estrutura de decisão dupla na linguagem de programação C é representada pela seguinte sintaxe:
if (<condição>)
 instrução se verdadeiro;
else
 instrução se falso;
... o código pode ter continuidade após a condição;
Nessa sintaxe, a instrução se verdadeiro será executada quando o resultado da condição for VERDADEIRO e 
não será executada quando o resultado da condição for FALSO. Já a instrução se falso será executada somente 
quando o resultado da condição for FALSO. Observe que agora existem dois caminhos possíveis, sendo um para 
executar a instrução se verdadeiro, e outro para executar a instrução se falso.
Acontece que pode ser necessário executar duas ou mais instruções quando o resultado da condição for VER-
DADEIRO ou quando o resultado da condição for FALSO. Nesse caso, será necessário utilizar os delimitadores 
de início “{” e de fim “}” da linguagem C para limitar os blocos de instruções que serão executadas. A sintaxe da 
estrutura condicional composta para esses casos é apresentada a seguir:
67
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
if (<condição>){
 Instrução1 se verdadeiro;
 Instrução2 se verdadeiro; 
 Instrução3 se verdadeiro; 
 Instrução4 se verdadeiro; 
 ...
 InstruçãoX se verdadeiro;
}
else{
 Instrução1 se falso;
 Instrução2 se falso; 
 Instrução3 se falso; 
 Instrução4 se falso; 
 ...
 InstruçãoX se falso;
}
... o código pode ter continuidade após a condição;
Observe que, nessa sintaxe, cada instrução termina com um ponto e vírgula. 
Veja os exemplos de problemas a seguir e, posteriormente, copie e teste cada um deles no Dev C++.
Problema 1: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
da idade de uma pessoa. Em seguida, esse programa deve imprimir uma mensagem informando que a pessoa 
é maior de idade caso a idade informada seja maior ou igual a 18 anos. Caso contrário, imprimir a mensagem 
informando que a pessoa é menor de idade.
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
 int idade;
 printf(“Digite a idade da pessoa: \n”);
 scanf(“%i”, &idade);
 if (idade >= 18)
 printf(“A pessoa é maior de idade!:. \n”);
 else
 printf(“A pessoa é menor de idade!:. \n”);
 return 0;
}
Obs.: neste exemplo, caso o usuário entre com um valor maior ou igual a 18, o programa imprimirá que a pessoa é 
maior de idade. Caso contrário, imprimirá que a pessoa é menor de idade. Em outras palavras, há dois caminhos.
68
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
Problema 2: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
de uma letra qualquer do alfabeto português. Em seguida, esse programa deve imprimir uma mensagem infor-
mando que a letra lida é uma vogal caso seja “a”, “e”, “i”, “o”, “u” ou “A”, “E”, “I”, “O”, “U”. Caso contrário, imprimir 
a mensagem informando que a letra digitada é uma consoante.
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
 char letra;
 printf(“Digite uma letra\n”);
 scanf(“%c”,&letra); 
 if((letra == ‘a’)||(letra == ‘e’)||
 (letra == ‘i’)||(letra == ‘o’)||
 (letra == ‘u’)||(letra == ‘A’)||
 (letra == ‘E’)||(letra == ‘I’)||
 (letra == ‘O’)||(letra == ‘U’))
 printf(“É Vogal!”);
 else
 printf(“É consoante!: \n”);
 return 0;
}
Obs.: neste exemplo, caso o usuário entre com o valor de uma vogal, o programa imprimirá uma mensagem 
informando “É vogal!”. Caso contrário, o programa imprimirá uma mensagem informando “É consoante!”. Ou 
seja, há dois caminhos.
Problema 3: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
de um número inteiro positivo. Em seguida, esse programa imprimirá uma mensagem informando se o número 
lido é par ou ímpar. 
 
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
 int num;
 printf(“Digite um número inteiro positivo:\n”);
69
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
 scanf(“%i”,&num);
 if ((num % 2) == 0)
 printf(“\n O número %i é PAR!\n\n”,num);
 else
 printf(“\n O número %i é IMPAR!\n\n”,num);
 return 0;
}
A condição if ((num % 2) == 0) verificará por meio do operador % se o resto da divisão 
inteira do valor da variável num pela constate 2 é igual a zero. Se for igual a zero, então o 
número informado é par; senão, é ímpar! 
Saiba mais
4.1.3 Estrutura de decisão encadeada (if-else-if)
A estrutura de decisão encadeada representa o agrupamento de vários níveis de decisão. Na linguagem de pro-
gramação C, a sua sintaxe é representada da seguinte maneira:
if (<condição1>)
 Instrução1 se verdadeiro;
else if (<condição2>)
 instrução2 se verdadeiro;
else if (<condição3>)
 instrução3 se verdadeiro;
else if (<condiçãoX>)
 instruçãox se verdadeira;
else
 instrução se nenhuma condição for verdadeira;
... o código pode ter continuidade após a condição;
Nessa sintaxe, cada uma das instruções só será executada se a condição for verdadeira. Caso contrário, o fluxo 
seguirá para analisar a próxima condição. Isso ocorrerá até que se encontre uma condição verdadeira ou até que 
se chegue ao final da decisão encadeada. No final, pode-se, opcionalmente, colocar mais um else, sem condição, 
para o caso de nenhuma das condições anteriores ser verdadeira.
70
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
Pode ser necessário executar duas ou mais instruções quando uma das condições for verdadeira. Nesse caso, será 
necessário utilizar os delimitadores de início “{” e de fim “}” da linguagem C para limitar os blocos de instruçõesque serão executadas. A sintaxe da estrutura de decisão encadeada para esses casos é apresentada a seguir:
if (<condição1>){
 Instrução1 se a condição 1 for verdadeira;
 Instrução2 se a condição 1 for verdadeira; 
 Instrução3 se a condição 1 for verdadeira; 
 Instrução4 se a condição 1 for verdadeira; 
 ...
 InstruçãoX se a condição 1 for verdadeira;
}
else if (<condição2>){
 Instrução1 se a condição 2 for verdadeira;
 Instrução2 se a condição 2 for verdadeira; 
 Instrução3 se a condição 2 for verdadeira; 
 Instrução4 se a condição 2 for verdadeira; 
 ...
 InstruçãoX se a condição 2 for verdadeira;
}
else if (<condição3>){
 Instrução1 se a condição 3 for verdadeira;
 Instrução2 se a condição 3 for verdadeira; 
 Instrução3 se a condição 3 for verdadeira; 
 Instrução4 se a condição 3 for verdadeira;
 ...
 InstruçãoX se a condição 3 for verdadeira;
}
else if (<condiçãoX>){
 Instrução1 se a condição X for verdadeira;
 Instrução2 se a condição X for verdadeira; 
 Instrução3 se a condição X for verdadeira; 
 Instrução4 se a condição X for verdadeira;
 ...
 InstruçãoX se a condição X for verdadeira;
}
else{
 Instrução1 se nenhuma condição for verdadeira;
 Instrução2 se nenhuma condição for verdadeira; 
 Instrução3 se nenhuma condição for verdadeira; 
 Instrução4 se nenhuma condição for verdadeira;
 ...
 InstruçãoX se nenhuma condição for verdadeira;
71
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
}
... o código pode ter continuidade após a condição;
Observe na sintaxe que o número de condições encadeadas dependerá de cada problema que for analisado, 
podendo existir três caminhos ou mais.
Veja os exemplos de problemas a seguir e, posteriormente, copie e teste cada um deles no Dev C++.
Problema 1: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
do peso de uma mochila. Em seguida, esse programa deve imprimir a mensagem “mochila leve” caso o peso 
esteja abaixo de 5 kg. Caso o peso esteja entre 5 kg e 10 kg, escrever “mochila pesada”; se estiver acima, imprimir 
“mochila muito pesada”.
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
 float peso;
 printf(“Digite o peso da mochila (Kg):\n”);
 scanf(“%f”,&peso);
 if (peso < 5.0)
 printf(“\nMochila leve!\n\n\n”);
 else if ((peso >= 5.0) && (peso <= 10.0))
 printf(“\nMochila pesada!\n\n\n”);
 else
 printf(“\nMochila muito pesada!\n\n\n”); 
 return 0;
}
Problema 2: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
do saldo bancário inicial (saldo), um valor a ser depositado (crédito) e um cheque a ser descontado (débito) na 
conta de um cliente. Em seguida, o programa deve imprimir uma mensagem informando se o novo saldo é “posi-
tivo”, “nulo” ou “negativo”, bem como apresentar o valor do novo saldo. 
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
72
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
 float saldo, credito, debito, novoSaldo;
 printf(“Digite o saldo inicial:\n”);
 scanf(“%f”,&saldo);
 printf(“\nDigite o valor do deposito (credito):\n”);
 scanf(“%f”,&credito);
 printf(“\nDigite o valor do debito:\n”);
 scanf(“%f”,&debito);
 novoSaldo = saldo + credito - debito;
 printf(“\nO novo saldo e = %5.2f\n\n”,novoSaldo);
 if (novoSaldo > 0.0)
 printf(“\n Saldo positivo!\n\n”);
 else if (novoSaldo < 0.0)
 printf(“\n Saldo negativo!\n\n”);
 else
 printf(“\n Saldo nulo!\n\n\n”); 
 return 0;
}
4.1.4 Estrutura de decisão múltipla por valor (switch-case)
A estrutura de decisão múltipla por teste de valor avalia o resultado de uma expressão aritmética inteira (tipo 
int) ou o valor de uma variável do tipo int ou char. A partir daí, há inúmeras possibilidades de testes de valor, que 
podem conter uma constante ou literal, sempre inteiro (int) ou char. Há ainda uma última comparação – valor 
default – para o caso de não haver nenhum valor equivalente ao valor da expressão ou variável.
switch (expressão aritmética inteira ou variável){
 case constante1:
 comandos;
 break;
 case constante2:
 comandos;
 break;
 case constante3:
 comandos;
 break;
 case constante4:
 comandos;
 break;
73
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
 case constante5:
 comandos;
 break;
 case constanteX:
 comandos;
 break; 
 .
 .
 .
 default:
 comandos; 
}
O comando switch-case tem a seguinte semântica: inicialmente, verifica-se o conteúdo da variável ou expressão 
inteira e, em seguida, identifica-se qual das constantes corresponde ao mesmo conteúdo da variável ou expres-
são inteira. Após essa identificação verdadeira, o fluxo é desviado para executar o bloco identificado. 
Após a execução do comando ou do bloco de comandos, outro comando entrará em ação para finalizar o switch, 
sem se importar com quantas “condições” ainda teriam na sequência, pois, afinal, elas não precisam ser execu-
tadas. Esse comando é o break.
Caso nenhuma das constantes corresponda ao conteúdo da expressão ou variável, então o comando default 
será executado.
Veja alguns exemplos de problemas a seguir e, posteriormente, copie e teste cada um deles no Dev C++.
Problema 1: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o valor 
de um número inteiro correspondente a um dia da semana; por exemplo: 1 – domingo, 2 – segunda-feira, 3 – 
terça-feira, etc. Após essa leitura, o programa deve imprimir na tela o nome do dia em forma de texto. Quando o 
número digitado não corresponder a nenhum dos dias da semana, o programa deve apresentar uma mensagem 
default informando que o número digitado é inválido.
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
 int dia;
 printf(“Digite um número inteiro correspondente a um dia da semana, exemplo: 
\n\n1- domingo; \n2-segunda-fera ...\n\n”);
 scanf(“%i”,&DIA);
 switch(dia){
 case 1:
 printf(“\n Domingo!\n\n”);
74
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
 break;
 case 2:
 printf(“\n Segunda-feira!\n\n”);
 break;
 case 3:
 printf(“\n Terca-feira!\n\n”);
 break;
 case 4:
 printf(“\n Quarta-feira!\n\n”);
 break;
 case 5:
 printf(“\n Quinta-feira!\n\n”);
 break;
 case 6:
 printf(“\n Sexta-feira!\n\n”);
 break;
 case 7:
 printf(“\n Sabado!\n\n”);
 break;
 default:
 printf(“\n Numero invalido.\n “);
 }
 return 0;
}
Problema 2: escreva um programa de computador utilizando a linguagem C que leia (entrada de dados) o 
número correspondente a um mês do ano e que, então, apresente na tela o nome do mês. Quando o número 
digitado não corresponder a um dos meses do ano, o programa deve apresentar uma mensagem informando 
que o número digitado é inválido. 
#include <stdio.h>
#include <locale.h>
int main( ){
 setlocale(LC_ALL, “Portuguese”);
 int mes;
75
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
 printf(“Digite o número correspondente a um mês do ano, exemplo: 
\n\n1-janeiro; \n2-fevereiro ...\n\n”);
 scanf(“%i”,&mes);
 switch(mes){
 case 1:
 printf(“\n Janeiro!\n\n”);
 break;
 case 2:
 printf(“\n Fevereiro!\n\n”);
 break;
 case 3:
 printf(“\n Marco!\n\n”);
 break;
 case 4:
 printf(“\n Abril!1\n\n”);
 break;
 case 5:
 printf(“\n Maio!\n\n”);
 break;
 case 6:
 printf(“\n Junho!\n\n”);
 break;
 case 7:
 printf(“\n Julho!\n\n”);
 break;
 case 8:
 printf(“\n Agosto!\n\n”);
 break;
 case 9:
 printf(“\n Setembro!\n\n”);
 break;
 case 10:
 printf(“\n Outubro!\n\n”);
 break;
 case 11:
 printf(“\n Novembro!\n\n”);
76
Construção de Algoritmos | Unidade 4 - Estruturas Condicionais ou de Decisão
 break;
 case 12:
 printf(“\n Dezembro!\n\n”);
 break;
 default:
 printf(“\n Número do mês inválido.\n “);
 }
 return 0;
}
Sínteseda unidade
Por meio desta unidade, você foi capaz de entender os conceitos de estruturas de decisão para a linguagem de 
programação C. Além disso, você pôde testar pequenos programas, observar a aplicação dessas estruturas na 
prática e como foi possível resolver problemas mais elaborados com a aplicação dos comandos if, if-else, if-else-if 
e switch-case.
77
Considerações finais
Parabéns, você chegou ao final da unidade 4 e aprendeu a aplicar os 
comandos referentes às estruturas de decisão para a programação de 
computadores utilizando a linguagem C. Com isso, seu poder para cons-
truir programas de computador ficou ainda maior, pois as estruturas de 
decisão permitem resolver problemas mais elaborados por meio da pro-
gramação de computadores. Agora, siga em frente!
78
 5Unidade 55. Estruturas de Repetição: 
While e Do-While
Para iniciar seus estudos
Caro aluno, nesta unidade seguiremos evoluindo e aprimorando nossos 
conhecimentos sobre a construção de algoritmos, desta vez, utilizando 
novos recursos! Agora chegou a vez de você aprender sobre estruturas 
lógicas que permitem a repetição de certos trechos do código. Você verá 
comandos de repetição para praticar na linguagem de programação C. 
Pronto para continuar? Então, vamos!
Objetivos de Aprendizagem
Ao final desta unidade, esperamos que você seja capaz de:
• Identificar as melhores aplicações de estruturas de repetição em 
um programa.
• Examinar as possíveis estruturas de repetição a serem utilizadas, 
de acordo com os comportamentos esperados.
• Comparar o comportamento das estruturas de repetição de 
acordo com as entradas e saídas do programa.
• Formular expressões de código que contenham estruturas de 
repetição para aplicar em programas na linguagem C.
79
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
Introdução da unidade
Esta unidade define as estruturas de repetição na linguagem de programação C com a utilização dos comandos 
while e do-while. Você terá, inicialmente, os conceitos sobre essas estruturas e seus comportamentos de acordo 
com os dados que elas devem tratar. Em seguida, será mostrado como devem ser compostas e desenvolvidas 
essas estruturas na construção de algoritmos. Ao final, você poderá criar programas na linguagem C que execu-
tem trechos com repetição de comandos, além dos recursos que aprendeu até aqui.
5.1 Estruturas de repetição
Assim como há as estruturas de controle de decisão, implementadas pelos comandos if (e suas variações) e swit-
ch-case, há também as estruturas de repetição, implementadas pelos comandos while e do-while. Esses tipos de 
estrutura permitem repetir alguns trechos do algoritmo inúmeras vezes, desde que respeitadas as condições que 
controlam as repetições definidas no programa. 
Em computação, os programas podem ser desenvolvidos de forma que parte de seu código possa ser executada 
repetidas vezes, de acordo com o problema a ser resolvido, enquanto determinada condição seja verdadeira. 
Estruturas de programação que executam tarefas ou ações de forma repetida são conhecidas também como 
loop ou looping. Essas estruturas permitem que trechos do programa sejam executados várias vezes sem que 
haja necessidade de repetir o código desses trechos. Isso torna o programa menor, reduzindo o trabalho do 
programador. 
5.1.1 Estrutura de repetição com condição inicial – while 
Há situações no dia a dia em que temos que verificar alguma condição antes de realizar algum processo repe-
titivo. Quando você quer executar algumas transferências bancárias pelo celular, por exemplo, o aplicativo do 
banco solicita a sua confirmação para executar mais uma transferência. Dessa forma, considere que há uma 
confirmação, ou seja, uma condição é testada no início do processo e antes de repeti-lo. 
Estruturas de repetição são entendidas como trechos de um programa que possuem tarefas sendo executadas 
repetidas vezes, de acordo com condições específicas, ou seja, enquanto aquela condição for verdadeira, as ins-
truções da estrutura de repetição serão executadas. O comando while (enquanto) possui uma condição em seu 
início que é responsável por controlar a repetição do corpo de instruções contidas no comando. 
Em computação, programas podem ser desenvolvidos de forma que algumas ações contidas no algoritmo pos-
sam ser executadas repetidas vezes, de acordo com o problema a ser resolvido, enquanto determinada condição 
seja verdadeira. 
Exemplo
Quando um programa deseja incrementar um número enquanto ele for menor do que 10, ele faz:
enquanto número menor que 10 faça:
 incrementar número
fim enquanto
80
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
O enquanto (em Portugol) é implementado na linguagem C pelo comando while. A sintaxe do comando while, 
representando o trecho anterior, seria a seguinte:
while (numero < 10) 
 numero = numero + 1;
De acordo com essa estrutura representada, enquanto a condição do while for VERDADEIRA, a instrução será 
executada. Quando o teste da condição for FALSO, a instrução não será mais executada e o programa seguirá 
para o próximo comando.
Na estrutura de repetição while, ainda é possível adicionar mais de uma instrução a ser executada enquanto a 
condição for verdadeira. Nesse caso, será necessário adicionar os delimitadores de código que indicam o início e 
o fim de uma estrutura, também semelhante às estruturas do if e else. No início do trecho, basta inserir o delimi-
tador de abrir as chaves “{” e, ao término do trecho, inserir o delimitador para fechar as chaves “}”. A seguir, segue 
a sintaxe para esses casos, nos quais existe mais de uma instrução na estrutura repetição:
while <condição>{
 Instrução1;
 Instrução2;
 Instrução3;
}
O que difere o comando while das estruturas de decisão já estudadas, como if e else, é o fato 
de a instrução dentro do trecho poder ser executada REPETIDAS vezes ENQUANTO aquela 
condição de testes for verdadeira. No if, caso a condição seja verdadeira, a instrução será 
executada apenas uma vez e passará para a próxima linha do programa.
Fique atento!
Você pode visualizar o comportamento de um programa com o trecho de repetição utilizando o comando while 
na figura abaixo. Nela, é possível ver o passo a passo que um algoritmo segue para entrar e executar as instruções 
dentro de uma estrutura de repetição. Enquanto o teste da condição for verdadeiro, as instruções internas se 
repetem. Quando o resultado do teste de condição for falso, a repetição termina e as instruções não se repetem 
mais. O programa passa então para a próxima linha do algoritmo após esse trecho. Esse fluxo pode ser visto na 
figura a seguir (AGUILAR, 2011).
81
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
Figura 28 – Diagrama do fluxo de uma repetição com o comando while
condição
falso
verdadeiro
instruç(ão)/ões
Fonte: Elaborada pelo autor.
De acordo com a figura, o algoritmo segue alguns passos para ser executado, compondo o fluxo da estrutura de 
repetição while:
Passo 1 – verifica se a condição é verdadeira ou falsa.
Passo 2 – se o resultado da condição for verdadeiro:
Passo 2.1 – é executado o trecho interno da estrutura.
Passo 2.2 – ao final, o programa volta para o passo 1.
Passo 3 – caso o teste do passo 1 for falso:
Passo 3.1 – o programa não passa pela parte interna da estrutura, indo diretamente para o trecho seguinte ao 
comando while.
A seguir, serão exibidos alguns exemplos de condições a serem verificadas e de instruções executadas no corpo 
da estrutura while.
Exemplo 1: uma variável hora com valor inicial 1. Enquanto a hora for menor que 12, o programa exibirá a men-
sagem “Bom dia”. Detalhe: a cada vez que o programa executa, o horário é aumentado em 1 (uma) hora.
int hora = 1;
while(hora < 12){
 printf(“Bom dia!!!\n”);
 hora = hora + 1;
}
82
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
No Exemplo 1, a variávelhora é inicializada com o valor 1 antes de entrar na repetição. A mensagem “Bom dia” 
será exibida 11 vezes, ou seja, para os valores de 1 até 11 da variável hora, que são os valores menores do que 12. 
Quando a hora chegar a 12, a pergunta se é menor que 12 retornará falsa e, assim, o programa não mais entrará 
no trecho de repetição while.
Exemplo 2: enquanto a idade for menor do que 18, o programa exibirá a idade do usuário. Detalhe: a variável 
idade tem valor inicial 1 e, a cada vez que a idade é exibida, seu valor é acrescido de 1.
int idade = 1;
while(idade < 18){
 printf(“Sua idade agora é: %i \n”, idade);
 idade = idade + 1;
}
No Exemplo 2, o programa executará as instruções dentro do comando while 17 vezes, exibindo a frase “Sua 
idade agora é” e mostrando o valor atual da variável idade, ou seja, os números de 1 a 17. Ele não mostra o 18, 
pois, quando a idade chega no valor de 18, ela não é mais menor do que 18, não executando, assim, as instruções 
dentro do comando while.
A seguir, você terá alguns exemplos de problemas que podem ser resolvidos utilizando a estrutura de repetição 
while e aplicando os conceitos vistos até aqui.
Problema 1: escreva um algoritmo utilizando a linguagem C que inicialize uma variável do tipo inteiro com o valor 
1. Enquanto o valor dessa variável for menor do que 10, o programa deverá imprimir a mensagem “repetindo 
instrução”. Após exibir a mensagem, ainda dentro da repetição, deve-se incrementar a variável. 
#include <stdio.h>
int main( ){
 int numero;
 
 while(numero < 10)
 {
 printf(“repetindo instrução \n”);
 numero = numero + 1;
 }
 
 return 0;
}
83
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
Problema 2: escreva um algoritmo utilizando a linguagem C que receba do usuário o valor de uma variável do 
tipo inteiro. Enquanto esse valor for menor do que 100, o programa deverá exibir a mensagem “Valor atual da 
variável é” e mostrar o valor atual. Após exibir a mensagem, ainda dentro da repetição, a variável receberá o seu 
valor atual, multiplicado por 2.
#include <stdio.h>
int main( ){
 int numero;
 
 printf(“Digite um número inteiro \n\n”);
 scanf(“%i”, &numero);
 
 while(numero < 100)
 {
 printf(“Valor atual da variável é %i \n”, numero);
 numero = numero * 2;
 }
 
 return 0;
}
5.2 Estrutura de repetição com condição ao final – do-while
Até agora, foram exibidos conceitos e situações sobre estruturas de repetição que fazem a validação de condi-
ções específicas antes da execução das instruções. Porém, também é possível executar as instruções repetidas 
vezes fazendo a avaliação de uma condição após a execução das instruções. Nesse tipo de estrutura, a verificação 
da condição é realizada após a execução das instruções, com uma decisão no final da estrutura; portanto, a pri-
meira execução é realizada sem nenhum teste de condição.
Essa é uma variação do comando while que você já conhece, denominada do-while, que é usada para a execução 
da repetição pelo menos uma vez. Após a primeira execução das instruções, aí sim será verificada uma condição 
para que o programa possa ou não executar as instruções novamente. Situações como essa ocorrem quando há 
casos em que é necessário que uma instrução seja executada por segurança ao menos uma vez (AGUILAR, 2011).
Para exemplificar: num programa, você deseja exibir uma mensagem pelo menos uma vez, ou até o usuário teclar 
um comando ou informar determinado valor para sair da exibição. Esse comando ou valor a ser analisado na con-
dição pode ser um número. Um algoritmo que representa essa situação é demonstrado a seguir:
faça:
 exibir mensagem
ler número
enquanto número menor que 10
Na linguagem C, o comando do-while é utilizado para representar o faça: ...enquanto. A sintaxe para utilização da 
estrutura do-while, representando o trecho anterior na linguagem C, seria a seguinte:
84
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
int numero = 0;
do{
 printf(“Mensagem\n”);
 scanf(“%d”, &numero);
} while (numero < 10);
De acordo com essa estrutura, a instrução de exibição será executada e, em seguida, será lido o valor para a 
variável número, digitada pelo usuário. ENQUANTO a verificação da condição com o valor digitado pelo usuário 
retornar VERDADEIRO, o programa repetirá a execução novamente das instruções. Após a execução da instrução 
de exibição e a digitação do valor pelo usuário, uma nova verificação da condição será feita.
O que difere os comandos do-while e while é que, no comando while, as instruções dentro da 
repetição são sempre executadas, pelo menos uma vez. Só após a primeira execução é que 
a condição é verificada. No while, a verificação da condição ocorre sempre antes de qualquer 
instrução ser executada, o que pode fazer com que a instrução não seja executada no caso 
de a condição ser falsa.
Fique atento!
Você também pode visualizar o comportamento de um programa com o trecho de repetição utilizando o comando 
do-while na figura a seguir. Nela, é possível ver o passo a passo que um algoritmo segue para entrar e executar as 
instruções de uma estrutura de repetição com o comando do-while. 
Figura 29 – Diagrama do fluxo de um laço do-while
instruç(ão)/ões
verdadeiro
condição
falso
 
Fonte: Elaborada pelo autor.
85
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
De acordo com a figura, o algoritmo segue alguns passos para ser executado, compondo o fluxo da estrutura de 
repetição do-while:
Passo 1 – entra na estrutura de repetição.
Passo 2 – executa as instruções internas da estrutura.
Passo 3 – verifica se a condição é verdadeira ou falsa.
Passo 4 – se o resultado da condição for verdadeiro, volta-se para o passo 1.
Passo 5 – se o resultado da condição for falso, deve-se sair da estrutura de repetição.
A seguir, serão exibidos alguns exemplos de estruturas de repetição com o comando do-while.
Exemplo 1: fazer um programa em C que exiba uma mensagem e incremente a hora, que se inicia com 1. 
Enquanto a hora for menor do que 12, o programa repetirá as instruções.
int hora = 1;
do{
 printf(“Bom dia!!!\n”);
 hora = hora + 1;
}while(hora < 12);
No Exemplo 1, o programa não realiza nenhuma verificação antes de entrar na estrutura e executar as instruções. 
Após essa execução, considerando que a hora inicial é 1 antes de entrar na repetição, sempre após incrementar 
a hora, o programa verificará se ela ainda é menor que 12. Quando a hora chegar a 12, a verificação se é menor 
que 12 retornará falsa e, assim, o programa sairá da repetição. 
Exemplo 2: fazer um programa em C que exiba o valor de uma variável número na tela e decrementar de umessa 
variável. Enquanto o número for maior do que 5, o programa deve retornar ao início da estrutura e repetir a exe-
cução das instruções. Neste exemplo, considera-se que o valor de número se inicia em 6. 
int numero = 6;
do{
 printf(“O número atual é: %i \n”, numero);
 numero = numero - 1;
}while(numero > 5);
Neste exemplo, independentemente do valor da variável número, ela executará as instruções pela primeira vez 
antes de realizar a verificação da condição. Após exibir a mensagem e decrementar a variável número de um, o 
resultado da avaliação da condição será FALSO, pois o valor de número, inicialmente 6, agora é 5, que não é maior 
do que 5 (número é igual a 5). Dessa forma, o programa não mais retornará para o início da estrutura e seguirá 
86
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
para o próximo comando após o comando do-while. Percebe-se nesse caso que, ao utilizar a estrutura do-while, o 
programa entra pelo menos uma vez e executa as instruções da estrutura. Utilizando a estrutura while, isso não 
ocorreria.
A seguir, você verá alguns exemplos de problemas que podem ser abordados utilizando a estrutura de repetição 
do-while e aplicando os conceitos vistos atéaqui.
Problema 1: escreva um algoritmo utilizando a linguagem C que exiba na tela um número inteiro, iniciando em 0. 
O programa deve exibir os números enquanto eles forem menores do que 10. A cada exibição, o número será 
incrementado. Quando atingir o valor limite de 10, o programa sairá da estrutura do-while. 
#include <stdio.h>
int main( ){
 int numero;
 numero = 0;
 do{
 printf(“Número: %i \n”, numero);
 numero = numero + 1;
 }while(numero<10);
 
 return 0;
}
Problema 2: escreva um algoritmo utilizando a linguagem C que utilize uma variável do tipo inteiro, iniciando 
com o valor 1. O programa deve utilizar um comando de repetição do tipo do-while que exiba a mensagem “Tecle 
0 para sair ou outro valor para continuar”. O programa deve ler um valor informado pelo usuário e armazenar na 
variável valor existente. A estrutura de repetição deve ser executada enquanto o usuário digitar qualquer valor 
diferente de 0. Quando ele digitar 0, o programa deve sair do comando do-while e seguir para o próximo comando.
#include <stdio.h>
int main(){
 int valor;
 valor = 1;
 do{
 printf(“Tecle 0 para sair ou outro valor para continuar\n”);
 scanf(“%i”, &valor);
 }while(valor!=0);
 return 0;
}
87
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
5.3 Variáveis para controle de execução
Nos conceitos sobre estruturas de repetição, você pode perceber a utilização de variáveis auxiliares em todas as 
condições e em alguns trechos de instrução. Algumas dessas variáveis são primordiais para o funcionamento 
de estruturas de repetição. Existem três tipos de variáveis que podem ser utilizadas nesse contexto: contadores, 
acumuladores e variáveis de controle.
As variáveis contadoras (ou contadores) são utilizadas dentro dos comandos de repetição para contar a quan-
tidade de vezes que determinada situação venha a ocorrer. Já as variáveis acumuladoras também ficam dentro 
dos comandos de repetição, mas guardam nelas os valores acumulados de algumas operações ou de outras 
variáveis. Já as variáveis de controle são utilizadas na condição das estruturas, servindo como base principal para 
que a condição, ao ser avaliada, tenha um valor VERDADEIRO ou FALSO para determinar a execução ou não das 
instruções internas da repetição. 
Veja alguns exemplos: uma condição de uma estrutura de repetição pode ter uma variável de controle, que, ao ter 
o seu valor alterado, pode mudar o resultado da condição para VERDADEIRO ou FALSO. Uma condição também 
pode ter um contador, que é uma variável que armazena a quantidade de vezes que determinada situação ocorre 
dentro da repetição, para utilizá-la dentro ou após a repetição. Um acumulador, por sua vez, é uma variável res-
ponsável por acumular os valores das variáveis, ou seja, a cada vez que a repetição é executada, o acumulador 
recebe, além do seu próprio valor, o valor de alguma variável utilizada dentro da repetição. 
Você também pode utilizar o quadro a seguir para entender resumidamente o que são esses três tipos de variáveis 
e sua função numa estrutura de repetição.
Quadro 10 – Variáveis de controle, contadora e acumuladora
Controle Contadora Acumuladora
• Decisiva para a condição de 
entrada ou saída da repetição.
• O valor pode variar a cada iteração.
• Pode auxiliar a execução da 
repetição.
• Valor incrementado ou 
decrementado a cada iteração 
é constante.
• Auxilia na soma ou subtração 
de valores de operações ou 
variáveis a cada iteração.
• Valor somado ou subtraído 
a cada iteração pode ser 
variável.
Fonte: Elaborado pelo autor, baseado em MANZANO, 2016.
No quadro anterior, é possível diferenciar a função e a aplicação de cada uma das variáveis. A seguir, é exibido um 
programa que engloba as três situações:
enquanto controle menor que 100 faça:
 if(controle % 2 == 0){
 contador = contador + 1;
 acumulador = acumulador + controle;
 }
 incrementar controle
fim enquanto
88
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
Na linguagem C, as variáveis de controle, contadoras e acumuladoras são associadas às estruturas dos comandos 
while e do-while e utilizadas com nomes que facilitam a relação com a sua função. A sintaxe para utilização do 
comando while, representando o pseudocódigo anterior na linguagem C, seria a seguinte:
while (controle < 100){
 if (controle % 2 == 0){
 contador = contador + 1;
 acumulador = acumulador + controle;
 }
 controle++;
}
De acordo com essa estrutura representada, enquanto a condição do while for VERDADEIRA, de acordo com o 
valor do controlador, a repetição será executada. Na execução, toda vez que o programa avaliar a condição do 
comando if, e o resultado for VERDADEIRO, o contador será incrementado de um e o acumulador receberá seu 
valor acrescido do valor da variável que ele deseja acumular. Quando o resultado da avaliação da condição for 
FALSO, o comando if não será mais executado e o programa seguirá para o próximo comando.
A seguir, serão exibidos alguns exemplos de condições a serem verificadas e de instruções executadas no corpo 
da estrutura do-while.
Exemplo 1: o programa deve executar uma repetição enquanto a variável controle for menor do que 20. Essa 
variável de controle será iniciada com o valor 1 e será incrementada de cinco em cinco dentro do comando de 
repetição, mas é ela que controlará se a condição do comando do-while será VERDADEIRA ou FALSA. Quando 
a avaliação da condição contendo o controlador resultar numa resposta FALSA, o comando de repetição será 
finalizado.
int controle = 1;
do{
 controle = controle + 5;
}while (controle < 20);
Exemplo 2: o programa deve contar quantas vezes ele passou pelo bloco de instruções da estrutura de repeti-
ção. Essa quantidade de vezes em que foi executado deve ser exibida na tela após o programa. O programa deve 
executar iniciando o contador e a variável de controle em 0 e executar enquanto for menor do que 200. Deve-se 
utilizar a estrutura de repetição com o comando while.
int numero = 0;
int contador = 0;
while (numero < 200){
 numero = (numero + 1) * 2;
 contador = contador +1;
}
printf(“As instruções executadas: %i \n”, contador);
89
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
Neste exemplo, a cada iteração, a variável contador é incrementada. Dessa forma, mesmo que a instrução que 
altera a variável de controle não seja um simples incremento, o programa contará quantas vezes as instruções 
foram executadas e armazenará essa contagem na variável contador.
Exemplo 3: o programa possui uma estrutura de repetição, mas precisa acumular um valor e guardá-lo em 
uma variável até o final da execução das instruções. Esse valor acumulado deverá ser exibido após o término do 
comando de repetição. Neste exemplo, considera-se que o valor de número se inicia com 1. 
int numero = 1;
int total = 0;
int numero = 1;
int total = 0;
while(numero < 10){
 total = total + numero;
 numero = numero +1;
}
printf(“O valor total dos números, somados, é: %i”, total);
Nesse exemplo, o programa guardará o valor da variável número dentro da variável total, ou seja, ele acumula 
todos os valores em uma variável, exibindo esse total após sair do comando de repetição.
A seguir, você terá alguns exemplos de problemas que podem ser abordados utilizando as estruturas de repeti-
ções vistas até aqui, além da utilização de variáveis de controle, contadoras e acumuladoras.
Problema 1: escreva um algoritmo utilizando a linguagem C que utilize três variáveis inteiras: x, y e flag. As variá-
veis flag e x devem possuir o valor inicial igual a 0. Leia do usuário um número qualquer e guarde na variável y. 
Em seguida, o seu programa deve utilizar uma estrutura de repetição com o comando while, que é executado 
enquanto a variável x for menor ou igual a 50. Dentro da repetição, a variável xdeve ser incrementada de um. 
A cada execução, seu programa deve verificar se o valor de y é igual ao valor de x. Em caso positivo, a variável flag 
deve receber o valor 1; caso contrário, não será alterada. Quando o programa sair da estrutura de repetição, se a 
variável flag for igual 0, deve exibir a mensagem “Número não encontrado”. Se flag for igual a 1, exibir “Número 
encontrado na listagem”.
#include <stdio.h>
int main(){
 int x, y, flag;
 x = 0;
 flag = 0;
 printf(“Digite um número inteiro positivo: \n”);
 scanf(“%i”, &y);
 while(x <= 50){
90
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
 if(y == x)
 flag = 1;
 x = x + 1;
 }
 if(flag==0)
 printf(“Número %i não encontrado \n”, y);
 else
 printf(“Número %iencontrado na listagem \n”, y);
 return 0;
}
Problema 2: escreva um algoritmo utilizando a linguagem C para:
(i) Calcular a média aritmética das duas notas de cada aluno e definir sua situação.
(ii) Ler a quantidade de alunos a serem processados.
(iii) Ler o RA, a nota1 e a nota2.
(iv) Imprimir o RA, nota1, nota2 e a média calculada, e imprimir a situação do aluno, sendo: menor do que 
4.0 – REPROVADO, entre 4 e 6 – EXAME e maior do que 6.0 – APROVADO.
#include <stdio.h>
int main(){
 int raAluno = 0, contAluno, qtdAlunos = 0;
 float nota1 = 0.0, nota2 = 0.0, media = 0.0;
 printf(“Informar quantidade de alunos: );
 scanf(“%d”, &qtdAlunos);
 while (contAluno < qtdAlunos){
 printf(“Informar o RA do Aluno: );
 printf(“Informar a nota1: );
 scanf(“%f”, &nota1);
 printf(“Informar a nota2: );
 scanf(“%f”, &nota2);
 prinft(“\nSituacão do Aluno:\n”);
 printf(“RA: %d\n”, raAluno);
 media = (nota1 + nota2) / 2.0;
 print(“nota1 = %.1f - nota2 = %.1f - media = %.1f - ”, nota1, nota1, media); 
 if (media < 4.0)
 printf(“REPROVADO\n);
 else if (media >= 4.0 && media <= 6.0)
 printf(“EXAME\n”);
 else 
 printf(“APROVADO\n”);
 contAluno++;
 }
 return 0;
}
91
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
Problema 3: escreva um programa utilizando a linguagem C com duas variáveis – número e total – inicializadas 
com zero. Enquanto o valor da variável número for menor do que 50, verificar se número é PAR ou ÍMPAR. Caso 
a variável número seja PAR, somar o valor da variável número na variável total. Após processar os 50 números, o 
programa deve exibir o total acumulado dos valores PARES.
#include <stdio.h>
int main(){
 int numero, total;
 numero = 0;
 total = 0;
 
 while(numero < 50){
 if(numero % 2 == 0)
 total = total + numero;
 numero = numero +1;
 }
 
 printf(“Soma dos pares de 0 a 50 é: %i\n”, total);
 
 return 0;
}
5.4 Estruturas de repetição infinita – loop infinito
Como visto, as estruturas de repetição dependem sempre de uma condição para que as instruções internas 
sejam executadas e, consequentemente, sua execução seja realizada um número indeterminado de vezes ou 
não ser realizada. 
Uma variável de controle ou uma expressão lógica presente na condição de uma estrutura while ou do-while é res-
ponsável por indicar o momento de entrar e permanecer na repetição, bem como o momento de sair e finalizar a 
repetição. Se essa variável não atinge a condição de saída da repetição, as instruções da repetição são executadas 
de forma infinita, enquanto o computador ou processo estiver ligado/ativo. Esse tipo de repetição é chamado de 
loop infinito.
92
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
Quando uma condição é utilizada no while ou do-while, espera-se que ela seja atualizada 
em algum momento para que o programa passe para a próxima instrução e não se repita de 
forma não controlada. Quando um programa executa ações sem que a condição do while ou 
do do-while se altere, poderá entrar num loop infinito, ou seja, os trechos serão executados 
dentro da estrutura de forma ininterrupta, já que a condição para a estrutura de repetição 
não muda e continuaria sempre verdadeira.
Fique atento!
Exemplo 1: este exemplo traz uma situação conhecida como loop infinito, na qual, após passar pelo teste condi-
cional do comando de repetição, o programa executa as instruções, mas não altera a variável de controle, man-
tendo a condição como verdadeira infinitamente.
int numero = 1;
while(numero < 12){
 printf(“O número atual é: “, numero);
}
Neste exemplo, o valor da variável número inicia-se com 1. Como ele verifica se 1 é menor do que 12, o programa 
entra no trecho da estrutura while. Após entrar, a variável número é exibida na tela, mas não sofre alteração. 
Como seu valor não é alterado, ele permanecerá sempre como 1 e, consequentemente, será sempre menor do 
que 12. Este é um exemplo de looping infinito, já que o programa exibirá a frase “O número atual é: 1” infinita-
mente, enquanto o programa estiver em execução.
As estruturas de repetição na programação de algoritmos são extremamente importantes 
quando se deseja repetir partes do código, sem precisar codificar várias vezes os seus coman-
dos. Com a sua utilização, você pode eliminar verificações e comandos desnecessários do 
programa, além de otimizar o código e agrupar expressões que dependam de uma mesma 
condição num só trecho. Além disso, é possível colocar uma repetição dentro de outra repe-
tição para resolver problemas ainda mais complexos.
Utilize os exemplos e soluções propostos nesta unidade para praticar em seu computador e aprender mais sobre 
esses recursos.
93
Construção de Algoritmos | Unidade 5 - Estruturas de Repetição: While e Do-While
Síntese da unidade
Nesta unidade, foram apresentados os conceitos e conteúdos sobre as estruturas de repetição dos tipos while 
e do-while utilizando a linguagem de programação C. Através dos exemplos e programas expostos, você pôde 
observar de forma mais clara o funcionamento dessas estruturas, além de situações em que elas podem ser 
aplicadas na prática.
94
Considerações finais
Que bom que você chegou até aqui: o final da unidade 5! Parabéns! Com 
esta unidade, você já é capaz de aplicar as estruturas de repetição e utilizar 
condições para controlar sua execução e poderá usar tais conhecimentos 
na criação e desenvolvimento de algoritmos e programas de computador 
na linguagem C. Agora você tem mais recursos para encarar situações-
-problemas mais elaboradas.
95
 6Unidade 66. Estruturas de Repetição: For
Para iniciar seus estudos
Caro aluno, nesta unidade você aprofundará ainda mais os seus conhe-
cimentos sobre a construção de algoritmos com a inserção de mais um 
conteúdo! Você continuará aprendendo sobre estruturas lógicas que per-
mitem a repetição de certos trechos do código, mas, desta vez, uma nova 
estrutura de repetição será apresentada para que você possa praticar na 
linguagem de programação C. Pronto para continuar? Então, vamos!
Objetivos de Aprendizagem
Ao final desta unidade, esperamos que você seja capaz de:
• Apontar as possíveis estruturas de repetição para utilizar no 
desenvolvimento de programas.
• Identificar as características presentes na formulação de estrutura 
de repetição com o comando for.
• Identificar a melhor estrutura para utilizar em determinadas situa-
ções, levando em consideração as variáveis e saídas esperadas.
• Aplicar programas que utilizem estruturas de repetição para tratar 
situações-problemas e otimizar o código.
96
Construção de Algoritmos | Unidade 6 - Estruturas de Repetição: For
Introdução da Unidade
Nesta unidade, você terá a definição da estrutura de repetição for no contexto da programação com a lingua-
gem C. Será apresentada a forma de construção dessa estrutura levando em consideração as variáveis, condições, 
expressões e demais características que compõem esse tipo de laço.Além dos conceitos para desenvolver estru-
turas de repetição com o comando, você verá também situações em que ela é indicada, assim como exemplos de 
situações mais comuns e de problemas propostos, para que aprenda de forma prática a aplicação dessa estrutura 
de repetição na programação. Ao final desta unidade, você poderá criar programas na linguagem C que executem 
trechos com repetição de comandos e com os demais recursos que aprendeu até aqui.
6.1 A estrutura de repetição com o comando for 
Na construção de programas e algoritmos, alguns recursos são necessários para que o programa tenha uma 
sequência lógica de instruções sendo executadas e para que seja possível definir algumas condições para que 
determinados trechos do programa sejam repetidos. Já foi demonstrado na unidade anterior que existem estru-
turas que permitem a repetição de seu conteúdo, ou seja, possibilitam que suas instruções sejam executadas 
uma ou mais vezes caso as condições de controle de repetição sejam verdadeiras.
Você já conheceu as estruturas de repetição que utilizam a lógica de iterações enquanto a avaliação de determi-
nada condição for verdadeira, implementadas com os comandos while e do-while. Além dessas, há outra estrutura 
de repetição que funciona um pouco diferente: o comando for.
O comando for adapta-se a situações nas quais o número de vezes em que haverá iterações é conhecido, ou 
seja, quando se sabe o limite de iterações a serem realizadas, independentemente das instruções realizadas no 
interior da sua estrutura.
O comando for pode ser representado por um diagrama com três blocos, como pode ser observado na figura a 
seguir.
Figura 30 – Diagrama do comando for.
 
inicialização
instruç(ão)/ões
Pós-iteração
verdadeiro
condição
falso
Fonte: elaborado pelo autor.
97
Construção de Algoritmos | Unidade 6 - Estruturas de Repetição: For
O comando for é composto por três partes, representadas na figura anterior pelos três blocos no início do dia-
grama. O primeiro bloco pode inicializar uma ou mais variáveis, sendo, portanto, o ponto de partida da repetição. 
O segundo bloco contém uma condição, que pode determinar a parada das repetições ou o limite de iterações. 
O terceiro bloco pode conter a atualização do valor (incremento ou decremento) de uma variável de controle, 
definida no primeiro boco. 
A sintaxe da estrutura de repetição com o comando for pode ser definida da seguinte forma:
for(inicialização; condição; pós-iteração){
 instrução/instruções;
}
Nessa sintaxe, ainda conforme demonstrado na figura supra, a inicialização é o ponto de partida para o for ou a 
definição de qual será o valor inicial da variável de controle utilizada. A condição pode ser definida em relação à 
variável de controle indicando um limite para ela, como um número máximo ou mínimo.
Pós-iteração é o que ocorre com a variável de controle após as instruções internas do comando for serem exe-
cutadas, ou seja, assim que o programa executar as instruções da estrutura, ele executará a pós-iteração, que, 
geralmente, é o modo de incremento ou decremento da variável de controle.
Ainda de acordo com a sintaxe definida anteriormente, o funcionamento do comando for pode ser resumido de 
acordo com o esquema demonstrado na figura a seguir.
Figura 31 – Esquema do comando for.
 
1
2
4
5
3
inicializaçãofor ( ; ; )condição 
instruções;
pós-iteração
Fonte: elaborado pelo autor.
Para que você entenda melhor cada um dos passos e componentes da estrutura exibida na figura acima, a seguir 
são descritas cada uma das etapas:
Passo 1 – o código de inicialização é executado. Geralmente, é a definição e inicialização da variável de controle. 
Esse componente é executado no momento em que o programa inicia a execução do comando for.
Passo 2 – a condição é avaliada. Esta condição pode estar à variável de controle e definir um limite de valor para ela.
Passo 3 – se o resultado da condição for FALSO, o programa finaliza o comando for e passa para a próxima linha 
após essa estrutura.
Passo 4 – se o resultado da condição for VERDADEIRO, o programa executa a instrução ou o grupo de instruções 
internas do comando.
Passo 5 – após a instrução do comando ser executada, o programa executa a pós-iteração. A variável de controle 
pode sofrer aqui um incremento ou decremento.
98
Construção de Algoritmos | Unidade 6 - Estruturas de Repetição: For
Passo 6 – após realizar a pós-iteração, o programa volta ao Passo 2 e repete as demais instruções.
Há diferenças entre o comando for e o comando while, visto que, na estrutura for, as operações de controle ficam 
localizadas somente no cabeçalho do comando. No while, as operações de controle (iterações, atribuições e alte-
rações nas variáveis de controle) são feitas antes do comando e, também, dentro da estrutura.
Trazendo para a pseudolinguagem ou português estruturado, os comandos utilizados pela estrutura são: para, 
de - até, passo, faça e fim. A estrutura a seguir demonstra essa definição.
para <variável> de [<início>] até [<fim>] passo [<incremento>] faça:
 [<instruções enquanto variável de controle itera>];
fim para;
Exemplo de situação em que se usa pseudolinguagem: utiliza-se uma variável de controle/mês. Para todo mês, 
de 1 até 12, aumentando de 1 em 1, é exibida uma mensagem mostrando o número do mês. Essa situação pode 
ser demonstrada com a seguinte estrutura:
para mês de 1 até 12 passo 1 faça:
 imprima: Este é o mês: mês;
fim para;
O mesmo trecho, já na linguagem de programação C, utiliza a estrutura demonstrada na sintaxe a seguir e na 
Figura Diagrama do comando for. Ele pode ser desenvolvido de acordo com a estrutura a seguir:
int mes;
for (mes = 1; mes <= 12;){
 printf(“Este é o mes %i \n”, mes);
}
O código do programa em C executa a mesma função do código em pseudolinguagem demonstrado. Esse pro-
grama exibirá 12 vezes a mensagem na tela, sendo que, na primeira mensagem, o número do mês impresso será 
1 e, na última mensagem, o número do mês impresso será 12. Quando a variável de controle incrementar pela 
última vez (12 mais 1), passará a valer 13. Neste momento, ela sai da estrutura for e passa para o passo seguinte 
do programa.
99
Construção de Algoritmos | Unidade 6 - Estruturas de Repetição: For
Embora while, do-while e for sejam todos comandos de repetição, há diferenças entre eles. O 
comando for, demonstrado nesta unidade, tem definido previamente, em seu cabeçalho, o 
ponto de início e de fim para iteração, independentemente do conteúdo de sua estrutura. 
Os comandos while e do-while dependem de instruções internas para atualizar o valor da variá-
vel de controle; além disso, a inicialização da variável de controle é feita antes da estrutura.
Fique atento!
A seguir, são apresentados exemplos de aplicação da estrutura de repetição for:
Exemplo 1: fazer um programa em C que exiba uma mensagem na tela e se incremente a cada hora, desde a hora 
0 até a hora 24, de uma em uma hora. Para a variável de controle, é comum utilizar a variável “i” (de iteração) ao 
invés de dar nomes como “hora”.
int i;
for(i = 0; i < 25; i++){
 printf(“Agora sao %i horas! \n”, i);
}
No Exemplo 1, o programa define previamente os pontos iniciais e finais de iteração, sendo que o início é a variá-
vel “i” (hora) com o valor 0 e o final é quando ela ainda for menor do que 25, ou seja, na última iteração a variável 
“i” terá o valor de 24. A cada passo, a variável será incrementada de um em um (demonstrado pelo trecho i++).
Exemplo 2: para cada dia da semana, de 1 a 7 e incrementando um a um, pedir ao usuário que digite o valor 
de uma atividade. Para a variável de controle, é comum utilizar a variável “i” (de iteração) ao invés de dar nomes 
como “atividade”.
int i;
int valorAtividade;
for(i = 1; i < 8; i++){
 printf(“Digite uma atividade para dia %i: \n”, i);
 scanf(“%i”, &valorAtividade);
}
No Exemplo 2, o programa cria e inicializa previamente a variável “i” (dia), que é inicializada com o valor no início 
docomando for. Este programa também tem a condição final de execução, que é quando a variável “i” for igual 
ou maior que 8. A cada passo, o programa exibe uma mensagem e, em seguida, lê um valor digitado pelo usuário. 
100
Construção de Algoritmos | Unidade 6 - Estruturas de Repetição: For
Sempre ao final da execução das instruções, o programa realiza a iteração da variável “i” até que ela venha a atin-
gir o limite definido na condição.
A seguir, você terá alguns problemas utilizando a estrutura de for.
Problema 1: escreva um algoritmo utilizando a linguagem C que percorra, um a um, os números inteiros de 1 a 
50 e verifique quais deles são números PARES. O programa deve exibir cada número PAR na tela.
#include <stdio.h>
int main(){
 int i;
 for (i = 1; i < 51; i++){
 if(i % 2 == 0)
 printf(“O número %i é par! \n”, i);
 }
 return 0;
}
Problema 2: escreva um algoritmo utilizando a linguagem C que leia do usuário um número inteiro e guarde em 
uma variável. Após, o programa deve percorrer, um a um, todos os números inteiros entre 0 e 100 e verificar se 
um deles é igual ao número digitado pelo usuário. Caso encontre esse número, o programa deve exibi-lo na tela.
#include <stdio.h>
int main(){
 int numero = 0;
 int i;
 
 printf(“Digite um número inteiro: \n”);
 scanf(“%i”, &numero);
 
 for (i = 0; i < 101; i++){
 if( i == numero )
 printf(“Número %i encontrado! \n”, numero);
 }
 return 0;
}
Problema 3: escreva um algoritmo utilizando a linguagem C que leia do usuário dois números inteiros e diferen-
tes e guarde-os em variáveis. Após isto, o programa deve percorrer, um a um, todos os números inteiros entre 0 e 
100 e verificar se um deles é igual a um dos dois números digitados pelo usuário. Caso encontre esse número, o 
101
Construção de Algoritmos | Unidade 6 - Estruturas de Repetição: For
programa deve exibi-lo na tela imediatamente. O programa ainda deve gravar a quantidade de números encon-
trados e exibi-los logo após o término do comando for.
#include <stdio.h>
int main(){
 int i, numeroA, numeroB, quantidade;
 numeroA = 0;
 numeroB = 0;
 quantidade = 0;
 printf(“Digite o primeiro número: \n”);
 scanf(“%i”, &numeroA);
 printf(“Digite o segundo número: \n”);
 scanf(“%i”, &numeroB);
 
 for (i = 0; i < 101; i++){
 if (i == numeroA || i == numeroB){
 printf(“Número %i encontrado! \n”, numeroA);
 quantidade ++;
 }
 }
 printf(“Encontrados %i números entre 0 e 100”, quantidade);
 return 0;
}
Com os exemplos e problemas demonstrados neste conteúdo, você pôde conhecer melhor a aplicação e utiliza-
ção da estrutura de repetição for, assim como os elementos que a compõem. Dentro de cada estrutura, a exem-
plo do laço for, é possível criar várias instruções diferentes e de diversos tamanhos, mas é importante lembrar que 
toda instrução contida no comando de repetição será executada sempre que houver iteração e que a condição 
de controle tiver um resultado verdadeiro.
6.1.1 Variações na utilização do comando for 
O comando de repetição for pode ser utilizado para diversas situações que envolvam uma iteração, partindo de 
um valor inicial até um valor final predefinido. Na linguagem C, sua estrutura pode ser representada também com 
um comando while, como nas sequências a seguir:
Sintaxe de um laço for na linguagem C:
102
Construção de Algoritmos | Unidade 6 - Estruturas de Repetição: For
for(inicialização; condição; pós-iteração){
 instrução/instruções;
}
Sintaxe de um comando while, reescrevendo o comando for anterior, na linguagem C:
inicialização;
while (condição){
 instrução/instruções;
 pós-iteração;
}
Assim, em casos mais simples de problemas a serem tratados, é uma opção do usuário trabalhar com o comando 
for ou while, mas a estrutura do comando for representa em apenas três linhas o que a estrutura do comando 
while precisa de cinco linhas para representar.
Além da representação convencional, já demonstrada anteriormente, o for pode ter ainda algumas variações em 
sua construção. Caso haja mais de uma variável a ser inicializada, basta separá-las por vírgula. O comando for 
também pode ser utilizado com caracteres, por exemplo, para iterar de “a” até “z”. O for também pode ser ite-
rado, em números inteiros, de 2 em 2, 3 em 3 e assim por diante. Além disso, ele também pode ser utilizado para 
gerar loop infinito caso esta ação se encaixe em alguma situação de desenvolvimento. Essas variações podem ser 
visualizadas no quadro a seguir.
Quadro 11 – Algumas variações de utilização do comando for.
Variação de utilização Expressão na linguagem C
Teste de mais de uma variável for(i=0, j=1 ; (i+j) < 50; i++, j++)
 printf("%d", i + j);
Utilização de caracteres for (ch = 'a'; ch <= 'z'; ch++)
printf("Letra: %c \n", ch);
Iteração de 2 em 2 for (i=0; i<50; i = i+2)
 printf("Proximo par: %i \n", i);
Geração de loop infinito for ( ; ; )
 printf("Processando...\n");
Fonte: elaborado pelo autor, baseado em (SOFNER, 2013)
A seguir, são apresentados mais exemplos de aplicação da estrutura de repetição for.
103
Construção de Algoritmos | Unidade 6 - Estruturas de Repetição: For
Exemplo 1: fazer um programa em C que exiba na tela todos os números pares, de 0 até 100, iterando de 2 em 2, 
sem precisar fazer a divisão do número por 2.
for(i=0; i<=100; i = i+2)
printf(“Numero par: %i \n”, i);
No Exemplo 1, o programa percorrerá todos os números pares, de 0 até 100, porém de 2 em 2, visto que a variá-
vel “i” é incrementada recebendo seu valor acrescido de 2. Fazendo dessa forma, o programa não passará por 
nenhum número ímpar; por isso, não é necessário fazer verificação dentro do laço. Como se deseja exibir também 
o número 100, a condição precisa ser de “menor ou igual”.
Exemplo 2: fazer um programa em C que exiba todas as letras do alfabeto, de “a” até “z”, mostrando qual é a sua 
posição (ordem) no alfabeto.
int i;
for(ch=’a’, i=1; ch <= ‘z’; ch++, i++){
 printf(“Letra %c na posição %i \n”, ch, i);
}
No Exemplo 2, o programa percorrerá todas as letras e ainda utilizará mais uma variável auxiliar para saber a 
posição ou a ordem de cada letra dentro do alfabeto. As duas variáveis devem ser criadas antes da estrutura de 
repetição, pois, diferentemente da linguagem C++, a linguagem C não permite a declaração de variáveis dentro 
da estrutura de repetição. 
A seguir, você terá alguns exemplos de problemas que podem ser abordados utilizando a estrutura de repetição 
for e aplicando os conceitos vistos até aqui.
Problema 1: escreva um algoritmo utilizando a linguagem C que percorra, de 0 até 100, somente os núme-
ros ímpares e exiba-os na tela. Ao final do comando de repetição, informe também quantos números foram 
impressos.
#include <stdio.h>
int main(){
 int contador = 0;
 int i;
 for(i = 1; i<100; i = i+2){
 printf(“Este é um numero impar: %i \n”, i);
 contador ++;
 }
 printf(“Foram exibidos %i numeros impares.”, contador);
 return 0;
}
104
Construção de Algoritmos | Unidade 6 - Estruturas de Repetição: For
A utilização de um comando de repetição dentro de outro comando de repetição é 
chamada também de estrutura aninhada ou repetições encaixadas. São estruturas 
que, de certa forma, são subordinadas umas às outras para formar estruturas mais 
elaboradas.
Fique atento!
Problema 2: escreva um algoritmo utilizando a linguagem C que percorra os números referente aos dias da 
semana, de 1 até 7. Para cada dia, percorra também as horas do dia, de 0 até 24, exibindo na tela o dia e a hora. 
Utilize dois comandos for, sendo o comando das horas dentro do comando dos dias.
#include <stdio.h>
int main(){
 int dia = 0, hora = 0;
 for (dia=1; dia <=7; dia++){
 for (hora=0; hora <=24; hora++){
 printf(“Dia %i - Hora: %i \n”, dia, hora);
 }
 }
 return 0;
}
As estruturasde repetição na programação de algoritmos são extremamente importantes 
quando se deseja aplicar conhecimentos e práticas como o reaproveitamento de código, 
além das boas práticas de programação. Com sua utilização, você pode eliminar verificações 
e comandos desnecessários do programa, além de otimizar o código e agrupar expressões 
que dependam de uma mesma condição num só trecho. Utilize os exemplos e as soluções 
para os problemas propostos nesta unidade para praticar em seu computador e aprender 
mais sobre esses recursos.
105
Construção de Algoritmos | Unidade 6 - Estruturas de Repetição: For
Síntese da Unidade
Esta unidade trouxe para você os conceitos sobre a estrutura de repetição for, complementando as estruturas 
while e do-while da unidade anterior. Baseando-se na linguagem de programação C, foram expostos exemplos 
de aplicação prática desta estrutura e também situações-problema, juntamente com uma proposta de solução 
para cada delas. Com esses exemplos e problemas aplicados, você conheceu o comando for e como ele pode ser 
inserido e utilizado na construção de algoritmos.
106
Considerações finais
Parabéns! Você chegou ao final de mais uma unidade com sucesso!
Você já está apto a aplicar os conhecimentos sobre estruturas de repeti-
ção para desenvolver programas de computador na linguagem C com a 
utilização desses recursos. As suas possibilidades de soluções para aplicar 
em problemas aumentaram, mas você ainda pode aprender muito mais!
107
 7Unidade 77. Estrutura de Dados: Vetores e 
Matrizes
Para iniciar seus estudos
Seja bem-vindo a esta unidade! Você poderá ter novas ideias e conhe-
cimentos sobre a construção de algoritmos. A partir de agora, você vai 
conhecer e aprender sobre formas de organização de valores do mesmo 
tipo em conjuntos de dados. Assim, você terá novos recursos para aplicar 
ao desenvolvimento de programas utilizando a linguagem C. Tudo certo? 
Então vamos começar!
Objetivos de Aprendizagem
Ao final desta unidade, esperamos que você:
• Apontar os conjuntos de tipos de dados utilizados em algoritmos.
• Diferenciar os conjuntos de tipos de dados entre vetores e matrizes.
• Identificar o que deve ser levado em consideração para utilizar um 
desses tipos de conjuntos de dados.
• Manipular o conteúdo armazenado em conjuntos de tipos de 
dados.
• Criar programas, utilizando a linguagem C, que utilizem conjuntos 
de dados com vetores ou matrizes, capazes de manipular os dados 
inseridos nesses conjuntos.
108
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
Introdução 
Aqui, na unidade 7, será apresentada a nova forma de organização de dados em algoritmos. Você verá como são 
armazenados e manipulados valores em conjuntos de dados, no contexto da programação com a linguagem C. 
Serão exibidos conceitos sobre os conjuntos de dados vetores e matrizes, e suas formas de utilização. Além dos 
conceitos das estruturas de vetor e matriz, você também encontrará exemplos mais usuais e problemas diversos 
que irão aplicar todos esses conceitos que serão vistos. Com a conclusão desta unidade, será possível que você 
já desenvolva códigos de programas na linguagem C com tratamento e manipulação de dados armazenados em 
vetores e matrizes, utilizando também outros conhecimentos já repassados em unidades anteriores.
7.1 Os conjuntos de valores
Nesta unidade, será exposto um conceito sobre utilização de conjunto de valores, que pode auxiliar no desenvol-
vimento de programas. Esses conjuntos de valores permitem agrupar de forma sequencial, sob o mesmo nome, 
valores que têm o mesmo tipo de dado. Esses conjuntos também são chamados também de estrutura de dados 
homogênea, por se tratar de dados de mesmo tipo. Na programação, essas estruturas são chamadas de arranjos, 
vetores, matrizes, arrays ou conjuntos (MANZANO, 2016).
7.2 Estruturas Unidimensionais ou Vetores
As estruturas homogêneas unidimensionais ou vetores são representações da forma mais simples do agru-
pamento de valores numa variável indexada, com múltiplas ocorrências. Os vetores possuem um tamanho, ou 
número de ocorrências, que armazenam valores de um mesmo tipo. O tamanho dos vetores é sempre represen-
tado por um número inteiro positivo que se refere à quantidade de itens que o vetor irá suportar. 
Os vetores podem também ser definidos como sequências de valores que são sempre do mesmo tipo e são arma-
zenados na memória, em posições sequenciais. Essas sequências devem então possuir um tipo específico, que 
é o mesmo tipo dos dados que ela armazenará, e possuir também uma quantidade específica de valores que 
podem ser armazenados (PINHEIRO, 2012).
Para se declarar uma variável que seja um vetor de valores, é necessário que se especifique, primeiramente, de 
qual tipo será aquele vetor, ou seja, do tipo inteiro ou caracteres, por exemplo. Após indicar o tipo, indica-se o 
nome do vetor e também qual será o seu tamanho, ou seja, quantas ocorrências ele poderá ter para armazenar 
variáveis, sendo uma variável em cada posição (PINHEIRO, 2012).
Exemplo de sintaxe da criação de uma variável que é um vetor do tipo inteiro e possui 10 posições:
inteiro nomevetor[10];
109
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
Quando se deseja referenciar algum elemento, é preciso indicar qual o índice daquele elemento, ou seja, qual a 
sua posição no vetor. Em todos os vetores, o primeiro elemento sempre estará na posição 0 (zero), o segundo na 
1 (um) e assim por diante. É importante lembrar que, na programação, o primeiro número que identifica as posi-
ções do vetor é o 0 (zero) (PEREIRA, 2016).
7.2.1 Declaração e manipulação de vetores
Os dados presentes em um vetor podem participar de operações de variáveis que sejam compatíveis com o tipo 
ao qual pertencem. O QUA. 12, a seguir, ilustra possíveis operações entre variáveis num vetor.
Quadro 12 – Operações com elementos de um vetor
Operações Detalhamento
vet[2] = 5; Atribui o valor 5 ao terceiro elemento do vetor ‘vet’.
vet[2] = vet[2] + 1; Atribui ao conteúdo de vet[2] a soma do seu valor mais 1.
vet[2] ++; Incrementa o valor do conteúdo de vet[2].
vet[3] = vet[2] * 8; Insere em vet[3] a multiplicação do conteúdo de vet[2] por 8.
( vet[2] < 5 ) Compara se o valor de vet[2] é menor do que 5.
Fonte: Elaborado pelo autor, baseado em PINHEIRO, 2012.
No conteúdo do quadro, é possível verificar que são realizadas operações com os dados armazenados num vetor, 
desde que sejam operações válidas para aquele tipo. As operações são realizadas com os valores, que são aces-
sados pelas suas posições dentro do vetor.
Utilizando a linguagem de programação C, é possível declarar um vetor utilizando a seguinte sintaxe:
tipo nomevariavel[tamanhovetor];
Para essa sintaxe, o tipo define se os valores armazenados serão do tipo inteiro, caractere, float, etc. O nomevariá-
vel indica qual será o nome do vetor. O número_de_ocorrências indica quantos valores do mesmo tipo ele poderá 
armazenar (DAMAS, 2016).
A seguir, você pode ver como são declarados, na linguagem C, dois vetores. Um do tipo inteiro, com 10 posições, 
e um do tipo real, com 15 posições.
int vetnumero[10];
float vetreal[15];
110
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
Para inserir números 8, 9 e 10 no vetor, basta usar a seguinte sintaxe, indicando qual posição receberá cada 
número:
vetnumero[0] = 8;
vetnumero[1] = 9;
vetnumero[2] = 10;
Para inserir 10 números no vetor, sendo 8, 9, 10, 5, 18, 1, 3, 4, 7, 6, nesta ordem, você pode utilizar a seguinte 
sintaxe:
int vetnumero[10] = {8, 9, 10, 5, 18, 1, 3, 4, 7, 6};
Considere o vetor chamado números, de tamanho 10. Você pode verificar no exemplo, a seguir, que é realizada 
uma operação de adição de um valor com um dado do vetor. Nesta operação, deseja-se somar o número 5 ao 
conteúdo do vetor, na posição 2, ou seja, o valor na posição 2 do vetor é 10. Então, será realizada a operação 
10 + 5. O vetor, na posição 2, agorapassa a valer 15. Após essa operação, será exibido na tela o conteúdo da 
posição 2 do vetor.
numeros[2] = numeros[2] + 5;
printf(“Posicao 2 do vetor = %i”, numeros[2]);
Para que seja possível percorrer todos os dados do vetor, seja para exibição ou para realizar operações com eles, 
é possível utilizar uma estrutura de repetição como for, while ou do-while. Nesta unidade, serão exibidas situa-
ções utilizando a estrutura de repetição for. Na estrutura do comando for, a variável de controle (exemplo: i) 
deve ser inicializada com 0 (zero) e deve ser incrementada até que faça exatamente o número de iterações igual 
ao tamanho do vetor (PEREIRA, 2016).
Para percorrer o vetor vetInteiro, de 10 posições, e exibir todos valores de cada posição na tela, é possível utilizar 
o seguinte pseudocódigo:
para i de 0 até 10 faça:
 imprima(‘Posição i = valor vetnumero[i]);
fim para.
Na linguagem C, o trecho poderia ser programado da seguinte forma:
for(int i=0; i< 10; i++){
 printf(“Posição %i = valor %i \n”, i, vetnumero[i]);
}
111
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
Nessas demonstrações, você pode perceber que, se o tamanho do vetor é 10, o comando for fará no máximo 10 
iterações. Como ele inicia em 0, de 0 até 9, o comando realiza 10 iterações. Veja um exemplo:
Exemplo 1 - Declara um vetor de inteiros de 10 posições, com números inteiros positivos aleatórios escolhidos. 
Após inicializar, exibe na tela todos os valores do vetor, percorrendo-o sequencialmente da primeira até a sua 
última posição:
int num[10] = {0,5,69,9,4,78,4,2,10,11};
for(int i=0; i<10; i++){
 printf(“Posicao %i : Valor %i \n”, i, num[i]);
}
A seguir, você terá alguns problemas computacionais com o emprego da estrutura de vetores unidimensionais e 
homogêneos.
Dica: Teste os códigos no Dev C++.
Problema 1 - Escreva um algoritmo, utilizando a linguagem C, que crie um vetor de inteiros de 10 posições. 
Solicite ao usuário que informe um número para cada posição, inserindo-os em seu vetor de forma sequencial. 
Ao final, exiba todos os números do vetor, informando sua posição e o valor da posição:
#include <stdio.h>
int main (){
 int vetornum[10];
 for(int i=0;i<10;i++){
 printf(“Digite para posicao %i:\n”, i);
 scanf(“%i”, &vetornum[i]);
 }
 printf(“Exibindo os dados do vetor:\n\n”);
 for(int i=0;i<10;i++){
 printf(“Posicao: %i - Valor: %i \n”, i, vetornum[i]);
 }
 return 0;
}
Problema 2 - Escreva um algoritmo, utilizando a linguagem C, que defina um vetor de inteiros de 10 posições, 
sendo os números de 1 a 10. Em seguida, cada posição do vetor deve receber o seu valor ao quadrado. Ao final, 
exiba todos os números do vetor, informando sua posição e o valor da posição:
112
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
#include <stdio.h>
int main (){
 int numeros[10];
 for(int i=0;i<10;i++){
 numeros[i] = i+1;
 // aqui, como a primeira posição é 0,
 // e o primeiro número a ser inserido é 1,
 // utiliza-se o número da posição +1
 // para inserir de 1 até 10.
 }
 printf(“Calculando o quadrado dos dados do vetor:\n\n”);
 for(int i=0;i<10;i++){
 numeros[i] = (numeros[i] * numeros[i]); 
 // p1ega-se o valor da posiçao i multiplicado
 // por ele mesmo e guarda na posição i no vetor.
 }
 printf(“Exibindo os dados do vetor:\n\n”);
 for(int i=0;i<10;i++){
 printf(“Posicao: %i - Valor: %i \n”, i, numeros[i]);
 }
 return 0;
}
Com os exemplos e problemas demonstrados neste conteúdo, você pode conhecer melhor a utilização dos con-
juntos chamados de vetores, assim como as formas de manipulação e operações possíveis com seus dados. A 
seguir, serão exibidas variações da utilização de conjuntos de dados. Dessa vez, contendo mais de uma dimensão.
7.3 Estruturas Bidimensionais ou Matrizes
Você já conheceu anteriormente nesta unidade como criar, inserir e manipular valores em vetores, ou seja, que 
possuíam apenas uma dimensão (tamanho). Os vetores podem auxiliar a lidar com estruturas simples de dados. 
Porém, para lidar com estruturas mais complexas, é necessário observar e entender novos conceitos sobre con-
juntos de dados.
Além do que foi visto, existem também as estruturas bidimensionais, também chamados de matrizes. Para esse 
tipo de estrutura, não existe um limite de dimensões, mas existem aqueles tipos que são os mais utilizados nas 
situações, que são com 2, 3 ou 4 dimensões (DAMAS, 2016).
Neste tipo de estruturas, cada dimensão é representada por um número inteiro positivo, que define o seu tama-
nho. Os valores presentes em cada posição de cada dimensão também são referenciados por números inteiros 
positivos, um para cada dimensão (DAMAS, 2016; PINHEIRO, 2012).
Uma situação que pode ser relacionada com a utilização de estruturas multidimensionais são as matrizes. Uma 
estrutura que possui, por exemplo, duas dimensões, é como uma matriz que possui linhas e colunas. Uma dimen-
são está relacionada a linha e outra à coluna. Caso houvesse uma terceira dimensão, por exemplo, poderia estar 
relacionada com páginas de uma tabela. 
113
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
Uma matriz de nome mat, que possui 3 linhas e cinco colunas, é uma estrutura bidimencional, isto é, de duas 
dimensões, representado por uma matriz 3x5. Nesta matriz, a primeira dimensão corresponde à linha, enquanto 
a segunda dimensão corresponde à coluna. A figura, a seguir, ilustra essa definição.
Figura 32 – Matriz MAT de dimensão 3 x 5
a b c d e
f g h i j
k l m n o
Fonte: Fonte: Elaborado pelo autor, baseado em PINHEIRO, 2012.
Na FIG. 32 é possível perceber uma estrutura bidimensional, ou seja, que possui uma dimensão para as linhas, 
que são 3, e uma dimensão para as colunas, que são 5. Os valores nesta matriz são os caracteres a, b, c, d, e, f, g, 
h, i, j, k, l, m, n, o. Esses dados estão em duas dimensões, sendo a primeira com 3 posições, e a segunda com 5 
posições.
Para se exibir o caractere ‘c’, devem ser representados, através da exibição da matriz, a linha e a coluna em que 
este caractere está localizado. Nesse caso, está na primeira linha, ou linha 0 (zero), e na terceira coluna, ou coluna 
(2). 
A forma correta para exibir o caractere ‘c’ então é a seguinte: mat[0][2]. Já o elemento de mat[2][4] corresponde 
ao caractere ‘o’, e assim por diante.
7.3.1 Declaração e manipulação de matrizes
Para que seja possível declarar uma variável do tipo matriz, é necessário informar o seu tipo e quantas serão as 
suas dimensões, indicando, ainda, para cada dimensão, qual será o seu tamanho. As dimensões são representas 
pelos colchetes [], e o seu tamanho é o número inserido entre os colchetes. Diferentemente dos vetores, as matri-
zes precisam ter pelo menos duas dimensões (PINHEIRO, 2012; SOFNER, 2013). 
É possível definir a sintaxe da declaração de uma matriz com n dimensões da seguinte forma:
tipo nomevetor[dim1] [dim2] ... [dim n];
Para definir a matriz exemplificada na figura 32, chamada de MAT, é possível descrever a matriz sendo instanciada 
da seguinte forma, utilizando a linguagem C:
char mat[3][5];
Para inicializar uma matriz, definindo quais os valores estarão em seu conteúdo, é necessário informar, dentro 
de chaves, os valores separados por vírgula. Para cada coluna, em uma matriz de duas dimensões, é necessário 
agrupar os valores também por chaves. Assim, cada posição da primeira dimensão tem vários elementos, que 
compõem a sua segunda dimensão (MIZRAHI, 2008).
114
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
A seguir, será representada a inicialização da matriz mat da figura matriz mat de dimensão 3 x 5, já com todos 
seus caracteres de conteúdo, utilizando a linguagem C como base:
char mat[3][5] = { {‘a’,’b’,’c’,’d’,’e’} ,
{‘f’,’g’,’h’,’i’,’j’} , {‘k’,’l’,’m’,’n’,’o’} };
É possívelverificar que existem três agrupamentos de caracteres. Cada agrupamento corresponde a uma linha 
ou uma posição da primeira dimensão, que totaliza três dimensões. Em cada posição da primeira dimensão, exis-
tem cinco caracteres, que correspondem às cinco posições da segunda dimensão.
Para definir uma matriz[2][3] de números inteiros, de duas dimensões, é possível representar de acordo com o 
código a seguir, em linguagem C:
int matriznum[2][3] = { {1,3,5} , {2,4,6} };
Nessa representação, os números 1, 3 e 5 correspondem às três posições da segunda dimensão, que possui 
tamanho três. Eles estão na primeira posição da primeira dimensão, que possui tamanho 2.
Para realizar uma atribuição simples ou direta, bem como a impressão ou operações com valores de posições 
específicas de uma matriz, basta especificar quais as posições em cada uma das dimensões da matriz e utilizar 
para o que se deseja. No QUA. 13, a seguir, são expostos alguns exemplos sobre essas operações.
Quadro 13 – Operações com elementos de uma matriz
Operações Detalhamento
mat[2][1] = 5 Atribui o valor 5 à matriz mat, na posição 2 da primeira dimensão e 
posição 1 da segunda dimensão.
mat[3][2] ++ Incrementa o valor do elemento presente na matriz em mat[3][2].
scanf(“%i”,mat[1][3]) Lê um número inteiro digitado pelo usuário e armazena na matriz, na 
posição mat[1][3].
( mat[2][3] < 5 ) Compara se o valor na posição de mat[2][3] é menor do que 5.
Fonte: elaborado pelo autor, baseado em MANZANO, 2015.
No quadro, é possível verificar que são realizadas operações com os dados armazenados em posições nas dimen-
sões de uma matriz. Só podem ser realizadas operações compatíveis com o tipo de dado da matriz e, consequen-
temente, dos valores armazenados nela.
Para percorrer todos os elementos de uma matriz, é utilizado o mesmo princípio para percorrer um vetor, porém, 
dessa vez, como são duas dimensões, é necessário utilizar dois comandos de repetição, sendo um comando para 
cada dimensão, além de duas variáveis de controle, uma para cada comando.
115
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
A seguir, é possível ver uma matriz de duas dimensões de variáveis do tipo inteiro sendo inicializada e, em seguida, 
sendo percorrida para exibição de seus elementos.
int mat [2][3] = { {1,3,5} , {2,4,6} };
for (int i=0; i<2; i++){
 for(int j=0; j<3; j++){
 printf(“Linha %i”,i);
 printf(“ Coluna %i”,j);
 printf(“ Item = %i \n”, mat[i][j]);
 }
}
Nesse código, o primeiro comando for vai de 0 até 2, ou seja, percorre a primeira dimensão da matriz, que pos-
sui 2 linhas. Já o segundo comando for, vai de 0 até 3, percorrendo a segunda dimensão da matriz, que possui 3 
colunas. No segundo comando for, é necessário especificar outra variável de controle, pois a variável de controle 
i já é controlada pelo primeiro comando for. 
Uma matriz também pode ser inicializada e não preenchida, ou seja, com todas as suas posições ainda vazias. Isso 
pode ocorrer, por exemplo, quando se deseja inserir os elementos da matriz durante a execução do programa. 
Nessa situação, a matriz é declarada já com suas dimensões predefinidas, porém apenas sem seus valores, como 
pode ser visualizado a seguir (MANZANO, 2016).
int matrizchar[2][2];
Nesses casos, após a definição da matriz é feita a inserção de elementos em suas posições. Essa inserção pode 
ser direta, como exemplificado no QUA. 10, ou também ser sequencial, através da utilização de comandos de 
repetição. A seguir, são exibidas essas duas situações, respectivamente.
//preenchimento direto.
int matrizchar[2][2];
matrizchar[0][0] = ‘X’;
matrizchar[0][1] = ‘A’;
// preenchimento através de laço.
for(int i=0; i<2; i++){
 for(int j=0; j<2; j++){
 printf(“Digite um caractere: “);
 scanf(“%s”, &matrizchar[i][j]);
 }
}
116
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
Exemplo 1 – Inicializa e atribui valores inteiros a uma matriz, de dimensões 2 x 3:
int matriz[2][3] = { {3,4,2} , {5,6,7} , {1,9,8} };
As matrizes podem ter n dimensões de acordo com o problema computac-
ional para o qual ela foi desenvolvida para tratar. Nesta unidade, foram apre-
sentadas matrizes de até duas dimensões, devido à sua utilização mais comum. 
Em matrizes de mais dimensões, basta seguir a mesma lógica para inserção e adicio-
nar um novo laço para preencher ou exibir os dados.
Tendo visto esses conceitos sobre a utilização dos vetores multidimensionais, ou matrizes, seguem problemas 
nos quais é necessária a utilização de matrizes.
Problema 1 – Escreva um algoritmo, utilizando a linguagem C, que crie uma matriz de dimensões 2 x 2, de 
inteiros positivos. Insira na matriz os seguintes valores inteiros, nesta ordem: 4, 8, 12, 16. Ao final, exiba todos os 
elementos da matriz, informando sua posição nas dimensões e o valor da posição: 
#include <stdio.h>
int main(){
 int matnum[2][2] = { {4,8} , {12,16} };
 for(int i=0; i<2; i++){
 for(int j=0; j<2; j++){
 printf(“Lin: %i, Col: %i=%i \n”, i, j, matnum[i][j]);
 }
 }
 return 0;
}
Problema 2 – Escreva um algoritmo, utilizando a linguagem C, que crie uma matriz de dimensões 2 x 4, de intei-
ros positivos. Os elementos da matriz deverão ser inseridos pelo usuário durante a execução de um laço. Ao final, 
exiba todos os elementos da matriz, informando sua posição nas dimensões e o valor da posição: 
#include <stdio.h>
int main(){
 int mat[2][4];
 for(int i=0;i<2;i++){
 for(int j; j<4; j++){
117
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
 printf(“Digite um valor: “);
 scanf(“%i”, &mat[i][j]);
 }
 }
 for(int i=0;i<2;i++){
 for(int j; j<4; j++){
 printf(“Item (%i,%i) “,i,j,mat[i][j]);
 }
 }
 return 0;
}
Problema 3 – Escreva um algoritmo, utilizando a linguagem C, que crie uma matriz de dimensões 3 x 2, de intei-
ros positivos, com os seguintes elementos: 3, 4, 3, 2, 7, 3. Seu programa deverá multiplicar todos os elementos da 
matriz por 3, ou seja, calcular a expressão “3 x matriz”. Ao final, exiba todos os elementos da matriz, informando 
sua posição nas dimensões e o valor da posição:
#include <stdio.h>
int main(){
 int mat[3][2] = { {3, 4} , {3, 2} , {7, 3} };
 //multiplicando todos elementos por 3
 for(int i=0;i<3;i++){
 for(int j; j<2; j++){
 mat[i][j] = 3 * mat[i][j];
 }
 }
 for(int i=0;i<3;i++){
 for(int j=0; j<2; j++){
 printf(“Item (%i,%i): %i \n”,i,j,mat[i][j]);
 }
 }
 return 0;
}
Com os exemplos e problemas demonstrados neste conteúdo, você pode conhecer melhor a utilização das estru-
turas der dados multidimensionais, também chamados de matriz. Você pode conhecer também formas de mani-
pulação e operações possíveis com seus dados. 
Agora, você já tem conhecimento sobre a utilização de estruturas de conjuntos de dados homogêneos, sendo 
através de vetores ou matrizes ou conjuntos multidimensionais com mais de duas dimensões. Além das defi-
nições, você já pode diferenciar tais estruturas e também pode ver situações em que cada uma delas pode ser 
utilizada.
118
Construção de Algoritmos | Unidade 7 - Estrutura de Dados: Vetores e Matrizes
Síntese da Unidade
Com a unidade 7, você aprendeu novos conceitos sobre estruturas de armazenamento de dados em conjun-
tos definidos pelo tipo destes dados. Foram apresentadas as estruturas de vetor e matriz, além de suas formas 
de armazenamento e manipulação dos dados. Além de todos os conceitos e contextualizações, foram exibidos 
exemplos e problemas, seguidos de códigos sugeridos para sua solução, sempre se baseando na linguagem de 
programação C. Agora você já conhece vetores, matrizes, formas de manipulação e exemplos de utilização des-
sas estruturas e pode colocar em prática todo este conhecimento em seus novos programas.119
Considerações finais
Você concluiu mais uma unidade! Parabéns! Agora, você já é capaz de 
reunir todo conhecimento repassado para criar seus códigos utilizando 
recursos ainda mais elaborados e que podem deixar seus programas ainda 
mais eficientes. Seu conhecimento sobre a construção de algoritmos está 
aumentando cada vez mais, e você ainda pode desenvolver novas habili-
dades em programação! Continue assim!
120
 8Unidade 88. Aplicação de Estruturas 
Condicionais, Estruturas de 
Repetição, Vetores e Matrizes 
em C para Solução de 
Problemas
Para iniciar seus estudos
Seja bem-vindo a mais uma unidade sobre Construção de Algoritmos! 
Agora que você já conheceu vários recursos de programação utilizando 
a linguagem C para construir programas, verá como é possível agregar 
todo este conhecimento e utilizá-lo para criar uma solução completa para 
atender determinada situação mais complexa. Com essa visão completa, 
você poderá pensar no problema a ser resolvido como um todo, mas ana-
lisando-o por partes. Está pronto? Então vamos lá!
Objetivos de Aprendizagem
Ao final desta unidade, esperamos que você:
• Defina os projetos de software voltados para o desenvolvimento 
de algoritmos.
• Identifique os aspectos a serem considerados para elaborar um 
projeto de software.
121
 8• Aplique a separação do problema principal do projeto em peque-nos problemas a serem resolvidos com algoritmos.
• Descreva como agrupar em um único projeto partes desenvolvi-
das do código.
• Crie projetos de software, na linguagem C, que resolvam situa-
ções-problemas do dia a dia.
122
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
Introdução
Esta unidade traz para você conhecer a proposta das etapas e das características de um projeto de desenvolvi-
mento de software. Nesta unidade, você verá como um problema a ser resolvido deve ser analisado por partes, de 
forma separada, mas que possam ser integradas compondo a solução final do problema. Cada um dos recursos 
vistos por você até esta unidade será inserido e utilizado ao longo dos exemplos, problemas e práticas abordadas. 
Além dos conceitos sobre projetos de desenvolvimento de software, serão exibidas também exemplos práticos de 
análises de problemas e de construção de solução para estes problemas encontrados. Será proposta a criação 
de um programa, utilizando a linguagem C, com diferentes funcionalidades, mas analisado sobre a ótica de um 
projeto de desenvolvimento.
8.1 Projeto de desenvolvimento de software
Nesta unidade, você verá como analisar situações-problemas compostas por várias partes menores. Além disso, 
verá também como é abordagem do desenvolvimento de um projeto de software e seus aspectos, elevando, 
assim, seus conhecimentos sobre a construção de algoritmos.
Para que um software possa ser desenvolvido, é necessário que os clientes ou usuários envolvidos expressem as 
necessidades que têm sobre alguma tarefa ou processo. Assim, profissionais especialistas construirão o produto 
do software e entregarão aos usuários, estes o utilizaram para resolver situações ou tratar de necessidades espe-
cíficas (PRESSMAN; MAXIM, 2016).
8.1.1 Aspectos da engenharia de software
A tarefa do desenvolvimento e criação de software é assimilada a outras tarefas da área de engenharia, daí o 
nome utilizado para essa ciência de engenharia de software. Na década de 1970, para a correção das chamadas 
crises de software, quando a qualidade era inaceitavelmente baixa e prazos e orçamentos não eram cumpridos, 
as filosofias e os paradigmas das disciplinas de engenharia já estabelecidos passaram a ser utilizados (SCHACH, 
2010).
Ainda hoje existem situações parecidas com as citadas da década de 1970, como atrasos nas entregas de soft-
wares e até a sua qualidade consideravelmente baixa, em relação ao seu custo e o prazo de desenvolvimento. 
Atualmente, você pode perceber que os processos de desenvolvimento de software possuem problemas parti-
culares, apesar de serem parecidos com questões tradicionais da engenharia. Para tanto, alguns aspectos sobre 
a engenharia de software precisam ser observados (SCHACH, 2010).
Vários aspectos devem ser verificados, como o econômico, que trata das questões de investimento de recursos 
para desenvolvimento ou aquisição, de produtos de software. Outro aspecto importante é sobre a manuten-
ção, que aborda desde questões presentes em seu desenvolvimento até a sua entrega. Aspectos sobre levanta-
mento e análises de requisitos também influenciam num projeto de software, pois todas as etapas, os recursos, 
as funcionalidades a serem criadas e vários outros pontos dependem dos itens que foram identificados durante 
o levantamento dos requisitos (PRESSMAN; MAXIM, 2016; SCHACH, 2010).
123
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
Essas características devem ser observadas tratando o desenvolvimento como um ciclo de vida, para que seja 
possível entender por quais fases o software passará durante o seu desenvolvimento.
8.1.2 O ciclo de vida do desenvolvimento de software
O desenvolvimento de um projeto de softwares pode ser comparado ao projeto de construção de um prédio sob 
vários aspectos. Como exemplo, está o momento em que o proprietário descreve o modelo que deseja para o 
projetista e a representação deste modelo, de acordo com o que o projetista entendeu da descrição dada. A cada 
vez que o proprietário do prédio solicita qualquer alteração no esboço do projetista, ele o refaz e aguarda a apro-
vação do proprietário. Após a aprovação do esboço, são criados documentos detalhando todo o projeto e todas 
as características do prédio a ser criado. Ao final, o prédio é construído seguindo as especificações que constam 
no documento, sendo acompanhado pelo proprietário e projetista, podendo ainda sofrer pequenas mudanças 
até a sua entrega. Tudo isso com um prazo acordado entre o proprietário e o responsável pela construção.
Quando um software é desenvolvido, são seguidos passos semelhantes aos citados anteriormente no projeto do 
prédio. São cinco fases principais no desenvolvimento, sendo o planejamento, a análise, o projeto, a implemen-
tação e os testes. Além dessas fases, cada uma delas ainda possui uma série de etapas internas que são respon-
sáveis pela sua iniciação e conclusão, utilizando técnicas e produzindo documentações específicos que explicam 
cada item que é desenvolvido. Tal representação pode ser vista na figura a seguir (PADUA FILHO, 2009).
Figura 33 – Ciclo de vida do desenvolvimento de software 
Ideia
Sucesso 
do sistema
Planejamento Análise Projeto (Design) Implementação
Fonte: PADUA FILHO, 2009.
Na FIG. 33, é possível ver que os ciclos de vida citados aqui são interligados e sequenciais e que todos contribuem 
para que o produto final, ou seja, o software, possa atender às demandas colocadas pelo cliente final. Cada uma 
das fases ainda possui uma série de etapas internas. 
O planejamento é o principal processo para entender qual a finalidade do software e como ele será construído. 
Nessa fase, é importante conhecer os requisitos que o “cliente” deseja que o software tenha. Esses requisitos 
podem ser coletados por meio de entrevistas e/ou observação. A análise do projeto está relacionada a quem 
utilizará o software, o que ele poderá fazer, além de onde e quando ele será utilizado. A fase de projeto é quando 
é definido como o sistema funcionará com seus detalhes de hardware e estrutura que utilizará, além de quais 
funcionalidades possuirá e quais recursos são necessários para seu funcionamento. A fase de implementa-
ção é quando o software, de fato, será construído e/ou implementado no ambiente do cliente, sendo uma das 
fases mais importantes, visto que envolve a implementação, a instalação e o início da utilização do sistema, com 
suporte inicial prestado pelosresponsáveis pela criação (DENNIS, 2014).
Assim como produtos e peças industriais, o software também tem um ciclo de vida final. Ele é concebido a partir 
de uma demanda. É desenvolvido a partir da demanda e tem suas funcionalidades entregues ao cliente. Entra 
em utilização pelo cliente dentro de algum processo ou em alguma função específica, e é sujeito a manutenções, 
correções e evoluções. Por fim, após algum tempo, o software pode ser tirado de operação, finalizado, substituído 
ou descartado ao fim de sua vida útil (PADUA FILHO, 2009).
124
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
8.1.3 Qualidade e testes de software
Como prédios, automóveis e produtos em geral, assim que um software é desenvolvido, logo antes de ser entre-
gue ao cliente, é necessário que sejam realizados testes para garantir sua qualidade e evitar que situações ainda 
não previstas ocorram quando o cliente estiver utilizando, o que acabaria tornando a entrega final não satisfatória.
A qualidade de um software pode ser entendida como o seu grau de conformidade com os requisitos levantados 
e as demandas especificadas no início do projeto. O que define a qualidade é a relação entre o que foi solicitado 
e o que foi entregue, ou, em outras palavras, o que foi prometido e o que foi realizado (PADUA FILHO, 2009).
Um produto de software pode ser considerado de má qualidade quando muitos dos seus 
requisitos iniciais não são atendidos ou não são atendidos completamente por suas fun-
cionalidades, podendo ser por funcionalidades que não existem ou não são executadas de 
forma correta sob condições específicas ou para determinadas entradas a serem tratadas. 
Para cada requisito que não é atendido, é considerado um defeito do software, que preci-
sará ser corrigido pelos responsáveis de sua construção. Esses defeitos são conhecidos, no 
mundo da tecnologia, como bugs (PRESSMAN; MAXIM, 2016; PADUA FILHO, 2009).
Para evitar que os softwares sejam entregues com defeitos, erros e falhas inesperadas, são executados testes de 
software. Essa estratégia baseia-se na execução de um roteiro com os passos a serem executados como parte do 
teste. Ela define também quando cada teste deve ser planejado e posteriormente executado, além da quantidade 
de recursos e tempos que serão necessários para a tarefa (PRESSMAN, 2016). 
Geralmente, os testes são desenvolvidos pelo gerente do projeto e desenvolvidos pelos engenheiros e os espe-
cialistas de testes em software. Eles são executados em módulos pequenos, ou seja, começando pelas partes 
isoladamente, mas também envolvem o teste do projeto como um todo. Na medida em que erros forem desco-
bertos, eles devem ter seu diagnóstico realizado e serem corrigidos. Após essa correção, são testados novamente 
e testados também todas as partes do software que dependem desta que foi modificada (PRESSMAN, 2016).
8.2 Projeto de desenvolvimento - Calculadora
Agora você já tem conhecimento sobre o que é e como funciona um projeto de software, além das fases e algu-
mas questões que são importantes em seu desenvolvimento. Para evoluir no conhecimento sobre projetos de 
software e colocar em prática algumas das questões vistas, você poderá conhecer um projeto na prática: projeto 
de uma calculadora na linguagem C. A escolha desse projeto foi devido à maioria das pessoas saberem o que é e 
como se utiliza uma calculadora.
125
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
O projeto de desenvolvimento de uma calculadora parte do pressuposto que você já realizou a fase do plane-
jamento, levantamento dos requisitos por meio de entrevistas e/ou observação, e conhece todos os objetivos e 
definições gerais para desenvolver a ferramenta. Agora, poderá partir para o seu desenvolvimento.
8.2.1 Análise do software da calculadora
Para esta calculadora, identificou-se, na fase de análise de funcionalidades, que ela terá as seguintes funções de 
cálculos aritméticos: soma, subtração, multiplicação, divisão; funções trigonométricas como: seno; cosseno; 
tangente; e uma função específica para calcular a hipotenusa. 
Para todas as funções citadas, o usuário irá fornecer dois valores numéricos. Após o cálculo, a calculadora deve 
exibir na tela a resposta para o usuário. O usuário verá um menu principal com as opções de cálculo e poderá 
informar qual opção escolhe. Após a exibição de cada resultado, o usuário terá a opção de continuar fazendo 
outros cálculos ou sair e encerrar o programa. Ao final, será exibido o histórico de todas as operações realizadas.
Na fase de projeto do desenvolvimento da calculadora, foram definidas as tarefas a serem realizadas durante 
a implementação, que é a próxima fase. O software da calculadora será implementado em partes, focando na 
sua operação, já que as funções são muitos simples e podem ser implementadas, cada uma delas, numa única 
expressão matemática, sem que haja necessidade de se criar procedimentos específicos para cada uma das 
funções.
8.2.2 Projeto do software da Calculadora 
Na fase de projeto do desenvolvimento da calculadora, foram definidas as tarefas a serem realizadas durante 
a implementação, que é a próxima fase. O software da calculadora será implementado em partes, focando na 
sua operação, já que as funções são muitos simples e podem ser implementadas, cada uma delas, numa única 
expressão matemática, sem que haja necessidade de se criar procedimentos específicos para cada uma das 
funções.
O projeto foi dividido nas seguintes partes:
• Inclusão das bibliotecas e constantes (diretivas).
• Declaração das variáveis.
• Repetição das operações.
• Apresentação da calculadora e suas operações.
• Obtenção da operação a ser executada.
• Obtenção dos valores que irão fazer parte da operação.
• Execução da operação e exibição do resultado.
• Armazenamento da operação no histórico da calculadora.
• Exibição do histórico.
126
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
8.2.3 Implementação do software da calculadora
Na fase de implementação, será criado o algoritmo para atender a todas as funcionalidades do software da cal-
culadora, executar as funções matemáticas estabelecidas e armazenamento do histórico das operações.
8.2.3.1 Inclusão das bibliotecas e constantes (diretivas):
As diretivas são instruções ao compilador que relacionam as bibliotecas em que estão às funções (built-in) colo-
cadas no código e também as constantes simbólicas utilizadas nas instruções;
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <locale.h>
#define TAM_OP 50
8.2.3.2 Declaração das variáveis
A declaração das variáveis relaciona todas as variáveis e seus tipos que serão utilizadas nas diferentes partes do 
programa.
setlocale(LC_ALL, “Portuguese”);
float n1,n2; // variáveis para os valores do usuário
char op; // variável para o tipo de operação
int continua; // variável para continuar ou não (0)
float matOp[TAM_OP][3];
char vetOp[TAM_OP];
int cont = 0, i = 0, flagHist = 0;
float result = 0.0;
8.2.3.3 Repetição das operações
Algumas funcionalidades são executadas repetidas vezes, até que o usuário faça a interrupção da execução. A 
repetição é controlada por um comando de repetição (do-while) controlada por uma condição, que é testada a 
cada nova iteração.
127
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
do{
... Apresentação da Calculadora e suas Operações...
... Obtenção da Operação a ser Executada...
... Obtenção dos Valores que irão fazer parte da Operação...
... Execução da Operação e Exibição do Resultado...
... Armazenamento da Operação no Histórico da Calculadora...} while(continua != 0); // Controle da Repetição
8.2.3.4 Apresentação da calculadora e suas operações.
A apresentação da calculadora contém um menu simplificado das operações que serão executadas.
// Apresentação da Calculadora 
system(“cls”);
printf(“---CALCULADORA---- \n\n”);
printf(“ Para: Somar, Subtrair, Multiplicar, Dividir: “);
printf(“ + - * / \n\n”);
printf(“ Para: Seno, Cosseno, Tangente, Hipotenusa: “);
printf(“ s c t h \n\n”);
8.2.3.5 Obtenção da operação a ser executada
O usuário escolhe que operação deseja executar de acordo com as operações que constam de menu de operações.
printf(“ Digite o símbolo para a operação desejada: “);
scanf(“ %c”, &op); // Obtenção da operaçao a executar
8.2.3.6 Obtenção dos valores que irão fazer parte da operação
Após escolher a operação, o usuário deve escolher os valores que vão compor a operação, de acordo com a ope-
ração escolhida.
// Obtenção dos valores para execução das operações
if (op == ‘+’ || op == ‘-’ || op == ‘*’ || op == ‘/’){
 printf(“\n-> Digite os valores de (a) e (b) “);
 printf(“para a operação (a %c b): “, op);
}
else if (op == ‘s’){
128
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
 printf(“\n-> Digite os valores do cateto oposto e “); 
 printf(“hipotenusa para a operação(seno): “);
}
else if (op == ‘c’){
 printf(“\n-> Digite os valores do cateto adjacente “); 
 printf(“e hipotenusa para a operação(cosseno): “);
}
else if (op == ‘t’){
 printf(“\n-> Digite os valores do cateto oposto e “);
 printf(“cateto adjacente para a operação(tangente): “);
}
else if (op == ‘h’){
 printf(“\n-> Digite os valores do cateto oposto e “);
 printf(“cateto adjacente para operação(hipotenusa): “);
}
else{
 continua = 0;
 continue;
}
scanf(“%f %f”, &n1, &n2);
flagHist = 1;
printf(“\n”);
8.2.3.7 Execução da operação e exibição do resultado
Nesta fase, as operações são calculadas, e o seu resultado é mostrado ao usuário.
Para as operações de divisão, seno, cosseno e tangente, deve ser exibida uma mensagem ao 
usuário, caso ele digite para o segundo valor, o número 0, visto que não é possível realizar 
divisões por zero! Após o alerta, o usuário poderá continuar e escolher outros números e 
outra operação.
Fique atento!
129
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
switch (op){
 case ‘+’: // Operação de Adição
 result = n1 + n2;
 printf(“Soma de %.2f + %.2f = %.2f \n”, n1, n2, result);
 break;
 case ‘-’: // Operação de Subtração
 result = n1 - n2;
 printf(“Subtrair %.2f - %.2f = %.2f \n”, n1, n2, result);
 break;
 case ‘*’: // Operação de Multiplicação
 result =n1 * n2;
 printf(“Multiplicar %.2f * %.2f = %.2f \n”, n1, n2, result);
 break;
 case ‘/’: // OIperação de Divisão
 if (n2 == 0){
 printf(“Nao é possível dividir por 0!!!\n”);
 }
 else{
 result = n1 / n2;
 printf(“Dividir %.2f / %.2f = %.2f \n”, n1, n2, result);
 }
 break;
 case ‘s’: // Cálculo do seno
 if (n2 == 0){
 printf(“Nao é possível calcular - número 0!!!\n”);
 }
 else{
 result = n1 / n2;
 printf(“Seno de %.2f / %.2f = %.2f \n”, n1, n2, result);
 }
 break;
 case ‘c’: // Cáldulo do Cosseno
 if (n2 == 0){
 printf(“Nao é possível calcular - número 0!!!\n”);
 }
 else{
130
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
 result = n1 / n2;
 printf(“Cosseno de %.2f / %.2f = %.2f \n”, n1, n2, result);
 }
 break;
 case ‘t’: // Cálculo da Tangente
 if (n2 == 0){
 printf(“Nao é possível calcular - número 0!!!\n”);
 }
 else{
 result = n1 / n2;
 printf(“Tangente de %.2f / %.2f = %.2f \n”, n1, n2, result);
 }
 break;
 case ‘h’: // Cálculo da Hipotenusa
 result = sqrt(pow(n1, 2) + pow(n2, 2));
 printf(“Hipotenusa de %.2f e %.2f = %.2f \n”, n1, n2, result);
 break;
 default: // Operação inválida
 printf(“Operação inválida, tente novamente! \n”); 
 cont--;
 flagHist = 0;
 break; 
}
8.2.3.8 Armazenamento da Operação no Histórico da Calculadora: 
Esta Calculadora tem uma funcionalidade adicional, que é manter um histórico de todas as operações realizadas 
durante a sua utilização. O histórico contém, além das operações, os valores envolvidos no cálculo e o resultado.
// Armazenamento da Operação no Histórico
if(flagHist){
 vetOp[cont] = op;
 matOp[cont][0] = n1;
 matOp[cont][1] = n2;
 matOp[cont][2] = result;
}
cont++;
if(cont >= TAM_OP){
 printf(“\nNão há mais espaço para operações.\n”);
 break; 
}
131
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
8.2.3.9 Exibição do histórico
Ao final do programa, a calculador exibe o histórico armazenado de todas as operações realizadas durante a sua 
operação.
// Impressão do Histórico de Operações
printf(“Operações Realizadas\n\n”);
printf(“%2s %12s %10s %10s %10s\n”, “Op”, “Operação”, “Valor1”, “Valor2”, “Resultado”);
for (i = 0; i < cont; i++){
 printf(“%c “, vetOp[i]);
 switch(vetOp[i]){
 case ‘+’:
 printf(“%13s “,”Adição”);
 break;
 case ‘-’:
 printf(“%13s “,”Subtração”);
 break;
 case ‘/’:
 printf(“%13s “,”Divisão”);
 break;
 case ‘*’:
 printf(“%13s “,”Multiplicação”);
 break;
 case ‘s’:
 printf(“%13s “,”Seno”);
 break;
 case ‘c’:
 printf(“%13s “,”Cosseno”);
 break;
 case ‘t’:
 printf(“%13s “,”Tangente”);
 break;
 case ‘h’:
 printf(“%13s “,”Hipotenusa”);
 break;
 }
 printf(“%10.2f %10.2f %10.2f\n”, matOp[i][0], matOp[i][1], matOp[i][2]);
}
132
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
8.2.4 O software final da calculadora
Todo o tratamento anteriormente dado às funcionalidades de forma separada permitiu uma análise mais espe-
cífica em cada uma delas, mas agora é necessário unir todo o programa e todas as suas partes.
Após ter exibido o programa por partes a seguir é mostrado o projeto da calculadora, com todas as suas funcio-
nalidades, o menu de opções, as validações da operação escolhida pelo usuário e a possibilidade de o usuário 
continuar e realizar novas operações de forma repetitiva, como também o histórico das operações realizadas.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <locale.h>
#define TAM_OP 50
int main (){
 setlocale(LC_ALL, “Portuguese”);
 float n1,n2; //variáveis para os valores do usuário
 char op; //variável para o tipo de operação
 int continua; //variável para continuar (0) ou não
 float matOp[TAM_OP][3];
 char vetOp[TAM_OP];
 int cont = 0, i = 0, flagHist = 0;
 float result = 0.0;
 do{
 // Apresentação da Calculadora 
 system(“cls”);
 printf(“---CALCULADORA---- \n\n”);
 printf(“ Para: Somar, Subtrair, Multiplicar, Dividir: “);
 printf(“ + - * / \n\n”);
 printf(“ Para: Seno, Cosseno, Tangente, Hipotenusa: “);
 printf(“ s c t h \n\n”);
 printf(“ Digite o símbolo para a operação desejada: “);
 scanf(“ %c”, &op); // Obtenção da operaçao a executar
 // Obtenção dos valores para execução das operações
 if (op == ‘+’ || op == ‘-’ || op == ‘*’ || op == ‘/’ ) {
 printf(“\n-> Digite os valores de (a) e (b) “);
 printf(“para a operação (a %cb): “, op);
 }
 else if (op == ‘s’) {
 printf(“\n-> Digite os valores do cateto oposto e “); 
 printf(“hipotenusa para a operação(seno): “);
 }
 else if (op == ‘c’) {
 printf(“\n-> Digite os valores do cateto adjacente e “); 
 printf(“hipotenusa para a operação(cosseno): “);
 }
133
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
 else if (op == ‘t’) {
 printf(“\n-> Digite os valores do cateto oposto e “);
 printf(“cateto adjacente para a operação(tangente): “);
 }
 else if (op == ‘h’) {
 printf(“\n-> Digite os valores do cateto oposto e “);
 printf(“cateto adjacente para a operação(hipotenusa): “);
 }
 else {
 continua = 0;
 continue;
 }
 scanf(“%f %f”, &n1, &n2);
 flagHist = 1;
 printf(“\n”);
 switch (op) {
 case ‘+’: // Operação de Adição
 result = n1 + n2;
 printf(“Soma de %.2f + %.2f = %.2f \n”, 
 n1, n2, result);
 break;
 case ‘-’: // Operação de Subtração
 result = n1 - n2;
 printf(“Subtrair %.2f - %.2f = %.2f \n”, 
 n1, n2, result);
 break;
 case ‘*’: // Operação de Multiplicação
 result =n1 * n2;
 printf(“Multiplicar %.2f * %.2f = %.2f \n”, 
 n1, n2, result);
 break;
 case ‘/’: // OIperação de Divisão
 if (n2 == 0) {
 printf(“Nao é possível dividir por 0!!!\n”);
 }
 else {
 result = n1 / n2;
 printf(“Dividir %.2f / %.2f = %.2f \n”, 
 n1, n2, result);
 }
 break; 
 case ‘s’: // Cálculo do seno
 if (n2 == 0) {
 printf(“Nao é possível calcular - número 0!!!\n”);
 }
 else {
 result = n1 / n2;
 printf(“Seno de %.2f / %.2f = %.2f \n”, 
134
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, 
Vetores e Matrizes em C para Solução de Problemas
 n1, n2, result);
 }
 break;
 case ‘c’: // Cáldulo do Cosseno
 if (n2 == 0) {
 printf(“Nao é possível calcular - número 0!!!\n”);
 }
 else {
 result = n1 / n2;
 printf(“Cosseno de %.2f / %.2f = %.2f \n”, 
 n1, n2, result);
 }
 break; 
 case ‘t’: // Cálculo da Tangente
 if (n2 == 0) {
 printf(“Nao é possível calcular - número 0!!!\n”);
 }
 else {
 result = n1 / n2;
 printf(“Tangente de %.2f / %.2f = %.2f \n”, 
 n1, n2, result); 
 }
 break; 
 case ‘h’: // Cálculo da Hipotenusa
 result = sqrt(pow(n1, 2) + pow(n2, 2));
 printf(“Hipotenusa de %.2f e %.2f = %.2f \n”, 
 n1, n2, result);
 break;
 default: // Operação inválida
 printf(“Operação inválida, tente novamente! \n”); 
 cont--;
 flagHist = 0;
 break; 
 }
 // Armazenamento da Operação no Histórico
 if (flagHist) {
 vetOp[cont] = op;
 matOp[cont][0] = n1;
 matOp[cont][1] = n2;
 matOp[cont][2] = result;
 }
 cont++;
 if (cont >= TAM_OP) {
 printf(“\nNão há mais espaço para operações.\n”);
 break; 
 }
 printf(“\nDigite 0 (zero) para Sair: “);
 scanf(“%d”, &continua);
135
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, Vetores e Matrizes em C para Solução de Problemas
 } while(continua != 0); // Controle da Repetição
 
 printf(“\nVocê escolheu sair, Obrigado!\n\n”);
 // Impressão do Histórico de Operações
 printf(“Operações Realizadas\n\n”);
 printf(“%2s %12s %10s %10s %10s\n”, 
 “Op”, “Operação”, “Valor1”, “Valor2”, “Resultado”);
 for (i = 0; i < cont; i++) {
 printf(“%c “, vetOp[i]);
 switch (vetOp[i]) {
 case ‘+’:
 printf(“%13s “,”Adição”);
 break;
 case ‘-’:
 printf(“%13s “,”Subtração”);
 break;
 case ‘/’:
 printf(“%13s “,”Divisão”);
 break;
 case ‘*’:
 printf(“%13s “,”Multiplicação”);
 break;
 case ‘s’:
 printf(“%13s “,”Seno”);
 break;
 case ‘c’:
 printf(“%13s “,”Cosseno”);
 break;
 case ‘t’:
 printf(“%13s “,”Tangente”);
 break;
 case ‘h’: 
 printf(“%13s “,”Hipotenusa”);
 break;
 } 
 printf(“%10.2f %10.2f %10.2f\n”, 
 matOp[i][0], matOp[i][1], matOp[i][2]);
 }
 printf(“\n\nFim do Programa.\n”);
 return 0;
}
Este programa foi todo desenvolvido na linguagem C e utilizou os conceitos já estudados até aqui, nesta unidade. 
Suas funcionalidades e o seu menu não são padrão do projeto proposto pela descrição do software, porém é 
comum e possível que cada programador que ler a descrição desse projeto de software o desenvolva com algu-
mas técnicas e implementação diferentes. Ao final, o que importa ao cliente é o perfeito funcionamento do 
programa, de acordo com o que foi solicitado.
136
Construção de Algoritmos | Unidade 8 - Aplicação de Estruturas Condicionais, Estruturas de Repetição, Vetores e Matrizes em C para Solução de Problemas
Com os conhecimentos que você adquiriu até aqui, você já pode utilizar outros recursos para otimizar este pro-
grama, diminuindo a quantidade de linhas de código, melhorando sua interface, melhorando a utilização de 
variáveis e fazendo diversas outras mudanças.
Síntese da unidade
Através do que foi exposto nesta unidade, você conheceu as atividades que compõem um projeto de desen-
volvimento de software para ser aplicado como solução de um problema específico. A unidade trouxe conceitos 
sobre os projetos em si, bem como suas divisões em etapas e processos, além de outros conceitos relacionados 
à análise sistêmica e lógica de situações, para que seja abstraída uma forma de se tratar cada situação através 
da construção de algoritmos. Esta unidade proporcionou o desenvolvimento de programas na linguagem C uti-
lizando vários dos conceitos já vistos, integrando-os em soluções compostas que possuem objetivos diferentes 
no programa. Agora você já tem uma visão sobre a criação de programas e da associação destes programas, ou 
funcionalidades, em um programa maior e completo. Esta visão proporcionará a você entender melhor, analisar 
e desenvolver soluções sistêmicas em diferentes situações do dia a dia que encontrar ou que forem propostas a 
você.
137
Considerações finais
Boa notícia: você chegou ao final da Unidade 8 e concluiu as unidades 
sobre a Construção de Algoritmos! Com o fechamento desta unidade, 
você já está apto a realizar uma abordagem de análise em situações e pro-
por, para cada uma delas, uma solução sistêmica em forma de algoritmos. 
Você agora é capaz de criar projetos de desenvolvimento de software para 
atender às soluções que você poderá propor, ou seja, você explorou sua 
capacidade de entender problemas e agora pode criar projetos de sistema 
que resolvam esses problemas. Parabéns por mais esta conclusão e con-
tinue firme!
138
CARVALHO, André C. P. L. F. de; LORENA, Ana Carolina. Introdução à 
computação: hardware, software e dados. 1. ed. Rio de Janeiro: LTC, 2017.
DALMAS, Luis. Linguagem C. Trad. João Araújo Ribeiro e Orlando Ber-
nardo Filho. 10. ed. Rio de Janeiro: LTC, 2016.
FORBELLONE, André Luiz Villar; EBERSPACHER, Henri Frederico. Lógica de 
programação: a construção de algoritmos e estruturas de dados. 3. ed. 
São Paulo: Prentice, 2005.
FORBES BRASIL. Facebook lança em SP centro para formação de pro-
gramadores e empreendedores. 28 ago. 2017. Disponível em: <https://
forbes.uol.com.br/colunas/2017/08/facebook-lanca-em-sp-centro-pa-
ra-formacao-de-programadores-e-empreendedores/>. Acesso em: 16 
ago. 2018.
GUIMARÃES, Ângelo de Moura; LAGES, Newton Alberto de Castilho. 
Algoritmos e estrutura de dados. [reimp.]. Rio de Janeiro: LTC, 2008.
HORSTMANN, Cay. Conceitos de computação com o essencial de C++ 
[recursoeletrônico]. Trad. Carlos Arthur Lang Lisbôa e Maria Lúcia Blanck 
Lisbôa. 3. ed. Porto Alegre: Bookman, 2008.
MANZANO, José Augusto N. G.; OLIVEIRA, Jayr F. de. Estudo dirigido de 
linguagem C. 17. ed. São Paulo: Editora Érica, 2013.
MANZANO, José Augusto N. G.; MATOS, Ecivaldo; LOURENÇO, André Evan-
dro. Algoritmos: técnicas de programação. 2. ed. São Paulo: Érica, 2015.
MANZANO, José Augusto N. G.; OLIVEIRA, Jayr F. de. Algoritmos Lógica 
para Desenvolvimento de Programação de Computadores. 28. ed. São 
Paulo: Editora Érica, 2016.
Referências bibliográficas
https://forbes.uol.com.br/colunas/2017/08/facebook-lanca-em-sp-centro-para-formacao-de-programadores-e-empreendedores/
https://forbes.uol.com.br/colunas/2017/08/facebook-lanca-em-sp-centro-para-formacao-de-programadores-e-empreendedores/
https://forbes.uol.com.br/colunas/2017/08/facebook-lanca-em-sp-centro-para-formacao-de-programadores-e-empreendedores/
139139
MEDINA, Marco; FERTIG, Cristiana. Algoritmos e programação: teoria e 
prática. São Paulo: Editora Novatec, 2006.
SILVA, Flávio Soares Corrêa da; FINGER, Marcelo; MELO, Ana Cristina Vieira 
de. Lógica para computação. São Paulo: Cengage Learning, 2006.
SOFFNER, Renato. Algoritmos e programação em linguagem. 1. ed. São 
Paulo: Saraiva, 2013.
CELES FILHO, Waldemar; CERQUEIRA, Renato, RANGEL, José Lucas. Intro-
dução à estrutura de dados. 7. reimp. Rio de Janeiro: Elsevier, 2004. 
MANZANO, José Augusto N. G. Linguagem C: acompanhada de uma 
xícara de café. São Paulo: Érica, 2015.
MANZANO, José Augusto N. G.; OLIVEIRA, Jayr F. de. Estudo Dirigido de 
Linguagem C. 17 ed. São Paulo: Editora Érica, 2013.
MIZRAHI, Victorine Viviane. Treinamento em Linguagem C. 2. ed. São 
Paulo: Person Prentice Hall, 2009.
PINHEIRO, Francisco A. C. Elementos de programação em C. Porto Ale-
gre: Bookman, 2012.
SOFFNER, Renato. Algoritmos e programação em linguagem. 1. ed. São 
Paulo: Saraiva, 2013.
SHILDT, Herbert. C, Completo e Total. Trad. Roberto Carlos Mayer. 3. ed. 
São Paulo: Makron Books, 1996.
DAMAS, Luís. Linguagem C. Tradução de João Araújo Ribeiro, Orlando 
Bernardo Filho. 10. ed. Rio de Janeiro: LTC, 2016.
MANZANO, José Augusto N. G. Linguagem C: acompanhada de uma 
xícara de café. São Paulo: Erica, 2015.
140140
MANZANO, José Augusto N. G.; OLIVEIRA, Jayr F. de. Algoritmos: lógica 
para desenvolvimento de programação de computadores. 28. ed. São 
Paulo: Érica, 2016.
MIZRAHI, Victorine Viviane. Treinamento em linguagem C. São Paulo, 
Pearson, 2008.
PEREIRA, Silvio do Lago. Estruturas de dados em C: uma abordagem 
didática. Erica, 2016. 
PINHEIRO, Francisco A. C. Elementos de programação em C. Porto Ale-
gre: Bookman, 2012. 
SOFNER, Renato. Algoritmos e programação em linguagem C. São 
Paulo: Saraiva, 2013.
DENNIS, Alan; WIXOM, Bárbara H.; ROTH, Roberta M. Análise e projeto de 
sistemas. 5. ed. Rio de Janeiro: LTC, 2014. 
PADUA FILHO, Wilson de Pádua. Engenharia de software: fundamentos, 
métodos e padrões. 3. ed. Rio de Janeiro: LTC, 2009. 
PRESSMAN, Rogers; MAXIM, Bruce R. Engenharia de software: uma 
abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016. 
SCHACH, Stephen R. Engenharia de software: os paradigmas clássico e 
orientado a objetos. 7. ed. Porto Alegre: AMGH, 2010. 
AGUILAR, Luis Joyanes. Programação em C++ [recurso eletrônico]: algo-
ritmos, estruturas de dados e objetos – 2. ed. – Dados eletrônicos. – Porto 
Alegre: AMGH, 2011.
DAMAS, Luís. Linguagem C; tradução João Araújo Ribeiro, Orlando Ber-
nardo Filho. - 10.ed. Rio de Janeiro: LTC, 2016.
MANZANO, José Augusto N. G. Linguagem C: acompanhada de uma 
xícara de café. 1. ed. São Paulo: Érica, 2015.
141141
MANZANO, José Augusto N. G; OLIVEIRA, Jayr F. de. Algoritmos lógica 
para desenvolvimento de programação de computadores. 28. ed. São 
Paulo: Editora Érica, 2016.
MIZRAHI, Victorine Viviane. Treinamento em linguagem C. [recurso ele-
trônico: Biblioteca Virtual 3.0]. São Paulo: Pearson, 2008.
PEREIRA, Silvio do Lago. Estruturas de dados em C - uma abordagem 
didática. Érica, 2016. ISBN Digital: 9788536517254. 
PINHEIRO, Francisco A. C. Elementos de programação em C [recurso 
eletrônico]. – Dados eletrônicos. Porto Alegre: Bookman, 2012.
SOFNER, Renato. Algoritmos e programação em linguagem C. 1. ed. 
São Paulo: Saraiva, 2013.
AGUILAR, Luís Joyanes. Programação em C++ [recurso eletrônico]: algo-
ritmos, estruturas de dados e objetos – 2. ed. – Dados eletrônicos. – Porto 
Alegre: AMGH, 2011.
DAMAS, Luís. Linguagem C; tradução João Araújo Ribeiro, Orlando Ber-
nardo Filho. - 10.ed. - Rio de Janeiro: LTC, 2016.
MANZANO, José Augusto N. G; OLIVEIRA, Jayr F. de. Algoritmos Lógica 
para Desenvolvimento de Programação de Computadores. 28 ed. - 
São Paulo: Editora Érica, 2016.
SOFNER, Renato. Algoritmos e programação em linguagem C. 1. ed. - 
São Paulo: Saraiva, 2013.
	Unidade 1
	1. Introdução aos Conceitos de Algoritmo e Ambientes de Desenvolvimento (IDE) em C
	Unidade 2
	2. Tipos de Dados, Constantes, Variáveis, Operadores e Expressões em C
	Unidade 3
	3. Função de Entrada e Função de Saída em C
	Unidade 4
	4. Estruturas Condicionais ou de Decisão
	Unidade 5
	5. Estruturas de Repetição: While e Do-While
	Unidade 6
	6. Estruturas de Repetição: For
	Unidade 7
	7. Estrutura de Dados: Vetores e Matrizes
	Unidade 8
	8. Aplicação de Estruturas Condicionais, Estruturas de Repetição, Vetores e Matrizes em C para Solução de Problemas

Mais conteúdos dessa disciplina