Buscar

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

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 52 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 52 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 52 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

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. 
 
 
 
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. 
 
 
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. 
 
 
 
 
 
 
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. 
 
 
 
 
 
 
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. 
 
 
 
 
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 <stdio.h> 
int fatNaoRecursivo(int n){ 
 if(n<2) return 1; 
 int f=1; 
 int i; 
 for(i=2; i<=n; i++) f*=i; 
 return f; 
} 
int fatRecursivo(int n){ 
 if(n<2) return 1; 
 return fatRecursivo(n-1)*n; 
} 
int main() 
{ printf("%d\n",fatNaoRecursivo(6)); 
 printf("%d\n",fatRecursivo(6)); 
 return 0; 
} 
Analisando o programa proposto, assinale a alternativa correta. 
Sua resposta 
Correta 
O programa demonstra o uso de duas funções, uma com recursividade e a outra não, as duas 
funções funcionam, a diferença está na quantidade de linha entre as duas técnicas. e não há erros 
de compilação. 
 
 
 
Questão 2 
Correta 
Questão com problema? 
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 <stdio.h>#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. 
 
 
 
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. 
 
 
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 <stdio.h>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. 
 
 
 
Questão 5 
Correta 
Questão com problema? 
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. 
 
 
 
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: 
• 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 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. 
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. 
 
 
 
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 
• I. 
• II. 
• III. 
• II e III. 
• I e III. 
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. 
 
 
 
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 <stdio.h>#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. 
• O programa está errado pois não foi utilizado um ponto e vírgula após o int main 
( ) e o programa deverá ficar da seguinte forma: int main ( ); . 
• O erro do programa é o tipo de retorno da função, deveria ser utilizado o 
tipo int, ficando da seguinte forma: int raio ( ); . 
• O problema do programa é que o nome da função é raio, como é um cálculo 
não podemos chamar uma função com o nome do cálculo que será 
executado. 
• O erro do programa está no return 0, quando há função no programa 
devemos obrigatoriamente utilizar o return 1. 
• 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. 
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 <stdio.h> #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; } 
 
 
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. 
• 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. 
 
 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. 
 
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 <- topo 3 0 1 1 Função: void func(struct 
Pilha* p) { 
assert(p != NULL); struct Pilha* aux = criar(); 
int x = 0; 
 
while(vazia(p) == false) { 
empilhar(aux, desempilhar(p)); 
} while(vazia(aux) == false) { 
int elemento = desempilhar(aux); 
x += elemento; 
empilhar(p, elemento); 
} 
 
empilhar(p, x); liberar(aux); 
} 
Assinale a alternativa que apresenta corretamente o elemento que estará no topo da 
pilha "p", após a execução da função "func" sobre essa pilha. 
• 0. 
• 9. 
• 5. 
• 4. 
• A função contém erro e, portanto, não pode ser compilada e executada. 
Sua resposta 
4. 
 
Alternativa correta: 9 Considerando a função "func" a seguir: 01. void func(struct Pilha* p) { 
02. assert(p != NULL); 03. struct Pilha* aux = criar(); 
04. int x = 0; 
05. 
06. while(vazia(p) == false) { 
07. empilhar(aux, desempilhar(p)); 
08. } 09. while(vazia(aux) == false) { 
10. int elemento = desempilhar(aux); 
11. x += elemento; 
12. empilhar(p, elemento); 
13. } 
14. 
15. empilhar(p, x); 16. liberar(aux); 
17. } A função "func" é responsável por somar todos os elementos contidos em uma pilha e, 
posteriormente, empilhar o resultado nesta pilha. Contudo, para que isso seja feito sem alterar a 
ordem dos elementos da pilha "p", inicialmente os elementos devem ser inseridos em uma pilha 
auxiliar "aux" (linhas 6 a 8). Logo após, os elementos são removidos da pilha "aux" e 
devolvidos para a pilha "p" (linhas 9 a 13). Durante esse processo, os elementos da pilha são 
somados e o valor da soma é armazenado na variável "x" (linha 11). Por fim, o valor de "x" é 
empilhado na pilha "p" (linha 15). Dessa forma, o topo sempre conterá a soma de todos os 
elementos da pilha. Considerando a pilha "p" a seguir, o resultado a ser colocado no topo será 
9. Pilha "p": 4 <- topo 3 0 1 1 
 
 
 
 
Questão 8 
Sem resposta 
Leia o trecho de programa a seguir: #include<stdio.h> 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: 
• 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 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. 
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. 
 
 
 
 
Questão 9 
Sem resposta 
Um mecanismo utilizado para organizar nossa informação e prover operações 
convenientes eeficientes 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 
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". 
 
 
 
 
 
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: 
• 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. 
 
 
Questão 1 
Correta 
Questão com problema? 
Para criar uma função utiliza-se a seguinte sintaxe: 
 
 
<tipo de retorno> <nome> (<parâmetros>) 
{ 
<comandos da função> 
<retorno> ( ) 
} 
 
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. <tipo de retorno> A. Identificará a função. 
 II. <nome> 
B. Indica qual o tipo de valor a função 
retornará. 
 III. <parênteses 
