Comentários

0%

Não pode faltar

Estruturas de decisão condicionais

Marcio Aparecido Artero

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).

Tabela 2.1 | Descontos INSS
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%
Fonte: elaborada pelo autor.
Tabela 2.2 | Descontos IR
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%
Fonte: elaborada pelo autor.

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).

Figura 2.1 | Condições
Fonte: Shutterstock.

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.

Figura 2.2 | Fluxograma representando a função if
A imagem mostra o símbolo de terminal com o texto início, na sequência o símbolo de condicional com o texto condição, do símbolo de condicional há duas saídas, uma  à esquerda com a letra V que segue para o símbolo de processo com o texto comando 1,  e outra que segue o fluxo com a letra F, ambas vão para o símbolo de terminal, com o texto fim.
Fonte: elaborada pelo autor.

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:

Código 2.1 | Instrução if - idade
#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;
}
Fonte: elaborado pelo autor.

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:

Figura 2.3 | Fluxograma representando as funções if e else
A imagem mostra os símbolos de terminal com o texto início, na sequência o símbolo de condicional com o texto condição, do símbolo de condicional há duas saídas, uma  à esquerda com a letra V que segue para o símbolo de processo com o texto comando 1,  e outra à direita com a letra F, que segue para o símbolo de processo com o texto comando 2, ambas seguem para o símbolo de terminal, com o texto fim.
Fonte: elaborada pelo autor.

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.

Código 2.2 | Instrução if-else - eleitores
#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;
} 
Fonte: elaborado pelo autor.
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.

Figura 2.4 | Jogo Pássaro – Blockly
Fonte: captura de tela do Jogo Pássaro – Blockly elaborada pelo autor.

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.

Código 2.3 | Estrutura condicional composta - orçamento
#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;
}
Fonte: elaborado pelo autor.

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 (%).

Código 2.4 | Estrutura condicional composta – par ou ímpar
#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;
}
Fonte: elaborado pelo autor.

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:

Veja na Figura 2.5 o fluxograma representando a estrutura condicional de seleção de casos:

Figura 2.5 | Fluxograma de estrutura condicional de seleção de casos
A imagem mostra o símbolo de processamento com o texto condição, dele o fluxo segue para o símbolo de condicional com o texto caso 1, que tem duas saídas, uma para à direita com a letra V, que segue para o símbolo de processo com o texto comando 1 e seu fluxo segue para o final, a outra saída segue o fluxo com a letra F e vai para outro símbolo de condicional com o texto caso 2, que tem duas saídas, uma para à direita com a letra V, que segue para o símbolo de processo com o texto comando 2 e seu fluxo vai para o final, a outra saída segue para a letra F e vai para outro símbolo de condicional com o texto caso N, que tem duas saídas, uma para à direita com a letra V que segue para o símbolo de processo com o texto comando N e seu fluxo segue para o final, a outra saída segue com a letra f para o símbolo de processo com o texto comando alternativo, que segue o fluxo para o final.
Fonte: elaborada pelo autor.

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.

Figura. 2.6 | Fluxograma de uma operação em um caixa eletrônico
A imagem mostra o símbolo de terminal com o texto início, que segue para o símbolo de exibição com o texto: Digite1 para saldo, 2 para extrato, 3 para saque e 4 para sair, que segue o fluxo para outro símbolo de exibição com o texto? Informe a operação desejada:, que segue o fluxo para o símbolo entrada de dados com o texto: leia n, na sequência tem o símbolo de exibição com o texto operação:, que segue para o símbolo de condicional com o texto n = 1, dele saem dois fluxos, um que segue o fluxo que vai para o símbolo de exibição com o texto Saldo que segue para o símbolo de terminal com o texto Fim, o outro fluxo segue à direita com a letra F que vai para o símbolo de condicional com o texto n = 2, dele saem dois fluxos, um que segue o fluxo que vai para o símbolo de exibição com o texto Extrato que segue para o símbolo de terminal com o texto Fim, o outro fluxo segue à direita com a letra F que vai para o símbolo de condicional com o texto n = 3, dele saem dois fluxos, um que segue o fluxo que vai para o símbolo de exibição com o texto Saque que segue para o símbolo de terminal com o texto Fim, o outro fluxo segue à direita com a letra F que vai para o símbolo de condicional com o texto n = 4, dele saem dois fluxos, um que segue o fluxo que vai para o símbolo de exibição com o texto Sair que segue para o símbolo de terminal com o texto Fim, o outro fluxo segue à direita com a letra F que vai para o símbolo de exibição com o texto inválido.
Fonte: elaborada pelo autor.

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.

Código 2.5 | Instrução switch-case – operações bancárias
#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;
}
Fonte: elaborado pelo autor.

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
Código 2.6 | Instrução switch-case – desconto por cor
#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;
}
Fonte: elaborado pelo autor.

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:

Quadro 2.1 | Operadores lógicos
Operadores Função
! Negação – NOT
&& Conjunção – AND
|| Disjunção – OR
Fonte: elaborado pelo autor.
Quadro 2.2 | Tabela Verdade
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
Fonte: elaborado pelo autor.

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.

Figura 2.7 | Fluxograma de estrutura condicional encadeada
A imagem mostra um fluxo indo para o símbolo condicional com o texto condição 1, ele tem duas saídas, uma à direita com a letra V que segue para o símbolo de processo com o texto comando para condição 1 verdadeira, que segue para o final da condicional 1, a outra saída à esquerda com a letra F vai para outro símbolo condicional com o texto condição 2, ele tem duas saídas, à direita com a letra V segue para o símbolo de processo com o texto: comando para condição 2 verdadeira, a outra saída à esquerda com a letra F, segue para o símbolo de processo com o texto comando para condição 2 falsa, ambas saídas seguem para o fim da condicional 2, que segue para o fim da condicional 1.
Fonte: elaborada pelo autor.

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:

Código 2.7 | Estrutura condicional encadeada – 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;
}
Fonte: elaborado pelo autor.

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.

Fonte: captura de tela do C Tutor elaborada pelo autor.

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.

Código 2.8 | Estrutura else-if – 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;
}
Fonte: elaborado pelo autor.

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.

Bons estudos!

AVALIE ESTE MATERIAL

OBRIGADO PELO SEU FEEDBACK!