ISCTE, IGE, PROGRAMAÇÃO II


Ano lectivo de 1995/96 - Resolução da frequência de 15 de Julho de 1996


1.a) Ambas abrem um ficheiro nome.ext (se existir) para leitura, embora a primeira o abra em modo texto e a segunda em modo binário.
1.b) Ambas abrem um ficheiro nome.ext para leitura e escrita no modo binário, mas no primeiro caso se o ficheiro existir é apagado, e no segundo se o ficheiro o ficheiro não existir ocorre um erro.
1.c) A primeira expressão escreve num ficheiro (de texto) os caracteres correspondentes à representação decimal do valor val, enquanto a segunda escreve num ficheiro (binário) os bytes com a representação binária de val.
1.d) FILE *fich e int val.

2.a) A definição de MULT3()
2.b) A chamada printf("%d\n", 8 / MULT1(1, 4)) imprime 32.
2.c) A chamada printf("%d\n", MULT2(1+1, 2)) imprime 3.

3.a) Deve-se usar a segunda linha de código.
3.b) Em ANSI-C os parâmetros das funções são variáveis locais inicializadas com o valor dos argumentos. Assim, alterar o valor dum parâmetro não afecta o valor do argumento respectivo. Para conseguir afectar variáveis ou posições de memória exteriores a uma função é necessário passar à função o endereço dessas variáveis.

4.a) A variável turmas consiste numa matriz de MAXTURMAS turmas. Cada turma consiste numa estrutura do tipo turmaTipo com quatro campos: o número da turma (número, um inteiro), o número de alunos da turma (numeroAlunos, um inteiro), o ano da turma (ano, um inteiro), e uma matriz de MAXALUNOSTURMA alunos. Cada aluno consiste numa estrutura do tipo alunoTipo com dois campos: o número do aluno (numero, um inteiro), e o nome do aluno (nome), que consiste numa cadeia de caracteres com MAXNOME+1 posições.
4.b)

int t, a;
for(t = 0; t < numeroTurmas; t++)
    for(a = 0; a < turmas[t].numeroAlunos; a++) 
        printf("nome \"%s\", numero %d\n", 
               turmas[t].alunos[a].nome, turmas[t].alunos[a].numero);

4.c) turmas[8].alunos[6].número = 111

5.a) A chamada a f2() deveria ser f2(b).
5.b) Imprime 1, 0

6. A chamada func(4) imprime:

1
3
6
10

7. O resultado da execução do programa é:

1
6
10
4
5
6
7
8

8.

int Ltroca(Lista *l)
{
    Lelemento *seguinte;
    if(l == NULL || l->inicio == NULL || l->corrente == NULL)
        return 0;
    if((seg = l->corrente->seguinte) == NULL)
        return 0;
    if(l->anterior != NULL)
        l->anterior->seguinte = seguinte;
    else
        l->inicio = seguinte;
    l->corrente->seguinte = seguinte->seguinte;
    seguinte->seguinte = l->corrente;

    return 1;
}

9. O resultado da execução do programa é:

?? 11 2
1 8 2
em que ?? representa um valor indeterminado.


Página concebida e mantida por Eng. Manuel Menezes de Sequeira (última actualização 2006/07/07)
Copyright © 1996-2001 ISCTE