Buscar

Aula 2 - Exercícios - Estrutura de dados

Prévia do material em texto

ESTRUTURA DE DADOS
 2a aula
 Lupa 
V ídeo
 
P PT
 
MP3
 
 
Exercício: CCT0753_EX_A2_201708216677_V3 06/09/2018 14:50:28 (Finalizada)
Aluno(a): PAULO CESAR ALVES SOARES 2018.3 EAD
Disciplina: CCT0753 - ESTRUTURA DE DADOS 201708216677
 
 
 1a Questão
Considere a função abaixo:
int func (int a, int& b){
 a = b - a;
 b = a * 2;
 a = b * 2;
 return a;
}
Considere o seguinte código na função main:
 int x = 2, y = 3, z;
 z = func (x, y);
 cout << x << "; " << y << "; " << z;
O que será impresso?
2; 2; 1
 2; 2; 4
1; 3; 1
1; 2; 4
4; 2; 4
 
 
Explicação:
a recebeu o valor de x que era 2
b recebeu 3, a partir de y, que foi passado por referência.
 
Executando a função, passo a passo, tem-se :
a recebeu 1
 b recebeu 2
 a recebeu um novo valor, que é 4.
Daí a função retorna o valor de a, que é 4. 
Voltando para a main temos que z recebeu o retorno da função que é 4, x não se alterou, valendo 2 e y recebeu 4, devido a alteração na função no
parâmetro b, passado por referência.
 Daí, na tela será impresso : 2; 2; 4
 
 
 
 2a Questão
Considere o trecho de um programa escrito em C++.
int func1 (int vtx[], int tam) {
 int soma=0;
 for (int i=0 ; i < tam; i++) {
 if (i % 2 !=0)
 soma += vtx[i]; 
 }
 return soma;
}
int main() {
 int vt[5] = {10,20,30,40,50};
 cout << func1 (vt,5);
}
Marque a opção correta que mostra o que é impresso na tela.
 50
30
20
40
 60
 
 
Explicação:
int func1 (int vtx[], int tam) {
 int soma=0; //inicializa soma com zero.
 for (int i=0 ; i < tam; i++) {
 if (i % 2 !=0) //testa se i é ímpar. Se for, acumula na soma o valor de vtx[i]
 soma += vtx[i]; 
 }
 return soma;
}
 
Fazendo um teste de mesa parcial ...
vetor tam soma i
{10, 20, 30, 40, 50} 5 0 0
 20 1
 2
E continua ... se vê que a função está somando os elementos do vetor que possuem índices ímpares. Logo, serão somados 20 e 40, que dará 60.
A soma 60 é retornada e impressa na main.
 
 
 
 3a Questão
Considere a função abaixo: 
int func (int a, int &b) {
a = b - a;
b = a * 2;
a = b * 2;
return a;
}
Considere também o seguinte trecho de código no main :
int x=2, y=3, z;
z = func (x,y);
cout << x << "; " << y<< "; " << z;
Após a execução do cout, seria impresso:
4; 2; 4
2; 2; 1
1; 2; 4
1; 3; 1
 2; 2; 4
 
 
Explicação:
Começando a execução pela main, temos que x recebe 2 e y recebe 3.
Chamando a função, são passados os valores 2 e 3, respectivamente para a e b. Note que b é passado por referência.
Dentro da função tem-se o seguinte :
a recebe 1, depois b recebe 2 e então, novamente, a é alterado e recebe 4. Daí, o valor de a igual a 4 é retornado para a main e é atribuído a z.
Voltando para a main, temos que x não mudou, ficando igual a 2. Temos ainda que z recebeu 4, o valor retornado pela função e finalmente, y foi
alterado para 2.
Portanto, foi impresso 2;2;4, pois foram impressos os valores de x, y e z, respectivamente.
 
 
 
 4a Questão
Na passagem por ____________________ , o endereço da variável da função chamadora é passado para a função chamada e, dessa forma, o valor
poderá ser alterado, ou não.
caracter
número
valor
void
 referência
 
 
