Logo Passei Direto
Buscar

Algoritmos e Programação Estruturada Programação Estruturada para Dev1

Ferramentas de estudo

Questões resolvidas

Observe a figura abaixo referente as operações em uma Pilha:
Analise com cuidado as duas proposições, verifique se cada uma é verdadeira ou falsa, e marque a alternativa correta:
I. Na figura podemos observar uma sequência de operações para inserir um novo elemento na Pilha com a função pop( ),
II. Com a função push( ) é realizada a remoção do elemento da Pilha.
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
As asserções I e II são proposições falsas.

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

Observe a figura abaixo referente as operações em uma Pilha:
Analise com cuidado as duas proposições, verifique se cada uma é verdadeira ou falsa, e marque a alternativa correta:
I. Na figura podemos observar uma sequência de operações para inserir um novo elemento na Pilha com a função pop( ),
II. Com a função push( ) é realizada a remoção do elemento da Pilha.
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
As asserções I e II são proposições falsas.

Prévia do material em texto

1 
 
Algoritmos e Programação Estruturada: Programação Estruturada para 
Dev 
 
Questão 1 
Correta 
Questão com problema? 
Uma pilha é uma estrutura de dados do tipo LIFO (Last in, First out), ou seja, na qual o último 
elemento a entrar é o primeiro a sair. Assim, nos elementos que ainda permanecem, o que está no 
topo da pilha será o primeiro a ser removido. Conforme Tenenbaum, Langsam e Augenstein 
(2007), uma pilha possui uma estrutura que pode ser declarada contendo dois objetos: um 
ponteiro, que irá armazenar o endereçamento inicial da pilha; e um valor inteiro, que irá indicar a 
posição do topo da pilha. 
Considerando a pilha apresentada no texto, para sua utilização primeiramente é necessário: 
Sua resposta 
Correta 
criar a declaração da estrutura da pilha, criar a pilha com a alocação dinâmica e criar as funções 
para inserir e remover dela. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2 
 
Questão 2 
Incorreta 
Questão com problema? 
Observe a figura abaixo referente as operações em uma Pilha: 
 
 
 
I. Na figura podemos observar uma sequência de operações para inserir um novo elemento na 
Pilha com a função pop( ), 
 
PORQUE 
 
II. Com a função push( ) é realizada a remoção do elemento da Pilha. 
Analise com cuidado as duas proposições, verifique se cada uma é verdadeira ou falsa, e marque 
a alternativa correta: 
Sua resposta 
Incorreta 
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I. 
Solução esperada 
As asserções I e II são proposições falsas. 
 
 
 
 
 
 
 
3 
 
Questão 3 
Correta 
Questão com problema? 
Um mecanismo utilizado para organizar nossa informação e prover operações convenientes e 
eficientes para acessá-la e manipulá-la é conhecido como estrutura de dados. Diversos tipos de 
estruturas de dados têm sido propostas e o conhecimento das características dessas estruturas é 
um fator importante para a escolha da estrutura que melhor se encaixa na solução de um 
determinado problema. 
 
Neste contexto, analise o trecho a seguir, completando as lacunas. 
 
A ____________ é uma estrutura do tipo ____________, na qual os elementos são inseridos, 
consultados e removidos apenas na extremidade inicial da estrutura, conhecida como 
____________. 
Assinale a alternativa que preenche corretamente as lacunas. 
Sua resposta 
Correta 
pilha / LIFO / topo. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4 
 
Questão 4 
Correta 
Questão com problema? 
Uma fila é uma estrutura de dados dinâmica que admite remoção de elementos e inserção de 
novos objetos. Mais especificamente, uma Fila é uma estrutura sujeita à seguinte regra de 
operação: sempre que houver uma remoção, o elemento removido é o que está na estrutura há 
mais tempo (TENENBAUM, 2007). 
 
Considerando a utilização de uma Fila, alguns problemas podem surgir com sua utilização, como 
por exemplo: 
 
 
 
• • • I. Utilizando-se um vetor, teremos o problema de possuir um armazenamento de tamanho 
fixo e limitado, enquanto que a Fila pode crescer com a necessidade de uso do sistema, e para 
resolver essa problemática, teríamos que limitar o tamanho máximo da Fila ao tamanho do vetor. 
 
• • • II. Outra situação que pode ocorrer é adicionar um elemento em uma Fila cheia ou 
remover um elemento de uma Fila vazia. Em ambos os casos seria impossível realizar as 
operações. Como solução, é importante sempre implementar as funções para verificar se a Fila 
está cheia (fila_cheia(F)) e para verificar se a Fila está vazia (fila_vazia(F)). 
 
 
 
 
 
III. Podem surgir problemas relacionados aos controles de início e fim de Fila, onde não 
é possível identificar as posições em que se encontram. Como solução, é preciso incluir 
duas variáveis (início e fim) para armazenar a posição do início e do fim da Fila, e sempre 
atualizar esses valores conforme a Fila aumenta ou diminui. 
A seguir assinale a alternativa correta. 
Sua resposta 
Correta 
As afirmativas I, II e III estão corretas. 
 
 
 
 
 
 
5 
 
Questão 5 
Correta 
Questão com problema? 
 Para a remoção de um elemento de uma pilha, é necessário que ela seja realizada somente pelo 
topo da pilha, usando a função pop(). A implementação do trecho de código para a remoção de 
elementos do topo da pilha pode ser declarada como no modelo a seguir, utilizando a 
função pop_pilha( ): 
 
float pop_pilha(struct Pilha *p){ 
float aux = p -> proxElem [p -> topo]; 
p -> topo--; 
return aux; 
} 
 
Baseado na implementação do trecho do texto, avalie as afirmações a seguir: 
I - No trecho apresentado, a função pop_pilha( ) remove a struct da pilha. 
 
 
• II - A variável aux declarada recebe o elemento que está no topo. 
 
 
III - Na linha 3 no código o valor do topo é decrementado. 
É correto apenas o que se afirma em: 
Sua resposta 
Correta 
II e III. 
 
 
 
 
 
 
 
 
 
 
 
6 
 
Questão 1 
Correta 
Questão com problema? 
A recursividade é uma técnica programação usada para tornar o código mais elegante, 
organizado, o que pode facilitar a manutenção. Essa técnica, em muitos casos, pode ser usada 
para substituir uma estrutura de repetição iterativa, por exemplo, uma que use o comando for. 
Uma função recursiva pode substituir uma estrutura de repetição, porém nem sempre é viável, 
visto os recursos computacionais necessários para a execução da recursividade. Uma função 
recursiva funciona como um laço de repetição, o qual, será interrompido somente quando o caso 
base for satisfeito. 
 
Considerando o contexto, avalie o programa a seguir, observando as duas funções criadas sobre 
a recursividade. 
 
