Você está na página 1de 4

Algoritmos e Programação de Computadores – 1 o Sem- 2016 – LAB3

VALORES LÓGICOS IF-ELSE PE3: Crie um programa que lê o valor do


Como visto no Laboratório 2 existem Os operadores relacionais têm especial salário e caso o mesmo seja inferior a
quatro tipos de dados em C (int, char, float, utilidade quando associados à instrução if- 100.000,00 adiciona 1.000,00.
double), mas não existe nenhum tipo para else e servem para indicar uma condição. A
representar valores lógicos (Verdadeiro e sua sintaxe da instrução if-else é: BLOCO DE INSTRUÇÕES
Falso). Em C o valor lógico FALSO é if (condição) A sintaxe do if-else mostrada até agora só
representado por 0 (ZERO) e tudo o que instrução 1; permite apenas uma instrução após o if ou
for diferente de 0 (ZERO) é considerado else uma outra após o else. Para executar mais
VERDADE. Os valores lógicos podem ser instrução 2; de uma instrução, estas devem ser escritas
resultados da avaliação de operadores Observe que a condição do if deve estar entre {} (dentro do bloco de instruções).
relacionais mostrados na Tabela T1: sempre dentro de parênteses e que as Após um bloco de instruções não se usa ;.
Tabela T1 instruções 1 e 2 são seguidas de ;. PT3: Use o programa abaixo e diga o que
Operador Exemplo Significado PT2: Implemente o programa a seguir e diga ele faz. Teste para 2 e 1; -6 e 0.
== a == b igual o que ele faz. 1: #include <stdio.h>
> a>b maior 1: # include <stdio.h> 2: main()
>= a >= b maior/igual 2: main() 3: {
< a<b menor 3: { int x; 4: int x, y, tmp;
<= a <= b menor/igual 4: printf(“Introduza um No:”); 5: printf(“Introduza 2 nos: ”);
!= a != b diferente 5: scanf(“%d”, &x); 6: scanf(“%d %d”, &x, &y);
PT1: Implemente o programa a seguir e 6: if (x >= 0) 7: if (x>y)
teste para os valores 7 e 5. Interprete o 7: printf(“Numero positivo \n”); 8: {
resultado obtido para cada operador. 8: else 9: tmp = x;
1: #include <stdio.h> 9: printf(“Numero negativo \n”); 10: x = y;
2: main() 10:} 11: y = tmp;
3: { int x, y; Observe que a condição (x >= 0) é avaliada 12: }
4: printf(“Dois inteiros: ”); e se for verdadeira a instrução relativa à 13: printf(“%d %d \n”,x,y);
5: scanf(“%d%d”,&x,&y); impressão da mensagem “Numero positivo” 14: } O que ocorreria se não fosse usado {}?
6: printf(“%d == %d : %d \n”,x,y,x==y); será executada. Senão, a instrução de Observe que após {} não existe ;. Observe,
7: printf(“%d > %d : %d \n”,x,y,x>y); impressão da mensagem “Numero também, que o deslocamento do texto
8: printf(“%d >= %d : %d \n”,x,y,x>=y); Negativo” é que será impressa. Observe que facilita a leitura do programa, embora este
9: printf(“%d < %d : %d \n”,x,y,x<y); após cada instrução, seja do if ou do else, é espaço a mais seja ignorado pelo
10: printf(“%d <= %d : %d \n”,x,y,x<=y); necessário usar;. compilador.
11: printf(“%d != %d : %d \n”,x,y,x!=y);} PE1: Baseado no PT2 implemente um
Um cuidado especial deve ser tomado ao se programa que indique se o inteiro lido é zero
usar o operador ==, pois um erro freqüente ou não (Dica: use o operador lógico !=).
é se trocar este por =. O operador == Teste para 7, 0 e -5.
verifica a igualdade de duas expressões ao
passo que o operador = é uma atribuição.
Programação de Computadores – 1 o Sem- 2016 – LAB3

INSTRUÇÕES ENCADEADAS Tabela T2 PT5: Crie um programa que aplique 10% de


