Buscar

Exercícios AVA (com resposta) - Algoritmos e Programação Estruturada

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

1)Pseudocódigos é considerado uma ferramenta que pode auxiliar a programação, ela pode ser escrita em palavras similares ao inglês ou português para facilitar a interpretação e desenvolvimento de um programa. Neste contexto, analise o seguinte algoritmo escrito em pseudocódigo.
var
real: v1, v2, v3, v4, N1, x;
Início
escreva ("Digite Nota 1:");
leia v1;
escreva ("Digite Nota 2:");
leia v2;
escreva ("Digite Nota 3:");
leia v3;
escreva ("Digite Nota 4:");
leia v4;
N1 ← v1 + v2 + v3 + v4;
x ← N1 / 4;
escreva("Resultado = ", x);
Fim.
Agora, assinale a alternativa correta. 
Alternativas:
· a)
Este algoritmo armazena as notas em variáveis para depois realizar um calculo onde o restado final é armazenado em X e por fim é exibido.
· b)
Este algoritmo armazena as notas em variáveis para depois realizar um calculo onde o restado final é armazenado em N1 e por fim é exibido.
· c)
Este algoritmo não armazena as notas em variáveis, o calculo é realizado diretamente em N1 e o restado final é armazenado em X e por fim é exibido.
· d)
Este algoritmo não armazena as notas em variáveis, o calculo é realizado diretamente em X e o restado final é armazenado em N1 e por fim é exibido.
· e)
Este algoritmo não exibi nenhum resultado.
2)Forbellone e Eberspächer (2000) afirmam que uma constante é um tipo de variável que não poderá sofrer alterações durante o processamento das variáveis em um programa. Existem duas maneiras de definir constantes na linguagem de programação C utilizando a palavra reservada const e da diretiva de pré-processamento: #define. É apropriado que a declaração de uma constante seja realizado no começo do programa.
Observe o programa que calcula o valor da área e da circunferência de um círculo:
	
	#include
#define pi 3.1415
int main()
1. {
2. float r, area, circunferencia;
3. 
4. printf("Digite o raio: ");
5. 
6. scanf("%f",&r);
7. 
8. 
9. area = pi * r * r;
10. 
11. circunferencia = 2 * pi * r;
12. 
13. printf("Area do circulo = %.2f \n",area);
printf("Circunferencia = %.2f\n",circunferencia);
return 0;}
Assinale a opção correta que apresenta como utilizar uma constante no programa em C ao invés de utilizarmos a diretiva #define que aparece na linha 2 do programa apresentado. 
Alternativas:
· a)
constante float pi= 3.1415;
· b)
float const pi=3.1415;
· c)
const float pi= 3.1415;
· d)
const int pi := 3.1415;
· e)
const float 3.1415;
3)Variáveis com estruturas compostas do tipo vetor ou matriz, só são capazes de armazenar valores de um mesmo tipo, porem, além das estruturas homogêneas as linguagens de programação oferecem um tipo de variável composta heterogênea chamada de estruturas (structs) ou ainda de registros.
Na linguagem C, a criação de uma estrutura deve ser feita antes da função main() e deve possuir a seguinte sintaxe: 
Alternativas:
· a)
struct ; ; ; ... ;
· b)
struct { ; ; ... };
· c)
struct { ; ; ... };
· d)
struct { ; ; ... };
· e)
struct{ ; ; ... };
4)A lógica de programação pode ser definida como uma técnica de encadear pensamentos para atingir determinado objetivo. Ela faz-se necessária para desenvolver programas e sistemas, pois permite definir a sequência lógica para a solução de um problema.
	1
	var
real: x, y, z;
	2
	Início
	3
	escreva ("Digite um Numero:");
leia x;
escreva ("Digite outro Numero:");
leia y;
	4
	z ← x + z + 1;
escreva("Resultado = ", z);
	5
	Fim.
Considerando o algoritmo apresentado, julgue as afirmações que seguem e marque (V) para verdadeiro ou (F) para falso.
( ) A parte 1 do pseudocódigo indica a declaração das variáveis que são compatíveis com qualquer tipo de dados.
( ) A parte 3 do pseudocódigo corresponde a entrada de dados do algoritmo.
( ) A parte 4 do pseudocódigo corresponde tando a parte de processamento quanto a parte de saída de dados do algoritmo..
Agora, assinale a alternativa que contém sequência correta. 
Alternativas:
· a)
F - V - V.
· b)
F - V - F.
· c)
V - V - V.
· d)
V - V - F.
· e)
F - F - F.
1)Cada programa C tem uma função principal que deve ser nomeada main. Se o seu código obedece ao modelo de programação Unicode, você pode usar a versão de main para caracteres largos, wmain. A função main serve como o ponto de partida para a execução do programa. Em geral, ela controla a execução direcionando as chamadas para outras funções no programa. Normalmente, um programa para de ser executado no final de main, embora possa ser terminado em outros pontos por diversos motivos.
Para o programa apresentado a seguir retornar apenas os números pares de 1 a 10 deverá possuir alguns parâmetros, complete as lacunas da sentença a seguir.
 
#include <stdio.h>
int main( )
{
int count = ____________;
while(count <= ____________)
     {
if(count%____________ == 0)
printf("%d ",count);
count++;
     }
}
Assinale a alternativa que completa as lacunas corretamente.
Alternativas:
· a)
1 / 10 /  2.
· b)
0 / 9 / 1.
· c)
1 / 9 / 2.
· d)
0 / 10 / 2.
· e)
0 / 10 / 1.
2)A estrutura de repetição do-while parte do princípio de que deve-se fazer algo primeiro e só depois comparar uma variável para saber se o loop será executado mais uma vez. O uso desse comando deve proceder da seguinte maneira: DO {bloco de instruções} WHILE (comparação);
 Fonte:Disponível em< http://www.tiexpert.net/programacao/c/do-while.php> Acesso.16.Jul201. (Adaptado)
   Nesse contexto, organize os procedimentos a seguir  para o correto uso da estrutura de repetição do while.