depois do nome> 
C. Toda função terá o nome 
acompanhado por eles. 
 IV. <comandos da 
função> 
D. Se for void é opcional, porém, 
quando não for void é obrigatório. 
 V. <retorno> 
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. <tipo de retorno> - Indica qual o tipo de valor a função 
retornará. <nome> - Identificará a função. <parênteses depois do nome> - Toda função terá o 
nome acompanhado por eles. <comandos da função> - Só justifica criar se tiver um conjunto de 
comandos para realizar. <retorno> - Se for void é opcional, porém, quando não for void é 
obrigatório. 
 
 
 
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 <stdio.h>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áveln 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. 
Comentário 
A frase corretamente preenchida é: Apenas as afirmativas II, III e IV estão corretas. A 
função main e fat possuem ambas variáveis com o nome res, e que main possui uma variável 
chamada n, que é o nome do parâmetro da função fat. Apesar do mesmo nome, elas são 
variáveis diferentes. 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. A diferença é que o 
parâmetro n recebe seu valor no instante da chamada. O programa sempre inicia sua execução 
pela função main. 
 
 
 
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 <stdio.h> 
int fatNaoRecursivo(int n){ 
 if(n<2) return 1; 
 int f=1; 
 int i; 
 for(i=2; i<=n; i++) f*=i; 
 return f; 
} 
int fatRecursivo(int n){ 
 if(n<2) return 1; 
 return fatRecursivo(n-1)*n; 
} 
int main() 
{ printf("%d\n",fatNaoRecursivo(6)); 
 printf("%d\n",fatRecursivo(6)); 
 return 0; 
} 
Analisando o programa proposto, assinale a alternativa correta. 
Sua resposta 
Correta 
O programa demonstra o uso de duas funções, uma com recursividade e a outra não, as duas 
funções funcionam, a diferença está na quantidade de linha entre as duas técnicas. e não há erros 
de compilação. 
Comentário 
A frase corretamente preenchida é: O programa demonstra o uso de duas funções, uma com 
recursividade e a outra não, as duas funções funcionam, a diferença está na quantidade de linha 
entre as duas técnicas. O programa apresenta a diferença entre uma função com recursividade e 
uma função sem recursividade, podemos observar que existe uma grande diminuição na 
quantidade de linhas utilizadas para programar. 
 
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 <stdio.h>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. 
Comentário 
A frase corretamente preenchida é: O * é para o ponteiro e o & é para a passagem de parâmetros 
por referência. Com o uso do & a passagem por referência, os valores das variáveis são 
alterados. Usamos asterisco para o ponteiro acessar o conteúdo guardado dentro do endereço que 
ele aponta. 
 
 
 
 
 
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. 
Comentário 
A frase corretamente preenchida é: As asserções I e II são proposições verdadeiras, mas a II é 
uma justificativa da I. Para otimizar a memória, utilizamos a recursividade em cauda. Nesse tipo 
de técnica a recursividade funcionará como uma função iterativa. Porque, 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. 
 
 
 
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. 
Comentário 
As listas permitem inserção de elementos em qualquer posição, basta que os ponteiros sejam 
atualizados para isto. 
 
 
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: Q <- 
topo P R J M L K X Remoção de quatro elementos: M <- topo L K X 
 
 
 
Questão 3 
Correta 
Questão com problema? 
A lista representa um conjunto dinâmico cujos elementos podem ser inseridos e retirados de 
qualquer parte da estrutura. Dentre as principais operaçõesque devem estar presentes em uma 
ED do tipo fila estão: inserir, remover e obter. 
 
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 "obter" de uma lista. 
Sua resposta 
Correta 
int obter(struct Lista* li, int pos) 
Comentário 
Alternativa correta: int obter(struct Lista* li, int pos) void obter(struct Lista* 
li). INCORRETA, pois a função deveria receber a posição do elemento a ser obtido da lista. 
Além disso, seu tipo de retorno deveria ser "int", uma vez que o elemento obtido deve ser 
retornado pela função. int obter(struct Lista* li). INCORRETA, pois a função deveria receber a 
posição do elemento a ser obtido da lista. void obter(struct Lista* li, int pos). INCORRETA, 
pois o tipo de retorno deveria ser "int", uma vez que o elemento obtido deve ser retornado pela 
função. int obter(struct Lista* li, int pos). CORRETA, pois a função recebe a lista a partir da 
qual o elemento deve ser obtido. Além disso, seu tipo de retorno é "int", uma vez que o elemento 
obtido deve ser retornado pela função. Por fim, recebe a posição do elemento a ser obtido da 
lista. int obter(struct Lista* li). INCORRETA, pois a função deveria receber a posição do 
elemento a ser obtido da lista. int obter(int pos). INCORRETA, pois a função deveria receber a 
lista a partir da qual o elemento deve ser obtido. 
 
 
 
 
 
 
 
 
 
