aula06.pdf

34
Linguagem C Laços

Transcript of aula06.pdf

Page 1: aula06.pdf

Linguagem C

Laços

Page 2: aula06.pdf

Laços

Laços são comandos usados sempre que uma ou mais instruções tiverem

de ser repetidas enquanto uma certa condição estiver sendo satisfeita

Em C existem três comandos de laços

for

while

do-while

Page 3: aula06.pdf

O Laço for

O laço for é geralmente usado quando queremos repetir algo por um

número fixo de vezes

Utilizamos quando sabemos de antemão o número de vezes a

repetir

/* ForDemo.c */

/* Mostra um uso simples do laço for */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i;

for( i=0 ; i < 20 ; i++ ) /* Imprime 20 * */

printf("%c" , '*');

printf("\n");

system("PAUSE");

return 0;

}

Page 4: aula06.pdf

O Laço for

/* ForDemo.c */

/* Mostra um uso simples do laço for */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i;

for( i=0 ; i < 20 ; i++ ) /* Imprime 20 * */

printf("%c" , '*');

printf("\n");

system("PAUSE");

return 0;

}

Page 5: aula06.pdf

Sintaxe do for

for( i=0 ; i < 20 ; i++ ) printf("%c" , '*');

Inicialização

Ponto-e-vírgula

Teste Incremento

Corpo Não há ponto-e-vírgula aqui

Page 6: aula06.pdf

Exemplo – Tabuada de 6 /* Tabuada6.c */

/* Imprime a tabuada do 6 */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i;

for( i=1 ; i < 10 ; i++ )

printf("\n%4d x 6 = %4d" , i ,i*6);

printf("\n");

system("PAUSE");

return 0;

}

Page 7: aula06.pdf

Exemplo – Tabuada de 6

Page 8: aula06.pdf

Exemplo Modificado – Tabuada Invertida /* Tabuada6I.c */

/* Imprime a tabuada do 6 invertida */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i;

for( i=9 ; i > 0 ; i-- )

printf("\n%4d x 6 = %4d" , i ,i*6);

printf("\n");

system("PAUSE");

return 0;

}

Page 9: aula06.pdf

Exemplo Modificado – Tabuada Invertida

Page 10: aula06.pdf

Exemplo – Múltiplos de 3

Imprimir os múltiplos de 3 entre 3 e 100

/* Multipl3.c */

/* Imprime os múltiplos de 3 entre 3 e 100 */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i;

for( i=3 ; i <= 100 ; i += 3)

printf("%d\t" , i );

printf("\n");

system("PAUSE");

return 0;

}

Page 11: aula06.pdf

Exemplo – Múltiplos de 3 /* Multipl3.c */

/* Imprime os múltiplos de 3 entre 3 e 100 */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i;

for( i=3 ; i <= 100 ; i += 3)

printf("%d\t" , i );

printf("\n");

system("PAUSE");

return 0;

}

Page 12: aula06.pdf

O Operador Vírgula

Qualquer uma das expressões de um laço for pode conter várias

instruções separadas por vírgulas

Um par de expressões separadas por vírgula é avaliado da esquerda

para a direita

/* Virgula.c */

/* Mostra o uso do operador vírgula no laço for */

/* Imprime os números de 0 a 98 de 2 em 2 */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i,j;

for(i=0, j=i; (i+j) < 100 ; i++, j++)

printf("%d " , i +j);

printf("\n");

system("PAUSE");

return 0;

}

Page 13: aula06.pdf

O Operador Vírgula

/* Virgula.c */

/* Mostra o uso do operador vírgula no laço for */

/* Imprime os números de 0 a 98 de 2 em 2 */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i,j;

for(i=0, j=i; (i+j) < 100 ; i++, j++)

printf("%d " , i +j);

printf("\n");

system("PAUSE");

return 0;

}

Page 14: aula06.pdf

Usando Caracteres

A variável do laço pode ser do tipo char

/* CharFor.c */

/* Mostra o uso de uma variável do tipo char para controle do laço for

* Imprime as letras minúsculas e seus correspondentes valores

* em decimal na tabela ASCII */

#include <stdio.h>

#include <stdlib.h>

int main()

{

char ch;

for(ch='a'; ch <= 'z'; ch++ )

printf("\nO valor ASCII de %c \xdd82 %d", ch , ch);

printf("\n");

system("PAUSE");

return 0;

}

Page 15: aula06.pdf

Usando Caracteres

Page 16: aula06.pdf

Múltiplas Instruções

Se um laço for deve executar várias instruções a cada iteração, elas precisam estar entre chaves

