Curso Técnico Superior Profissional em Redes e Sistemas Informáticos FUNDAMENTOS DE PROGRAMAÇÃO 2015/2016 Exercícios: Capítulo 4 – Estruturas de decisão SOLUÇÕES 1. Implemente um programa para ler do teclado o ano de nascimento do utilizador. O valor introduzido só será aceite se este estiver no intervalo compreendido entre 1900 e 2015. #include <stdio.h> int main(void) { int numero; printf("Introduza o seu ano de nascimento: "); scanf("%d", &numero); if(numero > 2015 || numero < 1900) { printf("O ano de nascimento e INVALIDO"); } else { printf("O ano de nascimento e VALIDO"); } return 0; } 2. Escreva um programa que peça um número ao utilizador e mostre a mensagem “Número é superior a zero” caso o número introduzido seja superior a zero e “Número é inferior ou igual a zero” caso contrário. #include <stdio.h> int main(int argc, char *argv[]) { int number; //Pede o valor printf("Introduza um valor superior, igual ou inferior a zero: "); //lê o valor scanf("%d", &number); //se o número for superior a 0 if(number > 0) { printf("O numero e superior a zero.\n"); } else //caso contrário é inferior ou igual a 0 { printf("O numero e inferior ou igual a zero.\n"); } return 0; } Fundamentos de Programação - Exercícios Página 1 3. Considere um grande armazém que está a aplicar taxas de desconto aos seus produtos e que estas variam de acordo com o total que cada cliente tem a pagar, segundo a seguinte tabela: Compras até 500€ 0% de desconto Compras de 500€ a 1250€ 4% de desconto Compras de 1250€ a 2000€ 6% de desconto Compras superiores a 2000€ 8% de desconto O programa deve determinar a taxa de desconto a aplicar e o valor líquido a cobrar. O montante das compras é dado. #include <stdio.h> #define DSCNT1 0.04 #define DSCNT2 0.06 #define DSCNT3 0.08 int main(int argc, char *argv[]) { float valorTotalConpras, result; printf("Introduza o valor total das compras: "); scanf("%f", &valorTotalConpras); if(valorTotalConpras <= 500) { printf("Valor a pagar e: %0.2f euros, a taxa e de 0%%", valorTotalConpras); } else if(valorTotalConpras > 500 && valorTotalConpras <= 1250) { result = (float)valorTotalConpras - (valorTotalConpras*DSCNT1); printf("Valor a pagar e: %0.2f euros, a taxa e de 4%%", result); } else if(valorTotalConpras > 1250 && valorTotalConpras <= 2000) { result = (float)valorTotalConpras - (valorTotalConpras*DSCNT2); printf("Valor a pagar e: %0.2f euros, a taxa e de 6%%", result); } else//superior a 2000 euros { result = (float)valorTotalConpras - (valorTotalConpras*DSCNT3); printf("Valor a pagar e: %0.2f euros, a taxa e de 8%%", result); } return 0; } 4. Escreva um programa que determine se um número inteiro é par ou ímpar. Caso o valor introduzido seja igual a zero deverá ser apresentada uma mensagem de aviso. #include <stdio.h> int main(void) { int numero; printf("Introduza um numero: "); scanf("%d", &numero); if(numero % 2 == 0) { printf("Numero par"); } else { printf("Numero impar"); Fundamentos de Programação - Exercícios Página 2 } return 0; } 5. Escreva um programa que peça ao utilizador o comprimento de três linhas e indique ao utilizador se essas linhas podem ou não formar um triângulo. Em caso afirmativo, o programa deve também indicar se o triângulo é escaleno (lados todos diferentes), isósceles (dois lados iguais) ou equilátero (todos os lados iguais). Nota: Considerando a, b e c o comprimento de três linhas. Essas linhas podem formar um triangulo se |a - b| < c e c < a + b. (Use a função fabs() para calcular o módulo, esta função está presente na biblioteca math.h). #include <stdio.h> #include <math.h> int main(void) { float linha_1, linha_2, linha_3; printf("Introduza o valor da linha 1: "); scanf("%f", &linha_1); printf("Introduza o valor da linha 2: "); scanf("%f", &linha_2); printf("Introduza o valor da linha 3: "); scanf("%f", &linha_3); if((fabs(linha_1 - linha_2) < linha_3) && (linha_3 < linha_1 + linha_2)) { printf("As linhas PODEM formar um triangulo: "); // triangulo equilatero -> todos os lados iguais if(linha_1 == linha_2 && linha_2 == linha_3) { printf("equilatero\n"); } // triangulo isosceles -> dois lados iguais else if(linha_1 == linha_2 || linha_1 == linha_3 || linha_2 == linha_3) { printf("isosceles\n"); } else { printf("escaleno\n"); } } else { printf("As linhas NAO PODEM formar um triangulo: "); } return 0; } 6. Escreva um programa que peça ao utilizador três números inteiros e a ordem pela qual os deseja ver (crescente ou decrescente). O resultado deverá ser os três números ordenados pela ordem indicada. Por exemplo: Introduza tres numeros inteiros: 5 2 6 Qual a ordem que os deseja ver (C)rescente ou (D)ecrescente: C 2 5 6 #include <stdio.h> Fundamentos de Programação - Exercícios Página 3 int main(void) { int numero_1, numero_2, numero_3; char ordem; printf("Introduza tres numeros inteiros: \n"); fflush(stdin); scanf("%d %d %d", &numero_1, &numero_2, &numero_3); printf("Qual a ordem que os deseja ver (C)rescente ou (D)ecrescente: "); fflush(stdin); scanf("%c", &ordem); switch(ordem) { case 'c': case 'C': if(numero_1 < numero_2) { if(numero_2 < numero_3) { printf("%d %d %d\n", numero_1, numero_2, numero_3); }else if(numero_1 < numero_3) { printf("%d %d %d\n", numero_1, numero_3, numero_2); }else { printf("%d %d %d\n", numero_3, numero_1, numero_2); } } else { if(numero_2 < numero_3) { if(numero_1 < numero_3) { printf("%d %d %d\n", numero_2, numero_1, numero_3); }else { printf("%d %d %d\n", numero_2, numero_3, numero_1); } } else { printf("%d %d %d\n", numero_3, numero_2, numero_1); } } break; case 'd': case 'D': if(numero_1 > numero_2) { if(numero_2 > numero_3) { printf("%d %d %d\n", numero_1, numero_2, numero_3); } else if(numero_1 > numero_3) { printf("%d %d %d\n", numero_1, numero_3, numero_2); } else { printf("%d %d %d\n", numero_3, numero_1, numero_2); } } else { if(numero_2 > numero_3) { if(numero_1 > numero_3) { printf("%d %d %d\n", numero_2, numero_1, numero_3); } else { printf("%d %d %d\n", numero_2, numero_3, numero_1); } } else { printf("%d %d %d\n", numero_3, numero_2, numero_1); } } Fundamentos de Programação - Exercícios Página 4 break; default: printf("Ordem invalida!"); } return 0; } 7. Pretende-se elaborar um programa que simule uma calculadora rudimentar, cujas operações possíveis sejam: + (soma) - (subtração) x (multiplicação) / (divisão) O programa deverá pedir ao utilizador dois números inteiros e o sinal de operação a aplicar a esses números. Deverá, por fim, apresentar no monitor, o respectivo resultado. Notas: Caso o utilizador seleccione um operador fora das possibilidades atrás mencionadas, deverá ser dada ao utilizador a mensagem: “operador desconhecido”. O programa deve indicar “Erro – divisão por zero” se numa divisão o divisor for zero. Exemplo: Introduza os numeros e a operacao a realizar: 5*2 Resultado: 10 #include <stdio.h> int main(void) { float valor1, valor2, resultado; char operacao; printf("Introduza os numeros e a operacao a realizar: "); scanf("%f %c %f", &valor1, &operacao, &valor2); switch(operacao) { case '+': resultado= valor1 + valor2 ; printf(" O resultado e: %f ", resultado); break; case '-': resultado = valor1 - valor2 ; printf(" O resultado e: %f ", resultado); break; case '/': if(valor2 == 0) { printf("Erro - Divisão por zero"); } else { resultado = valor1 / valor2; printf(" O resultado e: %f", resultado); } break; case '*': resultado = valor1 * valor2; Fundamentos de Programação - Exercícios Página 5 printf(" O resultado e: %f", resultado); break; default: printf("Erro:operador desconhecido"); } return 0; } 8. Implemente um programa que em função do valor da cilindrada do automóvel indique o valor do imposto de circulação, com base na seguinte tabela: Cilindrada Imposto de circulação <= 1000 15€ ] 1000, 1300 ] 25€ ]1300, 1500] 30€ ]1500, 1800] 40€ > 1800 50€ #include <stdio.h> int main(void) { int cilindrada; printf("Introduza a cilindrada do automovel: "); scanf("%d", &cilindrada); if(cilindrada > 0 && cilindrada <= 1000) { printf("O seu imposto de circulacao tem o valor } else if (cilindrada > 1000 && cilindrada <=1300) { printf("O seu imposto de circulacao tem o valor } else if(cilindrada > 1300 && cilindrada <= 1500) { printf("O seu imposto de circulacao tem o valor }else if(cilindrada > 1500 && cilindrada <= 1800) { printf("O seu imposto de circulacao tem o valor } else if (cilindrada > 1800) { printf("O seu imposto de circulacao tem o valor } else { printf("Valor que introduziu e invalido"); } de 15 euros"); de 25 euros"); de 30 euros"); de 40 euros"); de 50 euros"); return 0; } 9. Uma relação matemática é dada pela seguinte forma: Y= Ax2 + Bx + C (para x<5) 2 Ax – Bx –C ; (para x=5) 2 (para x>5) Ax + Bx Escreva um programa que leia os valores A, B, C e x do teclado e calcule Y. #include <stdio.h> int main(void) { float a, b, c, y, x; printf("Introduza o valor de A B C: "); scanf("%f %f %f",&a, &b, &c); Fundamentos de Programação - Exercícios Página 6 printf("Introduza o valor de x:"); scanf("%f",&x); if(x < 5) { y = (a*(x*x))+(b*x + c); } else if (x == 5) { y= (a*(x*x)) - (b*x) -c; } else if(x > 5) { y = (a*(x*x)) + (b*x); } printf("O valor de y e : %.3f",y); return 0; } 10. Escreva um programa que indique se uma determinada letra pedida ao utilizador é maiúscula ou minúscula. Sugestão: use as funções islower() e/ou isupper(). #include <stdio.h> int main(void) { char letra; printf("Introduza uma letra:"); scanf("%c", &letra); if(islower(letra)) { printf("A letra que introduziu e minuscula"); } else { printf("A letra que introduziu e maiuscula"); } return 0; } Fundamentos de Programação - Exercícios Página 7