Questão 4 
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. 
 
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: 
Sua resposta 
Correta 
II e III, apenas. 
Comentário 
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 
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". 
 
 
 
 
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. 
 
 
 
 
 
 
 
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 <stdio.h>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): 
• O * é para a passagem de parâmetros por valor e o & é para a passagem de 
parâmetros por referência. 
• O * é para o ponteiro e o & é para a passagem de parâmetros por referência. 
• O * é para o vetor e o & é para o ponteiro. 
• O * é para o ponteiro e o & é para a variável local. 
• O * é para variável local e o & é para a variável global. 
Sua resposta 
O * é para o ponteiro e o & é para a passagem de parâmetros por referência. 
 
 
 
 
 
 
 
 
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 querepresenta corretamente o nome das 
estruturas que implementam os protocolos FIFO e LIFO, respectivamente. 
• Fila e Lista. 
• Lista e Fila. 
• Pilha e Fila. 
• Pilha e Lista. 
• Fila e Pilha. 
Sua resposta 
Fila e Pilha. 
 
 
 
 
 
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. 
 
 
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: 
• 1 – C; 2 – A; 3 – B; 4 – D; 5 – E. 
• 1 – E; 2 – A; 3 – D; 4 – B; 5 – C. 
• 1 – E; 2 – D; 3 – A; 4 – C; 5 – B. 
• 1 – C; 2 – A; 3 – D; 4 – B; 5 – E. 
• 1 – E; 2 – A; 3 – C; 4 – B; 5 – D. 
Sua resposta 
1 – E; 2 – A; 3 – D; 4 – B; 5 – C. 
 
 
 
 
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: 
• Somente a afirmativa IV estão corretas. 
• Somente as afirmativas I e II estão corretas. 
• Somente as afirmativas II e III estão corretas. 
• Somente as afirmativas I, III e IV estão corretas. 
• As afirmativas I, II, III e IV estão corretas. 
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. 
 
 
 
 
 
Questão 6 
Sem resposta 
Analise o trecho de programa a seguir: #include<stdio.h> #include<stdlib.h> 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: 
• 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 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. 
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. 
 
 
 
 
 
 
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: 
• armazenadas / uma pilha / operação de refazer / restaurado / realizada. 
• aplicadas / uma pilha / operação de desfazer / eliminado / contrária à realizada. 
• armazenadas / uma pilha / operação de desfazer / restaurado / contrária à 
realizada. 
• armazenadas / várias pilhas / operação de desfazer / eliminado / realizada. 
• aplicadas / uma pilha / operação de refazer / restaurado / contrária à realizada. 
Sua resposta 
armazenadas / uma pilha / operação de desfazer / restaurado / contrária à realizada. 
 
 
 
 
 
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, desenfileirare 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. 
• void enfileirar(struct Fila* f) 
• int enfileirar(struct Fila* f) 
• void enfileirar(struct Fila* f, int item) 
• void enfileirar(int item) 
• void enfileirar(struct Fila* f, int item, int pos) 
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. 
 
 
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. 
 
 
 
 
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 <stdio.h>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: 
• Apenas as afirmativas II, III e IV estão corretas. 
• Apenas as afirmativas I, III e IV estão corretas. 
• Apenas as afirmativas I, II e III estão corretas. 
• Apenas as afirmativas I, II e IV estão corretas. 
• As afirmativas I, II, III e IV estão corretas. 
Sua resposta 
Apenas as afirmativas II, III e IV estão corretas. 
 
 
 
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. 
 
 
 
 
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. 
• 1 - 2 - 3 - 4 
• 1 - 4 - 3 - 2 
• 4 - 2 - 3 - 1 
• 2 - 4 - 3 - 1 
• 3 - 2 - 1 - 4 
Sua resposta 
1 - 4 - 3 - 2 
 
 
 
 
 
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. 
• Somente a afirmativa I está correta. 
• Somente a afirmativa II está correta. 
• Somente as afirmativas I e III estão corretas. 
• Somente as afirmativas II e III estão corretas. 
• As afirmativas I, II e III estão corretas. 
Sua resposta 
As afirmativas I, II e III estão corretas. 
 
 
 
 
 
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. 
 
 
 
 
 
Questão 5 
Respondida 
Analise o trecho de programa a seguir: 
 
 
#include<stdio.h> 
#include<stdlib.h> 
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: 
• 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 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. 
Sua resposta 
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I. 
 
 
 
 
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: 
• seja atualizado o valor do ponteiro dessa lista, assim a lista ligada deve apontar ao novo 
elemento da lista. 
• seja atualizado o valor do nó dessa lista, assim a lista ligada deve apontar ao novo 
elemento da lista. 
• seja atualizado o valor da lista ligada, assim ela deve apontar ao novo elemento da lista. 
• seja atualizado o valor do ponteiro dessa lista, assim a lista ligada deve apontar ao último 
elemento da lista. 
• seja atualizado o valor do nó dessa lista, assim a lista ligada deve apontar ao último 
elemento da lista. 
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. 
 
 
 
 
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. 
• as asserções I e II são proposições verdadeiras, mas a II não é o motivo que justificativa 
da implementação 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 é o motivo que justificativa da 
implementação da I. 
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. 
 
 
 
 
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ção para 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. 
 
 
 
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 removerum 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. 
 
 
 
 
 
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.

Continue navegando