A maior rede de estudos do Brasil

Grátis
154 pág.
Linguagem C/C++ - UNIPAN

Pré-visualização | Página 8 de 35

tanto letras maiúsculas como 
minúsculas, deve especificá-las individualmente. 
 
3.4 A DECLARAÇÃO if 
 
A forma geral da declaração if é 
 
if (condição){ 
 comandos; 
} 
else{ 
 comandos; 
} 
 
A cláusula else é opcional. Se condição for verdadeira (qualquer coisa 
diferente de 0), o bloco que forma o destino de if será executado; caso contrário o 
bloco que forma o destino de else será executado (desde que exista else). 
Lembre-se que somente o código associado a if ou o código associado a 
else será executado, nunca os dois. Tenha em mente também que o destino dos 
dois, if e else, pode ser um comando simples ou um bloco de comandos. 
Para demonstrar o comando if vamos escrever um programa simples que 
converte bases numéricas. Este programa será capaz de apresentar as seguintes 
 24 
conversões: 
 
· Decimal para Hexadecimal; 
· Hexadecimal para Decimal. 
 
O programa permitirá que primeiro seja selecionado o tipo de conversão a 
partir de um menu e, então, solicitará o número a ser convertido. 
 
/* Programa de conversão de base numérica 
 decimal ---> hexadecimal 
 hexadecimal ---> decimal 
*/ 
#include <stdio.h> 
 
void main(){ 
 int opcao; 
 int valor; 
 
 printf (“Converter: \n”); 
 printf (“1: decimal para hexadecimal\n”); 
 printf (“2: hexadecimal para decimal\n”); 
 printf (“\nInforme sua opção: ”); 
 scanf (“%d”, &opcao); 
 
 if (opcao == 1){ 
 printf (“\nInforme o valor em decimal: ”); 
 scanf (“%d”, &valor); 
 printf (“%d em hexadecimal e: %x”, valor, valor); 
 } 
 
 if (opcao == 2){ 
 printf (“\nInforme o valor em hexadecimal: ”); 
 scanf (“%x”, &valor); 
 printf (“%x em decimal e: %d”, valor, valor); 
 } 
} 
 
3.4.1 USANDO A DECLARAÇÃO else 
 
É possível associar um else com qualquer if. Se a expressão condicional 
associada a if é verdadeira, a instrução ou bloco de instruções associada será 
executada. Se for falsa, então a instrução ou bloco de instruções do else será 
executada. O programa seguinte demonstra este princípio fundamental. 
 
/* Um exemplo de if-else */ 
#include <stdio.h> 
 
 25 
void main(){ 
 int i; 
 
 printf (“Informe um número: ”); 
 scanf (“%d”, &i); 
 
 if (i < 0) printf (“O número é negativo”); 
 else printf (“O número é positivo ou nulo”); 
} 
 
3.4.2 O ENCADEAMENTO if-else-if 
 
Uma construção comum em programação é o encadeamento if-else-if. O 
seguinte exemplo ilustra esta construção: 
 
if (condição){ 
 comandos; 
} 
else if (condição){ 
 comandos; 
} 
else if (condição){ 
 comandos; 
} 
else{ 
 comandos; 
} 
 
As expressões condicionais serão avaliadas de cima para baixo. Assim 
que uma condição verdadeira é encontrada, o bloco associado a ela será executado, 
e o resto do encadeamento é ignorado. Se nenhuma das condições for verdadeira, 
então o else final será executado. 
Se o else final não estiver presente e todas as outras condições forem 
falsas, então nenhuma ação será realizada. 
Pode-se usar o encadeamento if-else-if para implementar o programa de 
conversão de base numérica desenvolvido anteriormente. Na versão original, cada 
declaração if era avaliada sucessivamente, mesmo se uma das declarações 
anteriores tivesse êxito. Ainda que não haja grande significado neste caso, a 
avaliação redundante de todos os ifs não é muito eficiente ou elegante. O seguinte 
programa resolve este problema. Nessa versão de encadeamento if-else-if, tão logo 
uma declaração if é satisfeita, o resto das declarações é ignorado. 
 
/* Programa de conversão de base numérica – if-else-if 
 decimal ---> hexadecimal 
 hexadecimal ---> decimal 
*/ 
#include <stdio.h> 
 26 
