C – Controle de fluxo
Estudar os diversos tipos de controles de fluxo disponíveis na linguagem C.
Pré-requisitos
É necessário que o leitor tenha acompanhado o artigo anterior, pois os artigos obedecem a uma seqüência.
Nota: Este artigo faz parte do curso de “Linguagem C – Básico”.
Controle de Fluxo
Os comandos de controle de fluxo podem ser divididos em três grupos: Instruções condicionais, estrutura de repetição e os desvios incondicionais que serão apresentados a seguir.
Instruções Condicionais
As instruções condicionais existentes no padrão ANSI são: if, switch e o operador ternário (?).
Instrução If
Esta instrução obedece à sintaxe:
if (condição) instrução para condição verdadeira ;
else instrução para condição falsa;
Pode-se utilizar uma ou mais instruções verdadeiras e falsas no if. Caso seja mais de uma deve-se colocar entre chaves. Se a condição é verdadeira serão executadas apenas as instruções localizadas após a instrução if. Caso contrario somente as instruções após o else serão executadas. O else é opcional conforme mostra o exemplo abaixo que efetua a soma de dois números e avisa ao usuário quando o resultado obtido for um número par.
#include<stdio.h>
void main()
{
int num1,num2,soma;
printf(“Digite o primeiro valor inteiro a ser somado:”);
scanf(“%d”,&num1);
printf(“Digite o segundo valor inteiro a ser somado:”);
scanf(“%d”,&num2);
soma=num1+num2;
printf(“Soma: %d “,soma);
if((soma%2)==0)
printf(” – numero parn”);
}
No programa acima é usada a instrução scanf que será ensinada num próximo artigo. O importante agora é saber que ela é a responsável pela entrada de dados pelo console. Abaixo pode ser visto a entrada do usuário e saída do programa.
Digite o primeiro valor inteiro a ser somado: 2
Digite o segundo valor inteiro a ser somado: 4
Soma:6 – numero par
Esse mesmo programa pode ser reescrito para que avise também ao usuário quando o resultado é um numero impar.
#include<stdio.h>
void main()
{
int num1,num2,soma;
printf(“Digite o primeiro valor inteiro a ser somado:”);
scanf(“%d”,&num1);
printf(“Digite o segundo valor inteiro a ser somado:”);
scanf(“%d”,&num2);
soma=num1+num2;
printf(“Soma: %d “,soma);
if((soma%2)==0)
printf(” – numero parn”);
else
printf(” – numero imparn”);
}
Isto é feito acrescentando o else a instrução if. Desta forma, o programa verifica se o resto da soma dividido por dois é igual a 0, caso seja será impresso na tela que o valor é par. Caso contrario será impresso que a soma se trata de um numero impar.
A linguagem C padrão também permite o uso de ifs alinhados, obedecendo à forma:
If(condição)
Instrução;
Else
If(condição)
Instrução;
Else
If(condição)
Instrução;
.
.
.
Else
Instrução;
Para entender melhor veja o próximo exemplo:
#include<stdio.h>
void main()
{
float nota;
printf(“Digite o valor da nota(numero):”);
scanf(“%f”,¬a);
if((nota>=8)&&(nota<=9))
printf(“Nota correspondente a A!!!n”);
else
if((nota>=6)&&(nota<=7))
printf(“Nota correspondente a B!!!n”);
else
if((nota>=4)&&(nota<=5))
printf(“Nota correspondente a C!!!n”);
else
if((nota>=2)&&(nota<=3))
printf(“Nota correspondente a D!!!n”);
else
if((nota>=0)&&(nota<=1))
printf(“Nota correspondente a E!!!n”);
else
printf(“Nota invalida!!!n”);
}
O operador ternário (?)
O operador ? é muito utilizado no lugar da instrução if. Este operador requer três operando e pode ser escrito da seguinte forma:
Exp1? Exp2: Exp3
Neste exemplo o usuário entra com o valor de x, se o valor de x for menor ou igual a 0 então o valor de x é incrementado de 1 é atribuído a y. De outra forma o y terá o valor de x decrementado de 1.
#include<stdio.h>
void main()
{
int x,y;
printf(“digite um numero inteiro:n”);
scanf(“%d”,&x);
y=x<=0 ? x+1 : x-1;
printf(“y:%dn”,y);
}
Switch
Sua sintaxe é:
switch(expressão){
case constante1:
seqüência de comandos
break;
case constante2:
seqüência de comandos
break;
case constante3:
seqüência de comandos
break;
.
.
.
default:
seqüência de comandos
}
Esta instrução compara a expressão com todas as constantes caso seja verdadeira ela executa as seqüências de comandos daquela constante. Caso todas as alternativas sejam falsas o comando default é executado. A instrução break demonstrada acima é opcional, é ela que para a execução do switch case. O Padrão ANSI permite usar 257 comandos case. O comando switch compara apenas igualdades, enquanto que o if comparar qualquer expressão lógica ou relacional. Como exemplo será criado um menu para que o usuário escolha entre fazer a soma de dois números ou calcular a media.
#include<stdio.h>
void main()
{
int entrada;
printf(“Digite 1 para calcular a soma de dois numerosn”);
printf(“Digite 2 para calcular a median”);
scanf(“%d”,&entrada);
switch(entrada){
case 1:
printf(“Vc escolheu a opcao de somar dois numeros”);
case 2:
printf(“Vc escolheu a opcao de calcular a media”);
default:
printf(“Nenhuma das opcoes foi selecionada”);
}
}
Estrutura de repetição
As estruturas de repetição são utilizadas para que um conjunto de instruções seja executado até que ocorra uma certa condição. O laço for diferencia dos restantes( while e do-while) por ter condições pré-definidas, ou seja, o numero de vezes a ser executada já é conhecido.
Laço for
Sintaxe do laço:
For(inicialização; condição ; incremento) comando;
Na inicialização é atribuído um valor para variavel que controla o laço, a condição determina quando o laço deve ser encerrado e por ultimo temos o quanto a variável controladora é incrementada. Exemplo simples:
#include<stdio.h
void main()
{
int n;
for(n=1; n<=10; n++)
printf(“n=%dn”,n);
}
No programa acima o for iniciamos a variável n com o valor, a instrução que escreve o valor de n será executada enquanto n for menor ou igual a 10, sendo que n é incrementada de 1 em iteração. Sendo assim a saída do programa será:
n=1
n=2
n=3
n=4
n=5
n=6
n=7
n=8
n=9
n=10
Laço While
Sua forma geral é:
while (condição) Instrução;
Este laço executa a instrução até que a condição se torne falsa (qualquer valor diferente de zero).
#include<stdio.h>
void main()
{
int n1,n2,soma,resposta;
resposta=1;
while(resposta==1)
{
printf(“Digite valor de n1(inteiro):n”);
scanf(“%d”,&n1);
printf(“Digite valor de n2(inteiro):n”);
scanf(“%d”,&n2);
soma=n1+n2;
printf(“Soma:%dn”,soma);
printf(“Deseja continuar? (1 – sim / 2 – nao)n”);
scanf(“%d”,&resposta);
while((resposta!=1) && (resposta!=2))
{
printf(“Digite 1 para sim ou 2 para nao !!n”);
scanf(“%d”,&resposta);
}/*fim_while*/
}/*fim_while*/
}
Nesse programa foram executados dois laços while, o primeiro executa a soma de dois números até que a resposta seja igual a 1. E o segundo que pede um valor valido, ou seja, 1 para continuar calculando a soma de outros números ou 2 para terminar o programa.
Laço do-while
A grande diferença entre o laço do-while e os vistos anteriormente é que ele analisa a condição no final do laço. Dessa forma todas as instruções localizadas dentro do do-while será executada pelo menos uma vez. O laço termina quando a condição se torna falsa. Sintaxe:
Do{
Instrução;
}while(condição)
O programa anterior também pode ser escrito da seguinte forma:
#include<stdio.h>
void main()
{
int n1,n2,soma,resposta;
do{
printf(“Digite valor de n1(inteiro):n”);
scanf(“%d”,&n1);
printf(“Digite valor de n2(inteiro):n”);
scanf(“%d”,&n2);
soma=n1+n2;
printf(“Soma:%dn”,soma);
printf(“Deseja continuar? (1 – sim / 2 – nao)n”);
scanf(“%d”,&resposta);
if((resposta!=1)&& (resposta!=1))
printf(“Programa finalizado, este numero nao existe no menu n”);
}while(resposta==1);
}
A única diferença é que este programa permite digitar outro número além de 1 e 2, porém será exibida a mensagem “Programa finalizado, este numero não existe no menu”.
Desvio incondicional
A linguagem C tem como desvio incondicional o comando goto.
Comando goto
Esta instrução ou comando é muito pouco utilizado, pois tornam os códigos difíceis de se compreender. Por esse motivo não entraremos em muitos detalhes. Veja o exemplo abaixo, ele faz o mesmo do que o exemplo que utilizando o laço for (mostrado anteriormente). Repare que o programa que utiliza o for é muito mais fácil de se entender.
#include<stdio.h>
void main()
{
int n;
n=1;
loop1: /*rótulo*/
printf(“n=%dn”,n);
n++;
if(n<=10) goto loop1; /*caso n seja menor ou igual a 10 volta para o rótulo
acima, executando assim as instruções outra vez
até que a condição do if seja falsa*/
}
Fonte: http://www.juliobattisti.com.br/tutoriais/katiaduarte/cbasico003.asp