Prévia do material em texto
Exercícios - Questões Objetivas
Apresentação 08 – Matrizes
1) Qual dos fragmentos de código abaixo preenche todos os elementos da matriz
corretamente?
a)
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
printf("\nElemento [%d][%d]: ", i+1, j+1);
scanf("%d", &mat[i][j]);
}
b)
for(i = 0; i < 3; i++)
{
scanf("%d", &mat[i][j]);
for(j = 0; j < 3; j++)
printf("\nElemento [%d][%d]: ", i+1, j+1);
}
c)
for(i = 0; i < 3; i++)
{
for(i = 0; i < 3; i++)
{
printf("\nElemento [%d][%d]: ", i+1, i+1);
scanf("%d", &mat[i][i]);
}
}
d)
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
printf("\nElemento [%d][%d]: ", i+1, j+1);
scanf("%d", &mat[i][j]);
}
}
e)
for(i = 0; i < 3; i++)
{
printf("\nElemento [%d][%d]: ", i+1, i+1);
scanf("%d", &mat[i][i]);
}
2) Qual a função do programa abaixo?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int mat[5][5], i, j, soma = 0;
printf("Digite os elementos da matriz:\n");
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
printf("\nElemento [%d][%d]: ", i+1, j+1);
scanf("%d", &mat[i][j]);
}
}
for(i = 0; i < 5; i++)
{
soma = soma + mat[i][i];
}
printf("Soma = %d", soma);
return 0;
}
a) Imprimir a soma de todos os elementos da matriz.
b) Imprimir a soma dos elementos da primeira coluna.
c) Imprimir a soma dos elementos da diagonal principal.
d) Imprimir a matriz.
e) Imprimir a soma dos elementos da diagonal secundária.
3) Explique a função do programa abaixo:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int mat[3][3], i, j, valor1, valor2;
printf("Digite os elementos da matriz:\n");
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
printf("\nElemento [%d][%d]: ", i+1, j+1);
scanf("%d", &mat[i][j]);
}
}
valor1 = mat[0][0];
valor2 = mat[0][0];
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(valor1 > mat[i][j])
{
valor1 = mat[i][j];
}
if(valor2 < mat[i][j])
{
valor2 = mat[i][j];
}
}
}
printf("Resultado = %d", (valor2 - valor1));
return 0;
}
a) Imprimir a diferença entre os dois primeiros elementos.
b) Imprimir a diferença entre o maior e o menor elemento.
c) Imprimir o maior e o menor elemento.
d) Imprimir a diferença entre o menor e o maior elemento.
e) Imprimir a diferença entre o primeiro e o último elemento.
4) Tendo como entrada os valores na seguinte ordem: {1, 3, 9, 6, -23, 54, 2, 7, 16}, mostre qual
a saída do programa e qual a sua função:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int mat[3][3], i, j, cont = 0;
printf("Digite os elementos da matriz:\n");
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
printf("\nElemento [%d][%d]: ", i+1, j+1);
scanf("%d", &mat[i][j]);
}
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(mat[i][j] % 2 == 0)
{
cont++;
}
}
}
printf("Contador = %d", cont);
return 0;
}
a) 4. Imprimir a quantidade de números ímpares.
b) 3. Imprimir todos os números pares.
c) 9. Imprimir o número de elementos da matriz.
d) 1. Imprimir a quantidade de números negativos.
e) 3. Imprimir quantidade de números pares.
5) Mostre a saída e a finalidade do seguinte programa, sendo n a ordem da matriz quadrada:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int mat[3][3] = {{1, 5, 7}, {9, 8, 0}, {1, 10, 16}}, i, j, n = 3, soma = 0;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(i + j == n - 1)
{
soma = soma + mat[i][j];
}
}
}
printf("Soma = %d", soma);
return 0;
}
a) 25. Imprimir a soma dos elementos da diagonal principal.
b) 13. Imprimir a soma dos elementos da primeira linha.
c) 16. Imprimir a soma dos elementos da diagonal secundária.
d) 11. Imprimir a soma dos elementos da primeira coluna.
e) 23. Imprimir a soma dos elementos da última coluna.
6) Explique qual a função do programa abaixo:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int mat[3][3], i, j;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(i == j)
{
mat[i][j] = 1;
}
else
{
mat[i][j] = 0;
}
}
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(i == 0)
{
printf("%d ", mat[i][j]);
}
}
}
return 0;
}
a) Criar uma matriz identidade e imprimir os elementos da primeira linha.
b) Criar uma matriz triangular superior e imprimir os elementos da primeira coluna.
c) Criar uma matriz identidade e imprimir os elementos da diagonal principal.
d) Criar uma matriz triangular inferior e imprimir os elementos da primeira linha.
e) Criar uma matriz nula e imprimir todos os elementos.
7) Tendo como entrada os valores na seguinte ordem: { 56, 78, 65, 48, 76, 50, 48, 74, 59},
mostre qual será a saída correta:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j;
float media, mat[3][3];
for(i = 0; i < 3; i++)
{
printf("\nNotas aluno %d\n", i+1);
for(j = 0; j < 3; j++)
{
printf("Nota %d: ", j+1);
scanf("%f", &mat[i][j]);
}
}
for(i = 0; i < 3; i++)
{
media = 0;
printf("\nAluno %d: ", i+1);
for(j = 0; j < 3; j++)
{
media = media + mat[i][j];
}
media = media/3;
if(media >= 60 && media <= 100)
{
printf("Aprovado.");
}
else
{
if(media >= 0 && media < 60)
{
printf("Reprovado.");
}
}
}
return 0;
}
a) Reprovado, Reprovado, Aprovado.
b) Aprovado, Reprovado, Aprovado.
c) Aprovado, Aprovado, Aprovado.
d) Reprovado, Aprovado, Aprovado.
e) Reprovado, Aprovado, Reprovado.
8) Mostre a(s) linha(s) que apresente(m) erro(s) de sintaxe:
1 real soma_elementos( real m )
2 {
3 inteiro i, j;
4 real soma ← 0;
5 para ( i ← 0; i < 2; i ← i + 1) faça
6 {
7 para (j ← 0; j < 3; ← j + 1) faça
8 {
9 soma ← soma + m[i][j];
10 }
11 }
12 retorne soma;
13 }
14 principal
15 {
16 real mat[2][3] ← {{2.1,0,1.3},{5.0,1.5,6.3}};
17 real soma ← soma_elementos(mat[2][3]);
18 imprima ("A soma dos elementos da matriz foi ", soma);
19 }
a) Linhas 1 e 17.
b) Linha 5.
c) Linhas 9 e 16.
d) Linhas 16.
e) Linhas 7 e 9.
9) Quais serão os novos valores dos elementos da matriz no código abaixo?
principal
{
inteiro mat[3][3] ← {{2, 4, 5},{7, 9, 3}, {8, 11, 1}}, i, j;
para ( i ← 0; i < 3; i ← i + 1) faça
{
para (j ← 0; j < 3; ← j + 1) faça
{
se((i + j) < 2) então
{
mat[i][j] ← mat[i][j] – 1;
}
}
}
}
a) mat[3][3] ← {{2, 4, 5},{7, 9, 2}, {8, 10, 0}}
b) mat[3][3] ← {{2, 4, 5},{7, 9, 3}, {8, 11, 1}}
c) mat[3][3] ← {{2, 3, 5},{6, 9, 3}, {8, 11, 1}}
d) mat[3][3]← {{1, 3, 5},{6, 9, 3}, {8, 11, 1}}
e) mat[3][3] ← {{1, 3, 5},{8, 9, 3}, {8, 12, 1}}
10) Se for inicializada a seguinte matriz: {{3, 7, 14},{2, 6, 15}, {17, 1, 9}}, mostre qual o valor
que a função irá retornar:
inteiro soma( real m[3][3] )
{
inteiro i, j, soma ← 0;
para ( i ← 0; i < 2; i ← i + 1) faça
{
para (j ← 0; j < 3; ← j + 1) faça
{
se(i = 1 ou j = 1) então
{
soma ← soma + m[i][j];
}
}
}
retorne soma;
}
a) 31.
b) 24.
c) 22.
d) 38.
e) 13.
Apresentação 09 – Estruturas de Dados Heterogêneas
1) Indica em qual linha há um erro no código abaixo:
1 #include <stdio.h>
2 typedef struct saluno
3 {
4 char nome[120];
5 int matricula;
6 float nota;
7 tipo_endereco endereco;
8 };
9 typedef struct sendereco
10 {
11 char rua[120];
12 int complemento;
13 char bairro[120];
14 }tipo_endereco;
15 int main()
16 {
17 aluno p1;
18 gets(p1.nome);
19 scanf(“%d”,&p1.matricula);
20 scanf(“%f”,&p1.nota);
21 gets(p1.endereco.rua);
22 scanf(“%d”,&p1.endereco.complemento);
23 gets(p1.endereco.bairro);
24 return 0;
25 }
a) 1.
b) 5.
c) 8.
d) 16.
e) 22.
2) Considerando o programa abaixo, qual estrutura deve ser inserida na linha 6?
1 #include <stdio.h>
2 #include <string.h>
3
4 int main()
5 {
6 <estrutura>
7 dados d[3];
8 int i,j;
9 for(i=0;i<3;i++)
10 {
11 printf("Nome\n");
12 scanf("%s",d[i].nome);
13 printf("Rua\n");
14 scanf("%s",d[i].rua);
15 printf("Telefone\n");
16 scanf("%d",&d[i].telefone);
17 }
18 for(i=0;i<3;i++)
19 {
20 printf("Pessoas que moram na mesma rua de %s\n",d[i].nome);
21 for(j=0;j<3;j++)
22 {
23 if((strcmp(d[i].rua,d[j].rua)==0)&&(!(strcmp(d[i].nome,d[j].nome))==0))
24 {
25 printf("%s\n",d[j].nome);
26 }
27 }
28 }
29 system("pause");
30 return 0;
31 }
a)
struct sdados
{
char nome,rua;
int telefone;
};
b)
struct sdados
{
char nome[20],rua[20];
int telefone;
};
c)
typedef struct sdados
{
char nome[20],rua[20];
float telefone;
}dados;
d)
typedef struct sdados
{
char nome[20],rua[20];
int telefone;
}dados;
e) N.D.A.
3) O que será gerado pelo código abaixo?
#include <stdlib.h>
struct Aluno
{
int matricula;
char nome[50];
char end[50];
};
int main()
{
struct Aluno a1,a2;
printf("Nome: ");
gets(a1.nome);
printf("Endereco: ");
gets(a1.end);
printf("Matricula: ");
scanf("%d",&a1.matricula);
a2=a1;
printf("Nome: %s\n",a2.nome);
printf("Endereco: %s\n",a2.end);
printf("Matricula: %d\n",a2.matricula);
system("pause");
return 0;
}
a) O meu nome, endereço e matrícula.
b) “Nome:%s\n Endereco: %s\n Matricula: %d\n”.
c) Os dados digitados pelo usuário e inseridos na variável a1.
d) Erro.
e) N.D.A.
4) Utilizando a estrutura abaixo indique qual das funções retornaria a diferença de dias duas
instâncias dessa estrutura. Considere 1 mês = 30 dias e 1 ano = 365 dias.
typedef struct sdata
{
int dia,mes,ano;
}data;
a)
function dif(data d1,data d2)
{
int dias1,dias2;
dias1= d1.dia + d1.mes*30 + d1.ano*365;
dias2= d2.dia + d2.mes*30 + d2.ano*365;
return dias1-dias2;
}
b)
int dif(data d1,data d2)
{
int dias1,dias2;
dias1= d1.dia + d1.mes*30 + d1.ano*365;
dias2= d2.dia + d2.mes*30 + d2.ano*365;
dias1-dias2;
}
c)
int dif(data d1,data d2)
{
int dias1,dias2
dias1= d1.dia + d1.mes*30 + d1.ano*365
dias2= d2.dia + d2.mes*30 + d2.ano*365
return dias1-dias2
}
d)
function dif(data d1,data d2)
{
int dias1,dias2;
dias1= d1.dia + d1.mes*30 + d1.ano*365;
dias2= d2.dia + d2.mes*30 + d2.ano*365;
return dias1-dias2;
}
e) N.D.A.
5) Considerando a função distância abaixo, qual estrutura pode corresponder à estrutura
Cidades.
inteiro distancia (Cidades c1, Cidades c2)
{
retorne (raizQuadrada(elevaQuadrado(c1.coordenada.x-c.coordenada.x) +
elevaQuadrado(c1.coordenada.y-c.coordenada.y)));
}
a)
estrutura cidades
{
caracter nome[30];
real coordenadas;
inteiro habitantes;
};
b)
estrutura cidades
{
caracter nome[30];
coord coordenadas;
inteiro habitantes;
};
estrutura coord
{
inteiro x,y;
c)
estrutura cidades
{
caracter nome[30];
real coordenadas;
inteiro habitantes;
};
estrutura coord
{
inteiro x,y;
};
d)
estrutura cidades
{
caracter nome[30];
coord coordenadas;
inteiro habitantes;
};
f) N.D.A.
Apresentação 10 – Recursividade
1) O que é representado pelas expressões a seguir?
s = 0, se n = 0;
s = 1, se n = 1;
s = n*(n+1)/2, se n > 1;
- Obs.: n >= 0.
a) soma de ‘n’ elementos.
b) soma dos ‘n’ primeiros números naturais.
c) os primeiros ‘n’ números naturais.
d) todas as anteriores.
e) nenhuma das anteriores.
2) Qual função recursiva é similar ao fragmento iterativo a seguir?
for(i=0 ; i<tam ; i++) //tam é o tamanho do vetor
{
Soma = soma + vet[i];
}
a)
int func_rec(int vet[], int tam)
{
if(tam >= 0)
return vet[0] + func_rec(vet, tam - 1);
}
b)
int func_rec(int vet[], int tam)
{
if(tam == 0)
return 1;
else
return vet[tam] + func_rec(vet, tam + 1);
}
c)
int func_rec(int vet[], int tam)
{
if(tam >= 0)
return vet[tam] + func_rec(vet, tam - 1);
}
d)
int func_rec(int vet[], int tam)
{
if(tam != 0)
return vet[tam] + func_rec(vet, tam + 1);
}
e)
int func_rec(int vet[], int tam)
{
if(tam >= 0)
return vet[tam] + func_rec(vet, tam);
}
3) Qual é a funcionalidade do código a seguir?
int func_rec (int n)
{
if(n == 1)
return 1;
else
return (n * func_rec(n - 1));
}
a) somatório
b) produtório
c) potenciação
d) fatorial
e) radiciação
4) Qual das funções a seguir calculará corretamente o enésimo termo da sequência de
Fibonacci?
Obs.: Sequência (ou série) de Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...
a)
inteiro fib(inteiro num)
{
se(num <= 0) então
imprime(“Valor digitado é inválido para posição em fibonacci. ”);
senão
{
se(num=1 ou num=2) então
retorne 0;
senão
retorne fib(num-1) + fib(num-2);
}
}
b)
inteiro fib(inteiro num)
{
se(num <= 0) então
imprime(“Valor digitado é inválido para posição em fibonacci. ”);
senão
{
se(num=1) então
retorne 1;
senão
retorne fib(num-1) + fib(num-2);
}
}
c)
inteiro fib(inteiro num)
{
se(num <= 0) então
imprime(“Valor digitado é inválido para posição em fibonacci. ”);
senão
{
se(num=2 ou num=3) então
retorne 1;
senão
retorne fib(num-1) + fib(num-2);
}
}
d)
inteiro fib(inteiro num)
{
se(num <= 0) então
imprime(“Valor digitado é inválido para posição em fibonacci. ”);
senão
{
se(num=1 ou num=2) então
retorne1;
senão
retorne fib(num-1) + fib(num-2);
}
}
e)
inteiro fib(inteiro num)
{
se(num <= 0) então
imprime(“Valor digitado é inválido para posição em fibonacci. ”);
senão
{
se(num=1 ou num=2) então
retorne 1;
senão
retorne fib(num) + fib(num-1);
}
}
5) O que será impresso no algoritmo a seguir?
//Obs.: A variável “indice” recebe a última posição do vetor, no início.
int func_rec(int vet[], int indice)
{
int x;
if(tam == 0)
return vet[0];
else
{
x = func_rec(vet,tam-1);
if(x < vet[n])
return vet[n];
else
return x;
}
}
int main()
{
int vet[6] = {13, -8, 4, 9, -6, 8};
printf("%d", func_rec(vet,5));
return 0;
}
a) 13, -8, 4, 9, -6, 8.
b) -8.
c) 8, -6, 9, 4, -8, 13.
d) “nada será impresso”.
e) 13.
6) O que será impresso no código a seguir, considerando como entradas x = 8 e y = 3:
inteiro func_rec(inteiro x, inteiro y)
{
se(x = y) então
imprima(x);
senão
{
func_rec(x-1,y);
imprima(x);
}
}
a) 3, 4, 5, 6, 7, 8.
b) 4, 5, 6, 7, 8.
c) 7, 6, 5, 4, 3.
d) 3, 4, 5, 6, 7.
e) 8, 7, 6, 5, 4, 3.
7) O que será impresso no código a seguir, considerando como entradas x = 8 e y = 3:
inteiro func_rec(inteiro x, inteiro y)
{
se(x = y) então
imprima(x);
senão
{
imprima(x);
func_rec(x-1,y);
}
}
a) 3, 4, 5, 6, 7, 8.
b) 4, 5, 6, 7, 8.
c) 7, 6, 5, 4, 3.
d) 3, 4, 5, 6, 7.
e) 8, 7, 6, 5, 4, 3.
8) Para a função abaixo, indique em quais linhas estão definidas as bases da recursão:
1 int mdc (int n, int m)
2 {
3 if((n>=m) && ((n%m)==0))
4 return(m);
5 else
6 {
7 if (n<m)
8 return (mdc(m,n));
9 else
10 return (mdc(m,n%m));
11 }
12 }
a) linhas 5 e 9.
b) linhas 7, 8, 9 e 10.
c) linhas 3 e 4.
d) linhas 3 e 7.
e) linhas 8 e 10.
9) Quais devem ser as linhas de código a serem colocadas nas lacunas a seguir para que a
função retorne o valor correto? A função deve retornar a soma dos elementos pares entre os 2
números digitados pelo usuário, sendo que o primeiro (a) deve ser menor que o segundo (b).
obs.: Se o usuário digitar 4 e 6, por exemplo, deve retornar 4 + 6 = 10. Se ele digitar 4 e 4,
deve retornar 4.. Se ele digitar 3 e 5, também deve retornar 4.
int soma_pares(int a, int b)
{
if(a > b)
return 0;
else
{
if(a == b)
return a;
else
{
if(a % 2 == 0)
??????????????????????;
else
??????????????????????;
}
}
}
a)
soma_pares(a+2, b);
return soma_pares(a+1, b);
b)
return a + soma_pares(a+1, b);
soma_pares(a+2, b);
c)
return a + soma_pares(a, b+2);
return a + soma_pares(a, b+1);
d)
return soma_pares(a+2, b);
return soma_pares(a+1, b);
e)
return a + soma_pares(a+2, b);
soma_pares(a+1, b);
10) O que a função recursiva a seguir faz?
// obs.: a variável n, inicialmente, recebe o maior índice possível do vetor: “tam-1”
int x(int a[], int n)
{
int aux;
if(n == 0)
return 0;
else
{
if(a[n] > a[n-1])
{
aux = a[n];
a[n] = a[n-1];
a[n-1] = aux;
}
x(a,n-1);
}
}
a) Ordena o vetor de forma crescente.
b) Ordena o vetor de forma decrescente.
c) Puxa o menor elemento do vetor pro índice ‘0’.
d) Puxa o maior elemento do vetor pro índice ‘0’.
e) Puxa o menor elemento do vetor pro último índice.
Gabarito
Apresentação 08 – Matrizes
1. D
2. C
3. B
4. E
5. C
6. A
7. B
8. A
9. D
10. A
Apresentação 09 – Estruturas de Dados Heterogêneas
1. C
2. D
3. C
4. D
5. B
Apresentação 10 – Recursividade
1. B
2. C
3. D
4. D
5. E
6. A
7. E
8. C
9. E
10. D
Equipe de alunos responsável pelo desenvolvimento desta lista:
• DIEGO RAMALHO DE OLIVEIRA (Coordenador do grupo)
• RAMON ABRITTA AGUIAR SANTOS
• VITOR MENDES MANSUR
• VICTOR CALIXTO DE SOUZA
• GÉFERSON FELIPE DE SOUZA
• MARIA RIBEIRO DAIBERT
• RENATA MENDES ROSA DA SILVA