Buscar

BD ESTRUTURA DE DADOS Aula 02

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 28 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 28 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 9, do total de 28 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

Prévia do material em texto

Aula 02 
 
 
 1a Questão 
 
 
Considera a FUNÇÃO abaixo: 
 
void inverte(int &x, int &y) 
{ int aux = x; 
x = y; 
y = aux; } 
Quais valores serão impressos na tela quando o seguinte programa principal for executado? 
int main() 
{ int a = 18, b = 28; 
inverte(a, b); 
cout << a <<" e "<< b; 
return 0; } 
 
 
28 e 08 
 28 e 18 
 
18 e 28 
 
08 e 18 
 
18 e 18 
 
 
Explicação: 
Teste de Mesa 
a b x y aux 
18 28 //Na main() 
18 28 18 28 //Quando a função é chamada x, recebe o endereço de a e y, o 
de b. Logo acessam os mesmos endereços 
18 28 18 28 18 //Na função, aux é declarada e inicializada com o valor de x 
18 28 28 28 18 //Na função x = y; Deixará x com valor 28 
18 28 28 18 18 //Na função y = aux; Deixará y com valor 18 
 
Como a função é void, nada retorna e nem precisa porque os valores foram trocados 
pela função misterio(...) que recebeu por passagem por referência. 
 
 
 
 
 2a Questão 
 
 
Blocos únicos de códigos que realizam diversas tarefas distitintas são de dificil manutenção. Portanto, 
utiliza-se a tecnica da modularização de programas, a fim de facilitar a implementação e a manutenção dos 
programas. Esta técnica, também chamada de modularização, tem como principal elemento: 
 
 
As Filas 
 
As Estruturas de Dados 
 
Os Vetores 
 
Os Grafos 
 As funções 
 
 
 
 
 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: 
 
 
1; 2; 4 
 
4; 2; 4 
 2; 2; 4 
 
2; 2; 1 
 
1; 3; 1 
 
 
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 
 
 
Uma função possui um valor de retorno inteiro, recebe por valor um inteiro como primeiro parâmetro e por 
referência um inteiro como segundo parâmetro. Qual das respostas abaixo poderia representar o protótipo 
dessa função: 
 
 int func (int a, int &b); 
 
void func (int a, int &b); 
 
int func (&int, int); 
 
int func (int &a, int b); 
 
void func (int &a, int &b); 
 
 
Gabarito 
Coment. 
 
 
 
 
 5a 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: 13 13 
 Valores: 13 10 
 
Valores: 10 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 
 
 
 
 
 6a Questão 
 
 
#include < iostream > 
 using namespace std; 
void SOMA(float a, int b) { 
 float result = a+b; 
 cout << "A soma de " << a << " com " << b << " é: " << result; 
} 
int main() 
{ 
int a; 
float b; 
a = 10; b = 12.3; 
SOMA(b,a); 
} 
A função SOMA acima possui as seguintes características : 
 
 
Retorna valor. 
 
Retorna valor e não possui parâmetros. 
 Não retorna valor e possui parâmetros. 
 
Retorna valor e possui parâmetros. 
 
Não retorna valor e não possui parâmetros. 
 
 
Explicação: 
A função 
void SOMA(float a, int b) { 
 float result = a+b; 
 cout << "A soma de " << a << " com " << b << " é: " << result; 
} 
tem o tipo de retorno void, o que significa que nenhum valor é retornado. Além disso, a função possui 2 
parâmetros, que são a e b. 
Logo, a resposta certa é Não retorna valor e possui parâmetros. 
 
 
 
 
 7a 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 
 120 
 
1 
 
60 
 
5 
 
 
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. 
 
 
 
 
 8a 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; 
} 
 
 
 
0 
 5 
 
50 
 
Haverá um erro de compilação 
 
10 
 
 
Gabarito 
Coment. 
 
 
 
 
 
 
 
 
 1a Questão 
 
 
 
 
 O programa executa perfeitamente independente da ordem das 
funções já que existem os seus protótipos. 
 O programa não executa corretamente, pois o protótipo da 
função media( ) não apresenta a identificação dos parâmetros, 
mas apenas os tipos dos mesmos. 
 O programa executa perfeitamente, mas não mostra o valor da 
media já que esta função não foi chamada na função main( ). 
 O programa não executa corretamente, pois os protótipos estão 
fora da ordem em que as funções são descritas. 
 O programa não executa corretamente pois as funções devem 
ser descritas antes da função main(), para que o compilador 
consiga reconhecê-las. 
 
 
Gabarito 
Coment. 
 
 
 
 
 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. 
 
 
40 
 
30 
 60 
 
20 
 
