Controle de Fluxo Laços e Desvios incondicionais
Laços Em C, há três comandos de ITERAÇÃO ou LAÇOS: for while do... while Estes permitem que um conjunto de instruções seja executado até que ocorra uma certa condição. Esta condição pode ser pré-definida (como no laço for) ou com o final em aberto (como nos laços while e do... while). 2
Laço For Forma Geral for(inicialização; CONDIÇÃO; INCREMENTO) { } COMANDO; Cada parte possui um significado próprio dado a seguir 3
Laço For INICIALIZAÇÃO - geralmente um comando de atribuição para colocar um valor na variável de controle do laço; CONDIÇÃO - é uma expressão relacional que determina quando o laço acaba; INCREMENTO - define como a variável de controle do laço varia cada vez que o laço é repetido; COMANDO - um único comando ou um bloco de comandos executados enquato a CONDIÇÃO é verdadeira. 4
Variações 1. Operador Vígula - uma das variações mais comuns é o uso do operador vírgula para permitir que duas ou mais variáveis controlem o laço: for( x = 0, y = 100 ; x < y ; x ++, y -= x ) printf("x = %i, y = %i\n",x,y); 5
Variações 2. Laço infinito - Nenhuma das três expressões que formam um laço for é obrigatória. Assim, você pode criar um laço infinito assim: for ( ; ; ) printf(" Laço infinito \n"); 6
Variações 3. Laço sem corpo - Um comando pode ser vazio. Isso significa que o corpo do laço for (ou qualquer outro laço) também pode ser vazio. int pausa ( unsigned long int p) { for ( t = 0 ; t < p ; t++ ) ; } 7
Laço While FORMA GERAL while( CONDIÇÃO ) COMANDO; COMANDO é executado enquanto a CONDIÇÃO for verdadeira ( diferente de zero ); quando for falsa, o controle passa para a linha após COMANDO. 8
Variações 1. Laço infinito : while ( 1 ) printf(" Laço infinito \n"); 9
Variações 2. Laço sem corpo. int pausa ( unsigned long int p) { while ( p-- ) ; } 10
Laço do...while Ao contrário dos laços for e while, que testam a condição do laço no começo, o laço do... while verifica a condição ao final do laço. Isso significa que um laço do... while SEMPRE SERÁ EXECUTADO AO MENOS UMA VEZ. FORMA GERAL do { COMANDO; }while( CONDIÇÃO ); 11
Laço do...while Embora as chaves não sejam necessárias quando apenas um comando está presente, elas são geralmente usadas para evitar confusão (para você, não para o compilador) com o while O laço do... while repete até que a CONDIÇÃO se torne falsa. 12
Variações 1. Laço infinito : do{ printf(" Laço infinito \n"); } while ( 1 ) ; 13
Variações 2. Laço sem corpo. int pausa ( unsigned long int p) { do { } while ( p-- ); } 14
Desvios Incondicionais return goto break continue 15
O comando return Este comando é usado para retornar de uma função. Ele é um comando de desvio porque faz com que a execução retorne (salte de volta) ao ponto em que a chamada à função foi feita. FORMA GERAL return EXPRESSÃO; 16
O comando return Se return tem um valor associado a ele, esse valor é o valor de retorno da função. Se nenhum valor de retorno é especificado, assume-se que apenas lixo é retornado (alguns compiladores irão automaticamente retornar 0 se nenhum valor for especificado, mas não conte com isso). 17
O comando goto Na programação estruturada, não há nenhuma situação que necessite do goto. No entanto, o goto é uma conveniência que, se usada com prudência, pode ser uma vantagem em certas situações. FORMA GERAL goto RÓTULO;... RÓTULO: 18
O comando goto O comando goto requer um RÓTULO - um identificador válido seguido por doispontos). O RÓTULO tem de estar na mesma função do goto que o usa não é permitido desvios entre funções. O RÓTULO pode vir antes, e não apenas depois, do comando goto. 19
Laço infinito 1. LOOP: printf("laço infinito\n"); 2. goto LOOP; 20
O comando Break O comando break tem dois usos. Você pode usá-lo para terminar um case em um comando switch Você pode também utilizá-lo para forçar uma terminação imediata de um laço, evitando o teste condicional normal do laço. Quando o comando break é encontrado dentro de um laço, o laço é imediatamente terminado e o controle do programa retorna ao comando seguinte ao laço. 21
O comando continue O comando continue trabalha de uma forma pouco parecida com a do comando break. Porém, em vez de forçar a terminação, continue força que ocorra a próxima iteração do laço, pulando qualquer código intermediário. Para o laço for, o comando continue faz com que o incremento e o teste condicional sejam executados. 22
O comando continue Para os laços while e do... while, o controle do programa passa para o teste condicional. int conta_espacos(const char * str) { int i = 0, nesp = 0; while ( str[i] ) { if ( str[i]!= ' ' ) continue; nesp ++; } return nesp; } 23
Atividades Seja N um número quadrado perfeito. Se somarmos os números ímpares consecutivos (1+3+5+7+9+...) até que esta soma seja igual a N, o número M de termos somados será igual a raiz quadrada de N. Exemplo: N = 16 16 = 1 + 3 + 5 + 7 M = 4 termos. Logo, a raiz quadrada de 16 é 4. Fazer um programa em C para ler um número inteiro e positivo N e responder se N é quadrado perfeito. 24
Atividades Fazer um programa em C para calcular a soma dos N primeiros múltiplos de um inteiro K, onde N e K são lidos e são números inteiros e positivos. 25