Você está na página 1de 7

LEEC – Licenciatura em Engenharia Electrotécnica e de Computadores

Programação (2021/2022 – P3, 2º Sem)


Nº ____________ Nome ________________________________________________________ Sala: _________

PROGRAMAÇÃO (RESOLUÇÃO)
Exame (1ª Época)
Ano Lectivo 2021/2022 Data: 2 de Maio de 2022
Duração Exame: 2h00

INFORMAÇÕES GERAIS

• Identifique todas as folhas do enunciado com nome, nº de aluno e sala.


• Mantenha na secretária apenas a sua identificação e uma caneta (azul ou preta), não são
aceites testes ou exames realizados a lápis.
• Responda no espaço delimitado a seguir a cada questão.
• Utilize o verso da página, onde se encontra a pergunta, para rascunho ou para espaço adicional.
• A não entrega do exame tem o mesmo significado da não comparência ao exame.

ESTRUTURA DO EXAME

Grupo Exame Tipologia Cotação


Exame
I x Escolha múltipla. 5 Val.
II x Desenvolver código. 5 Val.
III x Escolha múltipla. 5 Val.
IV x Desenvolver código. 5 Val.

1 de 14
LEEC – Licenciatura em Engenharia Electrotécnica e de Computadores
Programação (2021/2022 – P3, 2º Sem)
Nº ____________ Nome ________________________________________________________ Sala: _________

2 de 14
LEEC – Licenciatura em Engenharia Electrotécnica e de Computadores
Programação (2021/2022 – P3, 2º Sem)
Nº ____________ Nome ________________________________________________________ Sala: _________

GRUPO I
[5 Val.] Assinale a resposta correta em cada alínea (com um x sobre a opção escolhida) e note que uma
resposta errada confere uma penalização de 1/3 da cotação dessa alínea, as alíneas têm todas a mesma
cotação.
1. Seleccione o único identificador de variável inválido:
A. TABULEIRO 1 C67D B
B. tabuleiro2 D. tabuleiro_2
2. O resultado da operação 132%10 é:
A. 1320 C. 13
B. 13.2 2
3. Sabendo que x = 4 e y = 8, qual a expressão para obter o valor z = 45?
. ""F "" C. z = ++x * y++;
B. z = x++ * ++y; D. z = x++ * y++;
4. Assuma que c é um char inicializado com o caractere 'D'. Após a instrução "c = c -'A'+'a'+1;", o
caractere guardado em c será:
A. 'E' C. 'D'
0 D. '1'
5. Assuma que x é um inteiro, inicializado com x = 64. Após a instrução "z = x << 1;", o valor de z será:
A. 32 C. 4
B. 6 2
6. Assuma que x e y são inteiros, inicializados com x = 200 e y = 4. Após a instrução "x /= 20 * y;", o
valor de x será:
A. 40 1
B. 80 D. 10
7. Indique qual a declaração correta para um apontador, ptr:
8=6B ACB C. char ptr;
B. char ptr*; D. char ptr[0];
8. Assumindo que ptr_int é um apontador para int, sizeof(int)==4 bytes, está a usar uma arquitectura
de 64 bits e ptr_int foi inicializado com o valor hexadecimal bf11a100, depois de executada a
instrução "ptr_int++;", ptr_int fica com o valor hexadecimal:
A. bf11a100 1 7; 6
B. bf11a101 D. bf11a108
9. Se pretender imprimir um float flt com o valor 1234.5678 com recurso a "printf("%6.2f",flt);" o
resultado será:
A. 1234.56 1 ' +
B. 1234.00 D. 34.5678
10. Suponha que uma variável i do tipo inteiro foi inicializada com 54 e ao executar a instrução
"scanf("%3d", &i);" insere o valor 12.34, a variável i assume o valor:
A. 54 C. 123
0 D. 0
3 de 14
MEEC – Mestrado Integrado em Engenharia Electrotécnica e de Computadores
Programação (2020/2021 – 2º Sem)
Nº ____________ Nome ________________________________________________________ Sala: _________

11. Indique qual a declaração correcta para um vector de 10 cadeias de 20 caracteres.