50 
 
 
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 
 
 
Para compararmos vetores de char, usaremos a função _____________________ . Para copiarmos o 
conteúdo de um vetor de char nas posições ocupadas por outro vetor de char, usaremos a função 
______________________ . 
 
 
strcmp(); e strlen() ; 
 
strcmp(); e strcmpi (); 
 
strcat(); e strcpy() ; 
 
strcmp(); e strcat(); 
 strcmp(); e strcpy(); 
 
 
Explicação: 
Nâo há outra possíbilidade de resposta. Em cstring estão declaradas as funções da opção correta, que 
fazem exatamente o que foi mencionado no enunciado. 
Ainda a saber : strcat concatena e strlen conta o número de caracteres 
 
 
 
 
 4a 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 = 3; n = n + 2; dobro(n); cout << n; return 
0; } 
 
 
20 
 
0 
 
10 
 
3 
 5 
 
 
Explicação: 
A função não retorna valor, então o valor de "n" não é alterado permanecendo igual a 5. 
 
 
 
 
 5a Questão 
 
 
Funções são instrumentos de modularização de programas, que tem como finalidade tornar o código mais 
legível, isto é mais fácil de entender, evita replicação de instruções e permite o reuso das funções em outros 
programas. Então considere o seguinte código: 
#include< iostream > 
using namespace std; 
 
int main( ) 
{ 
 float a=10.0; 
 float b=4.0; 
 cout < < media(a,b); 
 return 0; 
} 
float media(float x, float y) { return (x+y)/2;} 
 
Marque a alternativa CORRETA: 
 
 
O código não compila, pois os parâmetros usados na chamada da função deveriam ser "x" e "y"; 
porém a chamada se deu com identificadores "a" e "b". 
 
O código compila normalmente e apresenta como resultado o valor 7.0 
 O código não compila, pois a função float media(float x, float y) retorna um valor que seria ser 
armazenado em uma variável do tipo float e só então poderia ser usado o comando cout para exibir 
o resultado. 
 O código não compila, pois há necessidade de se declarar float media(float, float) como protótipo da 
função float media(float x, float y)antes da função principal. 
 
O código compila normalmente, pois como a descrição da função float media(float x, float y)está 
posicionada após a função int main ( ), não há necessidade do uso de protótipos. 
 
 
Explicação: 
Quando uma função é posicionada depois da função main(), o protótipo dela precisa 
estar presente antes da função main(). 
 
 
Gabarito 
Coment. 
 
 
 
 
 6a Questão 
 
 
Informe qual deverá ser a saída do programa abaixo: 
 
#include 
void func(int *x) 
{ 
 do{ 
 cout << *x << " "; 
 (*x)--; 
 }while(*x>0); 
} 
 
main() 
{ 
 int x=5; 
 func(&x); 
 cout << x; 
 system("pause"); 
} 
 
 
5 3 4 2 1 4 
 5 4 3 2 1 0 
 
5 4 3 2 1 6 
 
5 3 4 2 1 0 
 
5 4 3 2 1 5 
 
 
 
 
 7a 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: 
 
 Ponteiros. 
 
Registro. 
 
Envio de valor. 
 
Passagem por valor. 
 
Envio de inteiro. 
 
 
 
 
Gabarito 
Coment. 
 
 
 
 
 8a Questão 
 
 
Considere o trecho de um programa escrito em C++ : 
int func1 (long num) { 
 int n, na=1; 
 while (num / 10 != 0){ 
 na += 1; 
 num /= 10; 
 } 
 return na; 
} 
main() { 
 cout << func1 (132041); 
} 
Marque a opção correta que mostra o que é impresso na tela. 
 
 
2 
 
3 
 
4 
 6 
 
1 
 
 
Explicação: 
Fazendo passo a passo : 
int func1 (long num) { 
 int n, na=1; 
 while (num / 10 != 0){ 
 na += 1; 
 num /= 10; 
 } 
 return na; 
} 
main() { 
 cout << func1 (132041); 
} 
Passos : 
1) Chamada da função passando o valor 132041 
2) Começa a função com num recebendo o valor 132041 
3) na recebe 1 
4) enquanto num/10 é diferente de zero faça ... Vejamos : 132041/10 é diferente de zero então 
 na recebe 2 e num recebe 13204 
5) Volta no teste do loop... 13204 /10 é diferente de zero ? Sim. Então, na recebe 3 e num recebe 1320 
6) Volta no teste do loop... 1320 /10 é diferente de zero ? Sim. Então, na recebe 4 e num recebe 132 
7) Volta no teste do loop... 132 /10 é diferente de zero ? Sim. Então, na recebe 5 e num recebe 13 
8) Volta no teste do loop... 13 /10 é diferente de zero ? Sim. Então, na recebe 6 e num recebe 1 
9) Volta no teste do loop... 1 /10 é diferente de zero ? Não. 
Então, retorna o valor e na que é 6. 
 
 
 
 
 1a Questão 
 
 