Explicação:
Esse é o conceito de passagem por referência.
 
 
 
 5a Questão
Considere a seguinte função: void dobro(int x) { x = 2 * x; } Qual valor será impresso na tela quando o seguinte programa principal for executado? int
main() { int n; n = 5; dobro(n); cout << n; return 0; }
Haverá um erro de compilação
0
20
10
 5
 
 
 
 6a Questão
Considere a função a seguir e a chamada da mesma efetuada no programa principal abaixo. Indique a opção que contem o que será impresso.
int executar (int x, int &y) {
 x = y * 2;
 y = ++x;
 return x + y;
}
int main () {
int a=2, b=2, c=2;
c = executar (a, b);
cout << a << ", " << b << ", " << c;
}
3, 5, 8
 2, 5, 10
4, 5, 9
 2, 2, 9
3, 2, 8
 
 
Explicação:
Fazendo um teste de mesa, temos o seguinte : 
A execução começa pela main. 
As variáveis a, b e c são iniciadas com 2.
Chama-se a função executar e são passados os valores de a e b, ou seja, 2 e 2.
Ao iniciar a execução da função executar temos que x é passado por valor e y por referência. Iniciando a função temos :
Em x = y * 2; Daí : x recebe 2 * 2, que dá 4
Em y = ++x; Daí : x é incrementado para 5 e depois y recebe 5.
Então, a soma de x + y é retornado. Ou seja, 10 é retornado.
Mas como y é passado por referência, a variável b na chamada da função foi alterada para 5. Nada, no entanto, ocorreu com a na chamada da função,
pois x foi passado por valor.
Ao voltar para main, será impresso 2, 5, 10
Portanto, qualquer outra opção é totalmente inviável.
 
 
 
 
 
 7a Questão
 Assinale a opção CORRETA. O protótipo da função que permitirá calcular o volume de um paralelepípedo com medidas a, b e c de acordo com o
trecho da chamada : cout << "Volume = " << volume(a,b,c);
float volume (float, float);
 float volume (float, float, float);
void volume (float, float, float &);
float volume (float ; float ; float);
void volume (float , float);
 
 
Explicação:
Resposta única.
Pela chamada da função
cout << "Volume = " << volume(a,b,c);
temos que a função retorna um valor, que pelo enunciado, vemos que é do tipo float. Há ainda os valores de a, b e c que são medidas de uma figura
geométrica. Logo, a, b e c são do tipo float.
Como protótipo é uma declaração temos :
tipo de retorno da função seguido do seu nome seguido de parênteses e dentro dos parênteses, temos os tipos das variáveis que estavam na
chamada da função.
Logo : float volume(float, float, float); 
Note a vírgula para separar os tipos e o ponto e vírgula ao final.
 
 
 
 
 8a Questão
 
Diga, para o trecho do programa abaixo, qual a opção que representa a saída em tela. Considere que o programa será compilado sem erros, e irá executar também sem problemas.
void troca (int x, int *y){
 int tmp;
 tmp = *y;
 *y = x;
 x = tmp;
}
int main() {
 int a = 13, b = 10;
 troca( a, &b );
 cout<<"Valores: "<< a<<"\t"<< b<< endl;
 system("pause");
}
Valores: 31 01
Valores: 10 13
Valores: 10 10
 Valores: 13 13
Valores: 13 10
 
 
Explicação:
 
A execução começa pela main. São passados o valor de a, que é 13 e o endereço de b, que vale 10. Em seguida, é chamada a função troca e são
passados o valor de a e o endereço de b. 
Executando a função troca, x recebe 13 e *y recebe 10. Mas ocorre a troca, usando tmp como auxiliar. Então x recebe 10 e *y recebe 13. Ao terminar a
execução da função, voltamos para a main e temos a sem mudanças e b com a mudança ocorrida na função. Note que x é um parâmetro passado por
valor e y é um parÂmetro passado por referência.
Portanto, a ficou 13 e b ficou 13.
Logo, será impresso : Valores: 13 13

Continue navegando

Outros materiais