1) Escrever tudo que o do deve fazer no bloco de instruções.
2) Neste caso, colocar ponto-e-vírgula após a comparação do while.
3) No final do bloco colocar o while.
4) Usar do.
5) A comparação deve ser colocada entre parênteses.
Assinale a alternativa que contém a sequência correta:
Alternativas:
· a)
1-3-5-2-4.
· b)
3-4-5-1-2.
· c)
5-2-4-1-3.
· d)
4-1-3-5-2.
· e)
2-3-4-5-1.
3)Analise o trecho de programa a seguir e responda:
 
#include <stdio.h>
main()
{
int w;
for ( w = 1; w <= 15; w++ )
{
if ( w == 8 )
{
break;
}
printf ( “%d “, w );
}
printf( “\n \n Parar a condicao de repeticao w = %d \n”, w );
return 0;
}
Observe que dentro de um laço “for” para uma determinada condição, existe um comando forçando o término do laço. Que comando é esse?
Alternativas:
· a)
stop.
· b)
break.
· c)
for.
· d)
if.
· e)
end.
4)A figura a seguir, demonstra o fluxograma do comando for:
 
Figura  - Fluxograma de repetição com variáveis de controle.
Fonte: do autor.
 
Baseado na figura anterior , a sintaxe é definida como:
 
for(inicialização; condição final; incremento)
{
comandos;
}
 
Veja que na aplicação do comando “for” aparecem três expressões separadas por ponto e vírgula.Neste contexto, julgue as afirmações que se seguem.
 
 I. Inicialização – é neste momento que é colocado a instrução de repetição. A inicialização é executada uma única vez antes de começar o laço.
 II. Condição final – é realizado um teste onde é determinado se a condição é verdadeira ou falsa. Enquanto for falsa permanece no laço e quando for verdadeira, encerra o laço e passa para a próxima instrução.
III. Incremento – onde é possível incrementar uma repetição de acordo com um contador específico, lembrando que o incremento é executado depois dos comandos.
É correto apenas o que se afirma em:
Alternativas:
· a)
I.
· b)
II.
· c)
III.
· d)
I e III.
· e)
I e II.
1)As funções são utilizadas nos programas para acelerar o processo de programação. Muitas vezes precisamos fazer o mesmo tipo de programa que tem a seguinte opção: “leia um vetor de N números”.  Para essa atividade, podemos criar uma função que gera automaticamente o vetor, utilizando a função rand (). A função rand () gera números aleatórios e basta então inserir esses números em um vetor.  Suponha que seja necessário ordenar o vetor. As linguagens de programação já possuem métodos de ordenação, os mais populares métodos de ordenação são: Insertion Sort, Selection Sort, Bubble Sort, Comb Sort, Quick Sort, Merge Sort, Heap Sort e Shell Sort.
 
Observe atentamente o programa que demonstra o uso das funções para gerar o vetor e para ordenar o vetor com o método Bubble Sort:#include<stdio.h>
#include <stdlib.h>
int r[10];
 
void gerarRandomico(){
int a;
for(a = 0; a < 10; ++a) {
r[a] = rand()%100;
}}
 
void ordena(){
 int i, j, aux;
for( i=0; i<10; i++ ){
  for( j=i+1; j<10; j++ ){
    if( r[i] > r[j] ){
      aux = r[i];
      r[i] = r[j];
      r[j] = aux;
    }}}}
 
int main(){
int i;
gerarRandomico();
ordena();
for ( i = 0; i < 10; i++ ) {
printf("\n Vetor[%d] = %d", i, r[i]);}
return 0; }
 
Tomando como referência o contexto apresentado, julgue as afirmativas a seguir em (V) Verdadeiras ou (F) Falsas .
(    ) Uma função criada para retornar um valor char, o comando return somente poderá retornar o valor char.
(    ) Uma função pode ser chamada quantas vezes forem necessárias para realizar uma tarefa, a única exceção é de que não podemos fazer essa chamada dentro de uma estrutura de repetição for ( ), somente poderá ser utilizado o comando while ( ).
(    ) No programa apresentado, existem duas funções que não utilizam o return porque elas são do tipo void.
(    ) A variável que foi utilizada no comando for ( i = 0; i < 10; i++ ) foi declarada como tipo int e deveria ser float pois, quando usamos vetores os números podem ser maiores.
(    ) No programa apresentado foi utilizado duas funções pois, cada função tem um objetivo específico, devemos evitar misturar as funcionalidades das funções.
Assinale a alternativa que apresenta a sequência correta:
Alternativas:
· a)
V – V – V – V – V.
· b)
F – V – V – F – V.
· c)
F – F – V– F – V.
· d)
V – F – V – F – V.
· e)
F – F – F – F – F.
2)É comum utilizarmos ponteiros com funções. Um caso importante de ponteiros com funções é na alocação de memória dinâmica. A função malloc ( ) pertencente a biblioteca <stdlib.h> é usada para alocar memória dinamicamente. Entender o tipo de retorno dessa função é muito importante, principalmente para seu avanço, quando você começar a estudar estruturas de dados.
 
Observe atentamente o programa que demonstra o uso de funções:
 
	#include<stdio.h>
#include<stdlib.h>
int* alocar(){
return malloc(200);
}
int main(){
int *memoria;
memoria = alocar();
if(memoria != NULL){
printf("Endereço de memória alocada = %x",memoria);
}
else{
printf("Memória não alocada");
}
return 0;
}
 Conforme demonstrado no programa apresentado a função malloc ( ) irá reservar um espaço de memória dinamicamente, a função malloc ( ) pode retornar dois valores e são eles:
Alternativas:
· a)
 null  ou um ponteiro genérico (ponteiro genérico é do tipo void)
· b)
 int  ou um ponteiro genérico (ponteiro genérico é do tipo void)
· c)
 float  ou um ponteiro genérico (ponteiro genérico é do tipo void)
· d)
 char  ou numérico (int ou float)
· e)
 string  ou  null
3)O escopo é dividido em duas categorias, local ou global. Quando se tem variáveis que ambas são locais, elas existem e são notadas somente dentro do corpo da função onde foram definidas. Para definir uma variável global é preciso criá-la fora da função, assim ela será visível por todas as funções do programa.
Fonte: SCHEFFER, V.C. Escopo e passagem de parâmetros.
 
 Nesse contexto, analise as asserções a seguir:
I - A utilização de variáveis globais permite dimensionar o uso da memória.
 II -  As  funções e procedimento tem  pouca relevância em programação.
