Programação Folha Prática 3 Lab. 3 Departamento de Informática Universidade da Beira Interior Portugal 2015 Copyright © 2010 All rights reserved. LAB. 3 3ª semana EXPRESSÕES E INSTRUÇÕES 1. Revisão de conceitos fundamentais sobre expressões e instruções 2. Objectivos 3. Exercícios Nota: Os exercícios 3.6 e seguintes serão em parte tratados na aula teórica. Lab. 3 EXPRESSÕES E INSTRUÇÕES 1. Revisão 1. Arquitectura de Von-Newman: E/S + CPU + Memória 2. Instrução de atribuição: = 3. Operadores Aritméticos: +, -, *, /, % 4. Operadores Relacionais: <, >, <=, >=, ==, != 5. Operadores Lógicos: &&, ||, ! 6. Tipos de expressões: aritméticas, relacionais e lógicas. 7. Regras precedência de operadores em expressões. 8. Operadores de incrementação e decrementação: ++x, x++, --x, x-9. Operador de conversão explícita de tipo de dados (casting): (novo_tipo) tipo 10. Operador sizeof 11. Operador condicional: condicao ? expressão : expressão 12. Regras de precedência a associatividade entre expressões. 13. Ciclo básico de Desenvolvimento de Programas: - Edição àCompilação à Execução - Edição: gedit nome_programa.c - Compilação: cc –o nome_programa.exe nome_programa.c 2. Objectivos No final deste módulo prático, o aluno deve ser capaz de dominar os conceitos de expressão e de instrução. Além disso, deve ser capaz de: 1. Usar variáveis, expressões e instruções em programas. 2. Usar funções matemáticas definidas no ficheiro math.h. 3. Atribuir valores a variáveis inteiras e reais. 4. Atribuir valores a variáveis lógicas. 5. Escrever expressões sintática e semanticamente correctas. 6. Aplicar regras de precedência de operadores em expressões. 7. Prever o resultado do cálculo de expressões. 3. Exercícios Exercício 3.1 Escreva um programa que converta o tempo em ss no tempo em hh.mm.ss, em que ss representa os segundos, mm representa os minutos, e hh representa as horas. O algoritmo é: 1. Pedir o tempo em segundos. 2. Ler o tempo em ss (segundos). 3. Calcular as horas hh existentes na quantidade ss. 4. Calcular os minutos mm nos segundos restantes (após retirar as horas hh a ss); 5. Calcular os segundos restantes após retirar as horas e os minutos a ss; 6. Escreva no ecrã o valor das horas (hh), dos minutos (mm) e dos segundos restantes (ss). Exercício 3.2 Escreva um programa que determine a parte inteira e a parte fraccionária dum número real. O algoritmo é: 1. Pedir um número real. 2. Ler um número real. 3. Determinar a parte inteira do número real. 4. Determinar a parte fraccionária do número real; 5. Escreva para o ecrã a parte inteira e parte fraccionária do número real. Exercício 3.3 Escreva um programa que leia um número decimal de três dígitos a partir do teclado e que escreva no ecrã a correspondente expansão na base 10. Por exemplo, o número 937 terá a seguinte saída no ecrã: 937 = 7 * 1 + 3 * 10 + 9 * 100. Nota: Para extrair o dígito 3, obtemos 93 através da divisão inteira de 930 por 10. Tendo o resultado 93, o usamos o resto da divisão inteira de 93 por 10 para obter o digito pretendido. Exercício 3.4 Escreva um programa que converta um valor real em graus Fahreneit num valor em graus Celsius. O algoritmo é: 1. Pedir ao utilizador um valor real em graus Fahreneit; 2. Calcular o respectivo valor em graus Celsius; 3. Escrever no ecrã o valor em graus Celsius. 9 5 Nota: A fórmula de conversão é F = C + 32 , em que C é uma variável com valor real em graus Celsius e F é uma variável com valor real em graus Fahreneit. Exercício 3.5 Escreva um programa que calcule o valor da seguinte função matemática: F(x,y)=2 sin(x) + cos(y) - tan(x+y) Nota: A utilização das funções matemáticas sin, cos e tan requer a inclusão da directiva #include<math.h> no programa e a opção de compilação –lm de modo a permitir juntar o código da biblioteca matemática ao ficheiro executável. Exercício 3.6 (atribuição a variáveis inteiras e reais) Escreva uma instrução de atribuição para cada uma das seguintes acções: a) A variável I é incrementada de uma unidade. b) M é uma cópia do valor de X. c) Q é o valor da divisão inteira dos inteiros I e J. d) X é o valor da divisão real dos inteiros I e J. e) I é o valor arredondado do real X. f) I é o maior inteiro inferior ou igual a X positivo. g) M é o inteiro mais próximo da média dos reais A e B. h) A variável t20 toma o valor da tangente de 20 graus. i) Dado n inteiro não nulo, a variável inteira SINAL toma o valor 1 se n for positivo e –1 se n for negativo. j) U toma o valor do algarismo das unidades do real X. k) R toma o valor de x se x for não negativo, ou de -x no caso contrário. l) Z toma o valor do módulo de Y elevado a X. m) ALFA é o ângulo (em graus) cuja tangente é x. n) y toma o valor da expressão y+4x+3x2 +2x3 +x4 . o) z toma o valor da expressão log7(3x2+6) . p) A variável inteira PAR vale 1 se N for par e 2 se N for ímpar. q) A variável inteira ALTR toma o valor de (-1)N com N inteiro. Escreva programas que lhe permitam verificar a correcção das acções anteriores. Exercício 3.7 (atribuição a variáveis lógicas) Escreva uma instrução de atribuição para cada uma das seguintes acções: a. A variável lógica L é verdadeira se e só se L1 e L2 forem ambas falsas. b. A variável lógica VALOR é verdadeira se e só se X é maior que Y. c. A variável lógica L é verdadeira se e só se L1 é verdadeira mas não L2. d. BOOL é verdadeira se e só se os inteiros I e J forem iguais em valor absoluto. e. LOGIC é verdadeira se e só se M for o dobro de N. f. CONSOANTE é verdadeira se e só se a variável carácter LETRA for uma consoante minúscula. g. XOR é verdadeira se e só se apenas uma das variáveis B1 ou B2 for verdadeira. h. PAR é verdadeira se e só se o inteiro N for par. i. BISSEXTO é verdadeira se e só se a variável inteira ANO for divisível por 4 mas não por 100 ou então for divisível por 400. j. NULL é verdadeira se e só se I for múltiplo de J (ambos inteiros). k. VOGAL é verdadeira se e só se a variável carácter CAR for uma vogal. l. COMPLEX é verdadeira se e só se a equação ax2+bx+c=0 tem raízes complexas. m. DIGITO é verdadeira se e só se a variável carácter CAR representa um algarismo decimal. Escreva programas que lhe permitam verificar a correcção das acções anteriores. Exercício 3.8 (escrita de expressões) Escreva uma expressão em linguagem C para cada uma das seguintes condições: a) x é maior que 56. b) z não é 9. c) y é no máximo 100. d) x é divisível por 2. e) x está entre 0 e 10 inclusivamente. f) x ou y é 20. g) x é maior que y, o qual é maior que z. h) A soma de x e y é negativa. i) y tem o valor 73. j) Metade de z é pelo menos 20. k) x e y são ambos positivos. l) x é maior que 5 e menor que –5. m) x não é igual a 0 e y não é negativo. Exercício 3.9 (regras de precedência) Coloque parênteses nas seguintes expressões por forma a indicar a ordem de execução das operações nelas incluídas: a) x % 10 == 5 b) x < 15 || !y > 0 c) x != z <= 3 d) x >= y && z == 3 e) x = y>0 f) x || y && !z Exercício 3.10 (cálculo de expressões) Supondo que x=5, y=3 e z=8, determine o valor das seguintes expressões: a) x == 5 b) x = 7 c) x == z d) x = z e) x < y && y < z f) z < x && x < y g) x = y< z h) !(x > y) i) x > z && z < y Exercício 3.11 (cálculo do máximo de dois números reais) Escreva um programa que calcule o máximo de dois valores reais. Dica: Utilize o operador condicional: (http://www.learnconline.com/2010/03/conditional-operator-in-c-programming-language.html) Exercício 3.12 (par ou ímpar) Escreva um programa que determine se um número inteiro é par ou ímpar. Dica: Utilize o operador condicional: (http://www.learnconline.com/2010/03/conditional-operator-in-c-programming-language.html) Exercício 3.13 (classificador de produtos) Escreva um programa que resolva o seguinte problema. Antes de mais, a tabela abaixo indicada deverá ser escrita no ecrã. Depois, o restante código do programa deverá implementar um classificador de produtos que identifique um produto num universo de 3 produtos possíveis, medindo a concentração de 3 elementos constituintes, A, B e C, de acordo com as concentrações dadas na seguinte tabela: Produto 1 Produto 2 Produto 3 Produto 4 Produto 5 A 0.1 0.1 0.2 0.2 0.2 B 0.5 0.3 0.5 0.3 0.5 C 0.6 0.7 0.7 0.1 0.6 Se as concentrações fornecidas pelo utilizador não corresponderem a nenhum produto da tabela, o classificador deverá escrever: “Produto desconhecido”. Caso contrário, deverá escrever o número do produto identificado; por exemplo, se o produto calculado for o terceiro, deverá escrever-se no ecrã o seguinte: “Produto 3”. Exercício 3.14 (cálculo de indicadores corporais) Desenhe um algoritmo que resolva o seguinte problema. O índice de massa corporal (IMC) relaciona a altura com o peso duma pessoa através da fórmula IMC=peso/altura 2 ; a unidade de peso é o kg (quilograma) e a unidade de altura é o m (metro). A tabela de classificação é a seguinte: IMC<19 19<= IMC<=25 25< IMC <=30 30< IMC >=40 > 40 Categoria Magreza Normal Excesso de peso Obesidade Obesidade Mórbida Pretende-se uma aplicação que calcule os seguintes indicadores corporais: • IMC • Categoria • Peso mínimo (PMI=19× altura 2 ) para que uma pessoal pertença à categoria normal. • Peso máximo (PMA=25× altura 2 ) para que uma pessoal pertença à categoria normal. A aplicação deverá fornecer depois estes dados ao utilizador. Exercício 3.15 (cálculo do nº de bytes) Escreva um programa que escreva no écrã o número de bytes ocupados em memória por um carácter (char), um número inteiro (int), um número real (float), e um número real de precisão dupla (double). Dica: Utilize o operador sizeof: (http://www.c4learn.com/c-programming/sizeof-operator/)