Buscar

3 exercicios funcoes e recursividade ampli

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

18/01/2022 Primeiro Caderno - Evernote
https://www.evernote.com/client/web?login=true#?b=5ac9b6e0-84a0-4170-a6dc-a5efbf353acc&n=485f1ccd-26f1-ae6f-76c0-536d84c0eafd& 1/4
UNIDADE 3 - Funções e Recursividade
UNIDADE 3 - Funções e Recursividade
Questão 1
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.
Questão 2
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 
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. 
18/01/2022 Primeiro Caderno - Evernote
https://www.evernote.com/client/web?login=true#?b=5ac9b6e0-84a0-4170-a6dc-a5efbf353acc&n=485f1ccd-26f1-ae6f-76c0-536d84c0eafd& 2/4
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.
Questão 3
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.
 
As asserções I e II são proposições verdadeiras, e a II não é uma justificativa da II.
As asserções I e II são proposições verdadeiras, e a II é 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.
18/01/2022 Primeiro Caderno - Evernote
https://www.evernote.com/client/web?login=true#?b=5ac9b6e0-84a0-4170-a6dc-a5efbf353acc&n=485f1ccd-26f1-ae6f-76c0-536d84c0eafd& 3/4
Assinale a alternativa que contém a associação correta entre as colunas:
Questão 4
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:
I-A / II-C / III-E / IV-B / V-D.
I-E / II-D / III-C / IV-B / V-A.
I-B / II-A / III-C / IV-E / V-D.
I-B / II-D / III-A / IV-C / V-E.
I-B / II-A / III-C / IV-D / V-E.
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.
18/01/2022 Primeiro Caderno - Evernote
https://www.evernote.com/client/web?login=true#?b=5ac9b6e0-84a0-4170-a6dc-a5efbf353acc&n=485f1ccd-26f1-ae6f-76c0-536d84c0eafd& 4/4
Questão 5
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):
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.
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.

Continue navegando