Caso uma estrutura homogênea (vetor) seja passada como parâmetro para uma função, então: 
 
 
Haverá um erro de compilação, pois vetores não podem ser parâmetros de funções 
 
Essa passagem pode ser "por valor" ou "por referência" 
 
Todos os valores contidos no vetor são copiados para a função 
 
Essa passagem é "por valor" 
 Essa passagem é "por referência" 
 
 
Explicação: 
Quando o vetor é um parâmetro de uma função ele é sempre passado por referência, não havendo outra 
possibilidade. Não ocorrerá erro, se o vetor for devidamente passado para a função. 
 
 
 
 
 2a Questão 
 
 
Assinale a opção certa. 
 Quando não se escreve o protótipo de uma função ... 
 
 
A definição da função deverá ser escrita, obrigatoriamente, após o programa principal. 
 É preciso definir a função antes do programa principal. 
 
O programa não funcionará de forma alguma. 
 
A chamada da função poderá ser feita em qualquer hipótese. 
 
A chamada da função não poderá ser feita em qualquer hipótese. 
 
 
Gabarito 
Coment. 
 
 
 
 
 3a Questão 
 
 
Considere o trecho de um programa escrito em C++ : 
int func1 (int n1, int n2) { 
 int soma=0; 
 for ( ; n1 < n2 ; n1 += 2) { 
 soma += n1; 
 } 
 return soma; 
} 
main() { 
 cout << func1(1.20); 
} 
Marque a opção correta que mostra o que é impresso na tela. 
 
 
80 
 
102 
 
90 
 
104 
 100 
 
 
Explicação: 
int func1 (int n1, int n2) { 
 int soma=0; 
 for ( ; n1 < n2 ; n1 += 2) {soma += n1; 
 } 
 return soma; 
} 
main() { 
 cout << func1(1,20); 
} 
Fazendo passo a passo : 
n1 n2 soma 
1 20 0 
3 1 
5 4 
7 9 
9 16 
11 25 
13 36 
15 49 
17 64 
19 81 
21 ... Teste dará falso 100 
Retorna o valor 100 que é impresso na main. 
 
 
 
 
 4a 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: 10 13 
 
Valores: 10 10 
 Valores: 13 13 
 
Valores: 31 01 
 Valores: 13 10 
 
 
Explicação: 
Acompanhando passo a passo a execução do trecho dado temos : 
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"); 
} 
A execução começa pela main e os valores 13 e 10 são passados para a função na chamada 
em troca(a,b); 
Ao iniciar a execução em troca, temos que x recebe 13 e y recebe 10. Mas x e y são parâmetros passados 
por valor então, nada ocorrerá com a e b na main. ASsim, após a função terminar sua execução e 
voltarmos para a main temos a seguinte impressão na tela : 
Valores : 13 10 
 
 
 
 
 5a Questão 
 
 
A declaração de variáveis na programação é o ato de reservar um espaço na memória para poder 
armazenar valores de um determinado tipo. Essas variáveis podem ser classificadas como variáveis locais e 
globais. Sendo assim, qual das situações abaixo representa melhor o conceito das variáveis globais. 
 
 
Em duas funções diferentes temos duas variáveis também diferentes com o mesmo nome 
apresentando o mesmo valor. 
 
Se dentro de uma função "mostra" declararmos uma variável 'R' com um determinado valor 
poderemos imprimir esta variável em qualquer outra função do programa mostrando o valor 
atribuído na função "mostra". 
 
Em uma função "resul" tem-se uma variável ali declarada por 'T' que recebe o valor inteiro 5. Ao 
tentar chamar esta variável em outra função é mencionado um warning. 
 Ao modificar o valor da variável 'X' na função "modifica" seu valor modificado poderá ser 
apresentado em qualquer outra função do programa. 
 
Se modificarmos o valor da variável 'Y' na função "soma", e depois imprimirmos na tela esta 
variável em outra função, onde tambem está declarada a variável 'Y', será acusado um erro de 
compilação. 
 
 
Explicação: 
Uma variável é classificada com Global quando for declarada fora de todas as funções, 
significando que poderá ser alterada em qualquer uma delas. 
A resposta correta é : 
Ao modificar o valor da variável 'X' na função "modifica" seu valor modificado 
poderá ser apresentado em qualquer outra função do programa. 
 
 
Gabarito 
Coment. 
 
 
 
 
 6a Questão 
 
 
 
 
 Auxiliar = 111 Numero1 = 1000 Numero2 = 80 
 Auxiliar = 100 Numero1 = 900 Numero2 = 20 
 Auxiliar = 100 Numero1 = 900 Numero2 = 80 
 Auxiliar = 100 Numero1 = 1000 Numero2 = 20 
 Auxiliar = 101 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. 
 
 
 
 
 7a 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: 
 
 Nenhuma está correta 
 