8=6B 8C4 54 5 C. char vect[20][10];
B. char **vect[10*20]; D. char vect[10*20];
12. O valor inteiro (int) 1023 tem a representação na memória (4 bytes): (Os valores de cada byte estão
em hexadecimal, o byte mais significativo está à esquerda e o byte menos significativo à direita)
A. 01 00 02 03 C. 00 03 0F 0F
B. 00 00 10 23 2 ' 33
13. Considere a seguinte declaração:
int main(int argc, char *argv[])
e a seguinte invocação do programa na linha de comando:
$ ./wargame -j 0 -t 15x24
Qual das seguintes afirmações é verdadeira?
A. argc vale 4 C. argc vale 6
0 6B 8 6 D. argc vale 7
14. Considere a seguinte declaração:
int main(int argc, char *argv[])
e a seguinte invocação do programa na linha de comando:
$ ./wargame -j 0 -t 15x24
Qual das seguintes afirmações é verdadeira?
A. argv[2] vale "-j" C. argv[2] vale "-t"
0 6B 4 5 6 D. argv[2] vale "-j 0 -t 15x24"
15. O que é escrito no écran com o seguinte código?
int *i_ptr, i_vect[] = {0,10,20,30,40,50,60,70,80,90};
i_ptr= &i_vect[2];
printf("%d",*(i_ptr+1));
A. 3 1 '
B. 21 D. 31
16. Considere a seguinte função:
int funcao() {
static int i=10;
i--;
return i;}
Quanto é retornado na segunda invocação da função?
A. 10 1
B. 9 D. 7

4 de 14
MEEC – Mestrado Integrado em Engenharia Electrotécnica e de Computadores
Programação (2020/2021 – 2º Sem)
Nº ____________ Nome ________________________________________________________ Sala: _________

17. O que é escrito pelo seguinte código:


int i=1;
while (i<5)
printf("%d", i++);
' C. 2345
B. 12345 D. 123
18. O que é escrito pelo seguinte código:
int n, w=8;
do {
for(n=0 ; n<2 ; n++)
printf("%d", w);
w--;
} while(w!=3);
A. 887766554433 C. 87654
0 ++** D. 76543
19. O que é escrito pelo seguinte código:
int sub(int *x, int *y) {
*x = *x - *y;
return(*x);}

int main() {
int x=5, y=2;
int z=sub(&x, &y);
printf("%d %d %d\n", x, y, z);
return(0);}
A. 5 2 3 C. 3 3 2
B. 2 3 5 2 ' '
20. Considere a função:
void fun(char init, char end) {
if (init > end)
return;
printf("%c ", init);
if (init != end)
fun(init+1, end);}
A chamada à função fun('a','d'); escreve o seguinte resultado no stdout:
678 C. d c b a
B. b c d D. c b a

5 de 14
MEEC – Mestrado Integrado em Engenharia Electrotécnica e de Computadores
Programação (2020/2021 – 2º Sem)
Nº ____________ Nome ________________________________________________________ Sala: _________
GRUPO II
1. [2.5 Val.] Escreva uma função recursiva para registar o número de ocorrências de cada valor
produzido (entenda-se a soma dos pontos dos vários dados) em n lançamentos de 2 dados de 6 faces
(com valores de 1 a 6). O número de ocorrências deve ser registado no vector hist. O número de
ocorrências do valor i deve ser registado na posição do vector de índice i. O vector tem a dimensão
adequada e está inicializado a zeros aquando da invocação da função. O protótipo da função é:

void dice(int *hist, int n)


{
if (n == 0)
return;
else
{
hist[rand()%6+rand()%6+2]++;
dice(hist,n-1);
}
}

6 de 14
MEEC – Mestrado Integrado em Engenharia Electrotécnica e de Computadores
Programação (2020/2021 – 2º Sem)
Nº ____________ Nome ________________________________________________________ Sala: _________
1. [2.5 Val.] Escreva uma função para verificar se 2 matrizes (A e B) são inversas, ou seja, se o seu
produto corresponde à matriz identidade. A função recebe como parâmetros a matriz A, o número
de linhas da matriz A, o número de colunas da matriz A, a matriz B, o número de linhas da matriz B,
e o número de colunas da matriz B. A função deve retornar 0 se as matrizes forem inversas e 1 se não
forem inversas e -1 caso não tenham dimensões que permitam realizar a multiplicação. Assuma por
simplicidade que as matrizes estão limitadas à dimensão de 20x20. O protótipo da função é:

int valida_inversa(float A[20][20], int linA, int colA, float B[20][20], int linB, int colB){
int i, j, k;
float soma;

if (colA != linB)
return -1;
if (colB != linA)
return 1;
for(i=0; i<linA; i++)
for(j=0; j<colB; j++) {
soma = 0;
for(k=0; k<colA; k++)
soma += A[i][k]*B[k][j];
if ((i==j) && (soma != 1))
return 1;
else if ((i!=j) && (soma != 0))
return 1;
}
return 0;
}

7 de 14

Você também pode gostar