#include 
int fatNaoRecursivo(int n){ 
 if(n#define pi 3.1415float 
raio ( ){ float r, area; printf("Digite o 
raio: "); scanf("%f",&r); area = pi * r * 
r; }int main(){ float result; result = raio 
(); printf("Area do circulo = %.2f 
\n",result); return 0;} 
O programa demonstrado não compila pois possui um erro, escolha a opção correta que mostra o 
erro do programa. 
Sua resposta 
Correta 
O que causa o erro do programa é a falta do return na função raio ( ), o correto seria adicionar a 
seguinte linha: return area; isso fará com que o valor seja repassado para a variável result. 
 
 
 
 
 
 
 
 
 
 
 
 
8 
 
Questão 3 
Incorreta 
Questão com problema? 
Um programa de computador pode acelerar o resultado de muitos problemas matemáticos e este 
é o caso da sequência de Fibonacci. A sequência de Fibonacci é uma sucessão de números que 
aparecem em muitos fenômenos da natureza. Descrita no final do século 12 pelo italiano 
Leonardo Fibonacci, ela é infinita e começa com 0 e 1. Os números seguintes são sempre a soma 
dos dois números anteriores. Portanto, depois de 0 e 1, vêm 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 
 
Observe a função para o cálculo da sequência de Fibonacci e que usa o recurso de recursividade. 
 
int fibonacci (int n) 
{int s1, s2 ; 
 if (n == 0) return 1; 
 else if (n == 1) return 1; 
 else { 
 s1 = fibonacci(n-1); 
 s2 = fibonacci(n-2); 
 return s1 + s2; 
 } 
} 
 
 
Neste contexto,avalie as afirmativas a seguir: 
I - A recursividade é indicada quando um problema é menor, pois desta forma o programa ficará 
ainda mais veloz. 
 
II - Devemos evitar o uso de recursividade quando um problema é muito repetitivo, o ideal é 
chamar funções menores e que podem fazer o mesmo serviço. 
 
III - A recursividade é indicada quando um problema é maior e pode ser dividido em instâncias 
menores do mesmo problema, porém considerando a utilização dos recursos computacionais que 
cada método empregará. 
 
IV. - Um programa recursivo exige mais espaço de memória e é, na grande maioria dos casos, 
mais lento do que uma função normal. 
É correto o que se afirma em: 
Sua resposta 
Incorreta 
II e III. 
Solução esperada 
 III e IV. 
9 
 
Questão 4 
Correta 
Questão com problema? 
Conforme Mizrahi (2008) o escopo de uma variável é definido pelas regiões (blocos) onde a 
variável pode ser utilizada e é nesta hora que surge o conceitos das variáveis globais e variáveis 
locais. Variáveis globais são aquelas declaradas no início de um algoritmo. São visíveis, ou seja, 
podem ser utilizadas no algoritmo principal e por todos as funções. As variáveis locais são 
aquelas declaradas no início de uma função. São visíveis, ou seja, podem ser utilizadas somente 
pela função onde foram declaradas. 
 
Observe o programa a seguir: 
 
#include int fat (int 
n){ int res = 1; while (n > 
1) { res = res * n; n--
; } return res;}int main ( 
){ int n, res; printf("Entre 
com o valor de n: 
"); scanf("%d", &n); res = 
fat(n+1) / 
(n+1); printf("Fatorial de 
%d = %d\n", n, res ); return 
0;} 
 
 
Considerando o programa apresentado, avalie as afirmativas a seguir: 
 
I. O programa apresentado está errado pois a variável res foi declarada duas vezes, causando 
um erro de compilação. 
 
II. A função fat está escrita antes da função main ( ) porém, o programa começa sempre pela 
função main ( ) independentemente da quantidade de funções que possam ter antes do main ( ). 
 
 
III. Para a função fat, o parâmetro n funciona como uma variável local (ou seja, válida dentro 
da função apenas), juntamente com a variável res. 
 
IV. A função fat possui a variável n e a variável n recebe seu valor no instante da chamada da 
função dentro da função main ( ). 
É correto o que se afirma em: 
Sua resposta 
Correta 
Apenas as afirmativas II, III e IV estão corretas. 
 
10 
 
Questão 5 
Correta 
Segundo Manzano (2015) o escopo de uma variável é a relação de alcance que se tem com o 
local onde certo recurso se encontra definido, de modo que possa ser visualizado pelas várias 
partes do código de um programa. 
 
A figura a seguir demonstra o escopo das variáveis de um programa: 
 
 
 
 
Com base no contexto apresentado, avalie as seguintes asserções e a relação proposta entre elas: 
 
I. A utilização de variáveis globais permite otimizar a alocação de memória, pois em vários casos 
o desenvolvedor não precisará criar variáveis locais. Por outro lado, essa técnica de programação 
deve ser usada com cautela, pois variáveis locais são criadas e destruídas ao fim da função, 
enquanto as globais permanecem na memória durante todo o tempo de execução. 
PORQUE 
 
II. As variáveis locais são aquelas declaradas no início ou dentro de uma função. São visíveis no 
programa inteiro, ou seja, podem ser utilizadas por todo o programa. Não há diferenças efetivas 
no desempenho do programa entre usar variáveis globais e locais, deste modo é aconselhável 
deixar sempre as variáveis como globais. 
Analise atentamente as asserções e assinale a alternativa correta. 
Sua resposta 
Correta 
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa. 
 
 
11 
 
Questão 1 
Respondida 
Talvez seja necessário saber quais elementos fazem parte de uma lista em determinado 
momento de um sistema. Para tal, é necessário percorrer toda a lista ligada para 
verificá-los. A lista ligada pode ser impressa com todos os seus elementos e é possível 
utilizar o trecho de código a seguir: void imprimir (Lista* l) { Lista* p; 
printf(“Elementos:\n”); Por ser uma função que percorrerá toda a lista e de impressão 
em tela, é possível declará-la como VOID, uma função que não retornará valor para a 
função principal. for (p = l; p != NULL; p = p -> prox) { printf(“ %d -> “, p -> info); } 
} Baseado no trecho de comando FOR, avalie as seguintes asserções e a relação 
proposta entre elas: I. Neste trecho, uma condição de repetição FOR percorre a lista e 
envia todos os elementos encontrados nela para a memória. 
PORQUE II. Na função principal, declara-se apenas a chamada da função imprimir(), 
passando como parâmetro a lista na qual deseja-se imprimir. 
A respeito dessas asserções, assinale a alternativa correta: 
Sua resposta 
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I. 
 
A asserção I é uma proposição falsa, e a asserção II é uma proposição verdadeira. I - FALSA - 
Neste trecho, uma condição de repetição FOR percorre a lista e IMPRIME todos os elementos 
encontrados nela. II - VERDADEIRA - Na função principal, declara-se apenas a chamada da 
função imprimir(), passando como parâmetro a lista na qual deseja-se imprimir. 
 
 
 
 
 
 
 
 
12 
 
Questão 2 
Respondida 
Com uma lista ligada criada, pode-se implementar o uso de funções para a remoção de 
elementos da lista. Segundo Celes (2004), a função para remover um elemento é mais 
trabalhosa e complexa, e precisa de informações como parâmetros de remoção, o valor 
do elemento e a lista. Assim, deve-se atualizar o valor da lista sem o elemento 
removido. Com base no conceito de remoção de elementos, analise julgue as 
afirmações que se seguem. I - Caso o primeiro elemento da lista seja o elemento a ser 
retirado, deve-se manter o valor da lista com o ponteiro para o primeiro elemento, já 
que o espaço alocado permanece no local. 
• II - Se o elemento a ser retirado da lista pela função estiver no meio desta, o elemento 
anterior deverá apontar para o elemento seguinte do qual será removido e, depois 
disso, liberar a alocação do elemento removido. 
III -Pode-se utilizar vários trechos de código em uma função para realizar as 
operações de remoção da lista, sendo do início ou de outra posição desta. 
É correto apenas o que 
 
Sua resposta 
II e III. 
 
Com base no conceito de remoção de elementos, as asserções a seguir devem ser analisadas 
assim: I - FALSA - Caso o primeiro elemento da lista seja o elemento a ser retirado, deve-
se ATUALIZAR o valor da lista com o ponteiro para o SEGUNDO ELEMENTO, LIBERANDO 
O ESPAÇO ALOCADO DO ELEMENTO RETIRADO. II - VERDADEIRA - Se o elemento a 
ser retirado da lista pela função estiver no meio desta, o elemento anterior deverá apontar para o 
elemento seguinte do qual será removido e, depois disso, liberar a alocação do elemento 
removido. III - FALSA - Pode-se utilizar UM ÚNICO TRECHO de código em uma função para 
realizar as operações de remoção da lista, sendo do início ou de outra posição desta. 
 
 
 
 
 
13 
 
Questão 3 
Respondida 
De acordo com Mizrahi (2008) as funções dividem grandes tarefas de programação em 
tarefas menores, permitindo aos programadores reprogramarem a partir de códigos 
que já foram produzidos, facilitando e acelerando o trabalho de programação. Observe 
o programa que demonstra o uso de uma função na linguagem C: 
#include #define pi 3.1415float 
raio ( ){ float r, area; printf("Digite o raio: 
"); scanf("%f",&r); area = pi * r * r; }int 
main(){ float result; result = raio 
(); printf("Area do circulo = %.2f 
\n",result); return 0;}O programa demonstrado não compila pois possui um erro, escolha a opção correta 
que mostra o erro do programa. 
. 
Sua resposta 
O que causa o erro do programa é a falta do return na função raio ( ), o correto seria adicionar a 
seguinte linha: return area; isso fará com que o valor seja repassado para a variável result. 
 
A frase corretamente preenchida é: O que causa o erro do programa é a falta do return na 
função raio ( ), o correto seria adicionar a seguinte linha: return area; isso fará com que o valor 
seja repassado para a variável result.O programa deve ser criado da seguinte 
maneira: #include #define pi 3.1415 float raio () { float r, area; printf("Digite o 
raio: "); scanf("%f",&r); area = pi * r * r; return area; //OBRIGATÓRIO } int main ( 
) { float result; result = raio ( ); printf("Area do circulo = %.2f \n",result); return 0; } 
 
 
 
 
 
 
 
 
 
14 
 
Questão 4 
Respondida 
Podemos remover um elemento da lista ligada, porém é necessário ter certos cuidados. 
De acordo com Celes (2004), a função para remover um elemento é mais trabalhosa e 
complexa, e precisa de informações como parâmetros para remoção, o valor do 
elemento e a lista. Tendo como referência a remoção de elementos de lista, avalie as 
seguintes asserções e a relação proposta entre elas: I. Caso o primeiro elemento da 
lista seja o elemento a ser retirado, devemos atualizar o valor da lista com o ponteiro 
para o segundo elemento e assim, liberar o espaço alocado do elemento 
retirado. PORQUE II. Se o elemento a ser retirado da lista pela função estiver no meio 
da lista, o elemento anterior deve apontar para o elemento seguinte do qual será 
removido e, após isso, liberarmos a alocação do elemento removido. 
Agora assinale a alternativa correta. 
 
Sua resposta 
As afirmativas I e II são verdadeiras e a II é uma justificativa da I. 
 
 Resolução: As duas afirmativas são verdadeiras e a segunda complementa a primeira. O 
primeiro elemento da lista seja o elemento a ser retirado, deve atualizar o valor da lista com o 
ponteiro para o segundo elemento e assim, liberar o espaço alocado do elemento retirado. Se o 
elemento a ser retirado da lista pela função estiver no meio da lista, o elemento anterior deve 
apontar para o elemento seguinte do qual será removido, e após isso, liberarmos a alocação do 
elemento removido. 
 
 
 
 
 
 
 
 
 
15 
 
Questão 6 
Sem resposta 
Uma estrutura de dados do tipo "pilha" representa um conjunto dinâmico cujos 
elementos são inseridos e retirados de acordo com o seguinte protocolo: o último 
elemento que entra no conjunto é o primeiro que sai. Este protocolo é amplamente 
conhecido como LIFO, do inglês Last in, First out (último a entrar, primeiro a sair). É 
possível inserir um elemento na pilha a qualquer momento, mas somente o elemento 
inserido mais recentemente pode ser removido a qualquer momento. Considere a pilha 
"p", bem como a função "func". Pilha "p": 4 int x = 10; int main(){ int x = -
1; int b; { extern int x; b = x; } printf("\n Valor de x = %d",x); printf("\n Valor de b (x 
global) = %d",b); return 0; } De acordo com o trecho de programa, analise as asserções 
a seguir: I - Na linguagem C, para acessar o valor de uma variável global dentro de 
uma função que possui uma variável local com mesmo nome, deve-se usar a instrução 
externa. 
PORQUE II - Utilizar variáveis globais e locais com mesmo nome na linguagem C 
necessita criar uma nova variável chamada “b”, com um bloco de instruções, que atribui 
à nova variável o valor “externo” de x. 
A respeito dessas asserções, assinale a alternativa correta: 
. 
Sua resposta 
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I. 
 
As asserções I e II são proposições verdadeiras, mas a asserção II não é uma justificativa da 
asserção I. I - VERDADEIRA - Na linguagem C, para acessar o valor de uma variável global 
dentro de uma função que possui uma variável local com mesmo nome, deve-se usar a instrução 
extern. II - VERDADEIRA - Utilizar variáveis globais e locais com mesmo nome na linguagem 
C necessita criar uma nova variável chamada “b”, com um bloco de instruções, que atribui à 
nova variável o valor “externo” de x. 
 
 
 
 
 
 
 
 
18 
 
Questão 9 
Sem resposta 
Um mecanismo utilizado para organizar nossa informação e prover operações 
convenientes e eficientes para acessá-la e manipulá-la é conhecido como estrutura de 
dados. Diversos tipos de estruturas de dados têm sido propostas e o conhecimento das 
características dessas estruturas é um fator importante para a escolha da estrutura que 
melhor se encaixa na solução de um determinado problema. Considerando as 
informações apresentadas, analise as afirmativas a seguir: I. Em uma pilha, os 
elementos são inseridos no início e removidos do início, por isso esta estrutura de 
dados é conhecida como FIFO (First in, First out). II. A operação “remover do início” 
pode ser facilmente realizada nas estruturas de dados lista e fila, computacionalmente 
falando. Esta operação pode ser realizada em ambas as estruturas com uma quantidade 
constante de passos, independentemente da quantidade de elementos. III. A função 
"free()", pertencente à biblioteca “stdlib.h”, é utilizada para liberar o espaço reservado da 
memória, quando a mesma não for mais necessária. 
Considerando o contexto apresentado, é correto o que se afirma em: 
• I, apenas. 
• I e II, apenas. 
• II e III, apenas. 
• III, apenas. 
• I, II e III. 
Sua resposta 
III, apenas. 
 
Alternativa correta: II e III, apenas. I. Em uma pilha, os elementos são inseridos no início e 
removidos do início, por isso esta estrutura de dados é conhecida como FIFO (First in, First 
out). INCORRETA, pois em uma pilha, os elementos são inseridos no início e removidos 
19 
 
do topo, por isso esta estrutura de dados é conhecida como LIFO (Last in, First out). II. A 
operação “remover do início” pode ser facilmente realizada nas estruturas de dados lista e fila,computacionalmente falando. Esta operação pode ser realizada em ambas as estruturas com uma 
quantidade constante de passos, independentemente da quantidade de elementos. CORRETA, 
pois tanto no caso da fila quanto da lista, é possível acessar o primeiro elemento de forma direta, 
por meio do ponteiro "inicio", facilitando assim a remoção desse elemento. III. A função 
"free()", pertencente à biblioteca “stdlib.h”, é utilizada para liberar o espaço reservado da 
memória, quando a mesma não for mais necessária. CORRETA, pois a função "free()" deve ser 
utilizada sempre que se deseja desalocar um espaço de memória anteriormente reservado com a 
função "malloc". 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20 
 
Questão 10 
Sem resposta 
Nas linguagens de programação funcional, diz-se que é possível evitar estouros de pilha 
usando "recursão de cauda". A diferença entre recursiva normal e de cauda é 
justamente aonde a chamada recursiva é chamada. Caso seja chamada na "cauda" da 
função, é uma chamada de cauda recursiva. A "cauda" da função é sua última chamada. 
É a última computação / cálculo feito pela função, e logo depois dela, nenhum 
tratamento é feito antes de retornar seu valor. Neste contexto, analise as figuras 16(a) e 
16(b). Figura 16 – (a) recursão normal e (b) recursão de 
cauda Considerand
o as imagens apresentadas julgue as afirmações que se seguem. I - Na figura 16(a), cada 
chamada recursiva aumenta porque o programa só pode calcular o resultado da 
primeira função chamada, para depois calcular o resultado das que a chamaram. Assim, 
a pilha estoura. II - Na figura 16(b), cada passo de chamadas nem aumenta nem diminui. 
A partir do momento que a função recursiva é chamada, todas são chamadas no final, 
sem precisar de mais cálculos. 
III - Quando um compilador pronto para isso vê uma chamada recursiva na cauda, 
ele automaticamente a transforma em um laço durante as otimizações. Desta 
forma não perde as vantagens, nem a elegância da programação funcional, mas 
também não corre o risco de passar por um estouro de pilha. 
É correto apenas o que se afirma em: 
21 
 
• III. 
• II e III. 
• II. 
• I e II. 
• I. 
Sua resposta 
III. 
 
I - FALSA - Na figura 16(a), cada chamada recursiva aumenta porque o programa só pode 
calcular o resultado da primeira função chamada, para depois calcular o resultado das que a 
chamaram. Assim, a pilha estoura. O CORRETO É: Na figura 16(a), A CADA chamada 
recursiva, O NÚMERO DE FUNÇÕES aumenta porque o programa só pode calcular o resultado 
da ÚLTIMA função chamada, para depois calcular o resultado das que a chamaram. Assim, a 
pilha estoura. II - FALSA - Na figura 16(b), cada passo de chamadas nem aumenta nem diminui. 
A partir do momento que a função recursiva é chamada, todas são chamadas no final, sem 
precisar de mais cálculos. O CORRETO É: Na figura 16(b), A CADA PASSO, A 
QUANTIDADE de chamadas nem aumenta nem diminui. A partir do momento que a função 
recursiva é chamada, APENAS ELA é chamada no final, sem precisar de mais cálculos. III - 
VERDADEIRA - Quando um compilador pronto para isso vê uma chamada recursiva na cauda, 
ele automaticamente a transforma em um laço durante as otimizações. Desta forma não perde as 
vantagens, nem a elegância da programação funcional, mas também não corre o risco de passar 
por um estouro de pilha. 
 
 
 
 
 
 
 
 
22 
 
Questão 1 
Correta 
Questão com problema? 
Para criar uma função utiliza-se a seguinte sintaxe: 
 
 
 () 
{ 
 
 ( ) 
} 
 
Para cada declaração da função existem parâmetros que são obrigatórios e outros que são 
opcionais. Neste contexto, relacione a Coluna A que contém as sintaxe com a Coluna B que 
contém as funções. 
 
Coluna A (Sintaxe) Coluna B (Função) 
 I. A. Identificará a função. 
 II. 
B. Indica qual o tipo de valor a função 
retornará. 
 III. 
C. Toda função terá o nome 
acompanhado por eles. 
 IV. 
D. Se for void é opcional, porém, 
quando não for void é obrigatório. 
 V. 
E. Só justifica criar se tiver um 
conjunto de comandos para realizar. 
Assinale a alternativa que contém a associação correta entre as colunas: 
Sua resposta 
Correta 
I-B / II-A / III-C / IV-E / V-D. 
Comentário 
I-B / II-A / III-C / IV-E / V-D. - Indica qual o tipo de valor a função 
retornará. - Identificará a função. - Toda função terá o 
nome acompanhado por eles. - Só justifica criar se tiver um conjunto de 
comandos para realizar. - Se for void é opcional, porém, quando não for void é 
obrigatório. 
23 
 
Questão 2 
Correta 
Questão com problema? 
Conforme Mizrahi (2008) o escopo de uma variável é definido pelas regiões (blocos) onde a 
variável pode ser utilizada e é nesta hora que surge o conceitos das variáveis globais e variáveis 
locais. Variáveis globais são aquelas declaradas no início de um algoritmo. São visíveis, ou seja, 
podem ser utilizadas no algoritmo principal e por todos as funções. As variáveis locais são 
aquelas declaradas no início de uma função. São visíveis, ou seja, podem ser utilizadas somente 
pela função onde foram declaradas. 
 
Observe o programa a seguir: 
 
#include int fat (int 
n){ int res = 1; while (n > 
1) { res = res * n; n--
; } return res;}int main ( 
){ int n, res; printf("Entre 
com o valor de n: 
"); scanf("%d", &n); res = 
fat(n+1) / 
(n+1); printf("Fatorial de 
%d = %d\n", n, res ); return 
0;} 
 
 
Considerando o programa apresentado, avalie as afirmativas a seguir: 
 
I. O programa apresentado está errado pois a variável res foi declarada duas vezes, causando 
um erro de compilação. 
 
II. A função fat está escrita antes da função main ( ) porém, o programa começa sempre pela 
função main ( ) independentemente da quantidade de funções que possam ter antes do main ( ). 
 
 
III. Para a função fat, o parâmetro n funciona como uma variável local (ou seja, válida dentro 
da função apenas), juntamente com a variável res. 
 
IV. A função fat possui a variável n e a variável n recebe seu valor no instante da chamada da 
função dentro da função main ( ). 
É correto o que se afirma em: 
Sua resposta 
Correta 
Apenas as afirmativas II, III e IV estão corretas. 
 
24 
 
Questão 3 
Correta 
Questão com problema? 
A recursividade é uma técnica programação usada para tornar o código mais elegante, 
organizado, o que pode facilitar a manutenção. Essa técnica, em muitos casos, pode ser usada 
para substituir uma estrutura de repetição iterativa, por exemplo, uma que use o comando for. 
Uma função recursiva pode substituir uma estrutura de repetição, porém nem sempre é viável, 
visto os recursos computacionais necessários para a execução da recursividade. Uma função 
recursiva funciona como um laço de repetição, o qual, será interrompido somente quando o caso 
base for satisfeito. 
 
Considerando o contexto, avalie o programa a seguir, observando as duas funções criadas sobre 
a recursividade. 
 
#include 
int fatNaoRecursivo(int n){ 
 if(ne não há erros 
de compilação. 
 
 
 
 
25 
 
Questão 4 
Correta 
Questão com problema? 
Conforme Soffner (2013) a utilização funções com de passagem de parâmetros por referência 
está diretamente ligada aos conceitos de ponteiro e endereço de memória. A ideia da técnica é 
análoga a passagem por valores, ou seja, a função será definida de modo a receber certos 
parâmetros e “quem” faz a chamada do método deve informar esses argumentos. Entretanto, o 
comportamento e o resultado são diferentes. Na passagem por referência não será criada uma 
cópia dos argumentos passados, na verdade, será passado o endereço da variável e função irá 
trabalhar diretamente com os valores ali armazenados. 
 
Observe o programa a seguir: 
 
#include int testar (int* n1, int* n2){ *n1 
= -1; *n2 = -2; printf("\n\n Valores dentro da 
função testar(): "); printf("\n n1 = %d e n2 = 
%d",*n1,*n2); return 0;}int main ( ){int n1 = 
10;int n2 = 20;printf("\n\n Valores antes de 
chamar a função: ");printf("\n n1 = %d e n2 = 
%d",n1,n2);testar(&n1, &n2);printf("\n\n Valores 
depois de chamar a função: ");printf("\n n1 = %d 
e n2 = %d",n1,n2);return 0;} 
Analisando o contexto e o programa apresentado, assinale a alternativa correta quanto ao uso dos 
sinais * (asterisco) e & (e comercial): 
Sua resposta 
Correta 
O * é para o ponteiro e o & é para a passagem de parâmetros por referência. 
 
 
 
 
 
 
 
 
 
26 
 
Questão 5 
Correta 
Questão com problema? 
Conforme Salvetti e Barbosa (1998) as variáveis e constantes, são espaços reservados na 
memória RAM (Random Access Memory - Memória de Acesso Aleatório) do computador para 
guardar informações que serão utilizadas durante o código do programa. Podem ter valores de 
diversos tamanhos e tipos, tais como números inteiros, números reais, caracteres, frases, enfim, 
diversas coisas. 
Fonte:SALVETTI, D. D., BARBOSA, L. M. Algoritmos. São Paulo: Makron Books, 1998. 
 
Com base no contexto apresentado, avalie as seguintes asserções e a relação proposta entre elas: 
 
 
I. Para usar de forma mais otimizada a memória RAM do computador, existe uma alternativa 
chamada recursividade em cauda. Nesse tipo de técnica a recursividade funcionará como uma 
função iterativa. 
 
 
 
PORQUE 
 
 
II. Uma função é caracterizada como recursiva em cauda quando a chamada a si mesmo é a 
última operação a ser feita no corpo da função. Nesse tipo de função, o caso base costuma ser 
passado como parâmetro, o que resultará em um comportamento diferente. 
Analise atentamente as asserções e assinale a alternativa correta. 
Sua resposta 
Correta 
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I. 
 
 
 
 
 
 
 
 
27 
 
Questão 1 
Correta 
Questão com problema? 
As listas ligadas são estruturas de dados conhecidas por serem flexíveis quanto às suas operações 
e seu tamanho é dinâmico. Toda lista é composta por nós, e o nó é um conjunto de informações 
que permitem apontar para o próximo elemento. 
Considere a organização das pessoas na fila do banco, porém seu funcionamento coerente 
depende do comportamento da lista ligada, então aplique o conceito de inserção em listas ligadas 
para assinalar a alternativa correta: 
Sua resposta 
Correta 
As listas permitem inserção de elementos em qualquer posição. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28 
 
Questão 2 
Correta 
Questão com problema? 
A pilha representa um conjunto dinâmico cujos elementos são inseridos e retirados de 
acordo com o seguinte protocolo: o último elemento que entra no conjunto é o primeiro 
que sai. Este protocolo é amplamente conhecido como LIFO, do inglês Last in, First 
out (último a entrar, primeiro a sair). 
Em uma pilha, a inserção dos elementos X, K, L, M, J, R, P, Q, na respectiva ordem e a remoção 
de quatro elementos, resulta no topo da pilha com o dado 
Sua resposta 
Correta 
M. 
Comentário 
Alternativa correta: M Deve-se atentar para a ordem de inserção dos elementos, bem como para 
o protocolo da pilha (último a entrar, primeiro a sair). A seguir, são apresentados os efeitos das 
operações mencionadas sobre uma pilha inicialmente vazia: Inserção dos elementos: Qas estruturas com uma 
quantidade constante de passos, independentemente da quantidade de elementos. CORRETA, 
pois tanto no caso da fila quanto da lista, é possível acessar o primeiro elemento de forma direta, 
por meio do ponteiro "inicio", facilitando assim a remoção desse elemento. III. A função 
"free()", pertencente à biblioteca “stdlib.h”, é utilizada para liberar o espaço reservado da 
memória, quando a mesma não for mais necessária. CORRETA, pois a função "free()" deve ser 
utilizada sempre que se deseja desalocar um espaço de memória anteriormente reservado com a 
função "malloc". 
 
 
 
 
31 
 
Questão 5 
Correta 
Questão com problema? 
A professora de uma escola teve a ideia de pedir que os alunos que apresentassem uma breve 
palestra sobre alguns assuntos da atualidade. Para isso, ela dividiu a turma em grupos e pediu que 
eles mesmos escolhessem os assuntos com os quais gostariam de trabalhar. Contudo, para que 
não houvesse dois ou mais grupos com o mesmo assunto, ela definiu o seguinte protocolo: o 
grupo que primeiro se cadastrar no fórum virtual da disciplina, será o primeiro a escolher 
o assunto da sua palestra. O segundo a realizar o cadastro, será o segundo a escolher o assunto, 
não podendo escolher o assunto já definido para o primeiro grupo, e assim sucessivamente. 
Considerando o contexto anterior, assinale a alternativa que apresenta corretamente o tipo 
de estrutura de dados cujo protocolo de manipulação dos elementos é idêntico ao adotado pela 
professora. 
Sua resposta 
Correta 
Fila. 
Comentário 
Alternativa correta: Fila. Fila. CORRETA, pois a fila representa um conjunto dinâmico, 
cujos elementos são inseridos e retirados de acordo com o seguinte protocolo: o 
primeiro elemento que entra no conjunto é o primeiro que sai. Este protocolo é 
amplamente conhecido como FIFO, do inglês First in, First out (primeiro a entrar, 
primeiro a sair). Aplicando esse conceito ao problema em questão, o primeiro grupo a 
se cadastrar no fórum da disciplina, será o primeiro a escolher o assunto da palestra. 
Pilha. INCORRETA, pois em uma pilha, o último elemento a ser inserido é o primeiro a 
sair. Assim, é como se o último grupo a se cadastrar fosse o primeiro a escolher o 
assunto da palesta. Lista simples e Lista dupla. INCORRETAS, pois essas duas 
estruturas de dados permitem a manipulação de elementos em qualquer ordem. Assim, 
é como se um grupo aleatoriamente escolhesse o assunto da palestra em primeiro 
lugar. Pilha dupla. INCORRETA, pois a "Pilha dupla" não é uma estrutura de dados 
conhecida. 
 
 
 
 
 
 
 
32 
 
Questão 1 
Respondida 
Conforme Soffner (2013) a utilização funções com de passagem de parâmetros por 
referência está diretamente ligada aos conceitos de ponteiro e endereço de memória. A 
ideia da técnica é análoga a passagem por valores, ou seja, a função será definida de 
modo a receber certos parâmetros e “quem” faz a chamada do método deve informar 
esses argumentos. Entretanto, o comportamento e o resultado são diferentes. Na 
passagem por referência não será criada uma cópia dos argumentos passados, na 
verdade, será passado o endereço da variável e função irá trabalhar diretamente com os 
valores ali armazenados. Observe o programa a seguir: 
#include int testar (int* n1, int* n2){ *n1 = -
1; *n2 = -2; printf("\n\n Valores dentro da função 
testar(): "); printf("\n n1 = %d e n2 = 
%d",*n1,*n2); return 0;}int main ( ){int n1 = 10;int 
n2 = 20;printf("\n\n Valores antes de chamar a 
função: ");printf("\n n1 = %d e n2 = 
%d",n1,n2);testar(&n1, &n2);printf("\n\n Valores 
depois de chamar a função: ");printf("\n n1 = %d e 
n2 = %d",n1,n2);return 0;} 
Analisando o contexto e o programa apresentado, assinale a alternativa correta quanto 
ao uso dos sinais * (asterisco) e & (e comercial): 
. 
Sua resposta 
O * é para o ponteiro e o & é para a passagem de parâmetros por referência. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33 
 
Questão 2 
Respondida 
Diferentes estruturas elementares de dados implementam diferentes 
protocolos de manipulação de elementos. Esses protocolos ditam como os elementos 
de uma estrutura de dados podem ser inseridos, removidos e consultados. 
Sabendo disso, assinale a alternativa que representa corretamente o nome das 
estruturas que implementam os protocolos FIFO e LIFO, respectivamente. 
 
Sua resposta 
Fila e Pilha. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34 
 
Questão 3 
Respondida 
Com uma lista ligada criada, pode-se implementar o uso de funções para a remoção de 
elementos da lista. Segundo Celes (2004), a função para remover um elemento é mais 
trabalhosa e complexa, e precisa de informações como parâmetros de remoção, o valor 
do elemento e a lista. Assim, deve-se atualizar o valor da lista sem o elemento 
removido. Com base no conceito de remoção de elementos, analise julgue as 
afirmações que se seguem. I - Caso o primeiro elemento da lista seja o elemento a ser 
retirado, deve-se manter o valor da lista com o ponteiro para o primeiro elemento, já 
que o espaço alocado permanece no local. 
• II - Se o elemento a ser retirado da lista pela função estiver no meio desta, o elemento 
anterior deverá apontar para o elemento seguinte do qual será removido e, depois 
disso, liberar a alocação do elemento removido. 
III -Pode-se utilizar vários trechos de código em uma função para realizar as 
operações de remoção da lista, sendo do início ou de outra posição desta. 
É correto apenas o que 
• I. 
• II. 
• III. 
• II e III. 
• I e III. 
Sua resposta 
II. 
 
 
35 
 
Questão 4 
Respondida 
Uma Fila é um conjunto ordenado de itens, na qual itens podem ser extraídos de sua 
extremidade inicial e novos itens podem ser inseridos na sua extremidade final. Observe 
a imagem a 
seguir. Associe 
as colunas que descrevem as principais operações com Filas: 
• 1. Inicializar 
• 2. Empilhar 
• 3. Desempilhar 
• 4. Frente 
• 5. Vazia A. Insere um elemento no fundo (cauda) da fila. B. Retorna o elemento que 
está na frente (cabeça) da fila. C. Indica se a fila está vazia. D. Retira um elemento que 
está na frente (cabeça) da fila. E. Cria uma fila vazia. 
Analise os itens de cada coluna e após escolha a alternativa verdadeira que corresponde 
a associação correta entre os itens: 
 
Sua resposta 
1 – E; 2 – A; 3 – D; 4 – B; 5 – C. 
 
 
 
 
 
 
 
36 
 
Questão 5 
Respondida 
Segundo Silva (2007), as Filas não apresentam uma solução completa, sendo que, 
mesmo chegando ao final do vetor poderemos ter a Fila cheia mesmo não estando 
cheia, uma vez que elementos podem ter sido removidos e para isso, podemos utilizar 
as Filas Circulares como solução para esta situação. Uma Fila Circular utiliza menos 
instruções a serem executadas, podendo ser mais adequada e eficiente na utilização de 
programação. Diferentemente da estrutura de Fila, a Fila Circular possui a seguinte 
definição, em sua implementação, quanto a variáveis: 
• I. Um vetor para os elementos; 
• II. Um valor inteiro para o tamanho da Fila; 
III. Um valor inteiro para o início da Fila; IV. Um valor inteiro para o fim da Fila. 
Analise atentamente as afirmativas e escolha a opção correta sobre a estrutura de Fila 
Circular: 
 
Sua resposta 
Somente as afirmativas I, III e IV estão corretas. 
 
As afirmativas I, II, III e IV estão corretas. As afirmativas apresentam a definição, em sua 
implementação,da Fila Circular. 
 
 
 
 
 
 
 
 
 
 
37 
 
Questão 6 
Sem resposta 
Analise o trecho de programa a seguir: #include #include int* 
alocar(){ return malloc(200); } int main(){ int *memoria; memoria = alocar(); if(memoria != 
NULL){ printf("Endereco de memoria alocada = %x",memoria); } else{ printf("Memoria 
nao alocada"); } return 0; } Agora, avalie as seguintes asserções e a relação proposta 
entre elas. I - Foi criado um ponteirointeiro e, após a função ser chamada, seu 
resultado foi armazenado no ponteiro chamado memoria. 
PORQUE II - Se o valor do ponteiro memoria é diferente de NULL, então sabe-se que a 
alocação foi feita com sucesso e imprime o endereço da primeira posição, caso 
contrário, o usuário é informado que a memória não foi alocada. 
A respeito dessas asserções, assinale a alternativa correta: 
 
Sua resposta 
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I. 
 
As asserções I e II são proposições verdadeiras, mas a asserção II não é uma justificativa da 
asserção I. I - VERDADEIRA - Foi criado um ponteiro inteiro e, após a função ser chamada, 
seu resultado foi armazenado no ponteiro chamado memoria. II - VERDADEIRA - Se o valor 
do ponteiro memoria é diferente de NULL, então sabe-se que a alocação foi feita com sucesso e 
imprime o endereço da primeira posição, caso contrário, o usuário é informado que a memória 
não foi alocada. 
 
 
 
 
 
 
 
 
38 
 
 
Questão 7 
Sem resposta 
Um dos problemas mais comuns para solucionar com pilhas são os labirintos. Estes são 
desafios criados como problematização de estrutura de dados. As pilhas podem ser 
aplicadas também no uso de algoritmos de Backtracking, que consiste em criar 
marcações para onde o algoritmo pode retornar. Em um labirinto, por exemplo, para 
encontrar um caminho correto, pode-se andar pelo labirinto até encontrar uma divisão 
nesse caminho. Assim, adiciona-se a posição onde a divisão ocorre, junto ao caminho 
escolhido na pilha, e segue-se por ele. Caso o caminho escolhido não possua uma saída, 
é removido o ponto anterior da pilha, voltando ao último ponto em que o labirinto se 
dividiu, e recomeça-se por um outro caminho ainda não escolhido, adicionando na pilha 
o novo caminho. O algoritmo de Backtracking pode ser aplicado também como 
operação de desfazer. Baseado no algoritmo de Backtracking, complete as lacunas da 
asserção a seguir: Considerando o contexto apresentado, complete as lacunas a seguir: 
Para implementar a operação de Backtracking, as ações são ____________ em ____________ 
e, caso a ____________ seja realizada, o estado anterior do sistema pode ser ____________, 
ou a ação ____________ pode ser executada. 
Assinale a alternativa que completa corretamente as lacunas: 
 
Sua resposta 
armazenadas / uma pilha / operação de desfazer / restaurado / contrária à realizada. 
 
 
 
 
 
 
 
39 
 
Questão 8 
Sem resposta 
A fila representa um conjunto dinâmico, cujos elementos são inseridos e retirados de 
acordo com o seguinte protocolo: o primeiro elemento que entra no conjunto é o 
primeiro que sai. Este protocolo é amplamente conhecido como FIFO, do inglês First in, 
First out (primeiro a entrar, primeiro a sair). Ou seja, é possível inserir um elemento na fila 
a qualquer momento, mas somente o elemento que está na fila há mais tempo pode ser 
removido a qualquer momento. Dentre as principais operações que devem estar presentes 
em uma Estrutura de Dados do tipo fila estão: enfileirar, desenfileirar e inicio. Chamamos 
de "assinatura de uma função", a primeira linha da declaração de uma função, na qual 
podemos identificar o seu tipo de retorno, seu nome (identificador) e sua lista de 
parâmetros. 
Com base no que foi apresentado, assinale a alternativa que representa corretamente a 
assinatura da função "enfileirar" de uma fila. 
 
Sua resposta 
int enfileirar(struct Fila* f) 
 
Alternativa correta: void enfileirar(struct Fila* f, int item) void enfileirar(struct Fila* 
f). INCORRETA, pois falta informar o item a ser enfileirado. int enfileirar(struct Fila* 
f), INCORRETA, pois falta informar o item a ser enfileirado. Além disso, a função enfileirar 
não retorna qualquer valor, portanto, seu tipo de retorno deveria ser "void". void enfileirar(struct 
Fila* f, int item). CORRETA, pois informa corretamente a fila em que o elemento será inserido, 
o item a ser inserido e como a função não retorna qualquer valor, seu tipo de retorno é 
"void". void enfileirar(int item). INCORRETA, pois não informa a fila em que o elemento será 
inserido. void enfileirar(struct Fila* f, int item, int pos). INCORRETA, pois há um parâmetro 
desnecessário na assinatura da função, a saber "pos". Um vez que, em uma fila, os elementos são 
inseridos apenas no final, não há necessidade de se informar a posição em que o elemento deve 
ser inserido. 
 
 
 
 
 
40 
 
Questão 9 
Sem resposta 
A pilha é uma das estruturas de dados mais simples, apesar de estar entre as mais 
importantes, uma vez que são utilizadas em diversos tipos de aplicações, desde aplicações 
de escritório até sistemas operacionais e compiladores. Levando em consideração a 
estrutura de dados do tipo “Pilha”, analise as afirmativas a seguir: 
 
I. O elemento a ser removido da pilha é o que está há menos tempo na estrutura de 
dados. 
II. O elemento a ser removido da pilha é o que está há mais tempo na estrutura de dados. 
III. O elemento a ser inserido é colocado na base da pilha. 
Considerando o contexto apresentado, é correto o que se afirma em: 
• I, apenas. 
• I e III, apenas. 
• II, apenas. 
• II e III, apenas. 
• III, apenas. 
Sua resposta 
I, apenas. 
 
 
 
 
41 
 
Questão 10 
Sem resposta 
Conforme Mizrahi (2008) o escopo de uma variável é definido pelas regiões (blocos) 
onde a variável pode ser utilizada e é nesta hora que surge o conceitos das variáveis 
globais e variáveis locais. Variáveis globais são aquelas declaradas no início de um 
algoritmo. São visíveis, ou seja, podem ser utilizadas no algoritmo principal e por todos 
as funções. As variáveis locais são aquelas declaradas no início de uma função. São 
visíveis, ou seja, podem ser utilizadas somente pela função onde foram 
declaradas. Observe o programa a seguir: 
#include int fat (int 
n){ int res = 1; while (n > 
1) { res = res * n; n--
; } return res;}int main ( ){ int 
n, res; printf("Entre com o valor 
de n: "); scanf("%d", &n); res 
= fat(n+1) / 
(n+1); printf("Fatorial de %d = 
%d\n", n, res ); return 0;} 
 Considerando o programa apresentado, avalie as afirmativas a seguir: I. O programa 
apresentado está errado pois a variável res foi declarada duas vezes, causando um erro 
de compilação. II. A função fat está escrita antes da função main ( ) porém, o programa 
começa sempre pela função main ( ) independentemente da quantidade de funções que 
possam ter antes do main ( ). III. Para a função fat, o parâmetro n funciona como uma 
variável local (ou seja, válida dentro da função apenas), juntamente com a variável res. 
IV. A função fat possui a variável n e a variável n recebe seu valor no instante da 
chamada da função dentro da função main ( ). 
É correto o que se afirma em: 
 
Sua resposta 
Apenas as afirmativas II, III e IV estão corretas. 
 
 
 
 
42 
 
Questão 1 
Respondida 
Podemos remover um elemento da lista ligada, porém é necessário ter certos cuidados. De 
acordo com Celes (2004), a função para remover um elemento é mais trabalhosa e complexa, e 
precisa de informações como parâmetros para remoção, o valor do elemento e a lista. 
 
Tendo como referência a remoção de elementos de lista, avalie as seguintes asserções e a relação 
proposta entre elas: 
 
 
I. Caso o primeiro elemento da lista seja o elemento a ser retirado, devemos atualizar o valor da 
lista com o ponteiro para o segundo elemento e assim, liberar o espaço alocado do elemento 
retirado. 
 
 
PORQUE 
 
 
II. Se o elemento a ser retirado da lista pela função estiver no meio da lista, o elemento anterior 
deve apontar para o elemento seguinte do qual será removido e, após isso, liberarmos a alocação 
do elemento removido. 
Agora assinale a alternativa correta. 
• As afirmativas I e II são falsas. 
• A afirmativa I é verdadeira e afirmativa II é falsa. 
• A afirmativa I éfalsa e afirmativa II é verdadeira. 
• As afirmativas I e II são verdadeiras e a II é uma justificativa da I. 
• As afirmativas I e II são verdadeiras, mas a II não é uma justificativa da I. 
Sua resposta 
As afirmativas I e II são verdadeiras e a II é uma justificativa da I. 
 
 
 
 
43 
 
Questão 2 
Respondida 
Uma lista ligada ou lista encadeada é uma forma de estruturar dados para o seu armazenamento, 
ou seja, é determinar a forma de inseri-los ou removê-los, sendo necessário organizá-los em 
células e inserir um ponteiro que aponte para o primeiro elemento e outro que aponte para o seu 
fim. 
 
De acordo com Salvetti (1998, p.147) a busca consiste em verificar se um valor dado ocorre ou 
não na lista. Na Figura-1 podemos visualizar a função de busca em uma lista. 
 
Figura-1 - Lista de Busca 
 
Fonte: Werlich, 2017. 
 
Com base nas funcionalidades de busca de uma lista ligada, apresentada na Figura-1, avalie a 
sequência de busca proposta a seguir: 
 
 
 
• 1. Recebe a informação referente ao elemento a pesquisar 
 
• 2. Retorna NULL, caso o elemento não seja encontrado na lista. 
 
• 3. Retorna o ponteiro do nó da lista que representa o elemento. 
 
• 4. Percorre a lista até encontrar o elemento ou chegar ao fim da lista. 
A seguir assinale a alternativa que apresenta a ordem correta dos procedimentos realizados pela 
função. 
 
Sua resposta 
1 - 4 - 3 - 2 
 
 
 
44 
 
Questão 3 
Respondida 
Lista duplamente encadeada: Segundo ORTH (2002) afirma que Listas Duplamente Encadeadas 
possuem além de seus campos, mais dois nós (ou nodos). Um nó aponta para o próximo 
elemento da lista e outro para o último elemento da lista. Observe a Figura-1 a seguir. 
 
Figura-1 - Lista Duplamente Encadeada 
 
Fonte: Werlich, 2017. 
 
Com relação a Lista Ligada Duplamente Encadeada, avalie as seguintes afirmativas: 
 
I.Cada elemento tem um ponteiro para o próximo elemento e um ponteiro para o elemento 
anterior. 
 
 
• II.Dado um elemento, é possível acessar o próximo elemento e o elemento anterior. 
 
III. Dado um ponteiro para o último elemento da lista, é possível percorrer a lista em ordem 
inversa. 
A seguir assinale a alternativa correta. 
 
Sua resposta 
As afirmativas I, II e III estão corretas. 
 
 
 
 
 
 
 
 
 
45 
 
Questão 4 
Respondida 
Uma situação eu pode ocorrer é adicionar um elemento em uma Fila cheia ou remover um 
elemento de uma Fila vazia. Em ambos os casos seria impossível realizar as operações. Como 
solução, é importante sempre implementar as funções para verificar se a Fila está cheia 
(fila_cheia(F)) e para verificar se a Fila está vazia (fila_vazia(F)). Uma Fila Circular utiliza 
menos instruções a serem executadas, podendo ser mais adequada e eficiente na utilização de 
programação. Assim, com base em Filas Circulares, avalie as seguintes asserções e a relação 
proposta entre elas: 
I. Utiliza-se as Filas Circulares como solução para várias situações. 
PORQUE 
II. As Filas não apresentam uma solução completa, sendo que, mesmo chegando ao final do vetor 
poderemos ter a Fila cheia mesmo não estando ocupada, uma vez que elementos podem ter sido 
removidos. 
A seguir assinale a alternativa correta. 
• as asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I. 
• a asserção I é uma proposição verdadeira, e a II é uma proposição falsa 
• a asserção I é uma proposição falsa, e a II é uma proposição verdadeira. 
• as asserções I e II são proposições falsas. 
• as asserções I e II são proposições verdadeiras e a II é uma justificativa da I. 
Sua resposta 
as asserções I e II são proposições verdadeiras e a II é uma justificativa da I. 
 
 
 
 
 
 
 
46 
 
Questão 5 
Respondida 
Analise o trecho de programa a seguir: 
 
 
#include 
#include 
int* alocar(){ 
return malloc(200); 
} 
int main(){ 
int *memoria; 
memoria = alocar(); 
if(memoria != NULL){ 
printf("Endereco de memoria alocada = %x",memoria); 
} 
else{ 
printf("Memoria nao alocada"); 
} 
return 0; 
} 
 
Agora, avalie as seguintes asserções e a relação proposta entre elas. 
 
 
I - Foi criado um ponteiro inteiro e, após a função ser chamada, seu resultado foi armazenado no 
ponteiro chamado memoria. 
 
 
PORQUE 
 
II - Se o valor do ponteiro memoria é diferente de NULL, então sabe-se que a alocação foi feita 
com sucesso e imprime o endereço da primeira posição, caso contrário, o usuário é informado 
que a memória não foi alocada. 
A respeito dessas asserções, assinale a alternativa correta: 
 
Sua resposta 
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I. 
 
 
 
47 
 
 
Questão 6 
Sem resposta 
Conforme Tenenbaum et al. (2007, p. 225), uma lista é uma estrutura de dados dinâmica. O 
número de nós de uma lista pode variar consideravelmente à medida que são inseridos e 
removidos elementos. A natureza dinâmica de uma lista pode ser comparada à natureza estática 
de um vetor cujo tamanho permanece constante. 
Ao criar uma lista ligada, conforme a estrutura apresentada no parágrafo anterior, a lista é criada 
sem nenhum valor, ou seja, é vazia. Segundo Celes et al. (2004), para inserir um elemento na 
lista ligada, é necessário alocar o espaço na memória, de forma dinâmica, para armazenar o 
elemento e ligá-lo à lista existente. 
Pode-se inserir um elemento em uma lista em três situações diferentes. Ao inserir uma 
informação na lista ligada, é imprescindível que: 
 
Sua resposta 
seja atualizado o valor do nó dessa lista, assim a lista ligada deve apontar ao novo elemento da 
lista. 
 
Conforme conceito de inserção de elementos, a resposta certa é: Pode-se inserir um elemento 
em uma lista em três situações diferentes. Ao inserir uma informação na lista ligada, é 
imprescindível que seja atualizado o valor do ponteiro dessa lista, assim a lista ligada deve 
apontar ao novo elemento da lista. 
 
 
 
 
 
 
 
 
 
 
 
 
48 
 
Questão 7 
Sem resposta 
A estrutura de Fila é do tipo FIFO (First in, First out), ou seja, o primeiro elemento que entra na 
fila é o primeiro elemento a ser removido, assim, todo primeiro elemento que entra na fila por 
uma extremidade, saíra primeiro pela outra extremidade. Um aluno afirmou que a estrutura de 
Fila é muito similar a uma fila de espera de um caixa eletrônico em um banco ou até mesmo uma 
fila para passar as compras em um mercado. Considerando o contexto apresentado, avalie as 
seguintes asserções e a relação proposta entre elas. 
I. Um função que podemos implementar na Fila, é a de verificação se a Fila está vazia ou não. 
No trecho de remoção de um elemento da Fila, já realizamos a chamada a esta função, e ela pode 
ser implementada com o trecho de código a seguir: int fila_vazia (Fila* f) { return (f -> n == 
0); } 
PORQUE 
II. É impossível remover um elemento de uma Fila vazia. 
Agora assinale a alternativa correta. 
 
Sua resposta 
a asserção I é uma proposição verdadeira, e a II é uma proposição falsa. 
 
Resposta incorreta! Uma situação que pode ocorrer é adicionar um elemento em uma Fila cheia 
ou remover um elemento de uma Fila vazia. Em ambos os casos seria impossível realizar as 
operações. Como solução, é importante sempre implementar as funções para verificar se a Fila 
está cheia (fila_cheia(F)) e para verificar se a Fila está vazia (fila_vazia(F)). Assim, as 
asserções I e II são proposições verdadeiras, e a II é o motivo que justificativa da implementação 
da I. 
 
 
 
 
 
 
 
 
49 
 
Questão 8 
Sem resposta 
Segundo Celes et al. (2004), para inserir um elemento na lista ligada, é necessário alocar o 
espaço na memória, de forma dinâmica, para armazenar o elemento e ligá-lo à lista existente. 
Inserir um novo elemento no início da lista é a forma mais simples de inserção em uma lista 
ligada. É possível implementar a funçãopara adicionar um novo elemento em mais dois pontos 
da lista. A figura 1 a seguir, mostra uma possibilidade de inserção de elemento: Figura 1 – 
Inserção de 
elemento: Fonte: elaborada 
pelo autor. 
A inserção do elemento mostrado na imagem anterior se da 
• no início da lista. 
• no final da lista. 
• primeiro da lista. 
• no nulo da lista. 
• no meio da lista. 
Sua resposta 
no meio da lista. 
 
 
 
 
50 
 
Questão 9 
Sem resposta 
Uma pilha é uma estrutura de dados do tipo LIFO (Last in, First out), ou seja, na qual o último 
elemento a entrar é o primeiro a sair. Assim, nos elementos que ainda permanecem, o que está no 
topo da pilha será o primeiro a ser removido. 
 
Neste contexto, julgue as afirmações que se seguem. 
 
I. Uma estrutura de pilha, devem ser implementadas duas operações básicas: empilhar um novo 
elemento e desempilhar um elemento. 
 
 
• II. A operação de empilhar um novo elemento tem a função de inserir um elemento na pilha, 
sendo definida na programação em C++ como push_pilha( ). 
 
 
 
III. A operação de desempilhar tem a função de remover um elemento do topo da pilha, 
sendo utilizada na programação em C++ como pop_pilha( ). 
É correto apenas o que se afirma em: 
• I. 
• II. 
• III. 
• I e II. 
• I, II e III. 
Sua resposta 
I, II e III. 
 
 
 
 
 
51 
 
Questão 10 
Sem resposta 
As listas ligadas são estruturas de dados conhecidas por serem flexíveis quanto às suas operações 
e seu tamanho é dinâmico. Toda lista é composta por nós, e o nó é um conjunto de informações 
que permitem apontar para o próximo elemento. 
Considere a organização das pessoas na fila do banco, porém seu funcionamento coerente 
depende do comportamento da lista ligada, então aplique o conceito de inserção em listas ligadas 
para assinalar a alternativa correta: 
• As listas só permitem inserção de elementos em seu início. 
• As listas só permitem inserção de elementos em seu fim. 
• As listas só permitem inserção de elementos em seu início ou seu fim. 
• As listas não permitem sobreposição ao inserir elementos. 
• As listas permitem inserção de elementos em qualquer posição. 
Sua resposta 
As listas permitem inserção de elementos em qualquer posição.

Mais conteúdos dessa disciplina