Apostila C
275 pág.

Apostila C


DisciplinaMétodos e Técnicas de Programação22 materiais161 seguidores
Pré-visualização45 páginas
usar dentro do for.
\u2022 a condic¸a\u2dco e´ testada:
\u2013 se a condic¸a\u2dco for diferente de zero, ela sera´ considerada verda-
deira e a sequ¨e\u2c6ncia de comandos sera´ executada. Ao final da
seque\u2c6ncia de comandos, o fluxo do programa e´ desviado para
o incremento;
\u2013 se a condic¸a\u2dco for zero, ela sera´ considerada falsa e a sequ¨e\u2c6ncia
de comandos na\u2dco sera´ executada (fim do comando for).
\u2022 incremento: terminada a execuc¸a\u2dco da sequ¨e\u2c6ncia de comandos, ocorre
a etapa de incremento das varia´veis usadas no for. Ao final dessa
etapa, o fluxo do programa e´ novamente desviado para a condic¸a\u2dco.
Abaixo, tem-se um exemplo de um programa que le\u2c6 dois nu´meros inteiros
a e b digitados pelo usua´rio e imprime na tela todos os nu´meros inteiros
entre a e b (incluindo a e b):
95
Exemplo: comando for
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t a , b , c ;
5 p r i n t f ( \u2018 \u2018 D i g i t e o va lo r de a : \u2019 \u2019 ) ;
6 scanf ( \u2018 \u2018%d \u2019 \u2019 ,&a ) ;
7 p r i n t f ( \u2018 \u2018 D i g i t e o va lo r de b : \u2019 \u2019 ) ;
8 scanf ( \u2018 \u2018%d \u2019 \u2019 ,&b ) ;
9 for ( c = a ; c <= b ; c++){
10 p r i n t f ( \u2018 \u2018%d \n \u2019 \u2019 , c ) ;
11 }
12 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
13 return 0;
14 }
No exemplo acima, a varia´vel c e´ inicializada como valor de a (c = a). Em
seguida, o valor de c e´ comparado com o valor de b (c <= b). Por fim,
se a seque\u2c6ncia de comandos foi executada, o valor da varia´vel c sera´ in-
crementado em uma unidade (c++). Relembrando a ide´ia de fluxogramas,
e´ poss\u131´vel ter uma boa representac¸a\u2dco de como os comandos do exemplo
anterior sa\u2dco um-a-um executados durante a execuc¸a\u2dco do programa:
96
O comando for segue todas as recomendac¸o\u2dces definidas
para o comando if e while quanto ao uso das chaves e
definic¸a\u2dco da condic¸a\u2dco usada.
Isso significa que a condic¸a\u2dco pode ser qualquer expressa\u2dco que resulte
numa resposta do tipo falso (zero) ou verdadeiro (diferente de zero), e que
utiliza operadores dos tipos matema´ticos, relacionais e/ou lo´gicos.
Como nos comandos condicionais, o comando while atua apenas sobre o
comando seguinte a ele. Se quisermos que ele execute uma seque\u2c6ncia
de comandos, e´ preciso definir essa seque\u2c6ncia de comandos dentro de
chaves {}.
Exemplo: for versus while
for while
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t i , soma = 0;
5 for ( i = 1 ; i <= 10; i
++){
6 soma = soma + i ;
7 }
8 p r i n t f ( \u2018 \u2018Soma = %d \n \u2019
\u2019 ,soma) ;
9 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
10 return 0;
11 }
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t i , soma = 0;
5 i = 1
6 while ( i <= 10){
7 soma = soma + i ;
8 i ++;
9 }
10 p r i n t f ( \u2018 \u2018Soma = %d \n \u2019
\u2019 ,soma) ;
11 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
12 return 0;
13 }
Dependendo da situac¸a\u2dco em que o comando for e´ utilizado, podemos omitir
qualquer uma de suas cla´usulas:
\u2022 inicializac¸a\u2dco;
\u2022 condic¸a\u2dco;
\u2022 incremento.
Independente de qual cla´usula e´ omitida, o comando for
exige que se coloque os dois operadores de ponto e v\u131´rgula
(;).
97
O comando for exige que se coloque os dois operadores de ponto e v\u131´rgula
(;) pois e´ este operador que indica a separac¸a\u2dco entre as cla´usulas de
inicializac¸a\u2dco, condic¸a\u2dco e incremento. Sem elas, o compilador na\u2dco tem cer-
teza de qual cla´usula foi omitida.
Abaixo, sa\u2dco apresentados tre\u2c6s exemplos de comando for onde, em cada
um deles, uma das cla´usulas e´ omitida.
Exemplo: comando for sem inicializac¸a\u2dco
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t a , b , c ;
5 p r i n t f ( \u2018 \u2018 D i g i t e o va lo r de a : \u2019 \u2019 ) ;
6 scanf ( \u2018 \u2018%d \u2019 \u2019 ,&a ) ;
7 p r i n t f ( \u2018 \u2018 D i g i t e o va lo r de b : \u2019 \u2019 ) ;
8 scanf ( \u2018 \u2018%d \u2019 \u2019 ,&b ) ;
9 for ( ; a <= b ; a++){
10 p r i n t f ( \u2018 \u2018%d \n \u2019 \u2019 , a ) ;
11 }
12 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
13 return 0;
14 }
No exemplo acima, a varia´vel a e´ utilizada nas cla´usulas de condic¸a\u2dco e in-
cremento do comando for. Como a varia´vel a teve seu valor inicial definido
atrave´s de um comando de leitura do teclado (scanf), na\u2dco e´ necessa´rio a
etapa de inicializac¸a\u2dco do comando for para definir o seu valor.
Ao omitir a condic¸a\u2dco do comando for, criamos um lac¸o infi-
nito.
Para o comando for, a ause\u2c6ncia da cla´usula de condc¸a\u2dco e´ considerada
como uma condic¸a\u2dco que e´ sempre verdadeira. Sendo a condic¸a\u2dco sempre
verdadeira, na\u2dco existe condic¸a\u2dco de parada para o comando for, o qual vai
ser executado infinitamente.
98
Exemplo: comando for sem condic¸a\u2dco
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t a , b , c ;
5 p r i n t f ( \u2018 \u2018 D i g i t e o va lo r de a : \u2019 \u2019 ) ;
6 scanf ( \u2018 \u2018%d \u2019 \u2019 ,&a ) ;
7 p r i n t f ( \u2018 \u2018 D i g i t e o va lo r de b : \u2019 \u2019 ) ;
8 scanf ( \u2018 \u2018%d \u2019 \u2019 ,&b ) ;
9 / / o comando f o r abaixo e´ um la c¸o i n f i n i t o
10 for ( c = a ; ; c++){
11 p r i n t f ( \u2018 \u2018%d \n \u2019 \u2019 , c ) ;
12 }
13 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
14 return 0;
15 }
Por u´ltimo, temos um exemplo de comando for sem a cla´usula de incre-
mento. Nessa etapa do comando for, um novo valor e´ atribuido para uma
(ou mais) vara´veis utilizadas.
Exemplo: comando for sem incremento
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t a , b , c ;
5 p r i n t f ( \u2018 \u2018 D i g i t e o va lo r de a : \u2019 \u2019 ) ;
6 scanf ( \u2018 \u2018%d \u2019 \u2019 ,&a ) ;
7 p r i n t f ( \u2018 \u2018 D i g i t e o va lo r de b : \u2019 \u2019 ) ;
8 scanf ( \u2018 \u2018%d \u2019 \u2019 ,&b ) ;
9 for ( c = a ; c <= b ; ) {
10 p r i n t f ( \u2018 \u2018%d \n \u2019 \u2019 , c ) ;
11 c++;
12 }
13 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
14 return 0;
15 }
No exemplo acima, a cla´usula de incremento foi omtida da declarac¸a\u2dco do
comando for. Para evitar a criac¸a\u2dco de uma lac¸o infinito (onde a condic¸a\u2dco
de parada existe, mas nunca e´ atingida), foi colocado um comando de in-
cremento (c++) dentro da seque\u2c6ncia de comandos do for. Perceba que,
desse modo, o comando for fica mais parecido com o comando while, ja´
99
que agora se pode definir em qual momento o incremento vai ser execu-
tado, e na\u2dco apenas no final.
A cla´usula de incremento e´ utilizada para atribuir um novo
valor a uma ou mais varia´veis durante o comando for. Essa
atribuic¸a\u2dco na\u2dco esta´ restrita a apenas o operador de incre-
mento (++).
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t a , b , c ;
5 p r i n t f ( \u2018 \u2018 D i g i t e o va lo r de a : \u2019 \u2019 ) ;
6 scanf ( \u2018 \u2018%d \u2019 \u2019 ,&a ) ;
7 p r i n t f ( \u2018 \u2018 D i g i t e o va lo r de b : \u2019 \u2019 ) ;
8 scanf ( \u2018 \u2018%d \u2019 \u2019 ,&b ) ;
9
10 / / incremento de duas unidades
11 for ( c = a ; c <= b ; c=c+2){
12 p r i n t f ( \u2018 \u2018%d \n \u2019 \u2019 , c ) ;
13 }
14
15 / / novo va lo r e´ l i d o do tec lado
16 for ( c = a ; c <= b ; scanf ( \u2018 \u2018%d \u2019 \u2019 ,&c ) ) {
17 p r i n t f ( \u2018 \u2018%d \n \u2019 \u2019 , c ) ;
18 }
19 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
20 return 0;
21 }
Nesse exemplo, fica claro que a cla´usula de incremento pode conter qual-
quer comando que altere o valor de uma das varia´veis utilizadas pelo co-
mando for.
100
O operador de v\u131´rgula (,) pode ser usado em qualquer uma
das cla´usulas.
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t i , j ;
5 for ( i = 0 , j = 100; i < j ; i ++ , j\u2212\u2212){
6 p r i n t f ( \u2018 \u2018 i = %d e j = %d \n \u2019 \u2019 , i , j ) ;
7 }
8 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
9 return 0;
10 }
No exemplo acima, foram definidos dois comandos para a cla´usula de
inicializac¸a\u2dco: i = 0 e j = 100. Cada comando na inicializac¸a\u2dco e´ separado
pelo operador de v\u131´rgula (,). A cla´usula de inicializac¸a\u2dco so´ termina quando
o operador de ponto e v\u131´rgula (;) e´ encontrado. Na fase de incremento,
novamente o valor das duas varia´veis e´ modificado: o valor de i e´ incre-
mentado (i++) enquanto o de j e´ decrementado (j\u2013). Novamente, cada
comando na cla´usula de incremento e´ separado pelo operador de v\u131´rgula
(,).
A varia´vel utilizada no lac¸o for na\u2dco precisa ser necessaria-
mente do tipo int. Pode-se, por exemplo, usar uma varia´vel
do tipo char para imprimir uma seque\u2c6ncia de caracteres.
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main (