
Estruturas condicionais
As estruturas condicionais são usadas em um programa para que ele possa fazer tomadas de decisões baseadas em comparações,
e dependendo dos resultados dessas comparações, o programa decidirá o fluxo que deve seguir.
Nas próximas seções serão abordados os principais comandos utilizados nas estruturas
de controle de fluxo.
Comando IF
O comando IF trata-se de uma estrutura de decisão baseada em uma condição, cujo o resultado será sempre falso ou verdadeiro,
o qual determinará se uma ação ou um bloco de ações serão ou não executados.
Sintaxe
//Bloco de ações
IF(<CONDIÇÃO>)
{
<bloco de ações>
}
//Ação única
IF( <CONDIÇÃO> ) <ação única>;
Comando IF e ELSE
O comando IF permite apenas que uma ação seja executada quando a condição for verdadeira, caso contrário nada acontece.
Já o conjunto de comandos IF/ELSE, além de especificar o fluxo que deve ser seguido quando a condição for verdadeira,
permite também especificar outra ação ou bloco de ação quando tal condição for falsa.
Sintaxe
//Bloco de ações
IF(<CONDIÇÃO>){
<bloco de ações>
}ELSE{
<bloco de ações>
}
//Ação única
IF( <CONDIÇÃO> )
<ação única>;
ELSE
<outra ação única>;
Comandos if aninhados e if/ElSE/if
A estrutura IF/ELSE/IF nada mais é que uma extensão do comando IF/ELSE explicado na seção anterior e se refere a um conjunto de condições relacionadas a uma variável, onde apenas uma condição será verdadeira e consequentemente só uma ação ou bloco de ações serão executadas.
Sintaxe
//Bloco de ações
IF(<CONDIÇÃO 1>){
<bloco de ações 1>
}
ELSE IF (<CONDIÇÃO 2>){
<bloco de ações 2>
}
ELSE IF (<CONDIÇÃO 3>){
<bloco de ações 3>
}
ELSE IF (<CONDIÇÃO 4>){
<bloco de ações 4>
}
ELSE{
<bloco de ações 5>
}
//Ação única
IF( <CONDIÇÃO 1> ) <ação única 1>;
ELSE IF (<CONDIÇÃO 2>) <ação única 2>;
ELSE IF (<CONDIÇÃO 3>) <ação única 3>;
ELSE <ação única 4>;
Já o comando IF aninhado nada mais é do que um IF dentro de outro IF. Sintaxe
IF(<CONDIÇÃO>){
<bloco de ações>
}ELSE{
IF (<CONDIÇÃO>){
<bloco de ações>
}ELSE {
IF(CONDIÇÃO){
<bloco de ações>
}ELSE {
<bloco de ações>
}
}
}
Operador Ternário
O operador ternário pode ser usado para substituir a estrutura IF/ELSE explicada na seção “Comando IF e ELSE” quando a condição possui uma ação única que se trata de uma expressão. Por exemplo, veja a sintaxe da estrutura IF/ELSE ilustrada abaixo.
Sintaxe
if( <CONDIÇÃO> )
<expressão 1>;
else
<expressão 2>;
Ela pode ser substituída pelo operador ternário conforme sintaxe abaixo.
Sintaxe
<CONDIÇÃO>?<expressão 1>:<expressão 2>
Antes do ponto de interrogação (?) tem-se a condição,
após o ponto de interrogação é colocado o valor retornado caso a condição for verdadeira
e após os dois pontos (:) o valor retornado caso a condição seja falsa.
Exemplo
if(var > 0)
resultado = 1;
else
resultado = -1;
Convertendo o exemplo acima para um operador ternário tem se a seguinte expressão:
Resultado = var>0?1:-1;
Comando SWitCH
O comando SWITCH é outra opção de estrutura de tomada de decisão na linguagem C. Através desse comando é possível testar o valor de uma variável em relação aos diversos casos específicos que são estabelecidos.
A principal diferença entre a estrutura do comando SWITCH e a do IF/ELSE é que o primeiro permite apenas constantes nas condições, enquanto no segundo é possível utilizar expressões. Se nenhum dos casos for verdadeiro, então o bloco default será executado, porém,
esse bloco não é obrigatório para essa estrutura.
Sintaxe
switch (var) {
case valor1:
<bloco de ações>;
break;
case valor1:
<bloco de ações>;
break;
case valor1:
<bloco de ações>;
break;
.
.
.
case valorN:
<bloco de ações>;
break;
default:
<bloco de ações>;
}
Estruturas de REPETIÇÃO
Na linguagem C existem três comandos para estruturas de repetição que podem ser usados, são eles:
-
FOR,
-
WHILE
-
DO / WHILE
que fazem parte de um segundo grupo de comandos controle de fluxo.
Comando FOR
O comando FOR é bastante comum em diversas linguagens de programação, ele se baseia em uma variável de controle que é inicializada, usada em uma expressão que estabelece uma condição a qual deve ser testada em cada iteração e depois éincrementada ou decrementada,
o que faz com que o loop de repetição aconteça.
Sintaxe
//Comando for executando bloco de comandos
for(<inicialização>;
<condição>;
<incremento>)
{
<bloco de ações>
}
//Comando for executando comando único
for(<inicialização>;
<condição>;
<incremento>) <ação única>;
O exemplo acima mostra a sintaxe do comando, onde a inicialização da variável sempre é feita independente da condição.
Após a inicialização, a condição é testada, e caso ela seja verdadeira, ele executa determinada ação ou bloco de ações e logo após faz o incremento/decremento da variável. Depois disso, a condição é testada novamente e esse processo fica se repetindo até que a condição seja falsa. Nenhum dos elementos do comando for (inicialização, condição ou incremento) são obrigatórios.
loop infinito com o comando for
É possível fazer um loop infinito com o comando for, ou seja, uma estrutura de repetição que é executada para sempre sem cessar,
ou até encontrar um comando break, que o fará com que o loop seja interrompido e que a execução do fluxo normal do programa continue.
Sintaxe
//Comando for infinito executando bloco de comandos
for(<inicialização>; ; <incremento>)
{
<bloco de ações>
}
//Comando for infinito executando comando único
for(<inicialização>; ; <incremento>)<ação única>;
for( ; ; )<ação única>;
Comando WHILE
A segunda forma que será abordada para executar um laço de repetição é através do comando while. Ele também permite que uma ação ou bloco de ação sejam executados repetitivamente, enquanto uma determinada condição for verdadeira.
Sintaxe
//Comando while executando bloco de comandos
While( <condição> ){
<bloco de ações>
}
//Comando while executando comando único
While( <condição> ) <ação única>;
loop infinito com o comando WHILE
Assim como o comando for, é possível fazer um loop infinito com o comando while.
Para isso, basta colocar uma condição eternamente verdadeira como mostrado abaixo.
//Comando while infinito executando bloco de comandos
while(1){
<bloco de ações>
}
//Comando while infinito executando comando único
while(1) <ação única>;
Para interrompê-lo, basta que ele encontre um comando break da mesma forma como citado no comando for.
Comando DO-WHILE
A terceira opção de estrutura de repetição que será abordada é o comando DO-WHILE.
A grande diferença dele em relação ao comando WHILE, é que ele sempre executará o comando pelo menos uma vez.
Sintaxe
do{
<bloco de ações>;
}
while(<condição>);
Programa exemplificando o uso do comando do-while. O programa consiste em um menu, onde o usuário escolhe uma opção entre as opções “Adicionar”, “Alterar”, “Excluir” e “Sair”. Cada uma das opções possui um número ao qual se refere. Caso o usuário escolha um número que não exista no menu, uma mensagem informando que a opção é inválida é mostrada na tela. Enquanto o usuário escolhe uma opção diferente de 0 (“Sair”), o menu é mostrado novamente até que a opção “Sair” seja escolhida.
#include <stdio.h>
int main()
{
int opcao;
puts("** MENU **");
puts("Escolha uma opcao: ");
do
{
puts("1 - Adicionar");
puts("2 - Alterar");
puts("3 - Excluir");
puts("0 - Sair");
scanf("%d", &opcao);
switch (opcao)
{
case 1:
printf("\n Voce escolheu a opcao Adicionar.\n\n");
break;
case 2:
printf("\n Voce escolheu a opcao Alterar.\n\n");
break;
case 3:
printf("\n Voce escolheu a opcao Excluir.\n\n");
break;
case 0:
printf("\n Voce escolheu a opcao Sair.\n\n");
break;
default:
printf("\n Opcao INVALIDA.\n\n");
}
}while (opcao!=0);
return 0;
}
Comandos BREAK e CONTINUE
Comando BREAK
O comando break que já foi citado anteriormente é usado para interrupção de um comando,
como por exemplo, o comando switch, ou para interrupção de um loop de repetição.
Uma vez que esse comando é encontrado dentro dessas estruturas, a execução do bloco ou loop é interrompida
e o programa continua a execução a partir da primeira linha após o final do bloco ou loop que foi interrompido.
Exemplo
for(int i = 0;;i++){
printf(“%d”, i);
if(i>10)break;
}
Comando CONTINUE
O comando CONTINUE é usado apenas dentro de estruturas de repetição.
Quando esse comando é encontrado dentro de um loop, ele interrompe a iteração corrente e pula para a próxima iteração.
A figura 53 mostra o mesmo exemplo da seção “Comando BREAK” que explica o comando do-while,
usando agora o comando continue ao invés do default do comando switch para verificar se a opção digitada pelo usuário é uma opção válida.
puts("1 - Adicionar");
puts("2 - Alterar");
puts("3 - Excluir");
puts("0 - Sair");
scanf("%d", &opcao);
// inserção opcional do do comando CONTINUE
if(opcao >3){
printf("\n Opcao invalida.\n\n");
continue;
}
// inserção opcional do do comando CONTINUE
switch (opcao)
Comando GO TO
O GOTO é um comando de salto incondicional. Quando ele é encontrado, o programa faz um salto para outro ponto do programa que é especificado através de chamados rótulos. Esse rótulo consiste em nada mais que uma marca dentro do código que é determinada por um nome qualquer.
Sintaxe
<rótulo>:
...
<código>
...
goto <rótulo>;
...
<código>
...
O quadro acima ilustra a estrutura de sintaxe para o uso do GOTO. Para que o salto funcione, tanto o comando quanto o rótulo precisam estar dentro da mesma função. O uso desse comando não é considerado uma boa prática e deve ser evitado, pois o abuso da sua utilização pode tornar o código bastante confuso e difícil de se entender. Esse comando não é necessário e pode facilmente ser substituído por outros comandos de estrutura de controle de fluxo, portanto, se você optar por usá-lo, tenha bastante cuidado e moderação.
int main()
{
int opcao;
puts("** MENU **");
puts("Escolha uma opcao: ");
do
{
REPETIR:
puts("1 - Adicionar");
puts("2 - Alterar");
puts("3 - Excluir");
puts("0 - Sair");
scanf("%d", &opcao);
// inserção do comando GO TO
if(opcao >3){
printf("\n Opcao invalida.\n\n");
go to REPETIR;
}
