Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: estruturas de repetição While / Do While / For Prof. Renato Pimentel 1 Estruturas de repetição O real poder dos computadores está na sua habilidade em repetir uma operação, ou uma série de operações, muitas vezes. Esta repetição, denominada laço (loop), é um dos conceitos básicos da programação estruturada. 2 Prof. Renato Pimentel 1
Estruturas de repetição Utilização: trecho de um algoritmo precisa ser executado mais de uma vez: O número de repetições (ou iterações) pode ser fixo; O número de repetições pode estar atrelado a uma condição. 3 Estruturas de repetição Três tipos estruturas de repetição: 1. repetições ou iterações; Estrutura de repetição para número indefinido de repetições ou iterações: 2. Com teste (condição) no início. 3. Com teste (condição) no final. 4 Prof. Renato Pimentel 2
Estrutura de repetição com teste no início Análise de uma condição (variável ou expressão relacional / lógica) no início do laço. Repetição é feita enquanto tal condição for verdadeira. Situações em que condição é falsa no início da estrutura, antes que a primeira repetição seja executada: comandos não serão executados nenhuma vez. 5 Estrutura de repetição com teste no início Fluxograma... Laço Condição V Instrução(ões) F Fim... 6 Prof. Renato Pimentel 3
Estrutura de repetição com teste no início: Comando while em C Repete a sequência de comandos enquanto a condição for verdadeira. Forma geral: while (condição) instrução; Mais de um comando: usar chaves while (condição) { } sequência de instruções; Estrutura de repetição Estrutura de repetição 7 Estrutura de repetição com teste no início: Comando while em C Na execução do comando while, condição é avaliada e: Se for considerada verdadeira (possuir valor diferente de zero), a sequência de instruções será executada. Ao final da sequência, é feito novo teste da condição; Se condição for considerada falsa (valor igual a zero), sequência não é executada. 8 Prof. Renato Pimentel 4
Estrutura de repetição com teste no início: Comando while em C Comando while:...... while (condição) { sequência de instruções; }... Laço Enquanto (condição) V Instrução(ões) Fim... F 9 Estrutura de repetição com teste no início: Comando while em C Exemplo: mostrar na tela a sequência de inteiros de 1 a 100 Inviável: fazendo na mão : 10 Prof. Renato Pimentel 5
Estrutura de repetição com teste no início: Comando while em C Exemplo: mostrar na tela sequência de inteiros de 1 a 100 Usando while: 11 Estrutura de repetição com teste no início: Comando while em C num: contador (vai contar quantas vezes o laço será executado) 12 Prof. Renato Pimentel 6
Estrutura de repetição com teste no início: Comando while em C Inicializa o contador 13 Estrutura de repetição com teste no início: Comando while em C Incrementa o contador 14 Prof. Renato Pimentel 7
Estrutura de repetição com teste no início: Comando while em C Exemplo: criar um programa para ler 5 números e mostrar o resultado de sua soma 15 Estrutura de repetição com teste no início: Comando while em C Exemplo: criar um programa para ler 5 números e mostrar o resultado da soma de tais números E quando quisermos somar 100 números? Usar 100 variáveis? 16 Prof. Renato Pimentel 8
Estrutura de repetição com teste no início: Comando while em C Pequena melhoria: acumulador Uma só variável, val, para leitura dos dados Devo somar o valor de val à variável soma; val será reescrita no próximo scanf Variável soma é usada como acumulador, ou seja, armazenará o valor da soma a cada passo 17 Estrutura de repetição com teste no início: Comando while em C Versão correta, usando comando while 18 Prof. Renato Pimentel 9
Estrutura de repetição com teste no início: Comando while em C Versão correta, usando comando while Mantenho variável val para leitura dos dados Crio variável contagem para funcionar como contador Mantenho variável soma para atuar como acumulador Acumulo soma a cada repetição Incremento contagem a cada repetição 19 Estrutura de repetição com teste no início: Comando while em C Exemplo: imprimir inteiros entre dois valores a e b 20 Prof. Renato Pimentel 10
Estrutura de repetição com teste no início: Comando while em C Exemplo: imprimir inteiros entre dois valores a e b Neste exemplo, não há um número determinado de repetições em que o laço é executado, como nos casos anteriores. Quem define isto são os valores de a e b. 21 Estrutura de repetição com teste no início: Comando while em C Verdadeiro Falso 22 Prof. Renato Pimentel 11
Estrutura de repetição com teste no início: Comando while em C Exercício: escreva um programa onde, dados N inteiros, calcule a média destes números. O valor de N é dado pelo usuário. Imprima os valores lidos e a média calculada: 23 Estrutura de repetição com teste no final: Comando do-while em C Análise de uma condição (variável ou expressão relacional / lógica) ao final do laço. Repetição é feita enquanto tal condição for verdadeira. Diferença entre while e do-while: Comando while: é utilizado para repetir um conjunto de comandos zero ou mais vezes. Comando do-while: é utilizado sempre que o bloco de comandos deve ser executado ao menos uma vez. 24 Prof. Renato Pimentel 12
Estrutura de repetição com teste no final: Comando do-while em C Forma geral (obs.: sempre termina com ponto e vírgula - ;): do instrução; while (condição); Mais de uma instrução: usar chaves do { sequência de instruções; } while (condição); Estrutura de repetição Estrutura de repetição 25 Estrutura de repetição com teste no final: Comando do-while em C Comando do-while...... do { sequência de instruções; Laço } while (condição);... V Faça Instrução(ões) Enquanto (Condição)... F 26 Prof. Renato Pimentel 13
Estrutura de repetição com teste no final: Comando do-while em C Exemplo: menu de opções (exigindo opção válida): 27 Estrutura de repetição com teste no final: Comando do-while em C Exemplo: menu de opções (exigindo opção válida): enquanto valor digitado for diferente de 1, 2 ou 3, usuário do programa é forçado a entrar com novo valor 28 Prof. Renato Pimentel 14
Estrutura de repetição com teste no final: Comando do-while em C Verdadeiro Falso 29 Estrutura de repetição com teste no final: Comando do-while em C Exercício: escreva um programa que conta e mostra na tela o número de vezes em que o número 7 é digitado pelo usuário. O programa lê números inteiros até que o número -1 seja digitado. 30 Prof. Renato Pimentel 15
Relembrando: Estrutura de repetição para número definido de repetições Uso: quando número de vezes que um trecho de algoritmo deve ser repetido é conhecido. Pseudocódigo: Para <variável> de <ValorInicial> até <ValorFinal> [com passo n] faça <sequência de comandos> Fim Para 31 repetições Para utilizar o comando para é preciso ter 1)Uma variável para realizar a contagem; 2)Inicializar a variável de contagem com um valor; 3)Especificar uma condição para continuar no laço de repetição; 4)Incrementar a variável usada para contagem. 1 2 Para <variável> de <ValorInicial> até <ValorFinal> [com passo n] faça 3 <sequência de comandos> 4 Fim Para 32 Prof. Renato Pimentel 16
repetições Comandos no interior da estrutura são executados repetidamente enquanto ValorInicial <= variável <= ValorFinal Ao final de cada repetição, variável variável + n. n: passo ou incremento da estrutura. 33 repetições Fluxograma variável ValorInicial Laço <= ValorFinal? V Comando(s) F variável variável + passo... 34 Prof. Renato Pimentel 17
O loop ou laço for é usado para repetir um comando, ou bloco de comandos, diversas vezes: Sua forma geral em C é um pouco distinta do pseudocódigo, mas possui os mesmos elementos. Forma geral: for (inicialização; condição; incremento) comando; Mais de um comando: usar chaves for (inicialização; condição; incremento) { } sequência de comandos; 35 Exemplo: contagem de 1 a 10 36 Prof. Renato Pimentel 18
Exemplo: contagem de 1 a 10 Inicialização 37 Exemplo: contagem de 1 a 10 Condição 38 Prof. Renato Pimentel 19
Exemplo: contagem de 1 a 10 Incremento 39 Comparativo entre while e for: Comando while: repete uma sequência de comandos enquanto uma condição for verdadeira. Comando for: repete uma sequência de comandos n vezes. 40 Prof. Renato Pimentel 20
Comparativo entre while e for. 41 Comparativo entre while e for. Inicialização 42 Prof. Renato Pimentel 21
Comparativo entre while e for. Condição 43 Comparativo entre while e for. Incremento 44 Prof. Renato Pimentel 22
Ordem de execução dos comandos em estrutura de repetição for. Declaração: valor de i: lixo 45 Ordem de execução dos comandos em estrutura de repetição for. valor de i: 1 46 Prof. Renato Pimentel 23
Ordem de execução dos comandos em estrutura de repetição for. valor de i: 1 Este é um comando de inicialização do contador. Executado somente uma vez dentro do laço 47 Ordem de execução dos comandos em estrutura de repetição for. valor de i: 1 Testa se i é menor ou igual a 10 (V) 48 Prof. Renato Pimentel 24
Ordem de execução dos comandos em estrutura de repetição for. valor de i: 1 Mostra 1 na tela 49 Ordem de execução dos comandos em estrutura de repetição for. valor de i: 2 Incrementa o valor de i 50 Prof. Renato Pimentel 25
Ordem de execução dos comandos em estrutura de repetição for. valor de i: 2 Incrementa o valor de i Observe que i=i+1 ocorreu somente após o fim da execução do comando dentro do laço. Ou seja, a variável somente é incrementada após cada repetição da sequência de comandos 51 Ordem de execução dos comandos em estrutura de repetição for. valor de i: 2 Testa se i é menor ou igual a 10 (V) 52 Prof. Renato Pimentel 26
Ordem de execução dos comandos em estrutura de repetição for. valor de i: 2 Mostra 2 na tela 53 Ordem de execução dos comandos em estrutura de repetição for. valor de i: 3 Incrementa o valor de i 54 Prof. Renato Pimentel 27
Ordem de execução dos comandos em estrutura de repetição for. valor de i: 3 Testa se i é menor ou igual a 10 (V) 55 Ordem de execução dos comandos em estrutura de repetição for. Após algumas etapas... valor de i: 10 Mostra 10 na tela 56 Prof. Renato Pimentel 28
Ordem de execução dos comandos em estrutura de repetição for. valor de i: 11 Incrementa o valor de i 57 Ordem de execução dos comandos em estrutura de repetição for. valor de i: 11 Testa se i é menor ou igual a 10 (F) 58 Prof. Renato Pimentel 29
Ordem de execução dos comandos em estrutura de repetição for. valor de i: 11 Fim do laço. O valor de i permanece 11, caso não seja alterado. 59 Exemplo: imprimir valores entre a e b, incluindo a e b. 60 Prof. Renato Pimentel 30
Verdadeiro Falso 61 Exercício: escreva, usando for, um programa para calcular a soma dos números de 1 a 10. 62 Prof. Renato Pimentel 31
Omitindo parâmetros: no comando for, podemos omitir qualquer um de seus parâmetros: Inicialização; Condição; Incremento. 63 Omitindo parâmetros: no comando for, podemos omitir qualquer um de seus parâmetros. Exemplo: for sem inicialização. 64 Prof. Renato Pimentel 32
Omitindo parâmetros: no comando for, podemos omitir qualquer um de seus parâmetros. Cuidado: for sem condição: Omitir a condição cria um laço infinito (sempre verdadeiro) 65 Omitindo parâmetros: no comando for, podemos omitir qualquer um de seus parâmetros. Cuidado: for sem incremento: Omitir o incremento cria um laço infinito (porém, incremento pode ser feito dentro do laço). 66 Prof. Renato Pimentel 33
Aninhamento de estruturas de repetição Um comando de repetição utilizado dentro de outro; Semelhante ao visto para o comando if. Forma geral: repetição (condição 1) { [sequência de instruções 1]; repetição (condição 2) { } [sequência de instruções 2] repetição... 67 Aninhamento de estruturas de repetição Na forma geral vista na página anterior, repetição representa um dos três comandos de repetição (while, do while ou for). O programa começa os testes de condição pela condição 1. Caso condição seja não-nula (verdadeira), executa-se bloco de comandos a ela associado, e testa-se a condição 2. Assim, a sequência 2 somente será executada caso ambas as condições 1 e 2 sejam verdadeiras. Exemplo de aplicação prática: percorrer 2 conjuntos de valores em um programa. 68 Prof. Renato Pimentel 34
Aninhamento de estruturas de repetição Exemplo: escrever matriz identidade de tamanho 4 x 4. Usando for. 69 Aninhamento de estruturas de repetição Exemplo: escrever matriz identidade de tamanho 4 x 4. Usando while. 70 Prof. Renato Pimentel 35
Aninhamento de estruturas de repetição Observação: é possível o emprego de diferentes comandos de repetição em aninhamentos. 71 Estrutura de repetição: comando break em C Vimos que o comando break interrompe o comando switch, assim que uma das sequências de comandos de uma cláusula case é executada: Sem tal comando, as sequências de comandos de todas as cláusulas case posteriores também seriam executadas; Na realidade, break quebra a execução de qualquer bloco de comandos (definido pelas { }), interrompendo comando while, do-while ou for. 72 Prof. Renato Pimentel 36
Estrutura de repetição: comando break em C Exemplo: for sem condição visto anteriormente: 73 Estrutura de repetição: comando break em C Exemplo 2: valores de a até b, interrompendo se a=5. 74 Prof. Renato Pimentel 37
Estrutura de repetição: comando break em C Exemplo 2: valores de a até b, interrompendo se a=5. V F F V 75 Estrutura de repetição: comando continue em C O comando continue é semelhante ao break, uma vez que quebra a execução da sequência de comandos. Porém, o comando continue não interrompe comando while, do-while ou for, apenas quebra a sequência da repetição atual. 76 Prof. Renato Pimentel 38
Estrutura de repetição: comando continue em C Exemplo: escrever todos os números de 1 a 100 que não sejam múltiplos de 5. 77 Estrutura de repetição: comando continue em C Exemplo 2: valores de a até b, ignorando o valor 5. 78 Prof. Renato Pimentel 39
Estrutura de repetição: comando break em C Exemplo 2: valores de a até b, ignorando o valor 5. V F F V 79 Exercícios 1. Usando estruturas de repetição, escreva um programa em C que receba, para 6 alunos, 2 notas. Deve-se calcular a média aritmética destas duas notas, para cada aluno, além de mostrar a mensagem: Reprovado, se média for menor que 3; Exame, se média estiver entre 3 e 7; Aprovado, se média for maior ou igual a 7. 2. Escreva um programa que receba um número inteiro maior que 1, verifique e escreva se o número é primo ou não. Dica: utilize o resto de inteiros (operador %). Continua... 80 Prof. Renato Pimentel 40
Exercícios 3. Escreva um programa que calcule a área de um triângulo, dada sua base e altura. Use do-while, de maneira que a área só seja calculada quando ambas as medidas forem válidas (valores reais maiores que 0). 4. Escreva um programa em C que mostre os N primeiros números da sequência de Fibonacci, sendo os dois primeiros valores, f 1 = 0, e f 2 = 1, e termo geral F i = F i-1 + F i-2, i =2,..., N. O usuário deve entrar com o valor N. Continua... 81 Exercícios 5. Faça um programa que mostre as tabuadas dos números 1 a 10, usando estruturas de repetição aninhadas (assim como visto para os comandos if...else em C, é possível o aninhamento de laços de repetição usando for, while, ou do-while, em qualquer ordem). 82 Prof. Renato Pimentel 41
Referências ASCENCIO, A. F. G., CAMPOS, E. A. V. Fundamentos da Programação de Computadores. São Paulo: Prentice Hall, 2007. BACKES, A. Linguagem C: completa e descomplicada. Rio de Janeiro: Elsevier, 2013. TRAVENÇOLO, B. A. N. Notas de aula de Introdução à Programação e Computadores. 83 Prof. Renato Pimentel 42