Centro Tecnologico
Working 04 : Conceitos Básicos III
Objetivos:
• Dominar a construção de estruturas de repetição em C; • Aperfeiçoar-se na resolução de problemas;
1
INTRODUÇÃO
Finalizando os conceitos básicos, neste Working apresentaremos outras três estruturas de repetição: for, while e do-while. Além destes, vamos compreender algumas práticas de programação em processamento de textos e jogos. Por fim, vamos praticar e dominar todos os conceitos básicos que permeiam o alicerce da programação de computadores!
2
A ESTRUTURA DE REPETIÇÃO FOR
O comando de repetição condensado permite agrupar, em um único comando, a inicialização de uma variável, o incremento desta variável e o teste de parada. Seu uso mais comum em situações nas quais o número de repetições da sequência de comandos conhecido antes mesmo do início do for. A estrutura do comando é exibida a seguir:
1 f o r (< i n i c i a l i z a c a o >; <e x p r e s s a o l o g i c a >; <i n c r e m e n t o >){
<S e q u e n c i a de comandos>
3 }
Inicialização é um comando de atribuição usado para colocar um valor na variável de controle utilizada na expressão lógica. Assim como os demais comandos de repetição, a expressão lógica representa a condição de parada das iterações. Incremento define como a variável de controle será modificada a cada iteração. Um exemplo para entendermos:
1 #i n c l u d e < s t d i o . h>
i n t main ( ) // e s t e programa imprime numeros de 1 a ’ n ’ .
3 {
i n t n ;
5 i n t i ;
7
s c a n f ("%d",&n ) ; // D i g i t a r um numero i n t e i r o m aio r que z e r o
9
f o r ( i =1 ; i <=n ; i ++) // o b s e r v e que e u t i l i z a d o ’ ; ’ ! !
11 p r i n t f ("%d\n", i ) ; 13 r e t u r n 0 ;
}
Observe que a variável contadora foi inicializada com o valor 1 e é incrimentada com o valor 1 (i++). Além disso, haverá a parada quando i for maior que n.
3
A ESTRUTURA DE REPETIÇÃO WHILE
O comando de repetição while é utilizado para repetições de trechos de códigos em que há a necessidade de se fazer um teste antes da execução de determinado trecho de código. Por isso, é conhecido como comando de repetição com pré-condição. Vejamos a sintaxe do comando:
w h i l e (< e x p r e s s a o l o g i c a >)
2 {
<s e q u e n c i a de comandos>
4 }
A expressão lógica presente entre parênteses definirá a condição de parada do comando, ou seja, enquanto a expressão lógica for verdadeira, a sequência de comandos que estiver entre as chaves continuará a ser repetida.
Vejamos um exemplo de utilização do comando:
#i n c l u d e < s t d i o . h> 2 i n t main ( ) { 4 i n t num = 2 ; w h i l e (num%2 == 0 ) 6 { s c a n f ("%d", &num) ; 8 p r i n t f ("%d\n", num) ; } 10 r e t u r n 0 ; }
O trecho de código acima permite que o usuário imprima números enquanto esses números forem pares, e os imprime na tela.
4
A ESTRUTURA DE REPETIÇÃO DO-WHILE
Em contraste com o comando de repetição com pré-condição, o comando de repetição com pós-condição, do while, só efetua o teste da expressão lógica (condição de parada) após a primeira execução da sequência de comandos. Logo, a sequência de comandos é executada pelo menos uma vez, independente da expressão lógica. A própria sintaxe do comando sugere essa diferença:
1 do{
<s e q u e n c i a de comandos>
3 } w h i l e (< e x p r e s s o l g i c a >) ;
Um exemplo para entender sua utilidade:
1 #i n c l u d e < s t d i o . h> i n t main ( ) 3 { i n t c a n d i d a t o ; 5 i n t c o n f i r m a ; 7 do{ p r i n t f (" D i g i t e o numero do s e u c a n d i d a t o : ") ; 9 s c a n f ("%d",& c a n d i d a t o ) ; s w i t c h ( c a n d i d a t o )
11 { c a s e 1 3 : 13 p r i n t f (" Voce v o t o u na I r i n y Lopes ! \ n") ; b r e a k; 15 c a s e 2 3 : p r i n t f (" Voce v o t o u no Rezende ! \ n") ; 17 b r e a k; c a s e 4 3 : 19 p r i n t f (" Voce v o t o u no L u i z Paulo ! \ n") ; b r e a k; 21 d e f a u l t: p r i n t f (" Voce v o t o u n u l o ! \ n") ; 23 } p r i n t f (" D i g i t e 1 ( c o n f i r m a r ) ou 0 ( v o t a r novamente ) : ") ; 25 s c a n f ("%d",& c o n f i r m a ) ; }w h i l e( ! c o n f i r m a ) ; 27 r e t u r n 0 ; 29 }
O programa acima permite ao usuário escolher um candidato a partir da digitação de seu número, e finaliza a repetição quando o usuário decide confirmar seu voto, ou seja, digitar 1 após a escolha do candidato. Caso o usuário deseje modificar seu voto, basta escolher 0 para votar novamente, e desta maneira a repetição continua por pelo menos mais um ciclo.
5
DESVIO INCONDICIONAL BREAK
1 w h i l e (< c o n d i c a o >) { 3 f o r ( i n i c i a l i z a c a o ; c o n d i c a o ; i n c r e m e n t o ) { 5 w h i l e (< c o n d i c a o >) { 7 i f (< c o n d i c a o >) b r e a k; // O c o r r e a i n t e r r u p c a o da e s t r t u r a de r e p e t i c a o , s e g u i n d o com o d e c o r r e r do c o d i g o . 9 . . . . . . 11 . . . } 13 . . . . . . 15 . . . 17 } }
O comando break desvia o fluxo do programa de forma que a execução do mesmo continua no bloco de código do loop exterior. Caso não haja um loop exterior, o programa é desviado para o bloco de código exterior.
w h i l e (< c o n d i c a o >) 2 { f o r ( i n i c i a l i z a c a o ; c o n d i c a o ; i n c r e m e n t o ) 4 { w h i l e (< c o n d i c a o >) 6 { i f (< c o n d i c a o >) 8 c o n t i n u e; . . . 10 . . . . . . 12 } . . . 14 . . . } 16 }
O comando continue desvia o fluxo do programa de forma que a execução do mesmo continua ao final do bloco de código do loop atual.
Praticando
Agora vamos praticar! Para todos os praticando em que é pedido que se escreva um programa, escreva o código do seu programa e nos envie o .c (código fonte) correspondente.
1. Considere o código abaixo:
#i n c l u d e < s t d i o . h> 2 i n t main ( ) { 4 i n t i , j , c o n t ; f o r( i =0; i <10; i ++) 6 { i f( i ==10){ 8 b r e a k; } 10 f o r( j =0; j <20; j ++) 12 { i f( i >=9) 14 { b r e a k; 16 } } 18 c o n t = c o n t + 2 ; } 20 r e t u r n 0 ; } 22
(a) Para que linha do código acima, o comando break da linha 15 desviará o fluxo de execução do programa?
(b) O comando break da linha 8 é inútil. Explique por quê. (c) Descreva brevemente o funcionamento do comando break. 2. Considere os códigos a seguir:
(a) 1 f o r( i =0; i <20; i ++) { 3 // C o d i g o s. . . } 5 (b) i =0; 2 w h i l e( i <100) { 4 // C o d i g o s . . i = i + 2 ; 6 }
(c)
f o r( i =0 , j =2; i <8 | | j <16; i ++, j +=2)
2 {
// C o d i g o s
4 }
Transcreva os códigos de cada letra por alguma outra estrutura de repetição dentre as possíveis (do-while, while e for), que não esteja já sendo utilizada pela letra.
3. Faça um programa em C que calcula o produto dos números digitados pelo usuário. O programa em C deve permitir que o usuário digite uma quantidade não determinada de números. E que encerre quando o usuário digita 0. Use as estruturas que achar apropriado.
Exemplo de Entrada Exemplo de Saida
2 5 10
0
5 5 25
2 5 10
0
4. Faça um programa que simule um jogo de loteria: deverá ser pré estabelecido um nú-mero vencedor pelo programador, e o usuário deverá tentar adivinhá-lo. O usuário irá digitar diversos números até acertar o número definido. O programa deverá informar a quantidades de números digitados até acertar o número pré-definido.
Exemplo de Entrada Exemplo de Saida
77 3
4 5 77
13 5
1 2 3 4 13
5. Exiba a tabuada de multiplicação de ‘n’. Ex:
Exemplo de Entrada Exemplo de Saida 1 1*1 = 1 1*2 = 2 1*3 = 3 1*4 = 4 1*5 = 5 1*6 = 6 1*7 = 7 1*8 = 8 1*9 = 9 1*10 = 10
Desafios
1. Faça um programa em C que, dado dois números inteiros lidos pelo teclado imprima o MDC (Máximo Divisor Comum) desses dois números.
Exemplo de Entrada Exemplo de Saida
25 10 5
54 182 2
NO PRÓXIMO ENCONTRO...