Programação 1 - Engenharia - Comandos de Decisão no C
Objetivos
- Utilizar os operadores relacionais e lógicos na programação C
- Utilizar o comando de decisão if else
Operadores Relacionais e Lógicos
Os operadores relacionais e lógicos são os mesmos vistos na aula anterior.
Operador | Significado |
---|---|
> | maior que |
>= | maior ou igual que |
< | menor que |
<= | menor ou igual que |
== | igual a (se o operando a esquerda é maior que o da direita) |
!= | diferente de (se o operando a esquerda é diferente do da direita) |
Operador | Significado |
---|---|
&& | AND (E) |
|| | OR (OU) |
! | NOT (NÃO) |
Ver Operadores Relacionais e Lógicos
Comandos de decisão if() e if() else
#include <stdio.h>
main()
{
int x; /* declaração de uma variável inteira */
int y; /* declaração de uma variável inteira */
printf ("Entre com o valor de x ");
scanf("%d",&x);
printf ("Entre com o valor de y ");
scanf("%d",&y);
if (y>x)
printf("MSG1:y é maior que x\n");
if (y>x)
printf("MSG2:y é maior que x\n");
else
printf("MSG3:y é igual ou menor que x\n");
}
Outro exemplo, usando blocos:
#include <stdio.h>
main()
{
int x,y,z; /* declaração de uma variável inteira */
printf ("Entre com o valor de x ");
scanf("%d",&x);
printf ("Entre com o valor de y ");
scanf("%d",&y);
if (y>x) {
printf("MSG1: y é maior que x\n");
z = y-x;
printf("MSG2: Neste caso z = %d\n", z);
} else {
printf("MSG3: y é igual ou menor que x\n");
z = x-y;
printf("MSG4: Neste caso z = %d\n", z);
}
}
No C, qualquer expressão que resulta em 0 é considerada FALSA e qualquer expressão com valor diferente de 0 é VERDADEIRA.
Exemplo:
if (2)
printf("expressão sempre VERDADEIRA");
if ('2')
printf("expressão sempre VERDADEIRA");
if (1-1)
printf("expressão sempre FALSA");
if (x=1) /* um erro comum - sinal de atribuição no lugar de == */
printf("expressão sempre VERDADEIRA");
Tipo Char
Uma variável do tipo caracter é tratada como um número inteiro e declarada com o tipo char, que na prática é um número inteiro de byte.
Exemplo
#include <stdio.h>
main ()
{
char x='A',y=65,w=0x41,z;
scanf("%c",&z);
printf("Caracter lido = %c\n",z);
printf("Caracter lido = %d\n",z);
printf("Caracter lido = %x\n",z);
if (z==x)
printf("Iguais 1\n");
if (z==y)
printf("Iguais 2\n");
if (z==w)
printf("Iguais 3\n");
}
Indentação
Comando switch
O comando switch permite controlar o fluxo de um programa de forma condicional. O comando testa uma expressão que deve resultar em um número inteiro. Uma sequência de cláusulas case permite executar uma sequência de instruções conforme o valor da expressão. Note que esta sequência de instruções pode ser interrompida por um break.
- include <stdio.h>
int x=1;
main () {
int opcao; printf("Entre com uma opção (número inteiro)\n"); scanf ("%d",&opcao); switch(opcao) { case 1: printf("opcao 1\n"); break; /* o break força o encerramento da instrução*/ case 2: printf("opcao 2\n"); x++; /* instrução demonstrativa apenas */ printf("Note que pode existir ums lista de instruções\n"); break; case 3: printf("opcao 3\n"); /* note o efeito de não ter o break */ case 4: printf("opcao 4\n"); break; case 5: printf("opcao 5\n"); break; default: printf("opcao default\n"); break; /* a opção default é opcional */ }
Exercício 1
Implementar um programa de calculadora onde são fornecidos via scanf dois operandos reais e uma operação que pode ser uma das 4 operações. Com auxílio de um switch deve ser computado e mostrado o resultado da operação. Solução:
- include <stdio.h>
main ()
{
float operando1, operando2, res; char operador; printf("Entre com operando 1\n"); scanf ("%f",&operando1); printf("Entre com operando 1\n"); scanf ("%f",&operando2); printf("Entre com operador\n"); scanf (" %c",&operador); switch(operador) { case '+': res = operando1 + operando2; printf("Valor da soma = %f\n", res); break; case '-': res = operando1 - operando2; printf("Valor da diferença = %f\n", res); break; case '*': res = operando1 * operando2; printf("Valor da diferença = %f\n", res); break; case '/': if (operando2 != 0) { res = operando1 / operando2; printf("Valor da diferença = %f\n", res); } else printf("Divisão por zero não permitida!\n"); break; default: printf("Operação inválida!\n"); break; }
}
Exercício 2
Elaborar uma função que recebe como parâmetro um número inteiro de 1 a 7. A função deve imprimir Domingo se o número é 1, Segunda se 2 etc. A função deve retornar -1 caso o parâmetro esteja fora da faixa e 0 caso contrário. Solução:
/* contribuição do aluno Iago */
- include <stdio.h>
int operar(int x) {
switch(x) { case 1: printf("Domingo\n"); break; case 2: printf("Segunda\n"); break; case 3: printf("Terça\n"); break; case 4: printf("Quarta\n"); break; case 5: printf("Quinta\n"); break; case 6: printf("Sexta\n"); break; case 7: printf("Sábado\n"); break; default: printf("-1\n"); return -1; } return 0;
}
main() {
int num; printf("Entre com um número:\n"); scanf("%d",&num); num=operar(num); printf("%d\n",num);
}
Exercício 3
Um funcionário irá receber um aumento de acordo com o seu plano de trabalho, de acordo com a tabela abaixo [3]: Plano Aumento A 10% B 15% C 20% Faça um programa que leia o plano de trabalho e o salário atual de um funcionário e calcula e imprime o seu novo salário. Use o comando switch.
Exercício 4
Faça um programa que leia um número entre 0 e 10, e escreva este número por extenso. Use o comando switch.
Exercícios
- Implementar um programa que lê um número inteiro e imprime se o número é par ou ímpar. SUGESTÃO: Usar o operador de resto.
- Implementar um programa em C para ler dois números inteiros e imprimir uma mensagem indicando se os números lidos são iguais ou diferentes. Caso sejam diferentes, computar a média dos mesmos.
- Implementar um programa para ler 4 números inteiros e imprimir uma mensagem se a soma dos dois primeiros for igual ou menor a soma dos dois últimos.
- Implementar um programa para ler dois números reais e, na sequência, um número inteiro. Se o número inteiro for 1 os dois números iniciais deverão ser somados, se for 2 eles serão subtraídos, se for 3 eles serão multiplicados e se for 4 serão divididos. Mostrar mensagem de erro se o número inteiro não estiver na faixa de 1 a 4. Mostrar mensagem caso a divisão não seja possível.
- Um estudo sobre sensibilidade de pessoas a temperaturas da água identificou que a maioria das pessoas considera fria a água com temperaturas abaixo de 25 graus, morna entre 25 e 30 graus, e quente acima de 30 graus. Escreva um algoritmo na forma de fluxograma que mostre as palavras "fria", "morna" ou "quente" dependendo da temperatura da água que for informada. Implemente o algoritmo na forma de um programa C.
- Implementar um programa que recebe três números reais e então o programa testa se estes números podem formar um triângulo EQUILÁTERO, ISÓSCELES, ESCALENO ou NÃO pode ser triângulo. (ver aula anterior).
- Implementar um programa C para converter um ângulo em radianos para graus.
- Implementar um programa C que recebe os 3 coeficientes de uma equação do segundo grau e então determina as raízes da mesma.