A cotação completa de cada questão/alínea é indicada junto.
1. [2,0] Indique o que faz cada uma das seguintes
instruções:
a) fp = fopen("nome.ext", "rb");
b) fp = fopen("nome.ext", "w");
c) fp = fopen("nome.ext", "r+b");
d) Escreva a declaração da variável fp.
Programa 1 (prog.c):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
for(i = 0; i < argc; i++)
printf("%s\n", argv[i]);
return EXIT_SUCCESS;
}
2. [2,0] Relativamente ao Programa 1 (executável prog.exe),
executado com o comando prog a b c:
a) Diga o que aparece no ecrã.
b) Qual o valor de argc?
3. [2,0] Suponha as declarações char nome1[41],
nome2[41]:
a) Qual das seguintes linhas de código deve ser utilizada (e
porquê) para ler um nome do teclado?
gets(nome1);
fgets(nome2, 41, stdin);
b) A função fgets() não tem o mesmo efeito que gets().
Admita que introduziu o mesmo texto no teclado tanto para gets()
como para fgets(). Corrija o conteúdo de nome2
de modo a garantir que strcmp(nome1, nome2) devolve
0 (zero).
4. [2,0] Suponha as seguintes definições:
typedef struct
{
int numero;
int notas[4];
char nome[41];
} alunotipo;
alunotipo alunos[100];
a) Explique em que consiste a variável alunos.
b) Escreva código que imprima o nome e o número de todos os
alunos.
c) Escreva código que atribua 20 à terceira nota do décimo
aluno.
5. [2.0] Suponha que tem definida a seguinte função:
void f(int a, int *b)
{
a = *b = 10;
}
Diga o que imprime o seguinte fragmento de programa:
int x = 3, y = 7, a = 11, *b = &y
f(x, &y);
printf("%d, %d, %d, %d\n", x, y, a, *b);
6. [2,0] O que imprime a chamada func(15)?
int func(int a)
{
printf("%d\n", a);
return a <= 1 ? 0 : func(a / 2);
}
7. [2,0] 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[5];
*p++ = 10;
(*p)++;
p = matriz;
for(i = 0; i < 8; i++)
printf("%d\n", p[i]);
return EXIT_SUCCESS;
}
8. [3,0] Suponha os seguintes tipos para utilização em listas duplamente ligadas:
typedef struct LelementoStr
{
void *dados; /* ponteiro generico para os dados. */
struct LelementoStr *anterior, *seguinte;
} Lelemento;
typedef struct
{
unsigned long numero; /* numero de elementos na lista. */
Lelemento *inicio, *corrente;
} Lista;
Escreva uma função void *Lremove(Lista *l) que
remova da lista l o elemento apontado pelo campo corrente
da estrutura Lista, ou seja L->corrente,
e que devolva os seus dados. Uma lista vazia tem sempre l->inicio
com valor NULL.
9. [3,0] Diga qual o resultado da execução do seguinte programa:
/* Ficheiro fich1.c */ /* Ficheiro fich2.c */
#include <stdio.h> extern int a, b;
#include <stdlib.h> static int c = 5;
extern void g(int); void g(int val)
{
int a, b = 11; a = val + c;
b = val * 2;
static int c = 2; }
void f(void)
{
static int a = 0;
b = a++;
}
int main(void)
{
printf("%d %d %d\n",
a, b, c);
f();
f();
g(33);
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 |
||||