A cotação completa de cada questão/alínea é indicada junto.
[2,0] 1. Explique a diferença entre os seguintes pares de
expressões:
a)
fp = fopen("nome.ext", "r") fp = fopen("nome.ext", "rb")
b)
fp = fopen("nome.ext", "w+b") fp = fopen("nome.ext", "r+b")
c)
fprintf(fich, "%d", val) fwrite(&val, sizeof(int), 1, fich)
d) Escreva a definição das variáveis fich
e val
.
[2,0] 2. Considere as seguintes definições de macros:
#define MULT1(a, b) a * b #define MULT2(a, b) (a * b) #define MULT3(a, b) ((a) * (b))
a) Qual das definições é a mais correcta?
b) O que imprime a chamada printf("%d\n", 8 /
MULT1(1, 4))
?
c) O que imprime a chamada printf("%d\n",
MULT2(1+1, 2))
?
[2,0] 3. Suponha a definição int valor
:
a) Qual das seguintes linhas de código deve ser utilizada para
ler um valor inteiro do teclado e colocá-lo em valor
?
scanf("%d", valor);
scanf("%d", &valor);
b) Justifique pormenorizadamente a resposta anterior.
[2,0] 4. Suponha as seguintes definições:
#define MAXALUNOSTURMA 100 /* numero maximo de alunos por turma */ #define MAXTURMAS 40 /* numero maximo de turmas */ #define MAXNOME 50 typedef struct { int numero; /* numero do aluno */ char nome[MAXNOME+1]; /* nome do aluno */ } alunoTipo; typedef struct { alunoTipo alunos[MAXALUNOSTURMA]; int numero, /* numero da turma */ numeroAlunos, /* numero de alunos na turma */ ano; /* ano da turma */ } turmaTipo; turmaTipo turmas[MAXTURMAS]; int numeroTurmas; /* numero de turmas */
a) Explique pormenorizadamente em que consiste a variável turmas
.
b) Escreva código que imprima o nome e o número de todos os
alunos de todas as turmas (admita as posições das matrizes são
sempre ocupadas a partir do seu início, por exemplo, se numeroTurmas
contiver o valor 2, só as duas primeiras posições de turmas
estão ocupadas).
c) Escreva código que atribua 111 ao número do sétimo aluno da
nona turma.
[2.0] 5. Suponha que tem definidas a seguintes funções:
void f1(int *val) { *val = 1; } void f2(int val) { val = 2; }
e suponha o seguinte fragmento do programa:
int a = 0, b = 0; f1(&a); f2(&b); printf("%d, %d\n", a, b);
a) Corrija um (único) erro no fragmento de programa.
b) Diga o que imprime o fragmento de programa depois de
corrigido.
[2,0] 6. O que imprime a chamada func(4)
?
int func(int n) { int res; if(n <= 0) return 0; printf("%d\n", res="n" + func(n-1)); return res; }
[2,0] 7. Indique o resultado da execução do seguinte programa:
#include <stdio.h> #include <stdlib.h> int main(void) { int matriz[8] = {1, 2, 3, 4, 5, 6, 7, 8}, *p, i; p = &matriz[3]; *--p = 10; (*--p) = 5; ++*p; p = matriz; for(i = 0; i < 8; i++) printf("%d\n", p[i]); return EXIT_SUCCESS; }
[3,0] 8. Suponha os seguintes tipos para utilização em listas simplesmente ligadas:
typedef struct LelementoStr { void *dados; /* ponteiro generico para os dados. */ struct LelementoStr *seguinte; } Lelemento; typedef struct { unsigned long numero; /* numero de elementos na lista. */ Lelemento *inicio, *corrente, *anterior; } Lista;
Escreva uma funçãoint Ltroca(Lista *l)
que troque, na listal
, o elemento apontado pelo campocorrente
da estruturaLista
, ou sejaL->corrente
, com a elemento imediatamente a seguir. A função deve devolver 1 caso a troca tenha sucesso e 0 (zero) no caso contrário (por exemplo, seL->inicio
éNULL
, ou seL->corrente
éNULL
, ou seL->corrente
é o último elemento da lista).
Admita que o campo anterior
da estrutura Lista
,
ou seja L->anterior
, aponta o elemento
imediatamente anterior a L->corrente
(L->anterior
tem valor NULL
se o elemento corrente for o primeiro
da lista).
(Sugestão: faça um pequeno diagrama com as trocas de ponteiros necessárias.)
[3,0] 9. Diga qual o resultado da execução do seguinte programa:
/* Ficheiro fich1.c */ /* Ficheiro fich2.c */ #include <stdio.h> extern int b; #include <stdlib.h> static int c = 5; extern void g(int); void g(int val) { int b = 11; b = val + c; c = val * c; int c = 2; } void f(int *v) { static int a = 0; *v = a; a++; } int main(void) { int a; printf("%d %d %d\n", a, b, c); { int a; f(&a); } f(&a); g(3); printf("%d %d %d\n", a, b, c); return EXIT_SUCCESS; }
Página
concebida e mantida por Eng. Manuel Menezes de Sequeira (última actualização 2006/07/07) Copyright © 1996-2001 ISCTE |