E06: Teste seus conhecimentos sobre ponteiros e alocação dinâmica de memória (e recursão)

E06.1  Escreva uma função recursiva calcule o número de Fibonacci de índice n.  (Os números de Fibonacci são 0, 1, 1, 2, 3, 5, 8, 13, …  Cada número é a soma dos dois anteriores.)

E06.2  Escreva uma função recursiva que calcule a soma dos elementos de um vetor v[0..n-1] de números inteiros.

E06.3  Dadas as declarações

   char c;
   int v[4];

suponha que os endereços das variáveis são

   c       432189421
   v[0]    432189422
   v[1]    432189426
   v[2]    432189430

Qual o endereço de v[3]?  Qual o valor da expressão  &v[3]?  Qual o valor da expressão  v + 3?

E06.4  O que o seguinte fragmento de código imprime?

int a, b, *p, *q;
a = 10; b = 25;
p = &a; q = &b;
*p += *q;
q = p;
printf ("%d\n", *q);
*q = *p + *q;
printf ("%d\n", *q);

E06.5  Escreva uma função que leia um número inteiro positivo n seguido de n números inteiros e imprima esses n números em ordem invertida. Por exemplo, ao receber

5  222 333 444 555 666

sua função deve imprimir

666 555 444 333 222

Suponha que arquivo (ou melhor, o fluxo) de entrada é stdin.  Sua função não deve impor limitações sobre o valor de n.