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 |
![]() |