Estruturas de Decisão

Permitir testes para decidir acções alternativas:




if
if - else
switch
(?:) Operador Condicional
MF.
1
Comando if
if (condição)
instrução;
#include <stdio.h>
main ( )
{
char ch;
ch = getchar ( );
if (ch == ‘p’)
printf (“Premiu a tecla p”);
}
if (condição) {
instrução1;
intrução2;
}
#include <stdio.h>
main ( )
{
if (getchar()) == ‘p’ ) {
printf (“Digitou p”);
printf (“ Pressione outra tecla ”);
getchar( );
}
}
MF.
2
if aninhados

Se um comando if está dentro do outro if, dizemos que o if interno
está aninhado.
#include <stdio.h>
void main ( )
{
char ch;
printf (“ digite uma letra
entre A e Z”);
ch = getchar ( );
if (ch >= ‘A’)
if (ch < = ‘Z’)
printf (“Acertou”);
#include <stdio.h>
void main ( )
{
char ch;
printf (“ digite uma letra
entre A e Z”);
ch = getchar ( );
if((ch >= ‘A’) && (ch < = ‘Z’))
printf (“Acertou”);
}
}
MF.
3
Comando if-else

O comando if só executa a instrução caso a condição do
teste seja verdadeira, nada fazendo se a expressão for
falsa.

O comando else executará uma instrução ou um
conjunto de instruções se a expressão for falsa.
MF.
4
Comando if-else
if (condição) #include <stdio.h>
instrução; void main ( )
{
else
if (getchar ( ) == ‘p’)
printf (“Digitou p”);
instrução;
else
printf (“Não digitou p”);
}
#include <stdio.h>
void main ( )
{ int nota;
if (nota>= 10)
printf (“Tem positiva”);
else
printf (“Teve negativa”);
}
MF.
5
Exemplo
#include <stdio.h>
void main()
{
int a,b;
printf(“Digite 2 números: “);
scanf(“%d%d”,&a,&b);
if (b)
printf(“%f”,a/b);
else
printf(“Não se pode efectuar divisões
por zero\n”);
}
Deve evitar-se divisões por Zero, recorrendo ao comando if-else.
MF.
6
Comando if-else aninhados
if (condição1)
instrução
#include <stdio.h>
else if (condição2) void main ( )
{
instrução
int numero;
else if (condição3)...
scanf (“%d”, &numero);
if (número < 0)
printf (“número menor que zero”);
else if (numero < 10)
printf (“ numero entre 0 e < 10”);
else if (numero < 100)
printf (“numero de 10 a < 100);
else
printf (“número > 100”);
}
MF.
7
Como decide computador de que if o else pertence?
•O último else é sempre associado ao if mais
interno
• Quando será executado z = b?
Ex2:
EX1:
if (n > 0) {
if (a > b)
z = a;
} else
z = b;
if (n > 0)
if (a > b){
z = a;
calculafatorial(z);
}
else
z = b;
Ex1: Quando n > 0 e a < b
Ex2: Quando n < 0
MF.
8
Exercício 1
Programa Adulto (maior que 21), Jovem ou Velho (maior que 70).
#include <stdio.h>
void main()
{
int i;
printf(“Digite sua idade: “);
scanf(“%d”,&i);
if (i > 70)
printf(“Esta Velho!”);
else
if (i > 21)
printf(“Adulto”);
else
printf(“Jovem”);
}
MF.
9
Exercício 2
main()
{
int a,b,c;
printf(“Digite o 1º Número: “);
scanf(“%d”,&a);
printf(“\nDigite o 2º Número: “);
scanf(“%d”,&b);
printf(“\nDigite o 3º Número: “);
scanf(“%d”,&c);
if (a > b)
if (a > c)
printf(“\nO Maior é %d”,a);
else
printf(“\nO Maior é %d”,c);
else
if (b > c)
printf(“\nO Maior é %d”,b);
else
printf(“\nO Maior é %d”,c);
}
main()
{
int a,b,c,d;
printf(“Digite o 1º Número: “);
scanf(“%d”,&a);
printf(“\nDigite o 2º Número: “);
scanf(“%d”,&b);
printf(“\nDigite o 3º Número: “);
scanf(“%d”,&c);
if (a > b)
d = a;
else
d = b;
if (c > d)
printf(“\nO Maior é %d”,c);
else
printf(“\nO Maior é %d”,d);
}
Acha o número maior entre três nº
Exercício 3
Dados 2 números apresenta-os ordenados
main()
{
int a,b,t;
printf(“Digite o 1º Número: “);
scanf(“%d”,&a);
printf(“\nDigite o 2º Número: “);
scanf(“%d”,&b);
if (a < b) {
t = a;
a = b;
b = t;
}
printf(“\nOrdenados: %d e %d “,b,a);
}
MF.
11
Comando ?:
Forma compacta de expressar uma instrução if – else

(condição) ? expressão1 : expressão2

Max = (num1 > num2) ? num1 : num2

Note:
if (num1 > num2) max = num1;
else max = num2;

Exemplo:
ABS = (num < 0) ? - num : num;
MF.
12
Comando Switch

Forma de se substituir o comando if – else ao executarse vários testes

Diversas vezes precisamos determinar se um valor se
encontra numa lista de valores. Apesar de podermos
usar uma seqüência de ifs, este recurso além de não ser
elegante, por vezes confunde o entendimento do
programa.
A melhor opção é o comando switch.

MF.
13
Comando Switch
Sintaxe:
switch <variável> {
case <constante 1> :
<comandos>;
[break;]
case <constante 2> :
<comandos>;
[break;]
case <constante 3> :
<comandos>;
[break;]
[default :
<comandos>;]
}
OBS:
“ variável” deve ser uma variável do
tipo inteiro ou carácter;
“break”
serve
para
terminar
a
seqüência de comandos em execução,
por
serem
opcionais,
se
forem
suprimidos permitem que o “case” a
seguir seja executado, sem haver
qualquer quebra na seqüência do
processamento.
Comando Switch
#include <stdio.h>
void main ( )
{
char op;
float num1, num2;
printf (“ digite um nº, um operador e um nº”);
scanf (“ %f %c %f”,
&num1, &op, &num2);
switch (op) {
case ‘+’:
printf (“ Soma= %f”, num1 + num 2);
break:
case ‘-’:
printf (“ Diferença= %f”, num 1 - num 2);
break;
default:
printf (“ operador inválido”);
}
Exercício

Seguindo a idéia do exercício anterior
incrementa a calculadora com mais funções
matemáticas.
 Sugestão: usa funções da biblioteca matemática
math.h como por exemplo:
 sin(x) cos(x) log(x) sqrt(x) pow(x1,x2)
MF.
16
Download

Capitulo 4 - Tiago Carvalho