Tomada de decisões
As condicionais estão por toda parte, praticamente tudo que realizamos em nossa vida envolve uma ou mais condições, portanto, é necessário tomar decisões, para resolver as situações.

Fonte: Shutterstock.
Deseja ouvir este material?
Áudio disponível no material digital.
Convite ao estudo
Podemos observar que tudo que realizamos em nossa vida envolve uma condição, certo? Se, para uma pergunta, temos várias possibilidades de resposta e se a pergunta contém condições, teremos que tomar decisões. Se você decidiu estudar programação é porque, de alguma forma, isso vai contribuir para sua formação profissional; caso contrário, faria outro curso ou seguiria outros rumos. Compreende? As condicionais estão por toda parte, seja nos fornecendo uma solução ou várias possibilidades de solução.
Nesta unidade, a fim de colocarmos em prática os conhecimentos a serem aprendidos, consideraremos o seguinte contexto de aprendizagem: vamos tratar de uma famosa instituição de ensino, referência no mercado educacional, para a qual você presta serviço por meio da empresa de software onde trabalha. Você foi eleito o funcionário do mês; seu diferencial foi o treinamento que realizou com os estagiários. Em reconhecimento ao seu trabalho, foi concedido a você o direito de efetivar um dos estagiários. Agora é o momento de dar sequência ao treinamento e se empenhar ao máximo para garantir o aprendizado do seu novo funcionário, que até então era estagiário. Ele já conhece os conceitos de programação, o trabalho com algoritmos, variáveis e tipos de dados.
O próximo passo será começar a trabalhar com a linguagem de programação C e, para isso, nada melhor do que começar pelas estruturas de decisões condicionais (Seção 3.1), avançando para as estruturas de repetição condicionais (Seção 3.2) e finalizando com as estruturas de repetições determinísticas (Seção 3.3).
É certo que a programação condicionada passará a ser uma oportunidade de otimização e melhoramento das rotinas da instituição de ensino para a qual você e seu estagiário prestarão serviço. Assim como um grande maratonista se prepara para uma corrida, você deverá realizar vários exercícios de programação para chegar à frente.
Bons estudos!
Praticar para Aprender
Caro aluno, certamente você está preparado para o próximo passo na programação de computadores e já estudou os conceitos de algoritmos, linguagem de programação, tipos de dados, constantes, variáveis, operadores e expressões, portanto, agora é o momento de avançar. Nesta seção, você vai estudar as estruturas de decisão condicionais, começando com uma analogia.
Um grande evento será realizado na sua cidade e seu cantor favorito fará uma apresentação. Você, sortudo que é, ganhou um convite para uma visita ao camarote do cantor e, em seguida, assistir ao show junto à banda do cantor. Porém, nem tudo são flores! Você foi escalado pela empresa em que trabalha para a implantação de um software em um dos seus clientes. Para que o tempo seja suficiente e você possa usufruir o seu presente, foram oferecidas as seguintes condições: se você instalar o software até as 12h, poderá realizar o treinamento no período da tarde e, então, ir ao show; se não, terá que agendar o treinamento para o final do dia e comprometer a sua ida ao show.
Veja que é uma analogia simples de estrutura de decisão condicional e que poderíamos, ainda, criar alguns casos que proporcionariam a sua ida ao show. Diante de tal situação, voltaremos a nossa atenção à instituição de ensino em que você e seu funcionário (ex-estagiário) prestarão serviço por meio da empresa de software onde vocês trabalham. A instituição de ensino está passando por um processo de otimização nas suas atividades e colocou o seguinte desafio para vocês: realizar um programa em linguagem C que calcule o valor do salário líquido, levando em consideração os descontos de INSS e Imposto de Renda (Tabelas 2.1 e 2.2).
SALÁRIO BRUTO (R$) | ALÍQUOTA / INSS |
---|---|
Até 1.045,00 | 7,5% |
De 1.045,01 até 2.089,60 | 9% |
De 2.089,61 até 3.134,40 | 12% |
Acima de 3.134,40 | 14% |
SALÁRIO BRUTO (R$) | ALÍQUOTA / IR |
---|---|
Até 1.903,98 | - |
De 1.903,99 até 2.826,65 | 7,5% |
De 2.826,66 até 3.751,05 | 15,0% |
De 3.751,06 até 4.664,68 | 22,5% |
Acima de 4.664,68 | 27,5% |
Bons estudos!
Roteiro para o professor
Para auxiliar no desenvolvimento da competência e no entendimento do problema abordado na situação-problema, pode ser que o aluno faça o cálculo do desconto da seguinte forma:
desc_inss = salario_bruto * (9 / 100)
Matematicamente, isso está correto. Contudo, há duas observações a serem feitas, do ponto de vista computacional:
- A opção de entrar com o valor constante de 0.09 em vez de colocar mais uma expressão aritmética de divisão pode tornar o programa mais eficiente.
- Como a expressão 9 / 100 é uma divisão de dois números inteiros, o compilador entenderá que o resultado deve ser um número inteiro também. Assim, ele cortará a parte fracionária do número, resultado apenas no valor 0 (zero). Isso vai provocar um erro no programa, pois a multiplicação de qualquer coisa por zero sempre será zero. O que fazer então? Nesses casos, o programador deve dizer explicitamente ao compilador do programa que ele deseja que o resultado seja um número decimal. Para isso, deve-se adicionar a expressão (float) antes de cada número da expressão aritmética, conforme segue: ((float) 9 / (float) 100)
Peça aos alunos que executem o trecho de código a seguir no Paiza.io:
#include <stdio.h>
int main(){
float desc_inss, salario_bruto = 12000;
desc_inss = salario_bruto * (9 / 100);
printf("\n%.2f", desc_inss);
return 0;
}
Eles notarão que o valor calculado para o desconto será 0 (zero), conforme explicado no ponto. Agora, peça que alterem a linha que calcula o desconto, conforme a seguir, e vejam novamente o resultado.
desc_inss = salario_bruto * ((float) 9 / (float) 100);
Para isso, eles podem utilizar a ferramenta Paiza.io (PAIZA.IO).
Outra ferramenta que o aluno pode utilizar para esse teste é a C Tutor, ela permite realizar o teste de mesa do código. Sugira que os alunos testem o código utilizando essa ferramenta. Ela pode ser encontrada no link disponível a seguir: http://pythontutor.com/c.html#mode=edit.
conceito-chave
Caro aluno, agora que você já estudou os tipos de variáveis, os tipos de dados, as operações e as expressões para composição de um programa de computador, chegou o momento de trabalhar as estruturas condicionais. Você já se deparou com situações ou questões em que temos caminhos distintos a serem seguidos, certo? Por exemplo, na sentença “domingo irei ao cinema se estiver chovendo, caso contrário, irei à praia” temos duas alternativas baseada em condições; no caso, se chover (for verdadeira) irei ao cinema, se não chover (falsa), irei à praia. Geralmente, em programação trabalhamos com esse tipo de estrutura, que são as ações, também chamadas de instruções. Muitas vezes essas instruções são escolhidas com base em algum critério ou condição que deve ser satisfeita.
Estrutura de decisão condicional if/else
Assim, vamos iniciar a seção com a estrutura de decisão condicional if/else (se/então).

