Linguagem C Laços
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
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 */ int i; for( i=0 ; i < 20 ; i++ ) /* Imprime 20 * */ printf("%c", '*'); printf("\n");
O Laço for /* ForDemo.c */ /* Mostra um uso simples do laço for */ int i; for( i=0 ; i < 20 ; i++ ) /* Imprime 20 * */ printf("%c", '*'); printf("\n");
Sintaxe do for Ponto-e-vírgula Inicialização Teste Incremento for( i=0 ; i < 20 ; i++ ) printf("%c", '*'); Corpo Não há ponto-e-vírgula aqui
Exemplo Tabuada de 6 /* Tabuada6.c */ /* Imprime a tabuada do 6 */ int i; for( i=1 ; i < 10 ; i++ ) printf("\n%4d x 6 = %4d", i,i*6); printf("\n");
Exemplo Tabuada de 6
Exemplo Modificado Tabuada Invertida /* Tabuada6I.c */ /* Imprime a tabuada do 6 invertida */ int i; for( i=9 ; i > 0 ; i-- ) printf("\n%4d x 6 = %4d", i,i*6); printf("\n");
Exemplo Modificado Tabuada Invertida
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 */ int i; for( i=3 ; i <= 100 ; i += 3) printf("%d\t", i ); printf("\n");
Exemplo Múltiplos de 3 /* Multipl3.c */ /* Imprime os múltiplos de 3 entre 3 e 100 */ int i; for( i=3 ; i <= 100 ; i += 3) printf("%d\t", i ); printf("\n");
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 */ int i,j; for(i=0, j=i; (i+j) < 100 ; i++, j++) printf("%d ", i +j); printf("\n");
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 */ int i,j; for(i=0, j=i; (i+j) < 100 ; i++, j++) printf("%d ", i +j); printf("\n");
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 */ char ch; for(ch='a'; ch <= 'z'; ch++ ) printf("\no valor ASCII de %c \xdd82 %d", ch, ch); printf("\n");
Usando Caracteres
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
Exemplo /* MEDIA.C * Imprime a média aritmética de 10 notas */ 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", ¬a); soma += nota; printf("\nm\xdd82\dia = %.2f\n", soma/max);
Exemplo
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 */ int i=5; /* Inicio do bloco */ int i=150; printf("%d\n", i); /* Imprime 150 */ /* Fim do bloco */ printf("%d\n", i); /* Imprime 5 */
Criando Blocos Dentro de Blocos /* Bloco.C */ /* Mostra o uso de um bloco dentro de outro bloco */ int i=5; /* Inicio do bloco */ int i=150; printf("%d\n", i); /* Imprime 150 */ /* Fim do bloco */ printf("%d\n", i); /* Imprime 5 */
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
Laços for Aninhados /* Tabuada.C */ /* Imprime a tabuada do 2 ao 9 */ int i,j,k; for(k=0; k<=1 ; k++) printf("\n"); for(i=1 ; i <= 4 ; i++) printf("tabuada DO %3d printf("\n"); ", i+4*k+1); for( i = 1; i <= 9 ; i++) for( j=2+4*k; j <= 5+4*k; j++) printf("%3d x%3d = %3d printf("\n"); ", j,i,j*i);
Laços for Aninhados
Cartão de Natal /* Natal.C */ /* Imprime uma árvore de natal */ #include <conio.h> /* para getche() */ 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");
Cartão de Natal
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 <conio.h> /* para getche() */ 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);
O Laço while /* Contachar.C */ /* Conta caracteres de uma frase */ #include <conio.h> /* para getche() */ 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);
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;.
Exemplo /* WhileDemo.C */ /* Mostra um uso simples do laço while no lugar de um laço for */ int i=0; /* Inicialização */ while( i < 20 ) /* Teste */ printf("%c", '*'); i++; printf("\n");
Exemplo /* WhileDemo.C */ /* Mostra um uso simples do laço while no lugar de um laço for */ int i=0; /* Inicialização */ while( i < 20 ) /* Teste */ printf("%c", '*'); i++; printf("\n");
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 ;
Exemplo /* Adivinha.C */ /* Testa a sua capacidade de adivinhar uma letra */ /* para system() e rand() */ #include <conio.h> /* para getch() */ 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");
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
Exemplo /* Adivinha1.C */ /* Testa a sua capacidade de adivinhar uma letra */ /* Agora com o laço do-while */ /* para system() e rand() */ #include <conio.h> /* para getch() */ 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");