III -  As variáveis locais são criadas e mantidas na memória ao fim da função
 IV - As variáveis globais permanecem na memória durante todo o tempo de execução.
É correto apenas o que se afirma em:
Alternativas:
· a)
I e II.
· b)
III e IV.
· c)
II e III.
· d)
I e IV.
· e)
I, II, III e IV.
4)Analise a figura a seguir.
 
Fonte: elaborada pela autora.
 
Para compreender o mecanismo  apresentado na imagem anterior, organize as operações em sequência correta:
 
1 -  Chamada a função funcaoRecursiva(), que por sua vez, possui em seu corpo um comando que invoca a si mesma.
2 -  Na terceira instância, uma determinada condição de parada é satisfeita.
3 - Um novo espaço é alocado, com variáveis e comandos. Como a função é recursiva, novamente ela chama a si mesma, criando então a terceira instância da função.
4 -  Cada instância da função passa a retornar seus resultados para a instância anterior.
5 -  Nesse momento é criada a segunda instância dessa função na memória de trabalho.
Assinale a alternativa que contém a sequência correta:
Alternativas:
· a)
1-3-5-2-4.
· b)
4-5-3-2-1.
· c)
1-5-3-2-4.
· d)
1-5-2-4-3.
· e)
2-5-1-3-4.
1)Sabemos que um algoritmo é uma sequência logica de procedimentos para conseguir chegar a um resultado desejado. Existem diversos tipos de algoritmos, dentre eles, podemos citar: Linguagem natural , Diagramas de blocos (fluxograma) e os Pseudocódigos. Neste contexto, relacione corretamente as colunas a seguir.
 
	Coluna -A
	Coluna -B
	a - Linguagem natural 
	1 - Um conjunto de símbolos gráficos, onde cada um desses símbolos representa ações especificas a serem executadas pelo computador.
	b - Diagramas de blocos (fluxograma)
	2 - Considerado uma ferramenta que pode auxiliar a programação, ela pode ser escrita em palavras similares ao inglês ou português para facilitar a interpretação e desenvolvimento de um programa.
	c - Pseudocódigos
	3 - Na definição geral é uma forma de comunicação entre as pessoas de diversas línguas, ela pode ser falada, escrita, gesticulada entre outras formas de comunicação, tem uma grande contribuição quando vamos desenvolver uma aplicação computacional, pois ela pode direcionar de forma simples e eficiente as descrições dos problemas e suas soluções.
Assinale a alternativa que apresenta a associação CORRETA:
Alternativas:
· a)
a-3, b-1, c-2.
· b)
a-3, b-2, c-1.
· c)
a-1, b-3, c-2.
· d)
a-1, b-2, c-3.
· e)
a-2, b-3, c-1.
2)
Cada país e região tem sua língua nativa, dessa mesma forma ocorrem com as linguagem de programação, cada linguagem existe uma sintaxe a ser seguida, por isso é fundamental entender todos os componentes de uma determinada linguagem de programação, para conseguir programar.
 
Tomando como referência as definições e características de Algoritmos e Linguagem de Programação, julgue as afirmativas a seguir  e marque (V)  para verdadeiras ou (F) para falso.
(   ) Em algoritmos a forma de escrever (maiúsculas e minúsculas) não acarretará em erros, porém, em linguagem de programação C é preciso diferenciar as palavras em letras maiúsculas e minúsculas.
(   )  As sintaxes (instrução) deverão ser escritas e armazenada na memória do computador na mesma ordem que se espera ser executada, ou seja, ela pode ser linear
(executada sequencialmente) e não linear (executada de forma a serem redirecionadas, isto é, uma instrução de bifurcação).
(   ) Um programa é uma sequência de código organizada de tal forma que, na maioria dos casos, permita resolver um determinado problema. Um programa pode ser desenvolvido em módulos distintos e/ou em subprogramas.
Assinale a alternativa que apresenta a sequência correta.
Alternativas:
· a)
V - F - V.
· b)
V - V - F.
· c)
F - V - V.
· d)
F - V - F.
· e)
V - V - V.
3)
Para se usar uma variável em uma linguagem de programação é preciso criá-la e para isso usase a seguinte sintaxe: <tipo> <nome_da_variavel>;
Com relação a criação de variáveis na linguagem C, complete as lacunas da sentença a seguir:
 
#include <stdbool.h>
void main(){
  ____ idade = 23;
  ____ salario = 750.50;  
  ____ confirma = false;
  ____ genero = 'M';
}
Assinale a alternativa que completa as lacunas corretamente:
Alternativas:
· a)
float / float / char / bool.
· b)
int / int / bool / char.
· c)
float / int / char / bool.
· d)
int / float / bool / char.
· e)
bool / float / char / bool.
4)
Na programação, uma variável é um objeto (uma posição, frequentemente localizada na memória) capaz de reter e representar um valor ou expressão. Enquanto as variáveis só "existem" em tempo de execução, elas são associadas a "nomes", chamados identificadores, durante o tempo de desenvolvimento. Com relação aos tipos de variáveis, complete as lacunas da sentença a seguir:
 