Sintaxe

for(i=0; i<10; i++)

{

instrução;

instrução;

instrução;

}

Em C, um bloco de código é uma série de instruções entre chaves

é tratado como um grupo de instruções numa única unidade

Page 17: aula06.pdf

Exemplo /* MEDIA.C

* Imprime a média aritmética de 10 notas */

#include <stdio.h>

#include <stdlib.h>

int main()

{

float soma = 0.0;

const int max = 10;

int i;

for( i=0; i < max ; i++)

{

float nota;

printf("\nDigite a nota %d : " , i+1);

scanf("%f", &nota);

soma += nota;

}

printf("\nM\xdd82\dia = %.2f\n", soma/max);

system("PAUSE");

return 0;

}

Page 18: aula06.pdf

Exemplo

Page 19: aula06.pdf

Criando Blocos Dentro de Blocos

Em todo lugar onde é possível colocar uma instrução C, é também

possível inserir um bloco de código

/* Bloco.C */

/* Mostra o uso de um bloco dentro de outro bloco */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i=5;

{/* Inicio do bloco */

int i=150;

printf("%d\n", i); /* Imprime 150 */

}/* Fim do bloco */

printf("%d\n", i); /* Imprime 5 */

system("PAUSE");

return 0;

}

Page 20: aula06.pdf

Criando Blocos Dentro de Blocos /* Bloco.C */

/* Mostra o uso de um bloco dentro de outro bloco */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i=5;

{/* Inicio do bloco */

int i=150;

printf("%d\n", i); /* Imprime 150 */

}/* Fim do bloco */

printf("%d\n", i); /* Imprime 5 */

system("PAUSE");

return 0;

}

Page 21: aula06.pdf

Laços for Aninhados

Quando um laço for faz parte de um corpo de outro laço for,

dizemos que o laço interno está aninhado

Page 22: aula06.pdf

Laços for Aninhados /* Tabuada.C */

/* Imprime a tabuada do 2 ao 9 */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i,j,k;

for(k=0; k<=1 ; k++)

{

printf("\n");

for(i=1 ; i <= 4 ; i++)

printf("TABUADA DO %3d ", i+4*k+1);

printf("\n");

for( i = 1; i <= 9 ; i++)

{

for( j=2+4*k; j <= 5+4*k; j++)

printf("%3d x%3d = %3d ", j,i,j*i);

printf("\n");

}

}

system("PAUSE");

return 0;

}

Page 23: aula06.pdf

Laços for Aninhados

Page 24: aula06.pdf

Cartão de Natal

/* Natal.C */

/* Imprime uma árvore de natal */

#include <stdio.h>

#include <stdlib.h>

#include <conio.h> /* para getche() */

int main()

{

char sd, se;

int i,k, j;

system("cls");/* Limpa a tela */

printf("\nSinal interno direito : ");

sd = getche();/* caractere de desenho da árvore */

printf("\nSinal interno esquerdo: ");

se = getche();/* caractere de desenho da árvore */

printf("\n\n");/* Pula 2 linhas antes do início do desenho */

for(i=0; i < 4; i++)

{

for(k=1; k < 5; k++)

{

for(j=1;j<=40-(2*i+k);j++) printf(" ");/* Imprime brancos

*/

printf("/");/* delimitador inicial da linha */

for( j=1 ; j < (2*i+k) ; j++)

printf("%c",se); /* até o meio */

for( j=1 ; j < (2*i+k) ; j++)

printf("%c",sd);/* meio ao fim */

printf("\\\n"); /* delimitador final da linha */

}

}

/* Desenha o pé da árvore */

for(i=0; i < 2; i++)

{

for(j=0;j < 38; j++) printf(" ");

printf("| |\n");

}

printf("\n");;

/* Imprime mensagem centralizada */

for(j=0; j < 35; j++) printf(" ");

printf("FELIZ NATAL\n");

for(j=0; j < 31; j++) printf(" ");

printf("E UM PROSPERO 2007!\n");

system("PAUSE");

return 0;

}

Page 25: aula06.pdf

Cartão de Natal

Page 26: aula06.pdf

O Laço while

Utilizamos o while quando o laço pode ser terminado

inesperadamente, por condições desenvolvidas dentro do corpo

/* Contachar.C */

/* Conta caracteres de uma frase */

#include <stdio.h>

#include <stdlib.h>

#include <conio.h> /* para getche() */

int main()