Apenas I e II 
 
Apenas II 
 
Apenas III 
 
Apenas I 
 
 
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. 
 
 
 
 
 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 = 999 Valor = 85 
sendo que z é um parâmetro passado por referência 
 
 
 
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 = 1000 Valor = 85 
sendo que z é um parâmetro passado por valor 
 
 
 
 
 
 1a Questão 
 
 
Considere o trecho de um programa escrito em C++. 
 int func1 (int n1, int n2) { 
 int aux = n1 % n2; 
 while ( aux != 0) { 
 n1 = n2; 
 n2 = aux; 
 aux = n1 % n2; 
 } 
 return n2; 
} 
int main() { 
 cout << func1 (27, 18); 
} 
Marque a opção correta que mostra o que é impresso na tela. 
 
 
27 
 
18 
 
6 
 
3 
 9 
 
 
Explicação: 
Fazendo um teste de mesa, temos que o valor 9 retornado e impresso na main. 
Iniciando um teste de mesa.... 
n1 n2 aux 
27 18 9 
18 9 0 
continua... continua... continua.. 
 
 
 
 
 
 2a Questão 
 
 
Sobre funções, é correto afirmar: 
 
 
Não devem conter variáveis locais em seu código. 
 
Obrigatoriamente devem possuir parâmetros. 
 
Obrigatoriamente devem retornam algum valor. 
 São blocos de instruções que são executados quando são chamadas em alguma parte do 
programa. 
 
Não podem ser chamadas dentro de outras funções. 
 
 
Explicação: 
Uma função é um bloco de instruções que pode ser chamada a partir de outra função, que pode ter ou não 
parâmetros, que pode ou não retornar valor, que pode ter ou não variáveis locais.3a 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, 2, 8 
 
3, 5, 8 
 2, 5, 10 
 
4, 5, 9 
 
2, 2, 9 
 
 
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. 
 
 
 
 
 
 
 4a Questão 
 
 
1) O que será impresso pela função Eureka ? Assinale a opção correta. 
 
void Eureka() 
 { 
 for (int i = 1; i <= 10; i++) 
 if (i % 2 == 0) 
 cout << i << " "; 
 else 
 if (i % 7 == 0) 
 return; 
 } 
 
 
 
2 4 6 8 10 
 
Nada é impresso, pois a função não compila. Para a função compilar, deveria ter int no lugar de void, já que há return na 
função. 
 
2 4 6 8 
 
Nada é impresso, pois a função não compila. A função não deveria usar return, pois não está de acordo com o uso de void. 
 2 4 6 
 
 
 
 
 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; } 
 
 5 
 
Haverá um erro de compilação 
 
10 
 
20 
 
0 
 
 
 
 
 6a 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 &); 
 
void volume (float , float); 
 float volume (float, 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. 
 
 
 
 
 
 7a Questão 
 
 
Considere o trecho de um programa escrito em C++. 
void func1 (bool x, int ini, int fim) { 
 for ( int y=ini; y != fim ; y++) { 
 x = !x; 
 if (x) 
 cout << y << endl; 
 else 
 cout << -y << endl; 
 } 
} 
int main() { 
 func1(false, 1, 7); 
} 
Marque a opção correta que mostra o que é impresso na tela. 
 
 
1, 2, 3, 4, 5, 6 
 
1, -2, -3, -4, -5, -6 
 
-1, 2, -3, 4, -5, 6 
 
-1, -2, -3, -4, -5, -6 
 1, -2, 3, -4, 5, -6 
 
 
Explicação: 
Fazendo um teste de mesa temos que será impresso a seguinte sequência : 1 -2 3 -4 5 -6, um 
embaixo do outro. 
Parte de um teste de mesa : 
 
x ini fim y 
false 1 7 1 
true 2 
false 
E continua x, ini, fim e y recebendo valores 
Tela : 
1 
-2 
3 
-4 
5 
-6 
 
 
 
 
 
 
 
 8a 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'; 
} 
 
 
Ocorre erro, pois a função, que é do tipo void, não retorna o vetor Y. 
 
algor 
 
ogla 
 rogla 
 
algo 
 
 
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

Outros materiais