Mudanças entre as edições de "Programação 1 - Engenharia - Comandos de Decisão no C"
Linha 260: | Linha 260: | ||
if (operando2 != 0) { | if (operando2 != 0) { | ||
res = operando1 / operando2; | res = operando1 / operando2; | ||
− | printf("Valor da | + | printf("Valor da divisão = %f\n", res); |
} else | } else | ||
printf("Divisão por zero não permitida!\n"); | printf("Divisão por zero não permitida!\n"); |
Edição das 15h08min de 27 de fevereiro de 2019
Objetivos
- Utilizar os operadores relacionais e lógicos na programação C
- um pouco mais sobre variáveis: tipo char
- Utilizar o comando de decisão if else
- comando switch
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 é igual ao da direita) |
!= | diferente de (se o operando a esquerda é diferente do da direita) |
Operador | Significado |
---|---|
&& | AND (E) |
|| | OR (OU) |
! | NOT (NÃO) |
Comandos de decisão if() e if() else
Atenção: preste atenção quando é necessário usar blocos!!!
#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 1 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");
}
Múltiplas Condições
Se for necessário testar múltiplas condições pode-se usar um "else if" da forma:
#include <stdio.h>
main ()
{
char x;
printf("Entre com um caracter\n");
scanf("%c",&x);
if (x=='A')
printf("Igual a A\n");
else if(x>'F' && x < 'M')
printf("Entre F e M\n");
else if (x>='a' && x<='z')
printf ("minúsculo\n");
else
printf ("Outro...\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 */
}
}
Referência: ver link sobre switch Exemplo1 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 2\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 divisão = %f\n", res);
} else
printf("Divisão por zero não permitida!\n");
break;
default:
printf("Operação inválida!\n");
break;
}
}
Exercícios
1. 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.
Solução - Exercicio 01 |
---|
#include <stdio.h>
main ()
{
int x,y;
printf("Entre com um numero\n");
scanf("%d",&x);
y = x%2;
//se a divisao por 2 tiver resto, é impar, caso contrario é par
if (y==0)
printf("O numero é par\n");
else printf("O numero é impar\n");
}
|
2. 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.
Solução - Exercicio 02 |
---|
#include <stdio.h>
main ()
{
float x,y,media;
printf("Entre com o primeiro numero\n");
scanf("%f",&x);
printf("Entre com o segundo numero\n");
scanf("%f",&y);
//se x igual a y
if (x==y) {
printf("Os numeros são iguais\n");
} else { //senao
printf("Os numeros são diferentes\n");
media = (x+y)/2;
printf("Media dos numeros = %f\n",media);
}
}
|
3. Implementar um programa para ler 4 números inteiros e imprimir uma mensagem caso a soma dos dois primeiros seja igual ou menor que a soma dos dois últimos.
Solução - Exercicio 03 |
---|
#include <stdio.h>
main ()
{
float a,b,c,d;
float soma1,soma2;
printf("Entre com o primeiro numero\n");
scanf("%f",&a);
printf("Entre com o segundo numero\n");
scanf("%f",&b);
printf("Entre com o terceiro numero\n");
scanf("%f",&c);
printf("Entre com o quarto numero\n");
scanf("%f",&d);
soma1 = a+b;
soma2 = c+d;
//se x igual a y
if (soma1 <= soma2)
printf("A soma é menor ou igual\n");
}
|
4. 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.
Solução - Exercicio 04 |
---|
#include <stdio.h>
main ()
{
float x,y;
float result;
int i;
printf("Entre com o primeiro numero real\n");
scanf("%f",&x);
printf("Entre com o segundo numero real\n");
scanf("%f",&y);
printf("Entre com o numero inteiro\n");
scanf("%d",&i);
//se x igual a y
if (i>4 || i<1) {
printf("O Numero inteiro só pode ser entre 1 e 4\n");
} else { //utilizei if, porem pode-se utilizar switch case.
if(i==1) {
result = x+y;
printf("Soma: %f\n",result);
}
if(i==2) {
result = x-y;
printf("Subtração: %f\n",result);
}
if(i==3) {
result = x*y;
printf("Multiplicacao: %f\n",result);
}
if(i==4) {
if(y==0) {
printf("Não é possivel dividir por zero\n");
} else {
result = x/y;
printf("Divisao: %f\n",result);
}
}
}
}
|
5. 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.
Solução - Exercicio 05 |
---|
#include <stdio.h>
main ()
{
float temp;
printf("Entre com a temperatura\n");
scanf("%f",&temp);
//se x igual a y
if (temp >30)
printf("Quente\n");
else if(temp <= 30 && temp >= 25)
printf("Morna\n");
else if(temp < 25)
printf("Fria\n");
}
|
6. 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 pseudocódigo abaixo).
ALGORITMO trangulo
VARIAVEIS
lado1,lado2,lado3: real
INICIO
Ler lado1
Ler lado2
Ler lado3
SE lado1>(lado2+lado3) OU lado2>(lado1+lado3) OU lado3>(lado1+lado2) ENTÃO
MOSTRAR "não é triângulo"
SENÃO
SE lado1==lado2 E lado1==lado3 ENTÃO
MOSTRAR "equilatero"
SENAO
SE lado1==lado2 OU lado1==lado3 OU lado2==lado3 ENTÃO
MOSTRAR "isósceles"
SENÃO
MOSTRAR "escaleno"
FIMSE
FIMSE
FIMSE
FIM
</syntaxhighlight>
Solução - Exercicio 06
#include<stdio.h>
main(){
float lado1,lado2,lado3;
printf("Insira o valor do lado 1 do triangulo\n");
scanf("%f",&lado1);
printf("Insira o valor do lado 2 do triangulo\n");
scanf("%f",&lado2);
printf("Insira o valor do lado 3 do triangulo\n");
scanf("%f",&lado3);
if(lado1>(lado2+lado3) || lado2>(lado1+lado3) || lado3>(lado1+lado2)){
printf("não é triângulo\n");
}else if(lado1==lado2 && lado1==lado3){
printf("equilatero\n");
}else if(lado1==lado2 || lado1==lado3 || lado2==lado3){
printf("isósceles\n");
}else{
printf("escaleno\n");
}
}
7. Implementar um programa C para converter um ângulo em radianos para graus.
Solução - Exercicio 07
#include <stdio.h>
main ()
{
float rad,graus;
printf("Entre com o angulo em rad\n");
scanf("%f",&rad);
graus = rad*(180/3.1415);
printf("O angulo em graus = %f\n",graus);
}
8. 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. Usar a função sqrtf (ver http://en.cppreference.com/w/c/numeric/math/sqrt).
Solução - Exercicio 08
#include <stdio.h>
#include <math.h> //precisa incluir para usar a função sqrt()
//Alem disso na hora da compilação precisa-se utilizar o comando "-lm" para linkar a biblioteca math.h com seu aplicativo.
//ficaria assim "gcc 'nome_do_arquivo' -o 'nome_de_saida_do_app' -lm"
main ()
{
float a,b,c;
float x1,x2;
printf("Entre com o 'a'\n");
scanf("%f",&a);
printf("Entre com o 'b'\n");
scanf("%f",&b);
printf("Entre com o 'c'\n");
scanf("%f",&c);
if(a!=0) {
x1 = ( -b + (sqrtf((b*b)-4*a*c)) )/(2*a);
x2 = ( -b - (sqrtf((b*b)-4*a*c)) )/(2*a);
printf("Raiz x1 : %f\n",x1);
printf("Raiz x2 : %f\n",x2);
} else {
printf("O 'a' precisa ser diferente de zero\n");
}
}
9. Uma empresa irá ajustar o salário de seus funcionários de acordo com a categoria de trabalho dos funcionários: CAT A (10% de aumento), CAT B (15% de aumento) e CAT C (20% de aumento). 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.
Solução - Exercicio 09
#include <stdio.h>
main ()
{
float salario,novosalario;
char cargo;
printf("Entre com o salario do funcionario\n");
scanf ("%f",&salario);
printf("Entre com o cargo do funcionario(A,B,C):");
scanf (" %c",&cargo);
printf("%c\n",cargo);
//para nao acontecer erros, verifica-se se o caracter é exatamente o solicitado, se sim, o programa executa normalmente.
if(cargo== 'A' || cargo=='B' || cargo=='C') {
switch(cargo) {
case 'A':
novosalario = (salario*0.1)+salario;
printf("Novo salario do funcionario = %f\n", novosalario);
break;
case 'B':
novosalario = (salario*0.15)+salario;
printf("Novo salario do funcionario = %f\n", novosalario);
break;
case 'C':
novosalario = (salario*0.2)+salario;
printf("Novo salario do funcionario = %f\n", novosalario);
break;
}
}
}
10. Faça um programa que leia um número entre 0 e 10, e escreva este número por extenso. Use o comando switch.
Solução - Exercicio 10
#include <stdio.h>
main ()
{
int numero;
printf("Entre com o numero de 0 ate 10\n");
scanf ("%d",&numero);
//para nao acontecer erros, verifica-se se o numero é exatamente o solicitado, se sim, o programa executa normalmente.
if(numero > 0 || numero < 10) {
switch(numero) {
case 0:
printf("Zero\n");
break;
case 1:
printf("Um\n");
break;
case 2:
printf("Dois\n");
break;
case 3:
printf("Tres\n");
break;
case 4:
printf("Quatro\n");
break;
case 5:
printf("Cinco\n");
break;
case 6:
printf("Seis\n");
break;
case 7:
printf("Sete\n");
break;
case 8:
printf("Oito\n");
break;
case 9:
printf("Nove\n");
break;
case 10:
printf("Dez\n");
break;
}
}
}
11. Tente inferir as saídas do programa abaixo e depois o execute para conferir os resultados.
#include <stdio.h>
main ()
{
int x;
x = !( 1 || 0 );
printf ("x=%d\n",x);
x = !( 0 || 1 && 0 );
printf ("x=%d\n",x);
x = !( 0 || 1 && 1 );
printf ("x=%d\n",x);
x = !( ( 0 || 1 ) && 1 );
printf ("x=%d\n",x);
}