Use o botão abaixo para reportar erros ou dar sugestões.

Computação Científica - Um Livro Colaborativo

1.9 Exercícios


E 1.9.1. Escreva versões similares ao código do exemplo 1.2.1 usando a instrução printf várias vezes e introduzindo comentários. Use os comandos

 \7    \a    \b    \n    \r    \t    \v    \\    \’    \"    \?     %%

e descubra a função de cada um deles. Produza propositalmente alguns erros de sintaxe e observe a resposta do compilador. Por exemplo, execute o código

#include <stdio.h>  
 
main(){  
  printf("\t matemática \v e \n \t computação\n \t científica\n");  
  printf("\n\n\n");  
  printf("\v \"linguagem\" \v programação \n programa\n");  
}

E 1.9.2. Escreva versões similares ao código do exemplo 1.4.1, definindo variáveis de vários tipos e imprimindo-as. Use os formatos de leitura e escrita

%d    %i    %o    %x                                                                                                                                                                                                                                                                                     

para inteiros e

%f    %e

para reais.

E 1.9.3. Escreva um programa que lê três caracteres um inteiro e dois double’s e depois imprime todos eles.

E 1.9.4. Escreva um programa que some dois double’s, 108 + 10−8. Discuta o resultado.

E 1.9.5. Abaixo temos três programas que divide 1 por 2. Execute-os e discuta os resultados.

Programa 1

#include <stdio.h>  
 
main()  
{  
  double a,b, resultado;  
  a=1;  
  b=2;  
  resultado=a/b;  
  printf("a=%f, b=%f, resultado=%f\n",a,b,resultado);  
}

Programa 2

#include <stdio.h>  
 
main()  
{  
  double resultado=1/2;  
  printf("%f\n",resultado);  
}

Programa 3

#include <stdio.h>  
 
main()  
{  
  double resultado=1.0/2.0;  
  printf("%f\n",resultado);  
}

E 1.9.6. Escreva um programa que calcula a área e o perímetro de um círculo de raio r.

E 1.9.7. Escreva um programa que lê dois números inteiros a e b e imprime o resultado do teste a > b.

E 1.9.8. Estude o comportamento assintótico de cada uma das expressões abaixo:

  • (1+x)−1 x , x = 10−12, x = 10−13, x = 10−14, x = 10−15, x = 10−16, ...
  • 1 + 1 x x, x = 1012, x = 1013, x = 1014, x = 1015, x = 1016, x = 1017,...

Para cada um dos itens acima, escreva um programa para estudar o comportamento numérico. Use variável double no primeiro programa, depois use float para comparações. Explique o motivo da discrepância entre os resultados esperado e o numérico. Para entender melhor esse fenômeno, leia o capítulo 2 do livro https://www.ufrgs.br/numerico/, especialmente a seção sobre cancelamento catastrófico.

E 1.9.9. Considere as expressões:

exp(1∕μ) 1 + exp(1∕μ)

e

1 exp(−1∕μ) + 1

com μ > 0. Verifique que elas são idênticas como funções reais. Teste no computador cada uma delas para μ = 0,1, μ = 0,01 e μ = 0,001. Qual dessas expressões é mais adequada quando μ é um número pequeno? Por quê?

E 1.9.10. Use uma identidade trigonométrica adequada para mostrar que:

1 − cos(x) x2 = 1 2 sen (x∕2) x∕2 2.

Analise o desempenho destas duas expressões no computador quando x vale 10−5, 10−6, 10−7, 10−8, 10−9, 10−200 e 0. Discuta o resultado. Dica: Para |x| < 10−5, f(x) pode ser aproximada por 1∕2 − x2∕24 com erro de truncamento inferior a 10−22.

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 19/8/2020 às 17:33:16.

Informe erros ou edite você mesmo!