Considere o seguinte código, onde a execução é linear:
1 double avaliacao1, avaliacao2, media; 2 avaliacao1 = 10; 3 avaliacao2 = 5; 4 media = (avaliacao1 + avaliacao2) / 2; 5 Console.WriteLine("A média do aluno é {0}", media);
A execução deste código ocorre da seguinte forma:
avaliacao1
.avaliacao2
.media
.
Entretanto, se quisermos que o programa tome decisões – como indicar se o aluno está aprovado ou reprovado – precisamos que o fluxo seja alterado com uma estrutura condicional.
Na Figura 1, o fluxograma ilustra como o programa desvia do fluxo linear. O losango indica a condição que deve ser avaliada (por exemplo, se a média for maior que 6). Se a condição for atendida, o fluxo segue para o bloco que exibe "Aluno Aprovado"; se não, segue para o bloco que exibe "Aluno Reprovado". Essa representação gráfica exemplifica como decisões podem direcionar o programa para caminhos distintos.
Estruturas condicionais são comandos que avaliam expressões e, com base no resultado (true ou false), direcionam o fluxo para diferentes blocos de código.
A instrução if
avalia a condição entre parênteses. Se essa condição for verdadeira, o bloco de
código dentro das chaves é executado; se falsa, o bloco é ignorado.
1 int saldo; 2 saldo = 100; 3 4 if(saldo > 0){ 5 Console.WriteLine("Seu saldo é positivo"); 6 }
Fluxo:
if
é executado.
A estrutura if/else
permite definir uma ação alternativa caso a condição inicial seja falsa.
1 int saldo; 2 saldo = -100; 3 4 if(saldo > 0){ 5 Console.WriteLine("Seu saldo é positivo"); 6 } 7 else{ 8 Console.WriteLine("Seu saldo é negativo"); 9 }
Fluxo:
else
e exibe "Seu saldo é negativo".Quando há mais de duas possibilidades, utiliza-se a estrutura if/else if/else
para testar múltiplas
condições. Se a primeira condição for falsa, o programa verifica a seguinte; se todas forem falsas, o bloco
else
é executado.
1 int saldo; 2 saldo = -100; 3 4 if(saldo > 0){ 5 Console.WriteLine("Seu saldo é positivo"); 6 } 7 else if(saldo < 0){ 8 Console.WriteLine("Seu saldo é negativo"); 9 } 10 else{ 11 Console.WriteLine("Seu saldo está zerado"); 12 }
Fluxo:
else
(linhas 10-12) seria executado, exibindo "Seu saldo
está zerado".As decisões em um programa dependem da avaliação de expressões. Estas expressões podem ser:
>
,
<
, >=
, <=
, ==
e !=
, e retornam
true ou false.
&&
(E), ||
(OU) e
!
(negação) para construir condições mais complexas.
Exemplo de verificação de ano bissexto:
resultado = (ano % 4 == 0) && (ano % 100 > 0) || (ano % 400 == 0);
Essa expressão retorna true se o ano for bissexto e false caso contrário.
Quadro 1 – Operadores de comparação e lógicos:
Operador de Comparação | Operador Lógico |
---|---|
> (maior) | && (E) |
< (menor) | || (OU) |
>= (maior ou igual) | ! (negação) |
<= (menor ou igual) | |
== (igual) | |
!= (diferente) |
Explicação do Quadro 1:
Esta tabela apresenta os principais operadores de comparação e os operadores lógicos usados para compor
expressões condicionais. Os operadores de comparação, como >
, <
,
>=
, <=
, ==
e !=
, determinam relações entre valores,
enquanto os operadores lógicos, como &&
(E), ||
(OU) e !
(negação), permitem combinar múltiplas condições para formar expressões mais complexas. Note que o operador
&&
retorna true
somente se ambas as condições forem verdadeiras, e o operador
||
retorna true
se pelo menos uma condição for verdadeira.
Quadro 2 – Exemplo de expressões relacionais e lógicas:
Expressão Relacional ou de Comparação | Expressão Lógica |
---|---|
a < b (true) | (a < b) && (d > c) (true) |
d > c (true) | (a < b) || (d == c) (false) |
a != d (true) | (a == b) || (a < d) (false) |
d < a (false) | (a > d) || (c > d) || (a < 99) (true) |
c <= a (false) | (a > d) && (c > d) || (a < 99) (true) |
c == d (false) | (a < c) && (d == a) && (a == 4) (false) |
Explicação do Quadro 2:
Esta tabela exemplifica como expressões relacionais e lógicas podem ser combinadas. Cada linha demonstra um
exemplo prático: à esquerda, uma expressão relacional que compara valores; à direita, a combinação dessa
expressão com outras, usando operadores lógicos, que resulta em um valor booleano (true
ou
false
). Esses exemplos ajudam a visualizar como pequenas operações se agrupam para formar condições
que determinam o fluxo do programa.
Novamente, lembre-se que: o operador &&
(E) exige que todas as condições sejam verdadeiras
para retornar true, e o operador ||
(OU) retorna true se pelo
menos uma condição for verdadeira.
É importante que todos os códigos sejam inseridos dentro do método
public static void Main(string[] args)
de uma classe, pois esse método é a porta de entrada do
programa em C#.
Experimente criar um código que:
Veja o seguinte vídeo e acompanhe no seu computador para melhor entendimento: link
Este capítulo demonstrou a importância das expressões relacionais e lógicas na tomada de decisões e no controle de fluxo dos programas. Vimos como as estruturas condicionais (if, if/else e if/else if/else) são utilizadas para desviar o fluxo de execução com base em condições avaliadas.
A prática desses conceitos, juntamente com a observação dos fluxogramas (com as figuras a serem inseridas nos locais indicados), é essencial para o domínio das técnicas de programação em C#.