ISCTE - IGE - Resolução da Primeira Frequência de

Programação II

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;

[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