Além das variáveis primitivas e compostas existe um tipo de variável muito especialna linguagem C chamada de ____________, são usadas exclusivamente para armazenar endereços de memória. Para acessa-las são usados dois operadores, o ____________ usado para criação do ponteiro e o ____________ usado para acessar o endereço da memória, por isso é chamado de operador de referência.
Assinale a alternativa que completa as lacunas corretamente:
Alternativas:
· a)
ponteiro / * (asterisco) / & (e comercial)
· b)
constante / * (asterisco) / || (duas barras)
· c)
ponteiro / & (e comercial) / * (asterisco)
· d)
constante / * (asterisco) / & (e comercial)
· e)
ponteiro / * (asterisco) / || (duas barras)
Em lógica de programação, usa-se condições para tomar decisões no decorrer da execução de um programa. Através de estruturas condicionais é possível alterar todo o fluxo de processamento. Um exemplo simples de estrutura de decisão é uma conta corrente de um banco.
Fonte: Disponível emAcesso.11.Jul.2018.
Neste contexto, complete corretamente as lacunas da asserção a seguir:
Entende-se que ____________ realizar saques na conta se houver saldo disponível, caso contrário, o saque será negado. Esta decisão, basicamente, é ____________, ou seja, ____________, a condição será verdadeira e _____________, senão, a condição falsa ____________.
Assinale a alternativa que completa corretamente as lacunas: 
Alternativas:
· a)
somente será possível / um verdadeiro ou falso / se houver saldo / o saque será permitido / negará o saque.
· b)
sempre será possível / falsa / se houver saldo / o saque será permitido / negará o saque.
· c)
somente será possível / verdadeira / se não houver saldo / o saque será permitido / negará o saque.
· d)
sempre será possível / um verdadeiro ou falso / sem saldo / o saque será bloqueado / permitirá o saque.
· e)
somente será possível / um verdadeiro ou falso / sem saldo / o saque será bloqueado / negará o saque.
2)
A estrutura condicional possibilita a escolha de um grupo de ações e estruturas a serem executadas quando determinadas condições são ou não satisfeitas. A estrutura condicional pode ser simples ou composta. Nesse contexto, analise as asserções a seguir e marque (V) verdadeiro ou (F) falso:
( ) A estrutura condicional simples executa um comando ou vários comandos se a condição for verdadeira.
( ) Se a condição for falsa, a estrutura condicional simples é finalizada após executar todos os comandos.
( ) O comando que define a estrutura condicional simples é representado pela palavra SE.
( ) A estrutura condicional composta segue o mesmo princípio da estrutura condicional simples, com a diferença de que quando a condição não é satisfeita, o mesmo comando é executado até a condição ser satisfeita.
( ) O comando que define a estrutura é representado pelas palavras SE e SENÃO.
Assinale a alternativa que contém a sequência correta: 
Alternativas:
· a)
V-V-F-F-V.
· b)
F-F-V-V-F.
· c)
V-F-F-F-V.
· d)
F-V-F-V-F.
· e)
V-F-V-F-V.
3)
Na repetição com variáveis de controle, ou seja, usando o laço "for", o comando iterativo "for" que em português significa "para", segundo Mizrahi (2008), é geralmente usado para repetir uma informação por um número fixo de vezes, isto é, pode-se determinar quantas vezes acontecerá a repetição. Veja na figura 10 como é representada a estrutura de repetição usando o comando "for":
Figura 10 - Fluxograma de repetição com variáveis de controle.
Fonte: do autor.
Analise a figura 10 e assinale a alternativa que contém a sintaxe em linguagem C que representa o comando for. 
Alternativas:
· a)
for(inicialização-condição final-incremento)
{
(comandos);
}
· b)
{for(inicialização; condição final; incremento)
comandos;}
· c)
for(inicialização; condição final; incremento)
{
comandos;
}
· d)
{
for(inicialização; condição final; incremento)
comandos;
}
· e)
for(inicialização; condição final; incremento)
[
]
4)
Usando a estrutura de repetição "for", os históricos e aplicações de estruturas de repetição determinísticas e os comparativos com estruturas condicionais, serão aplicados dentro da linguagem de programação. Para tal, será usada a repetição com variáveis de controle, ou seja, aplicar o laço "for". Nesse contexto, complete corretamente a afirmativa a seguir:
O comando iterativo "for", que em português significa "para", segundo Mizrahi (2008), é: 
Alternativas:
· a)
geralmente usado para repetir várias informações por um número alternado de vezes, isto é, pode-se determinar quantas vezes acontecerá a repetição.
· b)
geralmente usado para repetir uma informação por um número fixo de vezes, isto é, pode-se determinar quantas vezes acontecerá a repetição.
· c)
raramente usado para repetir um comando por um número fixo de vezes, isto é, pode-se determinar quantas vezes acontecerá a repetição.
· d)
raramente usado para repetir várias informações por um número fixo de vezes, isto é, pode-se determinar quantas vezes acontecerá a repetição.
· e)
geralmente usado para repetir um comando por um número alternado de vezes, isto é, pode-se determinar quantas vezes acontecerá a repetição.
1)
Uma variável declarada em uma função é normalmente local e o contexto define o escopo. Mas também é possível declarar o escopo de um identificador explicitamente, utilizando uma palavra reservada de classe de armazenamento de C, ou seja, determinar onde é armazenada.
Fonte:Disponível em<http://www.unicamp.br/fea/ortega/info/aula10.htm>Acesso.06.Ago.2018
Em linguagem C escopo significa:
Alternativas:
· a)
a propriedade que determina onde uma variável pode ser utilizada como um identificador num programa.
· b)
a propriedade que determina as possibilidades de uma variável ser utilizada num programa.
· c)
a variável que pode ser utilizada como um identificador num programa.
· d)
a determinação para uma variável ser utilizada como um programa.
· e)
a variável que pode ser utilizada com propriedade para um identificador num programa.
2)
Recursividade significa recorrer a uma determinada situação (AULETE, 2017). Em programação, uma função recursiva é uma função que chama a ela própria ou ainda nas palavras de Soffener (2017): “Recursividade é a possibilidade de uma função chamar a si mesma” (SOFFENER, 2017, p. 107). Portanto, para criar uma função recursiva basta fazer uma chamada da função dentro da própria função. Embora a sintaxe seja simples, é preciso entender seu funcionamento e quando usar essa técnica, pois, se mal estruturada, a função pode entrar em um laço de repetição infinito.
 
Neste contexto, julgue as afirmações que se seguem.
I - A função chama ela mesmo, portanto é preciso estabelecer quando parar esse laço através de uma estrutura condicional.
II - Para cada chamada da função é criada uma nova ocorrência da função na memória (instância), com os comandos e variáveis alocados no mesmo local.
III - Toda função recursiva tem um caso (uma instância) chamado de caso base.
 IV - Caso base é o mais simples e interromperá o laço chamando novamente a função.
É correto apenas o que se afirma em:
Alternativas:
· a)
I e II.
· b)
I e III.
· c)
II, III e IV.
· d)
III e IV.
· e)
I, II e IV.
3)
A sintaxe para implementação de uma função recursiva nada difere das funções gerais, ou seja, deverá ter um tipo de retorno, o nome da função, os parênteses e os parâmetros quando necessário. Observe a figura  a seguir e responda:
 