Para situações em que mais de uma Salário Imposto imposto aos solteiros e 9% aos casados.
condição deve ser avaliada, os comandos if- < 1313 0.0% 1: #include <stdio.h>
else podem ser usandos de forma aninhada >= 1313 e < 2625 15.0% 2: main()
(um comando dentro do outro). >= 2625 27.5% 3: {
Dica: Use if-else para obter a taxa. Use ifs 4: float sal;
aninhados para calcular as alíquotas de 15% 5: char est_civil;
PT4: O que faz o programa a seguir?
e 27.5%. Para a taxa de 15% deve-se usar 6: printf(“Sal: ”); scanf(“%f”,&sal);
1: #include <stdio.h>
0.15 ao invés de 15/100. Por quê (a menos 7: printf(“Est.C:”); scanf(“ %c”,&est_civil);
2: main()
do uso de conversão explícita ou cast)? 8: if (est_civil == ‘C’ || est_civil == ‘c’)
3: {
9: printf(“Imposto: %.2f\n”,sal*0.09);
4: float sal;
OPERADORES LÓGICOS 10: else
5: printf(“Qual o salário: ”);
11: if (est_civil==’S’ || est_civil == ‘s’)
6: scanf(“%f”,&sal); Uma opção para consideração simultânea de 12: printf(“Imposto: %.2f\n”,sal*0.10);
7: if (sal <= 0) duas ou mais condições é utilizar os 13: else
8: printf(“Salario: Valor Invalido \n”); operadores lógicos dados na Tabela T3: 14: printf(“Estado civil incorreto!!! \n”);
9: else Tabela T3 15:}
10: if (sal > 1000) Operador Significado Exemplo
11: printf(“Imposto = %.2f\n”,sal*0.10); && AND x>=1 && x< 19
12: else Observe, novamente, que os comandos da
|| OR x == 1 || x < 0 linha 11 até a linha 14 só serão executados se
13: printf(“Imposto = %.2f\n”,sol*0.05); ! NOT ! verdade
14: } o else da linha 10 for utilizado. Para
O funcionamento dos operadores lógicos é aumentar a clareza deste programa uma
Como você melhoraria a clareza deste fornecido nas Tabelas T5, T6 e T7:
programa utilizando {}? E a indentação nas opção seria usar {}. Outra observação é que
Tabela T4 no if da linha 8 duas condições são reunidas
linhas 11 e 13? && cond1 através do operador lógico || (OR). É
Verdade Falso verificado se a variável est_civil contém o
Observe que tanto o if da linha 10, como o cond2 Verdade Verdade Falso carectere ‘C’ ou ‘c’. Qualquer uma destas
else da linha 12 só será executado se a Falso Falso Falso opções resulta na execução do comando de
condição do if da linha 7 (sal <= 0) for falsa, Tabela T5 impressão da linha 9.
ou seja, o valor da variável sal for um valor || cond1
válido e, portanto, maior que zero.
Verdade Falso
cond2 Verdade Verdade Verdade
PE4: Escreva um programa que calcula o Falso Verdade Falso
salário bruto, o salário líquido e o imposto a Tabela T6
pagar de acordo com a regra da Tabela T2:
! Verdade Falso
Falso Verdade

2
Programação de Computadores – 1 o Sem- 2016 – LAB3

OPERADOR CONDICIONAL =?: SWITCH 7: switch(est)


