Buscar

02 Funções

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1a 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; } 
 
 
0 
 5 
 
20 
 10 
 
Haverá um erro de compilação 
 
 
 
 
 2a Questão 
 
 
 
 
 
Auxiliar = 100 Numero1 = 1000 Numero2 = 20 
 Auxiliar = 100 Numero1 = 900 Numero2 = 80 
 
Auxiliar = 101 Numero1 = 900 Numero2 = 20 
 
Auxiliar = 111 Numero1 = 1000 Numero2 = 80 
 
Auxiliar = 100 Numero1 = 900 Numero2 = 20 
 
 
Explicação: 
Acompanhando a execução 
Na função main() é declarada a variável valor e inicializada com 1000. 
Quando na main(), a função mistério é chamada, é passado o endereço da variável valor. Logo, de forma 
bem simples, v seria o nome da variável valor para a função misterio(...) 
Dentro da função misterio(...), foi declarada uma variável local aux com conteúdo 11 
Sendo assim, 
aux = aux - 11; Deixará aux com 100 
v = v - aux ; Deixará v com 900(1000 - 100) 
Como a variável numero foi declarada globalmente, todas as funções poderão acessá-la e, com isso, 
alterar seu valor, 
numero = aux - numero; Deixará numero com 80(100 - 20) 
Dentro da função misterio(...) será exibido Auxiliar = 100 e quando retornar à função main(), serão 
exibidos Numero1 = 900 Numero2 = 80 
Resposta correta: Auxiliar = 100 Numero1 = 900 Numero2 = 80 
 
 
Gabarito 
Coment. 
 
 
 
 
 3a Questão 
 
 
Ao definirmos uma função, podemos afirmar: 
I Toda função tem parâmetros 
II Quando nada retorna, o tipo é void 
III Quando todos os parâmetros são do mesmo tipo, é suficiente usar o tipo uma vez e separar os nomes dos 
parâmetros por vírgulas 
IV Na passagem por valor, o endereço da variável da função chamadora é passado para a função chamada 
Após uma análise das afirmativas acima, escolha a opção correta. 
 
 
Somente I e II estão corretas 
 Somente II está correta 
 
Somente II e III estão corretas 
 
Somente II III e IV estão corretas 
 
Somente II e IV estão corretas 
 
 
Gabarito 
Coment. 
 
 
 
 
 4a 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; 
} 
 
 
 
Haverá um erro de compilação 
 
50 
 
0 
 
10 
 5 
 
 
Gabarito 
Coment. 
 
 
 
 
 5a Questão 
 
 
Em programação podemos utilizar um recurso que modulariza o programa chamado função. 
As funções precisam ser ativadas para que possam ser executadas. Para isso, é necessário 
chamar a função pelo seu nome e enviar, quando necessário, os valores respectivos para os 
parâmetros de entrada. Ao enviar os valores para os parâmetros de entrada, o programa 
pode fazer uma cópia deste valor ou trabalhar em um endereço enviado. Quando se envia o 
endereço estamos ativando a função por meio de: 
 
 
Registro. 
 Ponteiros. 
 
Envio de valor. 
 
Envio de 
inteiro. 
 
Passagem por 
valor. 
 6a Questão 
 
 
Considere a função abaixo: 
void func (int a, int &b) { 
 a++; 
 b = a*2; 
} 
e o seguinte trecho de código na função main : 
int x=2, y=3; 
func (x,y); 
func (y,x); 
cout << x << " ; " << y; 
Após a execução do cout o que será impresso ? 
 
 
2; 12 
 14; 6 
 
2; 6 
 
6; 14 
 
4; 12 
 
 
Explicação: 
 Fazendo um teste de mesa, chegaremos na opção correta. Iniciando a execução pela 
main, temos que x recebe 2 e y recebe 3. 
Em seguida, na 1ª. chamada de func, os valores de x e de y, respectivamente, 2 e 3, 
são passados para a função. 
Executando a função func, que possui o parâmetro a passado por valor e o parâmetro b 
passado por referência (usa &) ... 
void func (int a, int &b) { 
a++; 
b = a*2; 
} 
Temos que a recebeu 2 e b recebeu 3. Daí, a ficará 3 e b receberá 6. 
Assim, ao terminar a função func e retornarmos para a main teremos x sem alteração 
igual a 2 e y com alteração igual a 6. 
Após voltarmos para a main, temos uma nova chamada de func que recebe os valores de 
y e de x, respectivamente, que são 6 e 2. Na 2ª. chamada de func para esses valores, 
teremos que a recebe 6 e y recebe 2. Dentro da função, temos que a é incrementado 
para 7 e que b recebe 7 * 2 que dá 14. Ao terminarmos a execução da função, temos que 
y não sofreu mudança, ficando com o valor 6 e que x mudou para 14. Logo, será 
impresso 14;6 
Logo, as demais opções são incorretas. 
 
 
 
 
 
 7a 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; 
} 
 
 
4, 5, 9 
 
3, 5, 8 
 
2, 2, 9 
 
3, 2, 8 
 2, 5, 10 
 
 
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. 
 
 
 8a Questão 
 
 
Considere os trechos abaixo: 
int valor = 100; 
void eureka (int &z) { 
 int temp = 25; 
 z--; 
 temp = temp - 10; 
 valor = valor - temp; 
 cout << "Auxiliar = " << temp << endl; 
} 
int main() { 
 int R = 1000; 
 eureka(R); 
 cout << "Result = " << R << " Valor = " << valor << endl; 
} 
Assinale a opção correta. 
 
 
Será impresso 
Auxiliar = 15 
Result = 1000 Valor = 85 
sendo que z é um parâmetro passado por valor 
 
 
 
Será impresso 
Auxiliar = 15 
Result = 1000 Valor = 100 
sendo que z é um parâmetro passado por referência 
 
 
 
Será impresso 
Auxiliar = 15 
Result = 1000 Valor = 85 
sendo que z é um parâmetro passado por referência 
 
 
Será impresso 
Auxiliar = 15 
Result = 999 Valor = 85 
sendo que z é um parâmetro passado por valor 
 
 
 Será impresso 
Auxiliar = 15 
Result = 999 Valor = 85 
sendo que z é um parâmetro passado por referência 
 
 
 
 
Explicação: 
Questão objetiva. Só é possível ser marcada a opção indicada no gabarito. 
Vejamos a análise passo a passo do trecho de código.... 
int valor = 100; 
void eureka (int &z) { 
 int temp = 25; 
 z--; 
 temp = temp - 10; 
 valor = valor - temp; 
 cout << "Auxiliar = " << temp << endl; 
} 
int main() { 
 int R = 1000; 
 eureka(R); 
 cout << "Result = " << R << " Valor = " << valor << endl; 
} 
Passo a passo .... 
Temos que valor recebeu 100 e valor é uma variável global. 
Começando a execução pela main, temos que eureka é chamadae o valor 1000 é 
passado. 
Iniciando a execução de eureka temos que : 
 temp (local à eureka) recebe o valor 25, depois o valor 1000 passado é decrementado 
para 999, temp recebe 15, valor recebe 100-15, que dá 85. Daí, o valor de temp é 
impresso, sendo mostrado na tela : Auxiliar = 15. DAí, a função termina e volta-se 
para a main. Lá na main, após a chamada da eureka, temos a seguinte impressão : 
 Result = 999 Valor = 85 
Note que para R valer 999 só foi possível porque z é um parâmetro passado por 
referência.

Outros materiais