Figura  - Algoritmo para função recursiva
Fonte: elaborada pela autora.
No que se diferem as funções recursivas de outras funções?
Alternativas:
· a)
Em termos de sintaxe, uma função recursiva se difere de outras funções simplesmente pelo fato de possuir em seu conjunto de comandos, uma chamada a si própria.
· b)
A diferença estará no final da função, pois a função será invocada dentro dela mesma.
· c)
A figura ilustra a construção da função, bem como a chamada dela na função secundária.
· d)
Em termos de sintaxe, uma função recursiva não se difere de outras funções.
· e)
A diferença está no fato de possuir uma chamada de conjunto de comandos.
4)
Manzano, Matos e Lourenço (2015) afirmam que a ideia de criar programas com blocos de funcionalidades vêm de umatécnica de projeto de algoritmos, utilizada para melhorar o processo de desenvolvimento da programação. É necessário quebrar um problema em outros subproblemas menores, usar uma sequência de instruções separada, para resolver cada subproblema e juntar a solução de cada subproblema para alcançar a solução completa do problema original.
Os três passos que facilitam a resolução e a organização de um programa são:
Alternativas:
· a)
Eliminar – Associar – Programar
· b)
Dividir – Conquistar – Combinar
· c)
Alterar – Repartir – Atribuir
· d)
Documentar – Redistribuir – Agrupar
· e)
Modelar – Assentar – Associar
1)
Uma lista ligada ou lista encadeada é uma forma de estruturar dados para o seu armazenamento, ou seja, é determinar a forma de inseri-los ou remove-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.
 
Assim, toda vez que queremos manipular uma estrutura de dados em uma memória, ou em uma unidade de armazenamento qualquer, podemos fazer isso de ao menos três formas diferentes conforme a seguir:
a) reservar os espaços em memória na forma estática, ou seja, alocar uma determinada quantidade de memória previamente definida, mesmo sem considerar a quantidade que seria realmente necessária;
b) reservar os espaços em memória através de variáveis locais. O espaço estará disponível somente enquanto a função que o declarou estiver executando o programa.
c) alocação de espaço em memória dinamicamente, ou seja, o Sistema Operacional aloca blocos de espaços que estão disponíveis (livres) ou para atender uma determinada demanda. 
 
Com base nas informações disponíveis e em Listas Encadeadas (ou Listas Ligadas), avalie a seguinte afirmativa preenchendo suas lacunas:
 
"Os elementos armazenados numa lista não ocupam um espaço de memória ___________, fazendo com que o acesso aos elementos da lista seja ___________. Enquanto que a utilização de vetores é considerada primária para a representação de conjuntos de dados, a utilização de listas ligadas é uma maneira mais ______________, para a organização e disponibilização dos dados, isto porque em listas ligadas, cada um de seus elementos___________________."
Agora assinale a alternativa que preenche corretamente as lacunas do texto.
Alternativas:
· a)
 distribuído / aleatório / flexível / indica o máximo de elementos.
· b)
 contíguo / sequencial / flexível / indica qual é o seu próximo.
· c)
 aleatório / contíguo / simplória / indica o mínimo de elementos.
· d)
 contíguo / aleatório / íntegra / indica qual é o seu próximo.
· e)
 distribuído / sequencial / limitada / indica o máximo de elementos.
2)
Existem ótimos exemplos de utilização de Pilhas em nosso cotidiano, nos brinquedos usados em sala de aula ou até mesmo numa simples pilha de livros, onde é possível se determinar qual o algoritmo (critério) utilizado para empilhá-los: tamanho, grossura, cor, tema, etc.. Muitos professores usam estas artimanhas a fim de que os alunos possam desenvolver o raciocínio lógico.
 
Pensando nisso, um programador desenvolveu o código abaixo, para que os professores possam informar a quantidade de discos e o sistema informasse a quantidade total de movimentos que serão realizados. Com esse algoritmo, eles poderiam criar gincanas e desafios entre os alunos para resolverem a ferramenta lógica que eles usam em sala de aula, com um número maior de discos.
 
Abaixo apresenta-se o código desenvolvido pelo programador mencionado.
 
#include <stdio.h>
#include <stdlib.h>
int contador = 0;
void algoritmo(int n, char a, char b, char c)
{
  if (n == 1)
   {
     printf("Move o disco %d de %c para %c\n", n, a, b);
     contador++;
   } else
      {
        algoritmo(n - 1, a, c, b);
         printf("Move o disco %d de %c para %c\n", n, a, b);
        algoritmo(n - 1, c, b, a);
        contador++;
      }
}
int main(void)
{
   int numDiscos;
   printf("Informe o numero de discos: ");
   scanf("%d", &numDiscos);
  algoritmo(numDiscos, 'A', 'B', 'C');
   printf("\n\nA quantidade de movimentos foi: %d", contador);
   return 0;
}
 
Sobre o algoritmo apresentado acima, analise as seguintes afirmações:
 
