Programação 22/23 S2
Teste
Informações gerais
Regras
- Podem consultar o livro e apenas o livro.
- Se não tiver o livro em formato físico, pode consultar o livro em formato digital.
- No caso de usar o livro em formato digital, o livro é a única janela que pode estar aberta no computador.
- Não podem usar o telemóvel.
- Pode resolver o teste a lápis.
- A resolução do teste é individual.
- Não podem sair da sala durante o teste.
Cotação
- [8 valores] - Parte 1
- Cada pergunta vale 1 valor
- Repostas erradas descontam 25% do seu valor
- Pergunta com 1 resposta, resposta errada desconta 0.25 valores
- Pergunta com 2 respostas, cada resposta errada desconta 0.125 valores
- etc.
- [12 valores] - Parte 2
- [3 valores] - Problema 1
- [5 valores] - Problema 2
- [4 valores] - Problema 3
Parte 1
Pergunta 1
Se quisermos passar um array multidimensional com um número de elementos variável para uma função, quais das seguinte opções são válidas? (2 respostas)
void funcao(int array[][], int n_linhas, int n_colunas);
void funcao(int array[n_linhas][n_colunas], int n_linhas, int n_colunas);
void funcao(int n_linhas, int n_colunas, int array[n_linhas][n_colunas]);
void funcao(int array[][10], int n_linhas);
void funcao(int array[10][], int n_linhas);
- Nenhuma das respostas anteriores.
Pergunta 2
No final da execução do seguinte código, qual é o valor da variável x? (1 resposta)
- 0
- 1
- 2
- 10
- Nenhuma das respostas anteriores.
Pergunta 3
Considera o seguinte programa:
int main() {
int soma;
int array[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
for (int i=0; i<10; i++) {
soma += i;
}
return 0;
}
Escolhe a resposta correcta (1 resposta): a. O valor final de soma
é 0. b. O valor final de soma
é 10. c. Não é possível saber o valor de soma
sem executar o programa. d. O programa não compila porque a variável soma não está inicializada. e. Nenhuma das respostas anteriores.
Pergunta 4
Considera o seguinte programa:
Escolhe a resposta correcta (1 resposta): a. O programa não compila porque a variável i
é redeclarada. b. Os dois ciclos fazem exactamente o mesmo. c. O primeiro ciclo imprime os números de 0 a 9, enquanto o segundo imprime os números de 0 a 10. d. O programa não compila porque o segundo ciclo não tem pós-instrução. e. Nenhuma das respostas anteriores.
Pergunta 5
No final da execução do seguinte código, qual é o valor da variável x? (1 resposta)
void funcao1(int * arg) {
*arg = 1;
}
void funcao42(int arg) {
arg = 42;
}
int main() {
int x = 2;
int *y = &x;
funcao1(&x);
funcao42(*y);
return 0;
}
- 0
- 1
- 2
- 42
- Nenhuma das respostas anteriores.
Pergunta 6
Quais das seguintes formas de imprimir todos os elementos de int array[10]
estão correctas? (2 respostas)
for(int i=0; i<10; i++) printf("%d ", array[i]);
for(int i=0; i<10; i++) printf("%d ", *(array+i));
for(int i=0; i<10; i++) printf("%d ", &(array+i));
for(int i=0; i<10; i++) printf("%d ", &array[i]);
for(int i=0; i<=10; i++) printf("%d ", array[i]);
- Nenhuma das respostas anteriores.
Pergunta 7
Considera o seguinte programa:
int x = 0;
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) printf("x=%d\n", x);
}
int x = 0;
int i;
for (i = 0; i < 10; i+=2) {
printf("x=%d\n", x);
}
Escolhe a resposta correcta (1 resposta): a. Os dois ciclos fazem exactamente o mesmo. b. O primeiro ciclo imprime os números ímpares de 0 a 9, enquanto o segundo imprime os números pares de 0 a 10. c. O primeiro ciclo imprime os números pares de 0 a 10, enquanto o segundo imprime os números ímpares de 0 a 9. d. O programa não compila porque a variável i
é redeclarada. e. Nenhuma das respostas anteriores.
Pergunta 8
Considera o seguinte programa:
typedef struct
{
int x;
int y;
char c; // c=0 inativo, c=1 ativo
} Ponto;
void filter(Ponto * pontos, int n) {
for (int i = 0; i < n; i++)
if (pontos[i].y < pontos[i].x)
pontos[i].c = 0;
}
Escolhe a resposta correcta (1 resposta): a. A função filter não altera o array, porque é passado por valor e não por referência. b. A função filter muda o array de forma a que todos os pontos abaixo da diagonal principal y=x fiquem inactivos. c. A função filter muda o array de forma a que todos os pontos acima da diagonal principal y=x fiquem inactivos. d. A função não faz nada porque o ciclo não tem chavetas { }
. e. Nenhuma das respostas anteriores.
Parte 2
Problema 1
- Considera o seguinte código.
#include <stdio.h>
#include <string.h>
#define MAX_STRINGS 100
char *nomes_proprios[] = {
"Maria", "Joao", "Ana", "Pedro", "Carla", "Jose",
"Margarida", "Miguel", "Sofia", "Ricardo"
};
char *apelidos[] = {
"Silva", "Santos", "Rodrigues", "Costa", "Oliveira",
"Martins", "Ferreira", "Pereira", "Carvalho", "Marques"
};
void create_full_names(int n_strings, char * nomes_proprios[10],
char * apelidos[10], char nomes_completos[n_strings][MAX_STRINGS]) {
for (int i = 0; i < n_strings; i++) {
strcpy(nomes_completos[i], nomes_proprios[i]);
strcat(nomes_completos[i], " ");
strcat(nomes_completos[i], apelidos[10 - i - 1]);
}
}
int main() {
int n = 5;
char nomes_completos[n][MAX_STRINGS];
create_full_names(n, nomes_proprios, apelidos, nomes_completos);
for (int i = 0; i < n; i++)
printf("%s\n", nomes_completos[i]);
return 0;
}
- [1 val] Indica o output do programa na consola.
- [1.5 val] Explica o que o programa está a fazer.
- [0.5 val] Qual é o tamanho máximo que um nome completo pode ter (sem contar com o
\0
)?
Problema 2
Escreve uma função que recebe um array de reais e o seu tamanho e um array de inteiros correspondente aos índices do array de reais. A função deve ordenar os índices de forma a que o array de reais fique ordenado.
Exemplo:
Problema 3
Escreve uma função que recebe 2 matrizes. As matrizes podem ser de qualquer tamanho.
A matriz foi implementada da seguinte forma:
A função efetua a multiplicação das 2 matrizes, e devolve uma terceira matriz com o resultado.
A função tem de verificar se as dimensões das matrizes são compatíveis. Se não forem, a função deve devolver uma matriz com o número de linhas e colunas igual a -1.
Exemplo:
Exemplo de matrizes duas matrizes de dimensões incompatíveis: