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 campocorrenteda 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 |
||||