I - O Algoritmo trata-se da solução da Torre de Hanói.
II - Para o desenvolvimento deste algoritmo foi necessário o uso da recursividade assim como o uso de Pilhas.
III - Foi necessário, um contador para realizar a contagem da quantidade de movimento.
IV - O algoritmo limita o numero de pilhas informadas em 10 unidades.
Agora, assinale a alternativa correta.
Alternativas:
· a)
Apenas as afirmativas I, III e IV estão corretas.
· b)
Apenas as alternativas I, II e III são corretas.
· c)
Apenas as afirmativas I e III estão corretas.
· d)
Apenas as afirmativas I, II e IV estão corretas.
· e)
Apenas as afirmativas II, III e IV estão corretas.
3)
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.
Tendo como referência Filas Circulares, avalie as seguintes afirmativas:
I - Uma Fila Circular utiliza menos instruções a serem executadas, podendo ser mais adequada e eficiente na utilização de programação.
II -  Em relação ao driver-thru (serviço de vendas alimentos fast food, que permite ao cliente comprar o produto sem sair do carro),  seu processo todo se encaixa no modelo de Fila Circular.
III -  Em uma Fila Circular, o conceito de circularidade se baseia quando o último elemento da fila está na última posição do vetor, e é adjacente à primeira
IV -  Em uma Fila Circular são os ponteiros, e não os elementos da fila que se movem em direção ao início do veto.
Agora assinale a alternativa correta.
Alternativas:
· a)
Apenas a afirmativa IV está correta.
· b)
Apenas as afirmativas II e III estão corretas.
· c)
Apenas as afirmativas I e II estão corretas.
· d)
Apenas as afirmativas I, III e IV estão corretas.
· e)
As afirmativas I, II, III e IV estão corretas.
4)
A estrutura de fila é uma analogia com o conceito de filas que usamos no nosso cotidiano, em um mercado, no banco ou em uma de caixa eletrônico.
Segundo Drozdek (2016), a estrutura de dados de Fila possui operações similares as da estrutura de Pilha para gerenciamento de uma Fila.
Assim, analise as operações abaixo e indique quais são similares entre a estrutura de dados de Fila e as da estrutura de Pilha.
I - Cria uma fila vazia;
II - Insere um elemento no fim da fila;
III - Remove o elemento do início da fila;
IV - Verifica se a fila está vazia;
V - Libera a fila.
Agora assinale a alternativa correta.
Alternativas:
· a)
As operações I, II, III, IV e V são similares.
· b)
Apenas as operações I, II e V são similares.
· c)
Apenas as operações II, IV e V são similares.
· d)
Apenas as operações I e III são similares.
· e)
Apenas operações III e IV são similares.
1) Na área da computação é comum que criemos analogias entre os conceitos e situações cotidianas, afim de facilitar o entendimento dos mesmos.
 
Com base nisso associe a COLUNA-A, que apresenta alguns elementos de programação, com a COLUNA-B, que apresenta alguns exemplos aplicáveis:
 
	COLUNA-A
	COLUNA-B
	I. Vetor
	A. Uma música em uma playlist criada pelo usuário.
	II. Índice do Vetor
	B. Edifício com 10 apartamentos.
	III. Lista ligada
	C. Brincadeira do amigo – secreto.
	IV - Elemento de uma lista
	D. O número de uma casa em uma rua.
A seguir assinale a alternativa que apresenta a associação correta.
Alternativas:
· a)
I - B; II - D; III - C; IV - A.
· b)
I - B; II - C; III - D; IV - A.
· c)
I - B; II - A; III - C; IV - D.
· d)
I - C; II - D; III - B; IV - A.
· e)
I - C; II - A; III - B; IV - D.
2)
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 nafila 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:
Alternativas:
· a)
As listas só permitem inserção de elementos em seu início.
· b)
As listas só permitem inserção de elementos em seu fim.
· c)
As listas só permitem inserção de elementos em seu início ou seu fim.
· d)
As listas permitem inserção de elementos em qualquer posição.
· e)
As listas não permitem sobreposição ao inserir elementos.
3)
A declaração da estrutura inicial para criação de uma pilha pode ser implementada por:
 
struct Pilha {
int topo;
int capacidade;
float * proxElem;
};
struct Pilha minhaPilha;
 
Segundo Celes, Cerqueira e Rangel (2004), com a estrutura declarada é possível criar a função para criar uma pilha. Esta função aloca dinamicamente na memória o espaço para utilização da pilha. O trecho de código para criação da pilha pode ser implementado por:
 
void cria_pilha(struct Pilha *p, int c ){
p -> proxElem = (float*) malloc (c * sizeof(float));
p -> topo = -1;
p -> capacidade = c;
}
 
Com a função para criar a pilha realizada, ela estará vazia, ou seja, não terá nenhum elemento na pilha em sua criação. Assim, é possível criar a função que vai permitir ser inserido um novo elemento na pilha.
 Considerando os códigos apresentados, o  correto  formato  para inserir um novo elemento na pilha  usando o nome push( )  é 
Alternativas:
· a)
void push-pilha(struct Pilha *p, float **v){
p -> topo++;
p -> proxElem [p -> topo] = v;
}
· b)
void push_pilha(struct Pilha *p, float v){
p -> topo-+;
p -> proxElem [p -> topo] = v;
}
· c)
void push_pilha(struct Pilha *p, float v){
p -> topo++;
p -> proxElem [p -> topo] = v;
}
· d)
void push-pilha(struct Pilha /p, float v){
p -> topo+-;
p -> proxElem [p -> topo] = v;
}
· e)
void push_pilha(struct Pilha /p, float v){
p -> topo++;
p -> proxElem [p -> topo] = v;
}
4)
Em uma fila, só é possível remover um elemento pelo seu início. É possível implementar o trecho de código a seguir para remoção do elemento e apresentar seu valor no retorno da função:
 
float remove_fila (Fila* f){
char elem;
if (fila_vazia(f)){
printf(“A Fila esta vazia\n”);
exit(1);
}
elem = f -> vet[f -> ini];
f -> ini = (f -> ini + 1) % N;
f -> n--;
return elem;
}
 
De acordo com o trecho, marque (V) verdadeiro ou (F) falso nas asserções a seguir:
 
(   ) Nesse trecho é possível observar que, antes de remover o elemento da fila, é preciso verificar se ela possui elementos, chamando a função fila vazia.
(   ) Caso a fila esteja vazia, a função apresenta uma mensagem informando ao usuário que não há elementos para serem removidos e finaliza a função.
(   ) Caso a fila possua elementos, a variável vet recebe o elemento da primeira posição da fila.
(   ) Assim, o início da fila volta para o elemento anterior.
(   ) Este elemento incrementa a quantidade de elementos e retorna o elemento removido.
Assinale a alternativa que contém a sequência correta:
Alternativas:
· a)
V-F-V-F-V.
· b)
F-V-F-V-F.
· c)
F-V-V-F-V.
· d)
V-V-F-F-F.
· e)
V-F-F-V-F.
1) A criação de um ponteiro só faz sentido se for associado a algum endereço de memória, para isso usa-se a seguinte sintaxe:
1. int idade = 18;
2. int *ponteiro_para_idade = &idade;
Na linha 1 criamos uma variável primitiva inteira com valor 18 e na linha 2 associamos um ponteiro chamado ponteiro_para_idade ao endereço da variável primitiva idade.
Podemos imprimir o conteúdo do ponteiro, que será o endereço da variável que ele aponta. Utilizando o ponteiro criado anteriormente (ponteiro_para_idade) temos a seguinte sintaxe:
Alternativas:
· a)
printf("\n Conteudo do ponteiro: %d", &idade);
· b)
scanf("\n Conteudo do ponteiro: %p", ponteiro_para_idade);
· c)
gets("\n Conteudo do ponteiro: %d", &idade);
· d)
printf("\n Conteudo do ponteiro: %p", ponteiro_para_idade);
· e)
scanf("\n Conteudo do ponteiro: %d", &idade);
2)
As variáveis são muito úteis para o armazenamento de diversos tipos de dados.
 