Segundo Manzano (2013), para a solução de um problema envolvendo situações, podemos utilizar a instrução if (em português “se”). A estrutura tem como objetivo testar um conjunto de instruções e tomar uma decisão, criando um desvio dentro do programa para que possamos chegar a uma condição verdadeira ou falsa. Lembre-se de que a instrução pode receber valores em ambos os casos.
Na linguagem de programação C, utilizamos chaves ("{" e "}") para determinar o início e o fim de um bloco de instruções. Já a condição deve estar entre parênteses “()”. Observe na Figura 2.2 como fica a estrutura condicional simples utilizando fluxograma e, na sequência, a sintaxe da instrução if utilizada na linguagem C.

Agora, veja a representação da sintaxe:
if <(condição)> {
<conjunto de instruções>;
Estrutura condicional simples
No exemplo a seguir, usaremos uma aplicação de condicional simples, lembrando que será executado um teste lógico em que, se o resultado for verdadeiro, ela trará uma resposta; caso contrário, retornará nada. Veja no exemplo que segue a situação de um jovem que verifica se poderá ou não tirar a carteira de habilitação:
#include <stdio.h>
int main() {
int idade;
printf("\n Digite sua idade: ");
scanf("%d", &idade);
if (idade >= 18) {
printf("\n Você já pode tirar sua carteira deHabilitação, você é maior de 18");
}
return 0;
}

Teste o Código 2.1 utilizando a ferramenta Paiza.io.
Você deve inserir a idade na aba input na ferramenta; após executar, vá até a aba input, entre com os dados, execute novamente e observe a saída
Nesse exemplo, não é considerado o “se não” (else). Simplesmente, se a condição não for verdadeira, ela exibirá nada como resposta.
Estrutura condicional composta
Agora, veremos a seguir, a estrutura condicional composta, que completa a nossa condição inicial com o comando else, que significa “se não”. Vejamos como fica a estrutura no fluxograma da Figura 2.3:

Agora, veja a representação da sintaxe:
if <(condição)> {
<primeiro conjunto de instruções>;
} else {
<segundo conjunto de instruções>;
}
Vamos testar o código que verifica a obrigatoriedade do voto de acordo com a idade do eleitor. Assim, definimos duas variáveis que correspondem às idades de dois eleitores e faremos o teste e análise do fluxo de execução do código.
#include <stdio.h>
int main() {
int eleitor1 = 18;
int eleitor2 = 60;
if (id.eleitor1 && id.eleitor2 >= 18 ) {
printf ("\n Eleitores");
} else {
printf ("\n Não eleitores");
}
return 0;
}
Exemplificando
Vamos treinar um pouco a estrutura condicional if-else. Um pássaro quer chegar ao seu ninho, porém ele precisa seguir alguns caminhos, e você deve incluir as posições com ângulos corretos de forma que ele chegue ao seu destino. Se você não o posicionar corretamente ele não chegará ao seu destino, e você deverá reiniciar o jogo.
Observe o exemplo na plataforma Blockly (BLOCKLY GAMES, [s. d.]. Iniciamos o jogo no nível 4. Observe na Figura 2.4 que temos um eixo x que marca a posição do pássaro, que está enumerada. No caso, completamos o desafio com 5 linhas de código envolvendo as condições if e else. Vamos seguir com os próximos.

Vamos para um desafio mais difícil? X e Y marcam os posicionamentos do pássaro, e devemos ir até a minhoca e, depois, até o ninho. Tente você mesmo e verifique em quantas linhas de código consegue resolver o problema. Observe que agora temos dois eixos, x e y, para modificar o posicionamento do pássaro.
Vamos, agora, criar outra situação para a estrutura condicional composta em linguagem C: Maria e João estão se preparando para uma viagem. Se o orçamento final deles for igual ou maior a R$ 10.000 eles farão uma viagem internacional; caso contrário, deverão fazer uma viagem nacional.
#include <stdio.h>
int main() {
float orcamento;
printf("\n Digite o valor do orcamento para viagem \n");
scanf("%f", &orcamento);
if (orcamento >= 10000) {
printf("\n João e Maria possuem orçamento para uma viagem internacional");
} else {
printf("\n João e Maria irão optar por uma viagem nacional");
}
return 0;
}

Teste o Código 2.3 utilizando a ferramenta Paiza.io.
Melhorou o entendimento?
Ficou bem mais estruturado, e o comando else possibilitou um retorno à condicional if.
Exemplificando
Para reforçar o seu conhecimento, vamos ver o exemplo que segue em linguagem de programação C, que retorna se o valor de um número digitado é par ou ímpar, representando uma estrutura condicional composta. Além disso, aplicaremos o operador aritmético módulo (%).
#include <stdio.h>
int main() {
int num;
printf ("\n Digite um número inteiro: ");
scanf ("%d", &num);
if (num % 2 == 0) {
printf ("\n O número é par");
} else {
printf ("\n O numero é ímpar");
}
return 0;
}

Teste o Código 2.4 utilizando a ferramenta Paiza.io.
Sabemos que todo número par é divisível por 2; isso significa que ao dividirmos esse número por 2, o resto será zero. Sabemos, ainda, que o operador módulo (%) nos devolve o resto da divisão inteira entre dois números. Agora ficou fácil: basta verificarmos se a expressão num % 2, onde num é a variável inteira que armazena o número informado, é igual a zero. Caso sim, num é par; caso contrário, é ímpar.
Estrutura condicional de seleção de casos
Dando sequência aos estudos, vamos conhecer a estrutura condicional de seleção de casos, switch-case que, segundo Schildt (1997, p. 35), “testa sucessivamente o valor de uma expressão contra uma lista de constantes inteiras ou de caractere”. Quando os valores são avaliados o comando é executado.
Devemos estar atentos a algumas particularidades para o comando switch-case:
- Caso nenhum dos valores seja encontrado, o comando default será executado.
- Os comandos são executados até o ponto em que o comando break for localizado.
Veja na Figura 2.5 o fluxograma representando a estrutura condicional de seleção de casos:

Vamos ver como fica a sintaxe em linguagem C:
switch (variável){
case constante1:
<comandos>
break;
case constante2:
<comandos>
break;
default: <comandos>
}
Reflita
Por que, ao contrário dos outros casos, o caso default não precisa conter um comando break após os comandos?
Veja que o comando break é utilizado para forçar a saída da estrutura condicional, ou seja, ele sai do comando sem executar as próximas instruções. Caso não seja colocado o comando break, o programa continua e averigua o próximo caso até o fim do switch ou até encontrar um break.
Exemplificando
A Figura 2.6 mostra um exemplo de operação em um caixa eletrônico, utilizando fluxograma. Uma das primeiras atividades que o usuário deve realizar, após ter se identificado, é selecionar a operação a ser executada, por exemplo: verificar saldo, emitir extrato, saque e sair.

Que tal colocar em prática o uso da estrutura condicional switch-case com esse exemplo? O código a seguir traduz o fluxograma anterior para a linguagem de programação C.
#include <stdio.h>
int main(){
int n;
printf("\n(1) para Saldo\n(2) para Extrato\n(3) para Saque\n(4) para Sair");
printf("\nInforme a operação desejada: ");
scanf("%d", &n);
switch(n) {
case 1:
printf("\nSaldo");
break;
case 2:
printf("\nExtrato");
break;
case 3:
printf("\nSaque");
break;
case 4:
printf("\nSair");
break;
default:
printf("\nInválido");
}
return 0;
}

Teste o Código 2.5 utilizando a ferramenta Paiza.io.
Para fixar o que está sendo estudado, vamos aplicar, a seguir, um exemplo cuja finalidade é descobrir o desconto que um cliente terá, de acordo com a escolha de uma cor específica marcada em cada produto:
Exemplificando
#include <stdio.h>
int main() {
char x;
float valor, desc, total;
printf("\n Digite o valor da compra: ");
scanf("%f", &valor);
printf("\n Digite a letra que representa o seu desconto de acordo com a cor: ");
printf("\n a. azul");
printf("\n v. vermelho");
printf("\n b. branco");
printf("\n Digite sua opcao:");
scanf("%s", &x);
switch(x) {
case 'a':
printf("\n Você escolheu a cor azul, seu desconto será de 30 por cento");
desc = 30;
break;
case 'v':
printf("\n Você escolheu a cor vermelha, seu desconto será de 20 por cento");
desc = 20;
break;
case 'b':
printf("\n Você escolheu a cor branca, seu desconto será de 10 por cento");
desc = 10;
break;
default:
printf("\n Opcão inválida, não será concedido desconto\n");
desc = 0;
}
total = valor - (valor * desc / 100);
printf("\n O valor da sua compra é R$ %.2f", total);
return 0;
}

Teste o Código 2.6 utilizando a ferramenta Paiza.io.
Assimile
Para não perder o ritmo dos estudos, vamos relembrar os operadores lógicos e a tabela verdade:
Operadores | Função |
---|---|
! | Negação – NOT |
&& | Conjunção – AND |
|| | Disjunção – OR |
A | B | A && B | A || B | ! A | ! B |
---|---|---|---|---|---|
Verdade | Verdade |
Verdade | Verdade | Falso | Falso |
Verdade | Falso | Falso | Verdade | Falso | Verdade |
Falso |
Verdade | Falso | Verdade | Verdade | Falso |
Falso |
Falso | Falso | Falso | Verdade | Verdade |
Estrutura condicional encadeada
Para finalizar a seção que trata das estruturas de decisão condicionais, vamos entender o funcionamento da estrutura condicional encadeada, também conhecida como ifs aninhados. Segundo Schildt (1997), essa estrutura é um comando if que é o objeto de outros if e else. Em resumo, um comando else sempre estará ligado ao comando if de seu nível de aninhamento. Veja na Figura 2.7 um dos tipos de fluxogramas que representa uma estrutura condicional encadeada.

Podemos caracterizar a sintaxe de uma estrutura condicional encadeada da seguinte forma:
if (condição) {
instrução;
} else {
if (condição) {
instrução;
} else(condição) {
instrução;
}
}
Agora, veja no programa a seguir uma estrutura condicional encadeada, em que são analisadas as possíveis situações de um aluno, de acordo com sua nota final:
#include <stdio.h>
int main(){
float nota_final;
printf("\n Informe a nota final do aluno: ");
scanf("%f", ¬a_final);
if (nota_final >= 60) {
printf("\n Aprovado");
} else {
if (nota_final >= 50) {
printf("\n Em recuperação");
} else {
printf("\n Reprovado");
}
}
return 0;
}

Teste o Código 2.7 utilizando a ferramenta Paiza.io.
Roteiro para o professor
Caro professor, a partir do exemplo do código a seguir, os alunos podem questioná-lo se não é necessário alterar a condição do segundo comando condicional para (nota_final >= 50 && nota_final < 60). Essa é uma dúvida muito comum. Nesse caso, como sugestão, peça aos alunos que façam o teste do código, para que consigam assimilar a importância de testar se a nota é menor do que 60 é desnecessário.
#include <stdio.h>
int main(){
float nota_final;
printf(“\n Informe a nota final do aluno: “);
scanf(“%f”, ¬a_final);
if (nota_final >= 60) {
printf(“\n Aprovado”);
} else {
if (nota_final >= 50) {
printf(“\n Em recuperação”);
} else {
printf(“\n Reprovado”);
}
}
return 0;
}
O aluno pode ainda, realizar o teste de mesa, eles podem utilizar a ferramenta C Tutor, que permite visualizar o passo a passo da execução do código, indicado por uma seta vermelha. Para isso, o aluno deverá criar o código ou copiar o código disponível e colocar na área de desenvolvimento e visualizar o fluxo de execução do código. A ferramenta está disponível em: http://pythontutor.com/c.html#mode=edit. Acesso: 12 jan. 2020.
Contudo, para isso, a linha 5 do código (scanf) precisa ser substituída por uma atribuição direta ao valor da variável, por exemplo, nota_final = 58, conforme mostrado na figura a seguir. Isso porque a ferramenta C Tutor ainda não permite usar esse tipo de comando da linguagem C.
O aluno deverá clicar em “prev” e “next” para visualizar o fluxo de execução.

De acordo com o programa anterior, se a nota final do aluno for igual ou superior a 60, ele é considerado aprovado. Caso contrário, há um comando if aninhado (linhas 10 a 14), para verificarmos se o aluno está em recuperação, isto é, se a nota final dele está entre 50 e 60 ou se está reprovado, caso a nota final seja menor do que 50 pontos.
Uma forma alternativa e mais apropriada de se programar o código apresentado é usar a estrutura else if. Com essa estrutura, você evita encadeamentos muito profundos, tornando o código mais fácil de ler, entender e manter.
Podemos caracterizar a sintaxe de uma estrutura condicional else if da seguinte forma:
if (condição) {
instrução;
} else if (condição) {
instrução;
} else {
instrução;
}
Veja como ficaria o código do programa que analisa a situação de um aluno, de acordo com sua nota final, usando a estrutura else if.
#include <stdio.h>
int main(){
float nota_final;
printf(“\n Informe a nota final do aluno: “);
scanf(“%f”, ¬a_final);
if (nota_final >= 60) {
printf(“\n Aprovado”);
} else if(nota_final >= 50) {
printf(“\n Em recuperação”);
} else {
printf(“\n Reprovado”);
}
return 0;
}

Teste o Código 2.8 utilizando a ferramenta Paiza.io.
Roteiro para o professor
Prezado professor, quando se trata de estruturas com uma mesma finalidade em linguagens de programação, é bom que os alunos saibam como converter uma solução dada em uma estrutura para outra estrutura e vice-versa. Esse é o caso das estruturas switch-case e if-else.
Assim, como uma sugestão, peça aos alunos que adaptem o código do programa bancário, apresentado a seguir e apresentado no campo exemplificando para que ele passe a utilizar a estrutura do tipo if-else. O intuito é que eles percebam que o switch-case nada mais é do que um if-else “camuflado”.
#include <stdio.h>
int main(){
int n;
printf("\n(1) para Saldo\n(2) para Extrato\n(3) para Saque\n(4) para Sair");
printf("\nInforme a operação desejada: ");
scanf("%d", &n);
switch(n) {
case 1:
printf("\nSaldo");
break;
case 2:
printf("\nExtrato");
break;
case 3:
printf("\nSaque");
break;
case 4:
printf("\nSair");
break;
default:
printf("\nInválido");
}
return 0;
}
Para isso, eles podem utilizar a ferramenta Paiza.io (PAIZA.IO).
Após essa atividade, discuta com os alunos algumas questões, tais como:
- Qual estrutura, switch-case ou if-else, é mais fácil de ler e entender?
- Em que tipo de situação a utilização da estrutura switch-case não seria adequada? Cite uma.
Bons estudos e até a próxima seção!
Faça valer a pena
Questão 1
Podemos dizer que o comando else é uma forma de negar o que foi colocado em uma situação do comando if. Sendo assim, else é o caso contrário do comando if.
Funciona da seguinte forma:
if <(condição)> {
<conjunto de comandos>;
} else {
<conjunto de comandos>;
}
Assinale a alternativa que melhor se compõe à contextualização apresentada.
Correto!
Para cada else é necessário um if anterior, no entanto, nem todos os ifs precisam de um else.
Tente novamente...
Incorreta, pois para cada else é necessário um if anterior.
Tente novamente...
Incorreta, pois vários ifs precisam de vários elses na condição.
Tente novamente...
Incorreta, pois pode-se montar uma condição apenas com um if, sem a necessidade de incluir um else.
Tente novamente...
Incorreta, pois o comando else não impõe condições; é uma forma de negar o que foi colocado em uma situação do comando if.
Questão 2
A estrutura condicional encadeada também é conhecida como ifs aninhados, ou seja, é um comando if que é o objeto de outros if e else.
Assinale a alternativa que corresponde à sintaxe da estrutura condicional encadeada.
Tente novamente...
Incorreta. São dois comandos if independentes entre si. Portanto, não se trata de uma estrutura condicional aninhada.
Correto!
É a única alternativa em que podemos dizer que um comando if é o objeto de outros if e else.
Tente novamente...
Incorreta. É um comando if-else simples. Portanto, não se trata de uma estrutura condicional aninhada.
Tente novamente...
Incorreta. Corresponde a um uso inválido do comando if-else. Portanto, gerará um erro de compilação.
Tente novamente...
Incorreta. Corresponde a um uso inválido do comando if-else. Portanto, gerará um erro de compilação.
Questão 3
A estrutura condicional de seleção de casos, switch-case, segundo Schildt (1997, p. 35) “testa sucessivamente o valor de uma expressão contra uma lista de constantes inteiras ou de caractere”, ou seja, quando os valores são avaliados o comando é executado.
Levando em consideração a estrutura condicional de seleção utilizando casos, qual a principal função dos comandos default e break. Assinale a alternativa correta:
Tente novamente...
Incorreta. O comando break não é obrigatório. Nesse caso, a sequência de comandos do próximo caso (case) será automaticamente executada.
Tente novamente...
Incorreta. O comando default é executado quando nenhum dos valores é executado. Por exemplo, quando o usuário digitou uma opção inválida do menu de opções.
Tente novamente...
Incorreta. O comando default é executado quando nenhum dos valores é executado. Por exemplo, quando o usuário digitou uma opção inválida do menu de opções.
Tente novamente...
Incorreta. O comando default é executado quando nenhum dos valores é executado. Por exemplo, quando o usuário digitou uma opção inválida do menu de opções. Já o comando break determina o fim de uma das opções de comando, não o início.
Correto!
O comando default é executado quando nenhum dos valores é executado, já o comando break determina o fim de uma das opções de comando. Contudo, o comando break não é obrigatório.
Veja na sintaxe a seguir:
switch (variável)
{
case constante1: <comandos>
break;
case constante2: <comandos>
break;
default: <comandos>
}
Referências
02 - EXERCÍCIO - Estruturas de repetição em C. 10 mar. 2017. 1 vídeo (10 min 38s). Publicado pelo canal Hélio Esperidião. Disponível em: https://cutt.ly/ejWMzh7. Acesso em: 20 nov. 2020.
13 - PROGRAMAÇÃO em Linguagem C - Desvio Condicional Aninhado - if / else if. 27 fev. 2015. 1 vídeo (11 min 12s). Publicado pelo canal Bóson Treinamentos. Disponível em: https://cutt.ly/bjWMcF7. Acesso em: 20 nov. 2020.
BLOCKLY GAMES. Jogos do Blockly: Pássaro. Blockly Games, [s. l.], [s. d.]. Disponível em: https://cutt.ly/LjWMboM. Acesso em: 20 nov. 2020.
DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2016.
EDELWEISS, N. Algoritmos e programação com exemplos em Pascal e C. Porto Alegre: Bookman, 2014.
MANZANO, J. A. N. G. Estudo Dirigido de Linguagem C. 17. ed. rev. São Paulo: Érica, 2013.
MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
MIZRAHI, V. V. Treinamento em linguagem C. 2. ed. São Paulo: Pearson Prentice Hall, 2008.
PROGRAMAÇÃO C - Aula 07 - while, do-while, for – Estruturas de repetição. 10 abr. 2012. 1 vídeo (15 min 56s). Publicado pelo canal Peterson Lobato. Disponível em: https://cutt.ly/QjWMnMk. Acesso em: 20 nov. 2020.
SCHILDT, H. C Completo e total. 3. ed. São Paulo: Pearson Prentice Hall, 2005.
SOFFNER, R. Algoritmos e Programação em Linguagem C. São Paulo: Saraiva, 2013.