Lisboa, 17 de Abril de 1997
[1] 1. Qual a diferença entre definição e declaração?
Uma declaração indica apenas a existência de um objecto, que está definido algures. A definição é o local onde é atribuida memória aos objectos. Daí que um objecto possa ser declarado uma quantidade arbitrária de vezes embora só possa ser definido uma única vez. Note-se ainda que uma definição funciona também como declaração.
Do ponto de vista sintático a diferença entre uma declaração e uma definição depende do tipo de objectos em questão:
Nota: a resposta no teste não precisava de ser tão detelhada.
[4] 2. Assinale as afirmações correctas:
[1] 2. a) Os ficheiros de cabeçalho devem conter:
[1] 2. b) As variáveis locais a uma função:
[2] 2. c) A declaração: typedef int inteiro;
define um novo tipo chamado int e uma variável chamada inteiro.
[5] 3. O que faz a seguinte função?
char *f(char *cadeia, size_t i, size_t j) {
char aux;
if(i < j) {
aux = cadeia[i];
cadeia[i] = cadeia[j];
cadeia[j] = aux;
f(cadeia, i + 1, j - 1);
}
return cadeia;
}
Se i >= j não faz nada, caso contrário inverte todos os caracteres da cadeia cadeia entre a posição i e a posição j. No final devolve um ponteiro para ao primeiro caracter da cadeia.
[5] 4.
[2] 4. a) Crie um tipo Fraccao que permita guardar um valor fracionário na forma a/b, sendo a e b do tipo long.
typedef struct {
long n, d; /* numerador e denominador */
} Fraccao;
[3] 4. b) Escreva uma função Fraccao Soma(Fraccao a, Fraccao b) que devolva a soma das duas fracções passadas como argumentos.
Fraccao Soma(Fraccao a, Fraccao b) {
Fraccao r;
r.n = a.n * b.d + b.n * a.d;
r.d = a.d * b.d;
return r;
}
[5] 5. Escreva uma função char *CADcopia(const char *origem) que devolva um ponteiro para uma zona de memória (que deve reservar para o efeito) contendo uma cópia da cadeia de caracteres passada como argumento (a memória reservada deve ser apenas a estritamente necessária).
char *CADcopia(const char *origem) {
char *destino;
if((destino = calloc(strlen(origem) + 1, sizeof(char))) == NULL)
return NULL;
return strcpy(destino, origem);
}
| Página
concebida e mantida por Eng. Manuel Menezes de Sequeira (última actualização 1998/05/15) Copyright © 1996-2001 ISCTE |
||||