De acordo com as informações apresentadas na tabela a seguir, faça a associação dos tipos de variáveis com suas respectivos características.
 
	Coluna -A 
	 
	Coluna -B
	I. Vetor
	 
	1. Podemos manipular variáveis e outros recursos pelo endereço de memória.
	II. Matriz
	 
	2. Possuem a estrutura de uma tabela contendo apenas 1 coluna e N linhas. 
	III. Struct
	 
	3. Possuem a estrutura de uma tabela contendo apenas N coluna e N linhas. 
	IV. Ponteiro
	 
	4. Um tipo de variável composta heterogênea.
 
I - 2; II - 3; III - 4; VI - 1.
Assinale a alternativa que apresenta a associação correta.
Alternativas:
· a)
I - 3; II - 2; III - 1; IV- 4.
· b) I - 2; II - 3; III - 1; IV - 4.
I - 2; II - 3; III - 1; IV - 4.
· c)
I - 4; II - 1; III - 2; IV - 3.
· d)
I - 1; II - 2; III - 3; IV - 4.
· e)
I - 2; II - 3; III - 4; IV - 1.
3)
 Manzano, Matos e Lourenço(2015) afirmam que a criação de um vetor é similar a uma variável primitiva tendo que acrescentar apenas um número entre colchetes indicando qual será o tamanho desse vetor por exemplo: int valores [15], neste caso, estamos criando 15 espaços para armazenar valores inteiros. Cada elemento no vetor é acessado através do seu índice, que sempre começará pelo valor zero, independentemente da linguagem de programação.
 
Observe o programa a seguir utilizando um vetor.
 
#include <stdio.h>
const int valor = 3;
int main ()
{
int vetor[4]={2,4,6,8};
vetor [0] = vetor [0] * valor;
vetor [1] = vetor [1] * valor;
vetor [2] = vetor [2] * valor;
vetor [3] = vetor [3] * valor;
printf ("\n  %d - ", vetor [3]);
printf ("\n  %d -", vetor [2]);
printf ("\n  %d -", vetor [1]);
printf ("\n  %d .", vetor [0]);
return 0;
}
Assinale a opção correta que apresenta o resultado que será impresso na tela após o programa ser executado.
Alternativas:
· a)
6 – 8 – 10 – 12.
· b)
24 – 18 – 12 – 6.
· c)
6 – 12 – 18 – 24.
· d)
18 – 12 – 6 – 24.
· e)
24 – 12 – 18 – 6.
4)
Conforme Mizrahi (2008) um vetor é uma estrutura de dados do mesmo tipo primitivo. Possui um índice que deve ser rigorosamente respeitado, não podemos por exemplo armazenar mais valores do que a quantidade que foi informada na declaração do vetor.
 
Observe o programa a seguir que realiza a troca de elementos entre o próprio vetor.
 
	#include <stdio.h>
const int TAM = 2;
int main ()
{
  int idade[TAM]={25,48};
  int troca;
  printf ("\n Antes da Troca: ");
  printf ("\n  %d ", idade [0]);
  printf ("\n  %d ", idade [1]);
  troca = idade[0];
  idade [0]= idade [1];
  idade [1] = troca;
  printf ("\n Depois da Troca: ");
  printf ("\n  %d ", idade [0]);
  printf ("\n  %d ", idade [1]);
  return 0;
} 
 
Fonte: MIZRAHI, V. V. Treinamento em linguagem C. 2ª ed. São Paulo. Pearson Prentice Hall, 2008.
 
Com base nas afirmações sobre vetor e o programa apresentado, avalie as seguintes asserções e a relação proposta entre elas:
 
I. Existem algumas facilidades que podem ser utilizadas para ajudar o trabalho do programador e é o caso da utilização de constantes. Podemos utilizar uma constante para determinar o tamanho do vetor. Primeiro criamos uma constante do tipo inteiro e atribuímos um valor. Ao criar o vetor, usamos a constante para informar o tamanho do vetor.
 
PORQUE
 
II. Essa ação pode agilizar o trabalho do programador, suponha que o vetor tenha o tamanho de 30 elementos, para testar o programa devemos informar 30 elementos toda vez. Por exemplo: usando uma constante com o valor 4, basta informar o valor de 4 elementos e o podemos testar o programa com 4 elementos do vetor. No final dos testes, basta modificar o valor 4 da constante para o valor 30 (e que era a proposta inicial do programa).
Analise atentamente as asserções e assinale a alternativa CORRETA.
Alternativas:
· a)
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
· b)
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
· c)
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
· d)
A asserção I é uma proposição falsa, e a II é umaproposição verdadeira.
· e)
As asserções I e II são proposições falsas.
5)
A programação é utilizada para ajudar a resolver problemas de todos os níveis. Operações matemáticas são os exemplos preferidos para ajudar no entendimento das estruturas das linguagens de programação.  A área de um quadrado corresponde ao tamanho da superfície desta figura. Um quadrado é um quadrilátero que possui seus lados congruentes ou seja, eles possuem exatamente a mesma medida.
 
O programa a seguir que calcula a área de um quadrado, observe que está faltando uma linha no programa:
	1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	#include <stdio.h>
int lado, area;
int main()
{
 printf("Insira o Lado: ");
scanf("%d", &lado);
// Cálculo da área
printf("A área e: %d \n", area);
return 0;
}
Assinale a opção correta que apresenta o comando que deve ser inserido na linha 7, para calcular a área do quadrado:
Alternativas:
· a)
 area = (lado1 * lado2);
· b)
 area = (lado * 2);
· c)
 area = (lado)2;
· d)
 area = (lado * lado);
· e)
 lado = (area * area);
