sexta-feira, 27 de agosto de 2010

Introdução a Alguns Comandos de Controle de Fluxo

Os comandos de controle de fluxo são aqueles que permitem ao programador alterar a sequência de execução do programa. Vamos dar uma breve introdução a dois comandos de controle de fluxo. Outros comandos serão estudados posteriormente.

 

if

O comando if representa uma tomada de decisão do tipo "SE isto ENTÃO aquilo". A sua forma geral é:

 if (condição) declaração;

 A condição do comando if é uma expressão que será avaliada. Se o resultado for zero a declaração não será executada. Se o resultado for qualquer coisa diferente de zero a declaração será executada. A declaração pode ser um bloco de código ou apenas um comando. É interessante notar que, no caso da declaração ser um bloco de código, não é necessário (e nem permitido) o uso do ; no final do bloco. Isto é uma regra geral para blocos de código. Abaixo apresentamos um exemplo:

 

#include <stdio.h>
int main ()
{
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num>10) printf ("\n\nO numero e maior que 10");
if (num==10)
{
        printf ("\n\nVoce acertou!\n");
        printf ("O numero e igual a 10.");
        }
if (num<10) printf ("\n\nO numero e menor que 10");
return (0);
}

No programa acima a expressão num>10 é avaliada e retorna um valor diferente de zero, se verdadeira, e zero, se falsa. Repare que quando queremos testar igualdades usamos o operador == e não =. Isto é porque o operador = representa apenas uma atribuição. Isto pode parecer estranho à primeira vista, mas se escrevêssemos

 

if (num=10) ...       /* Isto esta errado */

o compilador iria atribuir o valor 10 à variável num e a expressão num=10 iria retornar 10, fazendo com que o nosso valor de num fosse adulterado e fazendo com que a declaração fosse executada sempre. Este problema gera erros frequentes entre iniciantes e, portanto, muita atenção deve ser tomada.

 Os operadores de comparação são: == (igual),  != (diferente de), > (maior que),  < (menor que),  >= (maior ou igual), <= (menor ou igual).

 

for

O loop (laço) for é usado para repetir um comando, ou bloco de comandos, diversas vezes, de maneira que se possa ter um bom controle sobre o loop. Sua forma geral é:

 for (inicialização;condição;incremento) declaração;

 A declaração no comando for também pode ser um bloco ({ } ) e neste caso o ; é omitido. O melhor modo de se entender o loop for é ver de que maneira ele funciona "por dentro". O loop for é equivalente a se fazer o seguinte:

 

inicialização;
if (condição)
{
declaração;
incremento;
"Volte para o comando if"
}

 

Podemos ver então que o for executa a inicialização incondicionalmente e testa a condição. Se a condição for falsa ele não faz mais nada. Se a condição for verdadeira ele executa a declaração, o incremento e volta a testar a condição. Ele fica repetindo estas operações até que a condição seja falsa. Abaixo vemos um programa que coloca os primeiros 100 números na tela:

 

#include <stdio.h><br />int main ()<br />{<br />	int count;<br />	for (count=1;count<=100;count=count+1) printf ("%d ",count);<br />	return(0);<br />}

Outro exemplo interessante é mostrado a seguir: o programa lê uma string e conta quantos dos caracteres desta string são iguais à letra 'c'

#include
int main ()
{
    char string[100];     /* String, ate' 99 caracteres */
    int i, cont;
    printf("\n\nDigite uma frase: ");
    gets(string); /* Le a string */
    printf("\n\nFrase digitada:\n%s", string);
    cont = 0;
    for (i=0; string[i] != '\0'; i++)
    {
        if ( string[i] == 'c' )      /* Se for a letra 'c' */
            cont = cont +1;          /* Incrementa o contador de caracteres */
    }
    printf("\nNumero de caracteres c = %d", cont);
}

Note o teste que está sendo feito no for: o caractere armazenado em string[i] é comparado com '\0' (caractere final da string). Caso o caractere seja diferente de '\0', a condição é verdadeira e o bloco do for é executado. Dentro do bloco existe um if que testa se o caractere é igual a 'c'. Caso seja, o contador de caracteres c é incrementado.


AUTO AVALIAÇÃO

Veja como você está.

a) Explique porque está errado fazer

<font size="+1">         if (num=10) ...</font>

O que irá acontecer?

b)  Escreva um programa que coloque os números de 1 a 100 na tela na ordem inversa (começando em 100 e terminando em 1).

c) Escreva um programa que leia uma string, conte quantos caracteres desta string são iguais a 'a' e substitua os que forem iguais a 'a' por 'b'. O programa deve imprimir o número de caracteres modificados e a string modificada.