Buscar

Lista de Exercícios 3 Prof. Marcelo UFMA

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

Prévia do material em texto

Fundamentos da Computac¸a˜o: Lista 3
Preparac¸a˜o para Prova 3, marcada para 17 de Julho de 2014
Prof. Marcelo - BCT
1
Fundamentos da Computac¸a˜o (Prof. Marcelo - BCT ): Lista 3
Ex. 1 Recursa˜o
(1) Explique com suas pro´prias palavras o que e´ recursa˜o;
(2) Escreva uma func¸a˜o que fac¸a a soma de dois inteiros a + b, de forma recur-
siva, retornando um inteiro como resultado. Utilize o seguinte proto´tipo: int
soma(int,int);
(3) Escreva uma func¸a˜o que fac¸a a subtrac¸a˜o de dois inteiros a − b, de forma
recursiva, retornando um inteiro como resultado. Utilize o seguinte proto´tipo:
int subtracao(int,int);
(4) Escreva uma func¸a˜o que fac¸a a multiplicac¸a˜o de dois inteiros a× b, de forma
recursiva, retornando um inteiro como resultado. Utilize o seguinte proto´tipo:
int multiplicacao(int,int);
(5) Escreva uma func¸a˜o que ca´lcule o piso da divisa˜o de dois inteiros ba
b
c, de forma
recursiva, retornando um inteiro como resultado. Utilize o seguinte proto´tipo:
int divisao(int,int);
(6) Escreva uma func¸a˜o recursiva que retorne um inteiro representando o resto
da divisa˜o de dois inteiros a
b
. Utilize o seguinte proto´tipo: int resto(int,int);
(7) Escreva uma func¸a˜o recursiva que retorne o ma´ximo divisor comum entre
dois inteiros. Utilize o seguinte proto´tipo: int mdc(int,int);
(8) Escreva uma func¸a˜o recursiva que retorne o ma´ximo elemento de um vetor.
A func¸a˜o deve receber um vetor de inteiros e um inteiro representando o indice
do u´ltimo elemento do respectivo vetor. Utilize o seguinte proto´tipo: int max(int
[],int);
(9) Escreva uma func¸a˜o recursiva que retorne o mı´nimo elemento de um vetor.
A func¸a˜o deve receber um vetor de inteiros e um inteiro representando o indice
do u´ltimo elemento do respectivo vetor. Utilize o seguinte proto´tipo: int min(int
[],int);
(10) Escreva uma func¸a˜o recursiva que retorne a me´dia de um vetor. A func¸a˜o
deve receber um vetor de nu´meros reais e um inteiro representando o indice
do u´ltimo elemento do respectivo vetor. Utilize o seguinte proto´tipo: float me-
dia(float [],int);
(11) Escreva uma func¸a˜o recursiva que retorne o fatorial de um nu´mero inteiro.
Utilize o seguinte proto´tipo: int fatorial(int);
(12) Escreva uma func¸a˜o recursiva que receba um inteiro n e ca´lcule o seguinte
somato´rio
∑n
i=1 i. Utilize o seguinte proto´tipo: int somatorio(int);
(13) Escreva uma func¸a˜o recursiva que receba um inteiro n e ca´lcule o blog2 nc,
ou seja, o piso do logaritmo de n na base 2. Utilize o seguinte proto´tipo: int
log2(int);
Pa´gina 2 de 5
Fundamentos da Computac¸a˜o (Prof. Marcelo - BCT ): Lista 3
(14) Escreva uma func¸a˜o recursiva que fac¸a a busca sequencial em um vetor.
A func¸a˜o deve receber um vetor inteiro, um inteiro representando o indice do
u´ltimo elemento desse vetor e um inteiro correpondente ao valor que deve ser
localizado no vetor. Se o elemento for encontrado a func¸a˜o retorna 1, sena˜o
retorna 0. Utilize o seguinte proto´tipo: int busca sequencial(int [], int, int);
(15) Escreva uma func¸a˜o recursiva que fac¸a a busca bina´ria em um vetor. A
func¸a˜o deve receber um vetor inteiro, um inteiro representando o indice do
u´ltimo elemento desse vetor e um inteiro correpondente ao valor que deve ser
localizado no vetor. Se o elemento for encontrado a func¸a˜o retorna 1, sena˜o
retorna 0. Utilize o seguinte proto´tipo: int busca sequencial(int [], int, int);
(16) Escreva uma func¸a˜o recursiva que ordene um vetor inteiro de forma na˜o
decrescente utilizando o algoritmo quicksort. A func¸a˜o deve receber um vetor
inteiro, um inteiro representando o indice do primeiro elemento desse vetor e um
inteiro representando o indice de seu u´ltimo elemento. A func¸a˜o deve modificar
o vetor recebido, e portanto na˜o sera´ necessa´rio retornar nenhum valor. Utilize
o seguinte proto´tipo: void quicksort(int [], int, int);
(17) Escreva uma func¸a˜o recursiva para calcular
(
n
k
)
, dado que
(
n
k
)
=
(
n−1
k
)
+
(
n−1
k−1
)
,(
m
m
)
= 1 e
(
m
1
)
= n. Sua func¸a˜o deve receber dois inteiros n e k, e deve retornar
um inteiro. Utilize o seguinte proto´tipo: int binomio(int, int);
(18) Escreva uma func¸a˜o recursiva para calcular a soma dos d´ıgitos de um inteiro
positivo. Por exemplo, a soma dos d´ıgitos de 345 e´ 12. Sua func¸a˜o recebe um
inteiro e retorna a respectiva soma, tambe´m no formato inteiro. Utilize o seguinte
proto´tipo: int digitos(int);
(19) Escreva uma func¸a˜o recursiva para determinar se os elementos de um vetor
inteiro formam um palindromo. Sua func¸a˜o recebe um vetor inteiro e um inteiro
representando o indice do u´ltimo elemento do referido vetor. Exemplo, v =
[1, 20, 30, 20, 1] e´ palindromo (retornar 1) e w = [20, 30, 31, 20] na˜o e´ (retornar 0).
Utilize o seguinte proto´tipo: int palindromo(int [], int);
(20) Escreva uma func¸a˜o recursiva que resolva o problema “Torres de Hanoi”.
Inicialmente temos 5 discos de diaˆmetro diferentes na estaca A. O problema
consiste em mover os cinco discos da estaca A para C, utilizando a estaca B
como auxiliar. As regras sa˜o as seguintes:
• apenas o disco do topo de uma estaca pode ser movido
• nunca um disco de diaˆmetro maior pode ficar sobre um de diaˆmetro menor
Pa´gina 3 de 5
Fundamentos da Computac¸a˜o (Prof. Marcelo - BCT ): Lista 3
Ex. 2 Apontadores
(1) Explique com suas pro´prias palavras o que sa˜o apontadores;
(2) Explique o uso do operador “&”;
(3) Explique o uso do operador “*”;
(4) O que os programas abaixo imprimem? NA˜O fac¸a no Codeblocks;
A) #inc lude <s t d i o . h>
i n t main ( )
{
i n t x=5, y=3, z ;
i n t ∗p ;
p=&x ;
z=2∗y+(∗p)−x ;
p r i n t f ( ‘ ‘ z=%d ’ ’ , z ) ;
r e turn 0 ;
}
B) #inc lude <s t d i o . h>
i n t main ( )
{
i n t x [ ] ={1 , 2 , 3 , 4 , 5} ;
i n t n=5, i ;
i n t ∗p ;
p=x ;
f o r ( i =0; i<n ; i++)
{
p r i n t f ( ‘ ‘%d\n ’ ’ , ∗ ( p+i ) ) ;
}
re turn 0 ;
}
C) #inc lude <s t d i o . h>
i n t main ( )
{
i n t x [ ]={1 ,2 , 3 , 4 , 5} , y [ ]={6 , 7 , 8 , 9 , 10} ;
i n t n=5, i ;
i n t ∗p , ∗q ;
p=x ;
q=y ;
f o r ( i =0; i<n ; i++) p r i n t f ( ‘ ‘%d\n ’ ’ , ∗(p+i ) + ∗( q+(n−1− i ) ) ) ;
r e turn 0 ;
}
Pa´gina 4 de 5
Fundamentos da Computac¸a˜o (Prof. Marcelo - BCT ): Lista 3
D) #inc lude <s t d i o . h>
i n t main ( )
{
i n t x [ ] ={1 , 2 , 3 , 4 , 5} ;
i n t ∗y [ 5 ] ;
i n t n=5, i ;
i n t ∗∗p ;
p=y ;
f o r ( i =0; i<n ; i++)
{
∗(p+i)=&x [ i ] ;
}
f o r ( i =0; i<n ; i++)
{
p r i n t f ( ‘ ‘%d\n ’ ’ , ∗ (∗ ( p+i ) ) ) ;
}
re turn 0 ;
}
E) #inc lude <s t d i o . h>
i n t maior ( i n t x , i n t y )
{
i f (x>y ) re turn x ;
e l s e re turn y ;
}
i n t main ( )
{
i n t a=6, b=8;
i n t (∗ f ) ( ) ;
f=maior ;
p r i n t f ( ‘ ‘%d\n ’ ’ , f ( a , b ) ) ;
r e turn 0 ;
}
F) #inc lude <s t d i o . h>
i n t mensagem( char msg [ ] )
{
p r i n t f ( ‘ ‘% s \n ’ ’ , msg ) ;
}
i n t main ( )
{
char a [ ] = ‘ ‘ He l l o World ! ’ ’ ;
i n t (∗ f ) ( ) ;
f=mensagem ;
f ( a ) ;
r e turn 0 ;
}
Pa´gina 5 de 5

Outros materiais