Buscar

ESTRUTURA DE DADOS 2º AULA

Prévia do material em texto

1
        Questão
	
	
	Blocos únicos de códigos que realizam diversas tarefas distintas são de difícil manutenção. Portanto, utiliza-se a técnica da modularização de programas, a fim de facilitar a implementação e a manutenção dos programas. Esta técnica tem como principal elemento:
		
	 
	As funções
	
	Os Grafos
	
	Os Vetores
	
	As Filas
	
	As Estruturas de Dados
	Respondido em 20/10/2020 22:14:35
	
	
	 
		2
        Questão
	
	
	Considere a função:
void dobro(int x) {
      x = 10 * x;
}
Qual será o valor impresso na tela quando o programa principal for executado?
int main() {
int n;
n = 5;
dobro(n);
cout << n;
return 0;
}
 
		
	 
	5
	
	10
	
	0
	
	50
	
	Haverá um erro de compilação
	Respondido em 20/10/2020 22:14:41
	
		
	Gabarito
Comentado
	
	
	 
		3
        Questão
	
	
	Considere as seguintes afirmativas :
I) Os vetores em C++, quando passados como parâmetros de funções,  são obrigatoriamente passados "por valor" e não "por referência".
II) Variáveis globais são um recurso adequado para troca de informações entre funções distintas.
III) Caso uma função necessite retornar mais de um valor ao programa que a chamou, deve fazê-lo usando parâmetros passados "por valor".
As afirmativas corretas são:
		
	
	Apenas II
	
	Apenas I
	
	Apenas III
	 
	Nenhuma está correta
	
	Apenas I e II
	Respondido em 20/10/2020 22:17:20
	
Explicação:
Analisando cada afirmativa ...
I .   Falso. Em C++ os vetores passados como parâmetros são sempre passados por referência.
II.  FAlso. Variáveis globais são uma péssima forma de usar recursos, comprometendo principalmente a manutenção do programa.
III.  FAlso.  A função poderá retornar explicitamente um valor com return, mas terá que passar o outro parâmetro por referência e não por valor. Outra forma, será passar todos os parâmetros por referência.
Portanto, não opção correta.
	
	
	 
		4
        Questão
	
	
	No programa abaixo em C++, que sequência de valores serão impressos ? int x; x = 15; if (x > 0) { int x; x = 25; cout << x << endl; } cout << x << endl;
		
	
	15 e 25
	
	0 e 5
	
	25 e 25
	
	15 e 15
	 
	25 e 15
	Respondido em 20/10/2020 22:14:56
	
Explicação:
Analisando passo a passo, temos :
x é declarado e inicializado com 15. Daí, testa-se a condição do if, que é verdadeira. Em seguida, entra-se no bloco do if onde um outro x é declarado, recebe 25 e é impresso. Terminado o bloco do if, o x local ao bloco do if não é mais enxergado. Então, ao executarmos a última linha do cout, que está fora do if, vemos que o valor de  x impresso é 15.
Logo, a resposta correta é 25 e 15
	
	
	 
		5
        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?
		
	
	1; 3; 1
	
	4; 2; 4
	 
	2; 2; 4
	
	1; 2; 4
	
	2; 2; 1
	Respondido em 20/10/2020 22:15:00
	
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
	
	
	 
		6
        Questão
	
	
	Considere o trecho de um programa escrito em C++ : 
long func1 (int n1) {
   int ft=1, i = 1;
   while ( i <= n1) {
         ft *= i;
         i++;
   }
   return ft;
}
main() {
    cout << func1 (5);
}
Marque a opção correta que mostra o que é impresso na tela.
		
	
	24
	
	5
	
	60
	
	1
	 
	120
	Respondido em 20/10/2020 22:15:28
	
Explicação:
Acompanhando passo a passo :
long func1 (int n1) {
   int ft=1, i = 1;
   while ( i <= n1) {
         ft *= i;
         i++;
   }
   return ft;
}
main() {
    cout << func1 (5);
}
Passo a passo :
1) Começando a execução pela main ... func1 é chamada e é passado o valor 5.
2) Entrando na função, temos que n1 recebeu 5, i recebeu 1  e ft recebeu 1.
3) Ainda na função func1 ...   teste do loop ... 1 <= 5 ? Sim.
    Então, ft recebe 1*1, que dá 1 e i passa a valer 2.  Acompanhar na tabela desde o início da execução de func1
	ft
	i
	i <= n1
	1
	1
	1 <= 5 / Sim
	1
	2
	2 <= 5 ? Sim
	2
	3
	3 <= 5 ? sim
	6
	4
	4 <= 5 ? Sim
	24
	5
	 5 <= 5 ? Sim
	120
	6
	6 <= 5 ? FAlso
SErá retornado o valor de ft que é 120.  Volta-se então para a main e o valor 120 é impresso.
	
	
	 
		7
        Questão
	
	
	Considere a função Adivinhe , n  =  4 e que X é formado pela sequência "algoritmo".  Assinale a opção que corretamente mostra o vetor Y ao fim da execução da função  Adivinhe.
void Adivinhe (char X[ ], char Y [ ], int n)  {
    int i, j;
    j = 0;
    for ( i = n; i >= 0; i--)
    {
        Y[j] = X[i];
        j++;
    }
    Y[j] = '\0';
}
		
	
	ogla
	
	algo
	 
	rogla
	
	Ocorre erro, pois a função, que é do tipo void, não retorna o vetor Y.
	
	algor
	Respondido em 20/10/2020 22:15:48
	
Explicação:
Não há outra opção, pois a questão é objetiva. Vejamos passo a passo :
X armazena "algoritmo" e Y será gerado.
	j
	i
	0
	4
	1
	3
	2
	2
	3
	1
	4
	0
	5
	 -1 ... falha o teste i >= 0
A cada rodada do loop temos, considerando os valores de j e i acima, as seguintes atribuições :
Y[0] recebe X[4], que é 'r'
Y[1] recebe X[3], que é 'o'
Y[2] recebe X[2], que é 'g'
Y[3] recebe X[1], que é 'l'
Y[4] recebe X[0], que é 'a'
Y[5] recebe '\0'
Daí, Y será rogla
	
	
	 
		8
        Questão
	
	
	Assinale a opção certa.
 Quando não se escreve o protótipo de uma função ...
		
	
	O programa não funcionará de forma alguma.
	
	A definição da função deverá ser escrita, obrigatoriamente, após o programa principal.
	
	A chamada da função não poderá ser feita em qualquer hipótese.
	
	A chamada da função poderá ser feita em qualquer hipótese.
	 
	É preciso definir a função antes do programa principal.

Continue navegando

Outros materiais