CURSO DE C
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.
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. No exemplo, se num for maior que 10, será impressa a frase: "O número e maior que 10". Repare que, se o número for igual a 10, estamos executando dois comandos. Para que isto fosse possível, tivemos que agrupa-los em um bloco que se inicia logo após a comparação e termina após o segundo printf. Repare também que quando queremos testar igualdades usamos o operador == e não =. Isto porque o operador = representa apenas uma atribuição. 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 modificado 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).
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:
Podemos ver 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> int main () { int count; for (count=1;count<=100;count=count+1) printf ("%d ",count); return(0); }
Outro exemplo interessante é mostrado a seguir: o programa lê uma string e conta quantos dos caracteres desta string são iguais à letra 'c'
#include <stdio.h>
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=i+1)
{
if ( string[i] == 'c' )
/* Se for a letra 'c' */
cont = cont +1;
/* Incrementa o contador de caracteres */
}
printf("\nNumero de caracteres c = %d", cont);
return(0);
}
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.
Mais um exemplo, agora envolvendo caracteres:
/* Este programa imprime o alfabeto: letras maiúsculas */ #include <stdio.h> int main() { char letra; for(letra = 'A' ; letra <= 'Z' ; letra =letra+1) printf("%c ", letra); }Este programa funciona porque as letras maiúsculas de A a Z possuem código inteiro sequencial.
AUTO AVALIAÇÃO
Veja como você está.
a) Explique porque está errado fazer
if (num=10) ...
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.
Curso de C da EE/UFMG - 1996 - 2000