Prévia do material em texto
PROGRAMAÇÃO EM C – CICLOS E
DECISÕES
Formadora: Lisa Pinto
OBJETIVOS
Como se representam em C os valores lógicos
VERDADE e FALSO
Condições Lógicas
Operadores Relacionais - (==, >, =, Maior que a > b a é maior que b?
= Maior ou Igual que a >= b a é maior ou igual que
b?
!= Diferente a != b a é diferente de b?
7
Lisa Pinto
OPERADORES RELACIONAIS
8
Uma expressão que contenha um operador
relacional, devolve sempre como resultado o valor
lógico VERDADE (1) ou FALSO (0).
Lisa Pinto
OPERADORES RELACIONAIS
9
Exemplo: - Implemente um programa que
solicite ao utilizador dois inteiros e, em seguida
aplique todos os operadores relacionais do C aos
inteiros lidos.
Lisa Pinto
OPERADORES RELACIONAIS
10
#include
main()
{
int x,y;
printf("Introduza 2 inteiros: ");
scanf("%d%d",&x,&y);
printf("O Resultado de %d == %d : %d\n",x,y,x==y);
printf("O Resultado de %d > %d : %d\n",x,y,x>y);
printf("O Resultado de %d >= %d : %d\n",x,y,x>=y);
printf("O Resultado de %d = 2
X =0) ou
negativo.
Lisa Pinto
IF-ELSE
20
#include
main()
{
int x;
printf("Introduza um Nº ");
scanf("%d", &x);
if (x>=0)
printf("Número Positivo\n");
else
printf("Número Negativo\n");
}
Lisa Pinto
IF-ELSE
21
Output:
Lisa Pinto
IF-ELSE
22
Exemplo: - Implemente um programa que
indique se o número inteiro lido é zero ou não.
Lisa Pinto
IF-ELSE
23
#include
main()
{
int x;
printf("Introduza um Nº ");
scanf("%d", &x);
if (x!=0)
printf("%d não é zero!!!\n",x);
else
printf("%d é igual a zero!!!\n",x);
}
Lisa Pinto
IF-ELSE
24
Output:
Lisa Pinto
BLOCOS DE INSTRUÇÕES
25
Na instrução if-else apenas uma e uma só
instrução pode seguir o if ou o else.
Caso se deseje que um conjunto de instruções
seja realizada quer no if quer no esle, estas
devem ser escritas entre chavetas {} de forma a
que este conjunto de instruções forme apenas um
único Bloco de Instruções.
Lisa Pinto
BLOCOS DE INSTRUÇÕES
26
Um Bloco é assim, um conjunto de duas ou mais
instruções, delimitadas por chavetas.
Um Bloco pode ser colocado sem problemas num
programa, no local em que possa estar uma instrução
simples.
Depois de um Bloco não é necessário colocar
ponto e virgula (;).
Lisa Pinto
BLOCOS DE INSTRUÇÕES
27
Exemplo - Escreva um programa que leia dois
números e os apresente por ordem crescente.
Lisa Pinto
BLOCOS DE INSTRUÇÕES
28
#include
main()
{
int x,y;
printf("Introd. dois Nºs: ");
scanf("%d %d", &x, &y);
if (x >y)
printf("%d %d\n",y,x);
else printf("%d %d\n",x,y);
}
Lisa Pinto
BLOCOS DE INSTRUÇÕES
29
#include
main()
{
int x,y,tmp;
printf("Introd. dois Nºs: ");
scanf("%d %d", &x, &y);
if (x >y)
{
tmp = x;
x = y;
y = tmp;
}
printf(“Os números por ordem crescente são: %d %d\n",x,y);
}
Lisa Pinto
BLOCOS DE INSTRUÇÕES
30
Output:
Lisa Pinto
INSTRUÇÕES IF-ESLE ENCADEADAS
31
Existem situações em que o teste de uma
condição não e suficiente para tomar uma
decisão.
Pode ser necessário testar mais do que uma
condição.
Lisa Pinto
INSTRUÇÕES IF-ESLE ENCADEADAS
32
Exemplo: - Escreva um programa que solicite
um salário ao utilizador e mostre o imposto a
pagar:
Se o salário for negativo ou zero mostre o erro
respectivo.
Se o salário for maior que 1000 paga 10% de imposto,
senão paga apenas 5%.
Lisa Pinto
INSTRUÇÕES IF-ESLE ENCADEADAS
33
Output:
Lisa Pinto
INSTRUÇÕES IF-ELSE ENCADEADAS
34
#include
main()
{
float salario;
printf("Qual o salário: ");
scanf("%f",&salario);
if (salario 1000)
printf("Imposto = %.2f\n",salario*0.10);
else
printf("Imposto = %.2f\n",salario*0.05);
}
Lisa Pinto
OPERADORES LÓGICOS
35
Existem circunstâncias em que uma simples
condição não chega para tomar uma decisão,
sendo por isso necessário a interligação de duas
ou mais condições.
Para tal, a maioria das linguagens coloca à
disposição um conjunto de operadores lógicos, os
quais funcionam da mesma forma que os
operadores aritméticos, mas aplicados a valores
lógicos.
Lisa Pinto
OPERADORES LÓGICOS
36
Operador Significado Exemplo
&& AND (E lógico) x>=1 && xcaso contrário.
|| (cond 1 ||
cond2)
Verdade se alguma das consições for verdadeira. Falso se
ambas forem falsas.
! (! cond) Verdade se condição for falsa. Falso se condição for
verdadeira.
Lisa Pinto
OPERADORES LÓGICOS
39
Exemplo: - Escreva um programa que aplique
uma taxa de imposto sobre o salário, aos solteiros
de 10% e de 9% aos casados.
Lisa Pinto
OPERADORES LÓGICOS
40
#include
main()
{
float salario;
char est_civil;
printf("Qual o Salário: "); scanf("%f",&salario);
printf("Qual o Est. Civil: "); scanf(" %c",&est_civil);
if (est_civil=='C' || est_civil=='c')
printf("Imposto: %.2f\n",salario*0.09);
else
if (est_civil=='S' || est_civil=='s')
printf("Imposto: %.2f\n",salario*0.10);
else
printf("Estado Civil Incorrecto!!!\n");
}
Lisa Pinto
OPERADORES LÓGICOS
41
Output:
Lisa Pinto
PRECEDÊNCIA DOS OPERADORES
LÓGICOS E RELACIONAIS
42
Em C, como na maioria das linguagens de
programação, uma expressão nem sempre é
avaliada da esquerda para a direita.
Por exemplo, a expressão 2+3*4 devolve o valor
14 e não 20 como seria de esperar se se
executasse (2+3)*4.
Lisa Pinto
PRECEDÊNCIA DOS OPERADORES
LÓGICOS E RELACIONAIS
43
Para definir a ordem pela qual as operações são
executadas, existe uma Tabela de
Precedências na qual está definida a
precedência de cada operador.
Lisa Pinto
44
Operador
>=
== !=
&&
||
?:
Lisa Pinto
PRECEDÊNCIA DOS OPERADORES
LÓGICOS E RELACIONAIS
SWITCH
45
A instrução switch adapta-se particularmente à
tomada de decisões em que o número de
possibilidades é elevada (em geral maior que 2,
senão usa-se o if-else), de forma a reduzir a
complexidade de if-else consecutivos e
encadeados.
Lisa Pinto
SWITCH
46
Sintaxe:
switch (expressão)
{
case constante1: instrução1;
case constante2: instrução2;
...
case constanten: instruçãon;
[default:instruções;]
}
Lisa Pinto
SWITCH
47
Na sintaxe apresentada, expressão representa
qualquer expressão cujo resultado seja um valor
numérico dos tipos char, int ou long.
A expressão é avaliada, e em seguida o switch
compara o resultado da expressão, com o valor de
cada constantei que segue cada um dos case.
O conjunto de todos os valores possíveis para a
expressão é colocado entre chavetas.
Lisa Pinto
FUNCIONAMENTO DO SWITCH
48
Se o valor da expressão for igual a alguma das
constantes que seguem os vários case, então são
executadas as instruções que seguem o case
correspondente.
Se o valor da expressão não for igual a nenhuma
das constantes apresentadas pelos case, então
são executadas as instruções que seguem o
default.
Lisa Pinto
FUNCIONAMENTO DO SWITCH
49
Como se pode observar pela sintaxe, o default é
opcional.
No caso do valor da expressão não ser igual a
nenhum dos case, nada é executado, terminando
o switch.
O programa continua na instrução a seguir ao
switch.
Lisa Pinto
FUNCIONAMENTO DO SWITCH
50
Em cada case do switch só pode estar
presente para avaliação uma única
constante do tipo char, int ou long.
Lisa Pinto
FUNCIONAMENTO DO SWITCH
51
Exemplo: - Escreva um programa que indique
qual o estado civil correspondente a um carater
introduzido em maiúsculas.
Lisa Pinto
FUNCIONAMENTO DO SWITCH
52
#include
main()
{
char Est_Civil;
printf("Qual o estado Civil: ");
scanf(" %c",&Est_Civil); /* ou Est_Civil = getchar(); */
switch(Est_Civil)
{
case 'C': printf("Casado\n"); break;
case 'S': printf("Solteiro\n"); break;
case 'D': printf("Divorciado\n"); break;
case 'V': printf("Viúvo\n");
break;
default : printf("Estado Civil Incorrecto\n");
}
}
Lisa Pinto
FUNCIONAMENTO DO SWITCH
53
Output:
Lisa Pinto
FUNCIONAMENTO DO SWITCH
54
O último case ou defalut de um switch não
necessita de break, porque depois de
executar as instruções associadas ao último
case, termina a instrução switch.
Lisa Pinto
BREAK
55
A instrução break permite parar a execução
dentro de um switch, continuando o programa na
instrução imediatamente a seguir ao switch.
Lisa Pinto
BREAK
56
Sempre que existe coincidência entre a
expressão de um switch e uma das
constantes possíveis para essa expressão,
são executadas todas as instruções
associadas ao case correspondente e
seguidamente até que o switch termine ou
seja encontrada a instrução break (ou seja
encontrada a instrução return).
Lisa Pinto
BREAK
57
Exemplo: - Altere o programa anterior de forma
a funcionar com maiúsculas e minúsculas.
Lisa Pinto
BREAK
58
#include
main()
{
char Est_Civil;
printf("Qual o estado Civil: ");
scanf(" %c",&Est_Civil); /* ou Est_Civil = getchar(); */
switch(Est_Civil)
{
case 'c':
case 'C': printf("Casado\n"); break;
case 's':
case 'S': printf("Solteiro\n"); break;
case 'd':
case 'D': printf("Divorciado\n"); break;
case 'v':
case 'V': printf("Viúvo\n"); break;
default : printf("Estado Civil Incorrecto\n");
}
}
Lisa Pinto
BREAK
59
Output:
Lisa Pinto
BREAK
60
Exemplo: - Escreva um programa que calcule o
imposto pago por mulheres e por homens,
sabendo que as mulheres pagam 10% de imposto
e os homens pagam mais 5% que as mulheres.
Lisa Pinto
61
#include
main()
{
float salario, imposto = 0.0;
char sexo;
printf("Introduza o Salário: ");
scanf("%f",&salario);
printf("Qual o Sexo: ");
scanf(" %c",&sexo);
switch (sexo)
{
case 'f':
case 'F':
printf("Imposto %.2f\n",salario*0.10);
//imposto = 0.10;
break;
case 'm':
case 'M':
printf("Imposto %.2f\n",salario*0.15);
//imposto = 0.15;
break;
}
//printf("Imposto %.2f\n",salario*imposto);
}
Lisa Pinto
BREAK
62
Output:
Lisa Pinto
RESUMO
63
Em C não existe um tipo específico para
armazenar valores lógicos. Estes são
representados por 0-Falso e qualquer valor
diferente se zero representa o valor Verdade.
O conteúdo de uma variável, ou o resultado de
uma expressão, pode ser usado como valor lógico.
Lisa Pinto
RESUMO
64
Embora qualquer variável ou expressão possa
armazenar um valor lógico, é totalmente
desaconselhável a utilização de reais como
valores lógicos devido aos erros de
arredondamento.
O teste de condições pode ser realizado através
das instruções if-else e switch.
Lisa Pinto
RESUMO
65
Na instrução if-else, a condição é avaliada e caso
seja Verdadeira (isto é, diferente de zero) é
executada a instrução associada ao if.
A componente else é executada quando a condição
devolve o valor lógico Falso (zero).
A componente else do if é opcional.
Lisa Pinto
RESUMO
66
No caso de ser necessário colocar mais do que
uma instrução dentro de um if-else, tem que se
criar uma instrução composta (uma instrução que
é composta por várias instruções), colocando o
conjunto de instruções entre chavetas.
A esta estrutura chama-se Bloco.
Lisa Pinto
RESUMO
67
Um Bloco não é mais que um conjunto de
instruções organizada como um todo.
Um Bloco pode ser sempre colocado no local em
que uma instrução simples pode ocorrer.
Em geral depois de um Bloco não é necessário
colocar ponto e virgula.
Lisa Pinto
RESUMO
68
É possível operar valores lógicos através dos
operadores binários && (AND) e || (OR) ou
através do operador unário ! (NOT).
O operador && tem maior precedência que o
operador ||.
Lisa Pinto
RESUMO
69
Estes operadores permitem a combinação de duas
ou mais expressões lógicas numa única
expressão, devolvendo um único valor lógico como
resultado da avaliação da expressão total.
Lisa Pinto
RESUMO
70
A instrução if-else pode ser evitada sempre que
uma mesma variável, dependendo de uma
condição, possa receber dois valores diferentes.
Neste caso, a instrução if-else pode ser
substituída pelo operador condicional ?:.
Lisa Pinto
RESUMO
71
Afim de eliminar conjuntos extensos de
instruções if-esleencadeadas, o C coloca à
disposição dos programadores a instrução
switch.
O switch só admite valores constantes
predefinidos dos tipos char, int ou long.
Lisa Pinto
RESUMO
72
Depois da instrução switch verificar qual o case
correspondente à expressão avaliada, inicia a
execução na instrução associada a esse case,
executando em seguida todas as instruções
seguintes em cascata (incluindo as que
pertençam a outros case) até terminar o switch ou
até ser encontrada a instrução break.
Lisa Pinto
RESUMO
73
A instrução break permite parar a execução de
um conjunto de instruções dentro de um switch,
continuando o programa na instrução
imediatamente a seguir ao switch.
Lisa Pinto
RESUMO
74
Uma vez que o conjunto de instruções a executar
dentro de um switch é controlado pela instrução
break, não é necessário o uso de chavetas para
agrupar o conjunto de instruções associadas a um
case.
Lisa Pinto
Lisa Pinto
75