O operador condicional é semelhante ao Quando é necessário escolher uma dentre 8: {
comando if-else. Sua sintaxe é: múltiplas opções, o comando switch pode 9: case ‘C’: printf(“Casado \n”);
(condição) ? (Verdade = ação 1):(Falso = ser mais apropriado que o uso de instruções 10: case ‘S’: printf(“Solteiro \n”);
ação 2) if-else encadeadas. A sintaxe do switch é 11: case ‘D’: printf(“Divorciado \n”);
dada por: 12: case ‘V’: printf(“Viúvo \n”);
switch (expressão) 13: default: printf(“Estado Incorreto \n”);
PT6: Criar um programa que calcula os }
aumentos de salário tal que se o mesmo for {
case constante1: intruções1; }
> 1000, então salário deve ser aumentado Use as letras ‘C’, ‘D’ e ‘X’. Observe que, por
5%, senão aumentar em 7%. case constante2: instruções2;
... exemplo, no caso da letra ‘C’ os demais
1: # include <stdio.h> comandos, associados aos case
2: main() case constanten: instruçõesn;
[default: instruções;] subseqüentes, são executados.
3: {
4: float s; }
A palavra expressão indica qualquer BREAK
5: printf(“Qual o salario: ”);
6: scanf(“%f”,&s); avaliação cujo resultado seja um valor Para interromper a execução de um switch,
7: s = s> 1000 ? s*1.05 : s*1.07; numérico dos tipos char, int ou long. O continuando o programa na instrução
8: printf(“Novo salario: %.2f\n”,s); switch compara o resultado da expressão seguinte ao mesmo, existe o comando
9: } com o valor de cada constante que segue a break.
O operador ? devolve o resultado de s*1.05 cada um dos case. Se o valor não for igual a
se s > 1000, senão devolve s*1.07. nenhuma das constantes apresentadas pelos PT8: Corrija o PT7 usando break.
Embora semelhante com o if-else, o case, então, são executadas as instruções que Substituir as linhas 9 até 13 do PT7 por:
operador ? só é capaz de fornecer um seguem o default. Mas, a utilização do 9: case ‘C’: printf(“Casado \n”); break;
resultado ao passo que o if-else pode indicar comando default é opcional. Além disso, 10: case ‘S’: printf(“Solteiro \n”); break;
vários comandos a serem executados cada case do switch só pode avaliar uma 11: case ‘D’: printf(“Divorciado \n”); break;
(através do uso de {} ). única constante do tipo char, int ou long. 12: case ‘V’: printf(“Viúvo \n”) break;
Uma observação importante é que após um 13: default: printf(“Estado Incorreto \n”);
comando case ser selecionado, todos os Observe que o último case ou o default do
cases subseqüentes e suas instruções serão switch não precisa do comando break, pois
executados. Verifique esta afirmativa a partir não existem demais instruções do switch.
da execução do PT7.
PT7: Verifique o problema do seguinte PE7: Modifique o programa PT8 de modo
programa: que o programa aceite maiúsculas ou
1: # include <stdio.h> minúsculas sem usar a função toupper();
2: main() Dica: use o seguinte trecho de código como
3: { referência:
4: char est; case ‘c’:
5: printf(“Qual o estado Civil: ”); case ‘C’: printf(“Casado \n”); break;
6: scanf(“ %c”,&est); //

3
Programação de Computadores – 1 o Sem- 2016 – LAB3

PE8: Escreva um programa cujas entradas valores dos 10 primeiros inteiros a serem #include <stdio.h>
são o salário e o sexo (F/M) e a saída é o impressos na tela através do comando main()
salário líquido (descontada uma taxa de printf(“%d\n”,i). {
imposto de 10% para mulheres e 15% para Uma observação importante é que se não int n, num;
homens). Utilize o comando switch para fossem utilizadas as chaves {}, o while num = 1;
determinar o valor da variável associada ao executaria apenas o comando printf, não while (num <= 5)
imposto e a dica do PE7 para a questão das atualizando o valor de i. Portanto, a {
letras maiúsculas e minúsculas. condição (i <= 10) não seria satisfeita nunca n = 1;
e o programa entraria em um laço infinito. while (n <= 10)
WHILE {
printf(“%2d*%2d= %2d\n”,num,n,num*n);
Além dos comandos if-else e switch, o PT2: Escrever um programa que imprima a n = n + 1;
controle de fluxo de um programa pode ser }
tabuada do número 5:
afetado pela instrução while. A diferença é // Passar para a proxima tabuada.
# include <stdio.h>
que o comando while permite a repetição de num = num + 1;
main()
uma instrução ou bloco de instruções }
{
enquanto uma condição for verdadeira. Sua }
int n = 1;
sintaxe é:
while (n <= 10) Olhando atentamente para o programa PT3,
while (condição) { é possível ver que agora o while mais
instrução; printf(“5 * %2d = %2d\n”,n,5*n); interno será executado 5 vezes e que para
No comando while enquanto a condição n = n + 1; cada execução deste, a variável num assume
for verdadeira, a instrução será realizada. } um dos valores correspondente aos números
PT1: Escrever um programa que imprime } cujas tabuadas se quer mostrar. Além disso,
os 10 primeiros inteiros. Observe que a tag %2d indica que serão para cada execução do while externo o valor
# include <stdio.h> reservados dois caracteres para representar o de n é igual a 1, pois uma nova tabuada será
main() número. Se o número não ocupar o número escrita com o while interno.
{ de caracteres indicado (2), então, serão
int i = 1; colocados espaços à esquerda. PE2: Modifique o PT3 para colocar uma
while (i <= 10) linha em branco depois de cada tabuada.
{ PE1: Reescrever o PT2 de modo a Você pode usar printf(“\n”) ou puts(“ ”)
printf(“%d\n”,i); apresentar a tabuada de qualquer número para pular a linha.
i = i + 1; introduzido pelo usuário.
}
Assim, como o comando if-else, o comando
}
while pode ser aninhado com outros
Observe que este programa criou uma comandos while.
variável inteira i que recebe o valor inicial
igual a 1. Esta variável tem duas funções:
controlar o número de valores impressos
PT3: Escrever o conjunto das 5 primeiras
através da condição (i <= 10) e fornecer os
tabuadas (tabuada do 1, 2, ..., 5).

Você também pode gostar