programaÇÃo ii – parte 5 profa. maria augusta constante puget
TRANSCRIPT
PROGRAMAÇÃO II – PARTE 5
Profa. Maria Augusta Constante Puget
2
Comandos de Repetição (1)• Os comandos de repetição (ou laços) são úteis quando se tem tarefas a serem executadas repetitivamente.
• A linguagem C oferece os seguintes comandos de repetição:• while• for• do-while
3
O Comando while (1)• O uso do laço while é indicado quando se tem situações em que o laço pode ser terminado inesperadamente, por condições desenvolvidas dentro do corpo do laço.
4
O Comando while (2)Exemplo:#include <stdio.h>#include <stdlib.h>int main(){ int i; i = 1; while (i <= 10){ printf(“i = %i\n“, i); i++; } system("pause"); return 0;}
• Este laço imprime todos os inteiros contidos no intervalode 1 a 10.Note que:• 1 é o valor com o qual a variável de controle é inicializada.• i <= 10 é a condição deparada do laço.• Dentro do laço a variáveli é incrementada de 1 unidade a cada execução do laço.
Inicialização da variável de controle de laço
Condição do laço
Alteração da variável de controle do laço
5
O Comando while (3)Sintaxe do comando while (enquanto):
while (condição){ instrução_1; instrução_2;
... instrução_n;}
Se a condição entre parênteses for avaliada como:• Verdadeira (1):
As instruções entre chaves serão executadas. Após a execução da última instrução (instrução_n),a condição torna a ser avaliada.
• Falsa (0): As instruções entre chaves não são executadas e o fluxo do programa prossegue a partir da próxima instrução após o fecha-chaves.
• A condição entre parênteses é uma expressão booleana, isto é, que envolve operadores relacionais e, possivelmente, também operadores lógicos.
• Quando avaliada, uma tal expressão resulta em Verdadeiro (1) ou Falso (0).
Não há ponto-e-vírgula aqui
6
O Comando while (4)• Assim, o comando while consiste na palavra-chave while seguida de uma expressão de
teste entre parênteses.• A execução do laço while ocorre, normalmente, na seguinte ordem:1. A instrução de inicialização é executada. 2. A condição é avaliada. 3. Se a condição for verdadeira (igual a 1), o corpo do laço é executado uma vez e a
condição é avaliada novamente. 4. Este ciclo de teste e execução é repetido até que a expressão de teste se torne falsa
(igual a zero).5. Então o laço termina e o controle do programa passa para a linha seguinte ao laço.
• Elementos de um laço while:instrução de inicialização;while(condição){
//corpo do laço...incremento(ou decremento);...}
12
4
3
7
O Comando while (5)• Pode acontecer de a condição do laço não ser nunca verdadeira e o laço não
ser executado nenhuma vez.Exemplo:
i = 10;while(i < 5){
printf("i = %i\n", i);i++;
}• Se não houver dentro do laço uma instrução que altere o valor da variável de
controle do laço de tal forma que a condição do laço torne-se falsa em algum momento da execução do programa, tem-se um laço infinito.
Exemplo:i = 1;while(i < 10){
printf("i = %i\n", i);}
• Como i inicia valendo 10, a condição i < 5 é, logo de início, falsa.• Neste caso, o laço não é executado
nenhuma vez.
• Como i inicia valendo 1, a condição i < 10 é verdadeira.• Como o valor de i não é alterado dentro
do laço, a condição permanece verdadeira “para sempre”.
8
O Comando while (6)• Uma outra maneira de implementar um laço infinito é utilizando o literal 1 como condição de laço (lembrando que, em C, 1 = verdadeiro).
while(1){...}
9
O Comando break (1)• O comando break causa a interrupção imediata de um laço. • Quando um break é encontrado dentro de um laço o mesmo
deixa de ser executado e o controle do programa passa para a próxima instrução após o laço.
Exemplo:int valor;while(1){printf("Digite um inteiro positivo (0 para terminar):");scanf("%i“, &valor);if (valor == 0){break;}...}
10
O Comando for (1)• O laço for é geralmente usado quando queremos repetir algo por um número fixo de vezes.
• Ou seja, geralmente utilizamos um laço for quando sabemos de antemão o número de vezes a repetir.
11
O Comando for (2)Exemplo:#include <stdio.h>#include <stdlib.h>int main(){ int i; for(i = 1; i <= 10; i++){
printf("i = %i\n", i); } system("pause"); return 0;}
• Este laço imprime todos os inteiros contidos no intervalode 1 a 10.Note que:• 1 é o valor com o qual a variável de controle é inicializada.• i <= 10 é a condição deparada do laço.• A variável i é incrementada de 1 unidade a cada execução do laço.
12
O Comando for (3)Sintaxe do comando for:
for (expr_inicialização; condição; expr_alteração){ instrução_1; ... instrução_n;}
Exemplo:
Não há ponto-e-vírgula aqui
for(i = 1; i <= 10; i++){
printf("i = %i\n", i);}
Ponto-e-vírgula
Inicialização IncrementoCondição
Corpo do laço
13
Ordem de Execução das Expressões no Laço for (1)
1. Primeiramente, a expressão de inicialização (1) é avaliada. Isto ocorre uma única vez, no início da execução do laço for.
2. Em seguida, a condição (2) é avaliada.3. Se a condição for avaliada como verdadeira, o corpo do laço (3) é executado.4. Após a execução do corpo do laço a expressão de alteração(4) é executada.5. Novamente a condição (2) é avaliada.6. O laço é interrompido quando a condição (2) se tornar falsa.
for(i = 1; i <= 10; i++){
printf("i = %i\n", i);}
1 2 4
3
14
O Comando for - Exemplo (1)Exemplo:#include <stdio.h>#include <stdlib.h>int main(){ int i; for(i = 1; i <= 10; i++){
printf("\n%4i X 6 = %4i", i, i*6); } printf("\n"); system("pause"); return 0;}
Este laço imprime a tabuadado 6.
15
Flexibilidade do laço for (1)• Nos exemplos anteriores utilizamos o laço for na sua forma
mais comum, isto é:• Primeira expressão para inicializar a variável;• Segunda expressão para expressar um limite para a execução do laço;• Terceira expressão para incrementar ou decrementar a variável de laço.
• Podemos, entretanto, utilizar estas expressões de outras formas...
16
Flexibilidade do laço for (2)O Operador Vírgula
• Qualquer uma das expressões de um laço for pode conter várias instruções separadas por vírgulas.
Exemplo:#include <stdio.h>#include <stdlib.h>int main(){ int i, j; for(i = 0, j = i; (i+j) < 100; i++, j++){
printf("%i ", i+j); } printf("\n"); system("pause"); return 0;}
Este laço imprime os númerosdo 0 ao 98 de 2 em 2.
17
Flexibilidade do laço for (3)Omitindo expressões do laço for
• Qualquer uma das três expressões de um laço for pode ser omitida.• Os únicos elementos que não podem ser omitidos são os dois ponto-e-vírgulas.
Exemplo:#include <stdio.h>#include <stdlib.h>#include <conio.h>
int main(){ unsigned char ch; for( ;(ch = getche()) != '\r'; ){
printf("=%i\n", ch); } printf("\n"); system("pause"); return 0;}
Neste laço estão sendo omitidasas expressões de inicialização e de alteração.
Se as expressões de inicialização ou de alteração forem omitidas, elas são simplesmente desconsideradas.
18
Flexibilidade do laço for (4)Omitindo expressões do laço for (cont.)
• Se a condição de teste for omitida, ela será considerada permanentemente verdadeira.
Exemplo:#include <stdio.h>#include <stdlib.h>
int main(){ for( ; ; ){
printf(“Laco infinito...\n"); } system("pause"); return 0;}
19
Flexibilidade do laço for (5)Omitindo o corpo do laço for (cont.)
• O corpo do laço pode ser vazio.• No entanto, neste caso, deve ser colocado um ponto-e-vírgula após o comando for.
Exemplo:#include <stdio.h>#include <stdlib.h>#include <conio.h>
int main(){ unsigned char ch; for( ;(ch = getche()) != '\r'; printf("=%i\n", ch)); printf("\n"); system("pause"); return 0;}
Aqui há ponto-e-vírgula!
Só quando o corpo do laçoé vazio!!!
20
Laço for Aninhado (1)• Quando um laço for faz parte do corpo de outro laço for, dizemos que o laço interno está aninhado.
• Para ilustrar esta situação no exemplo seguinte temos um programa que imprime as tabuadas do 2 ao 9.
21
Laço for Aninhado (2)Exemplo:#include <stdio.h>#include <stdlib.h>
int main(){ int i, j; for(i = 2; i<=9 ; i++){ system("cls");
printf("Tabuada do %i\n", i);for(j=1; j<=10; j++){
printf("%3d X %3d = %3d\n", i, j, i*j);}system("pause");printf("\n");
} return 0;}
Só quando o corpo do laçoé vazio!!!
22
Laço while Aninhado• Da mesma forma que o laço for, também podemos ter laços while aninhados.
• Para ilustrar vamos reescrever o programa da tabuada utilizando, ao invés do comando for o comando while.
23
O Comando do-while (1)• O comando do-while é utilizado em situações em que é necessário executar o corpo do laço pelo menos uma vez.
• Neste laço, a expressão de teste é avaliada por último.
24
O Comando do-while (2)Exemplo:#include <stdio.h>#include <stdlib.h>int main(){ int idade; do{ printf("\nForneca sua idade: "); scanf("%i", &idade); }while(idade < 0); printf("\nSua idade vale: %i.\n\n", idade); system("pause"); return 0;}
• Este laço imprime pelo menosuma vez a frase solicitando a idade, fazendo a leitura da mesma em seguidacom o scanf.• Se o usuário fornecer um valor negativopara a idade, então o laço é executadonovamente, solicitando uma vez mais a idade do usuário.• O laço só é interrompido quando o usuário finalmente fornece um valor positivo para a idade, quando então a condiçãodo while se torna falsa.
25
O Comando do-while (3)Sintaxe do comando do-while :
do{ instrução_1; ... instrução_n;}while(condição);
• O comando do-while consiste na palavra-chave do seguida de um bloco de uma ou mais instruções entre chaves e terminada pela palavra-chave while seguida por uma expressão de teste entre parênteses (condição), terminada por ponto-e-vírgula.
Não há ponto-e-vírgula aqui
Ponto-e-vírgula aqui
26
Ordem de Execução do do-while (1)do{ instrução_1; ... instrução_n;}while(condição);
1. Primeiramente o bloco de código é executado.2. Em seguida, a condição entre parênteses é avaliada.3. Se a condição for avaliada como verdadeira (igual a 1), o laço é mais
uma vez executado.4. Este ciclo de execução do bloco seguido pela avaliação da condição é
repetido até que a expressão de teste se torne falsa (igual a zero), quando então o laço termina e o controle do programa passa para a linha seguinte ao laço.
27
Aplicações do do-while (1)O comando do-while é utilizado com frequência para:• Fazer validação de dados.• Apresentação de menus.
28
Representação em Fluxograma while e for do-while