1)A linguagem de programação C permite que os parâmetros sejam passados para as funções de duas maneiras, por valor e por referência. Na passagem por valor, uma expressão pode ser utilizada na chamada. Na passagem por referência, o endereço de uma variável deve ser passado na chamada da função. Dessa forma, a função pode modificar a variável diretamente, o que em geral não é recomendável, mas há situações onde esse recurso é necessário. Sempre que possível é recomendável utilizar a forma de passagem por valor, para evitar "efeitos colaterais", mas em algumas situações, esses efeitos são desejáveis quando é preciso criar uma função que retorne mais de um valor.
 Fonte:Disponível em:< https://www.ime.usp.br/~elo/IntroducaoComputacao/Funcoes%20passagem%20de%20parametros.htm>Acesso.13.Ago.2018.
  Como exemplo um número complexo, que possui uma parte real e outra complexa. Analise o trecho de programa e as asserções a seguir:
 
#include <stdio.h>
#include <stdlib.h>
void complexo2 (float *r, float *t);
int main ()
{
float a, b;
printf ("Entre com um numero complexo (2 numeros inteiros): ");
scanf("%f %f", &a, &b);
complexo2 ( &a, &b);
printf("O quadrado do número complexo é %f + i %f\n", a, b);
system("pause");
return 0;
}
 
Neste contexto, julgue as afirmações que se seguem.
 I. No main são declaradas apenas duas variáveis reais a e b. E tanto na chamada da função scanf, quanto na chamada da função complexo2, as variáveis a e b são precedidas pelo caractere '*'.
  II. Esse caractere ‘*’ indica a necessidade de que esses parâmetros sejam modificados pela função e retornem os valores apropriados.
 III. No caso da função scanf, esses valores correspondem aos valores digitados pelo usuário, mas no caso da função complexo2, esses valores são computados pela função. Ou seja, os parâmetros a e b são utilizados apenas para saída, e no caso da complexo2, os parâmetros a e b são utilizados como entrada e saída da função.
 IV. Os próprios valores armazenados nas variáveis a e b são utilizados como entrada da função complexo2, ou seja, como parte real e imaginária para calcular o valor do quadrado do número complexo, e ao mesmo tempo para devolver o resultado.
  V. Na função printf, as variáveis a e b não são precedidas pelo caractere '&', portanto, não são modificadas pela função printf.
  VI. Quando deseja-se criar uma função que devolva mais de um valor, é preciso definir esses parâmetros com um caractere '&' no protótipo da função, e ao chamar a função, os parâmetros utilizados na chamada correspondentes à entrada precisam ser precedidos pelo caractere '*' para indicar que eles podem ser modificados pela função chamada.
É correto apenas o que se afirma em:
Alternativas:
· a)
I, II e VI.
· b)
III, IV e V.
· c)
I e IV.
· d)
II e V.
· e)
III e VI.
2)
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 extern.
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 “interno” de x.
A respeito dessas asserções, assinale a alternativa correta:
Alternativas:
· a)
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
· b)
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
· c)
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
· d)
A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
· e)
As asserções I e II são proposições falsas.
3)
Para usar de forma mais otimizada a memória, existe uma alternativa chamada recursividade em cauda. Nesse tipo de técnica a recursividade funcionará como uma função iterativa. 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 informado como parâmetro, o que resultará um comportamento diferente.
A principal vantagem da recursividade em cauda consiste em:
Alternativas:
· a)
as instâncias vão sendo criadas, porém quando chega na última, as funções precisam retornar o valor para “quem” invocou, gerando otimização na memória, pois precisa armazenar um ponto para devolução de valores.
· b)
as instâncias vão sendo criadas, porém quando chega na última, as funções não precisam retornar o valor para “quem” invocou, gerando otimização na memória, pois não precisa armazenar nenhum ponto para devolução de valores.
· c)
as instâncias vão sendo descartadas, porém quando chega na última, as funções não descartam o valor invocado, gerando otimização na memória, pois não precisa armazenar nenhum ponto para devolução de valores.
· d)
as instâncias vão sendo criadas, porém quando chega na última, as funções não retornam valor, gerando conflito na memória, pois não precisa armazenar nenhum ponto para devolução de valores.
· e)
as instâncias vão sendo criadas, porém quando chega na última, as funções não precisam retornar o valor para “quem” invocou, gerando conflito na memória, pois não precisa armazenar nenhum ponto para devolução de valores.
4)
“Muitos problemas têm a seguinte propriedade: cada instância do problema contém uma instância menor do mesmo problema. Diz-se que esses problemas têm estrutura recursiva. Para resolver tal problema, pode-se aplicar o seguinte método: se a instância em questão for pequena, resolva-a diretamente; senão, reduza-a a uma instância menor do mesmo problema, aplique o método à instância menor, volte à instância original. A aplicação desse método produz um algoritmo recursivo.” (FEOFILOFF, 2017, p. 1). Baseado nesse conceito, avalie as asserções a seguir:
 
 I -  Recursividade significa indicar quando um problema maior pode ser dividido em instâncias menores do mesmo problema.
PORQUE
 II - A técnica de recursividade pode substituir o uso de estruturas de repetição tornando o código mais elegante.
A respeito dessas asserções, assinale a alternativa correta:
Alternativas:
· a)
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
· b)
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
· c)
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
· d)
A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
· e)
As asserções I e II são proposições falsas.
5)
Recursividade é uma técnica sofisticada em programação, na qual uma função chama a si mesma criando várias instâncias (chamadas recursivas). Embora seja uma técnica que proporciona um código mais limpo e facilita a manutenção, seu usodeve levar em consideração a quantidade de memória necessária para a execução do programa. Nesse contexto, avalie as asserções a seguir:
 
I. A cada chamada recursiva é alocado recursos na memória para a função, se a função for muito grande poderá ocorrer um acúmulo de memória.
PORQUE
 II. É preciso avaliar o custo-benefício em se ter um código mais sofisticado em detrimento de uma estrutura de repetição, pois a segunda opção gasta menos memória.
A respeito dessas asserções, assinale a alternativa correta:
Alternativas:
· a)
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
· b)
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
· c)
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
· d)
A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
· e)
As asserções I e II são proposições falsas.

Outros materiais