void main(){ 
 int opcao; 
 int valor; 
 
 printf (“Converter: \n”); 
 printf (“1: decimal para hexadecimal\n”); 
 printf (“2: hexadecimal para decimal\n”); 
 printf (“\nInforme sua opção: ”); 
 scanf (“%d”, &opcao); 
 
 if (opcao == 1){ 
 printf (“\nInforme o valor em decimal: ”); 
 scanf (“%d”, &valor); 
 printf (“%d em hexadecimal e: %x”, valor, valor); 
 } 
 
 else if (opcao == 2){ 
 printf (“\nInforme o valor em hexadecimal: ”); 
 scanf (“%x”, &valor); 
 printf (“%x em decimal e: %d”, valor, valor); 
 } 
 else { 
 printf (“\nA opção escolhida é inválida.”) 
 } 
} 
 
3.4.3 A EXPRESSÃO CONDICIONAL 
 
Algumas vezes, iniciantes na linguagem C confundem-se pelo fato de que 
qualquer expressão válida na linguagem C pode ser usada para controla a 
declaração if. Isto é, o tipo de expressão não precisa se restringir àquelas 
envolvendo operadores relacionais e lógicos. Só é requerido que a expressão 
resulte em um valor zero ou não zero. Por exemplo, este programa lê dois inteiros do 
teclado e mostra o quociente. Para evitar um erro de divisão por zero, uma 
declaração if é usada para controlar o segundo número. 
 
/* Divide o primeiro número pelo segundo*/ 
#include <stdio.h> 
 
void main(){ 
 int a, b; 
 
 printf (“Informe dois números: ”); 
 scanf (“%d%d”, &a, &b); 
 
 if (b) printf (“%d\n”, a/b); 
 else printf (“Não posso dividir por zero\n”); 
} 
 27 
Essa abordagem funciona porque, se b for zero, a condição controlando o 
if é falsa e a instrução else é executada. Caso contrário, a expressão é verdadeira 
(não zero) e a divisão é realizada. Não é necessário escrever uma declaração if 
como esta 
 
 if (b != 0) printf (“%d\n”, a/b); 
 
porque é redundante. 
 
3.4.4 ifs ANINHADOS 
 
Um dos muitos aspectos que causam confusão na declaração if, em 
qualquer linguagem de programação, são os ifs aninhados. Um if aninhado é uma 
declaração if que é objeto de um if ou um else. Os ifs aninhados são incômodos por 
poderem dificultar saber qual else está associado a qual if. Considere este exemplo: 
 
if (x) 
 if (y) printf (“1”); 
 else printf (“2”); 
 
A qual if o else se refere? Felizmente, a linguagem C fornece uma regra 
muito simples para resolver essa questão. Em C, o else é ligado ao if mais próximo 
dentro do mesmo bloco de código que já não tenha uma declaração else associada 
a ele. Neste caso o else é associado à declaração if(y). Para fazer com que else 
seja associado à declaração if(x), deve-se usar chaves para sobrepor a sua 
associação normal, como mostrado aqui: 
 
if (x){ 
 if (y) printf (“1”); 
} 
else printf (“2”); 
 
O else agora está associado ao if(x), já que ele não é parte do bloco de 
código do if(y). 
 
Exercícios: 
 
1) Escrever um trecho de código que receba duas variáveis inteiras e atribua a uma 
terceira variável o maior valor. 
 
2) O mesmo problema, em forma de função, retornando o maior valor. 
 
3) Fazer uma função que receba uma variável do tipo inteiro e retorne: 1, se o valor 
recebido for maior do que 0; 0, se o valor recebido for igual a zero; e -1, se o 
valor recebido for menor do que 0. Use o comando if. 
 
4) Escreva um programa que lê um par de coordenadas (x,y) inteiras e imprime uma 
mensagem informando em qual quadrante está o ponto. O programa deve 
identificar se o ponto está sobre algum dos eixos. 
 28 
5) Escrever uma função que recebe dois inteiros (a e b) e um código inteiro (cod) e 
retorne: a + b, se cod >= 0; e |a - b|, se cod < 0. 
 
3.5 A DECLARAÇÃO switch 
 
Ainda que o encadeamento if-else-if possa realizar testes de múltipla 
escolha, ele quase nunca é elegante. O código pode ser muito difícil de acompanhar 
e pode confundir até mesmo o seu autor. Por esse motivo, a linguagem C tem 
internamente uma declaração de decisão de múltipla escolha chamada de switch. 
Na declaração switch, a variável é sucessivamente testada contra uma lista de 
inteiros ou constantes caractere. Quando uma associação é encontrada, o conjunto 
de comandos associado com a constante é executado. As constantes não precisam 
sequer estar em qualquer ordem especial. A forma geral da declaração switch é: 
 
switch (variável){ 
 case constante1: 
 commandos; 
 break; 
 case constante2: 
 commandos; 
 break;