{

int cont=0; /* Contador */

while(getche() != '\r') /* Enquanto não [Enter] */

cont++; /* Corpo do laço */

/* Fora do laço */

printf("\n\nO n\xddA3\mero de caracteres \xdd82 %d\n" , cont);

system("PAUSE");

return 0;

}

Page 27: aula06.pdf

O Laço while /* Contachar.C */

/* Conta caracteres de uma frase */

#include <stdio.h>

#include <stdlib.h>

#include <conio.h> /* para getche() */

int main()

{

int cont=0; /* Contador */

while(getche() != '\r') /* Enquanto não [Enter] */

cont++; /* Corpo do laço */

/* Fora do laço */

printf("\n\nO n\xddA3\mero de caracteres \xdd82 %d\n" , cont);

system("PAUSE");

return 0;

}

Page 28: aula06.pdf

Sintaxe do while

Consiste na palavra-chave while seguida de uma expressão de teste entre parênteses

Se a expressão de teste for verdadeira, o corpo do laço é executado de uma vez e a expressão de teste é avaliada novamente

Esse ciclo de teste e execução é repetido até que a expressão de teste torne falsa

Então o laço termina e o controle do programa passa para a linha seguinte

Inicialização;

while(Teste)

{

.

.

Incremento;

.

}

Page 29: aula06.pdf

Exemplo /* WhileDemo.C */

/* Mostra um uso simples do laço while no lugar de um laço for */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i=0; /* Inicialização */

while( i < 20 ) /* Teste */

{

printf("%c" , '*');

i++;

}

printf("\n");

system("PAUSE");

return 0;

}

Page 30: aula06.pdf

Exemplo /* WhileDemo.C */

/* Mostra um uso simples do laço while no lugar de um laço for */

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i=0; /* Inicialização */

while( i < 20 ) /* Teste */

{

printf("%c" , '*');

i++;

}

printf("\n");

system("PAUSE");

return 0;

}

Page 31: aula06.pdf

Laços while aninhados

Uma das instruções de um bloco de código que compõe o corpo de um laço

while pode ser outro laço while

Função rand()

Necessita da inclusão do arquivo stdlib.h

Retorna um número inteiro aleatório (sorteado)

rand() % 26 + ‘a’;

Page 32: aula06.pdf

Exemplo

/* Adivinha.C */

/* Testa a sua capacidade de adivinhar uma letra */

#include <stdio.h>

#include <stdlib.h> /* para system() e rand() */

#include <conio.h> /* para getch() */

int main()

{

char ch='s'; /* s de sim */

char resp; /* resposta do usuário */

char secreto;

int tentativas;

while(ch=='s')

{

secreto = rand() % 26 + 'a';

tentativas = 1;

printf("\n\nDigite uma letra entre 'a' e 'z':\n");

while((resp=getch())!= secreto)

{

printf("%c e incorreto. Tente novamente\n",resp);

tentativas++;

}

printf("%c e CORRETO!!\n", resp);

printf("Voce acertou em %d tentativas\n", tentativas);

printf("\nQuer jogar novamente? (s/n): ");

ch=getche();

}

printf("\nAte logo e boa sorte!\n");

system("PAUSE");

return 0;

}

Page 33: aula06.pdf

O Laço do-while

É utilizado em situações em que é necessário executar o corpo do laço uma

primeira vez

Logo após, avaliar a expressão de teste e criar um ciclo repetido

do

{

instrução;

instrução;

} while(teste);

Primeiramente, o bloco do código é executado

Em seguida, a expressão de teste entre parênteses é avaliada

Se verdadeira, o corpo do laço é mais uma vez executado e a expressão de teste é

avaliada novamente

Repete-se até que a expressão de teste torne falsa

Page 34: aula06.pdf

Exemplo

/* Adivinha1.C */

/* Testa a sua capacidade de adivinhar uma letra */

/* Agora com o laço do-while */

#include <stdio.h>

#include <stdlib.h> /* para system() e rand() */

#include <conio.h> /* para getch() */

int main()

{

char resp; /* resposta do usuário */

char secreto;

int tentativas;

do /*inicio do laço */

{

secreto = rand() % 26 + 'a';

tentativas = 1;

printf("\n\nDigite uma letra entre 'a' e 'z':\n");

while((resp=getch())!= secreto)

{

printf("%c e incorreto. Tente novamente\n",resp);

tentativas++;

}

printf("%c e CORRETO!!\n", resp);

printf("Voce acertou em %d tentativas\n", tentativas);

printf("\nQuer jogar novamente? (s/n): ");

}while(getche() == 's');

printf("\nAte logo e boa sorte!\n");

system("PAUSE");

return 0;

}