aula06.pdf
-
Upload
cleber-nascimento-rodrigues -
Category
Documents
-
view
224 -
download
3
Transcript of aula06.pdf
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 */
#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;
}
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;
}
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
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;
}
Exemplo – Tabuada de 6
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;
}
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 */
#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;
}
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;
}
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;
}
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;
}
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;
}
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 */
#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", ¬a);
soma += nota;
}
printf("\nM\xdd82\dia = %.2f\n", soma/max);
system("PAUSE");
return 0;
}
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 */
#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;
}
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;
}
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 */
#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;
}
Laços for Aninhados
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;
}
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 <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;
}
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;
}
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 */
#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;
}
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;
}
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 */
#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;
}
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 */
#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;
}