Baixe o app para aproveitar ainda mais
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
Compartilhar