Buscar

LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO VI

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

LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO VI 
• Pergunta 1 
0,1 em 0,1 pontos 
A função troca() recebe dois ponteiros e faz a troca dos valores entre 
duas variáveis, porém esse código possui um erro. Assinale a 
alternativa que corresponda ao erro nesta função: 
void troca (int *i, int *j) 
{ 
int *temp; 
*temp = *i; 
*i = *j; 
*j = *temp; 
} 
Resposta 
Selecionada: 
 
a. 
As variáveis "i" e “j” não precisavam ser um 
ponteiro. 
Respostas: 
a.
 
As variáveis "i" e “j” não precisavam ser um 
ponteiro. 
b. 
A variável “i” deveria ser um contador. 
c. 
A variável “j” deveria acumular o valor de “i”. 
d. 
A variável "temp" não precisava ser um ponteiro. 
e. 
Não existe nenhum erro na função. 
Feedback 
da 
resposta: 
Resposta: A 
Comentário: a variável "temp" não precisava ser um ponteiro, 
já que apenas precisa armazenar um valor inteiro, sem 
precisar apontar para algum lugar. O código correto seria: 
void troca (int *i, int *j) { 
int temp; 
temp = *i; 
*i = *j; 
*j = temp; 
} 
• Pergunta 2 
 
0,1 em 0,1 pontos 
Analise a função caracteres() e identifique a alternativa que melhor 
descreve a tarefa executada por ela. Faça um teste manual para 
compreender a lógica do programa. 
https://ava.ead.unip.br/webapps/blackboard/execute/courseMain?course_id=_174191_1
 
 
 
 
 
char * caracteres(char *s1, char *s2) { 
int i, j, w, n = 0, encontrado; 
char *s3; 
for (i = 0; s1[i] != '\0'; i++) { 
for (j = 0; s2[j] != '\0'; j++) { 
if (s1[i] == s2[j]) { 
n++; 
break; 
} 
} 
} 
s3 = malloc((n + 1) * sizeof(char)); 
n = 0; 
for (i = 0; s1[i] != '\0'; i++) { 
for (j = 0; s2[j] != '\0'; j++) { 
if (s1[i] == s2[j]) { 
encontrado = 0; 
for (w = 0; w < n; w++) { 
if (s3[w] == s1[i]) { 
encontrado = 1; 
break; 
} 
} 
if (encontrado == 0) { 
s3[n] = s1[i]; 
n++; 
break; 
} 
} 
} 
} 
s3[n] = '\0'; 
return s3; 
} 
Resposta 
Selecionada: 
 
c. 
Recebe por parâmetro duas cadeias s1 e s2 e retorna uma 
nova cadeia s3 que contém todos os caracteres que 
aparecem em s1 e em s2. 
Respostas: a. 
Recebe por parâmetro duas cadeias s1 e s2 e retorna uma 
nova cadeia s3 que contém todas as vogais que aparecem 
em s1 e em s2. 
b. 
Recebe por parâmetro duas cadeias s1 e s2 e retorna uma 
nova cadeia s3 que contém todas as consoantes que 
aparecem em s1 e em s2. 
c. 
Recebe por parâmetro duas cadeias s1 e s2 e retorna uma 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Feedback 
da 
resposta: 
nova cadeia s3 que contém todos os caracteres que 
aparecem em s1 e em s2. 
d. 
Lê duas cadeias s1 e s2 e retorna uma nova cadeia s3 que é 
a maior cadeia entre s1 e em s2. 
e. 
Lê duas cadeias s1 e s2 e retorna uma nova cadeia s3 que é 
a menor cadeia entre s1 e em s2. 
Resposta: C 
Comentário: a função recebe por parâmetro duas cadeias s1 e 
s2 (ponteiros para char) e retorna uma nova cadeia s3 
(ponteiro para char), concatenando as duas cadeias em uma 
só, ou seja, juntando todos os caracteres de s1 e de s2 em s3. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Feedbac 
k da 
resposta: 
2 4 6. 
b. 
0 1 2. 
c. 
1 2 3. 
d. 
1 3 5. 
e. 
3 6 9. 
Resposta: A 
Comentário: o programa possui uma função incr_vetor(int *v , 
int tam ) que recebe um ponteiro para um inteiro e um inteiro, 
tendo como saída do programa os valores 2 4 6, pois os 
• Pergunta 3 
0,1 em 0,1 pontos 
Analise o programa escrito em Linguagem C que possui uma 
função incr_vetor() que recebe um ponteiro para um inteiro e um inteiro. 
Assinale a alternativa que apresenta a saída correta do programa: 
#include <stdio.h> 
 
void incr_vetor (int *v , int tam) { 
int i; 
for (i = 0; i < tam; i++) 
v[i]++; 
} 
 
void main () 
{ 
int a[ ] = {1, 3, 5}; 
incr_vetor(a, 3); 
printf("%d %d %d\n", a[0], a[1], a[2]); 
} 
Resposta 
Selecionada: 
 
Respostas: 
a. 
2 4 6. 
a. 
 
 
 
 
elementos do vetor serão incrementados dentro da função. 
• Pergunta 4 
0,1 em 0,1 pontos 
Ao declarar um vetor, para dimensioná-lo, é necessário saber de 
antemão quantos elementos deveriam compô-lo. Temos de prever o 
número máximo de elementos no vetor durante o processo da 
codificação. 
 
Com base nesses dados, avalie as afirmações seguintes: 
I. O predimensionamento do vetor é um fator que limita a programação. 
II. Podemos superdimensionar o vetor, pois nunca estamos sujeitos a 
ter falta de memória. 
III. Podemos reservar a memória, isto é, solicitar ao programa que 
aloque dinamicamente um espaço na memória durante sua execução. 
 
É correto apenas o que se afirma em: 
Resposta 
Selecionada: 
 
e. 
I e III, apenas. 
Respostas: a. 
I, apenas. 
b. 
II, apenas. 
c. 
III, apenas. 
d. 
I e II, apenas. 
 
 
 
 
Feedbac 
k da 
resposta 
: 
 
e. 
I e III, apenas. 
Resposta: E 
Comentário: visando a resolver o problema de “prever” o 
número máximo de elementos em um vetor, uma solução seria 
superdimensionar o seu tamanho para tentar contornar essa 
falta de elementos livres durante a execução do programa. 
Porém, isso acarreta desperdício de memória, o que é 
inaceitável em diversas aplicações, principalmente nos 
aplicativos portáteis, em que sempre estamos sujeitos a ter 
falta de memória. 
• Pergunta 5 
 
0,1 em 0,1 pontos 
Considere o programa a seguir escrito em Linguagem C que deve 
receber uma string 
de caracteres e uma letra. Para isso, o programa possui uma função 
que devolve um vetor de inteiros contendo as posições (índices no vetor 
da string) em que a letra foi encontrada e um inteiro contendo o 
tamanho do vetor criado (total de letras iguais encontradas). Para que o 
programa execute corretamente a sua função, é preciso adicionar 
comandos nas linhas 11 e 25, respectivamente. Assinale a alternativa 
que apresenta corretamente esses comandos: 
 
 
 
 
 
 
 
Resposta 
Selecionada: 
 
b. 
indices = (int *) malloc(n* sizeof(int)); 
indices = acha_caractere(frase, 'a', 
&n); 
Respostas: a. 
indices = (int) malloc(n sizeof(int)); 
indices = acha_caractere(frase, 'a', 
&n); 
b. 
indices = (int *) malloc(n* sizeof(int)); 
indices = acha_caractere(frase, 'a', 
&n); 
c. 
indices = (int *) malloc(n* sizeof(int)); 
indices = acha_caractere(frase, 'a', n); 
d. 
indices = (int *) malloc(n* sizeof(int)); 
indices = acha_caractere(frase, 'a', *n); 
 
 
 
 
 
Feedbac 
k da 
resposta 
: 
e. 
indices = (int ) malloc(n sizeof(int)); 
indices = acha_caractere(frase, 'a', n); 
Resposta: B 
Comentário: o programa possui uma função – linhas 4 a 20. 
Porém, na linha 11 é preciso alocar memória para os índices e 
na linha 25 chamar a função acha_caractere(), passando as 
informações necessárias (frase, 'a', &n) por parâmetro, 
retornando os índices – linha 19. 
• Pergunta 6 
 
0,1 em 0,1 pontos 
O programa a seguir tem como objetivo calcular o fatorial de um 
número n. Considere as entradas 0, 1 e 5 e assinale a alternativa que 
apresenta corretamente a saída para cada uma das entradas. 
#include <stdio.h> 
int f1(int n) 
{ 
if (n == 0) 
return (1); 
else 
return(n * f1(n-1)); 
} 
 
void main(){ 
int a, b; 
printf("Digite um valor inteiro:"); 
scanf("%d", &a); 
 
 
 
 
b = f1(a); 
printf("%d \n", b); 
} 
Resposta 
Selecionada: 
 
e. 
1, 1, 120. 
Respostas: a. 
0, 1, 5. 
b. 
1, 2, 3. 
c. 
5, 10, 15. 
d. 
10, 20, 120. 
 
 
 
 
Feedback 
da 
resposta: 
 
e. 
1, 1, 120. 
Resposta: E 
Comentário: o programa executa a função f1() de forma 
recursiva retornando com o resultado quando o n foi igual a 
zero. Enquanto o valor de n for diferente de zero, a função é 
chamada de forma recursiva pelo código return(n * f1(n-1)); 
• Pergunta 7 
 
0,1 em 0,1 pontos 
O programa a seguir tem como objetivo calcular o fatorial de um 
número n. Considere as entradas 0, 1 e 5 e assinale a alternativa que 
apresenta corretamente a saída para cada uma das entradas. 
#include <stdio.h> 
void f2(int n) 
{ 
if (n == 0) 
printf("zero "); 
else 
{ 
printf("%d ", n); 
f2(n-1); 
} 
} 
 
void main(){ 
int a;printf("Digite um valor inteiro:"); 
scanf("%d", &a); 
f2(a); 
} 
Resposta 
Selecionada: 
 
d. 
Zero; 1 Zero; 5 4 3 2 1 
Zero 
 
 
 
 
Respostas: a. 
0; 0 1; 0 1 2 3 4 5 
b. 
0; 1 0; 5 4 3 2 1 0 
c. 
1; 1 2; 1 2 3 4 5 
 
 
 
 
 
 
 
 
Feedback 
da 
resposta: 
 
d. 
Zero; 1 Zero; 5 4 3 2 1 
Zero 
e. 
Zero; Zero 1; Zero 1 2 3 4 5 
Resposta: D 
Comentário: o programa executa a função f2() de forma 
recursiva retornando com o resultado quando o n foi igual a 
zero. Enquanto o valor de n for diferente de zero, a função é 
chamada de forma recursiva pelo código f2(n-1). 
• Pergunta 8 
 
0,1 em 0,1 pontos 
O programa a seguir tem como objetivo calcular o fatorial de um 
número n. Considere as entradas 0, 1 e 5 e assinale a alternativa que 
apresenta corretamente a saída para cada uma das entradas. 
#include <stdio.h> 
int func (int n) 
{ 
if (n == 0) 
return(0); 
return(n + func(n-1)); 
} 
 
void main(){ 
int a, b; 
printf("Digite um valor inteiro:"); 
scanf("%d", &a); 
b= func(a); 
printf ("%d \n", b); 
} 
Resposta 
Selecionada: 
 
a. 
0, 1, 15. 
Respostas: 
a.
 
0, 1, 15. 
b. 
0, 0, 3. 
c. 
1, 1, 15. 
d. 
1, 2, 3. 
 
 
 
 
 
 
 
Feedback 
da 
resposta: 
e. 
3, 2, 1. 
Resposta: A 
Comentário: o programa executa a função func() de forma 
recursiva retornando com o resultado quando o n foi igual a 
zero. Enquanto o valor de n for diferente de zero, a função é 
chamada de forma recursiva pelo código return(n + func(n-1)). 
 
 
• Pergunta 9 
0,1 em 0,1 pontos 
O programa a seguir tem como objetivo calcular o fatorial de um 
número n. Considere as entradas 0, 1 e 5 e assinale a alternativa que 
apresenta corretamente a saída para cada uma das entradas. 
#include <stdio.h> 
int func (int n) 
{ 
if (n == 0) 
return(0); 
return(3*n + func(n-1)); 
} 
 
void main(){ 
int a, b; 
printf("Digite um valor inteiro:"); 
scanf("%d", &a); 
b= func(a); 
printf ("%d \n", b); 
} 
Resposta 
Selecionada: 
 
Respostas: 
b. 
0, 3, 45. 
a. 
0, 1, 15. 
b. 
0, 3, 45. 
c. 
1, 1, 15. 
d. 
0, 3, 15. 
e. 
1, 3, 9. 
Feedback Resposta: B 
da 
• 
resposta: Comentário: o programa executa a função func() de forma 
recursiva retornando com o resultado quando o n foi igual a 
zero. Enquanto o valor de n for diferente de zero, a função é 
chamada de forma recursiva pelo código return(3*n + func(n- 
1)). 
Pergunta 10 
0,1 em 0,1 pontos 
 
 
 
 
O programa realiza comparações entre duas strings 
verificando qual das duas aparece primeiro no dicionário, porém há um 
erro neste código. Assinale a alternativa que apresenta o erro no 
programa a seguir: 
 
#include <stdio.h> 
#include <string.h> 
 
void main() 
{ 
char *a, *b; 
*a = "abacate"; 
*b = "uva"; 
if (strcmp(a, b) < 0 ) 
printf ("%s vem antes de %s no dicionário \n", a, b); 
else 
printf ("%s vem depois de %s no dicionário \n", a, b); 
} 
Resposta 
Selecionada: 
 
 
c. 
As variáveis “a” e “b” não precisavam ser ponteiros na 
atribuição de valores. 
Respostas: a. 
O teste da condicional nunca pode ser menor que 0. 
b. 
Estão faltando as chaves para identificar os blocos na 
condicional. 
 
 
 
 
 
 
 
 
 
 
 
 
Feedback 
da 
resposta: 
 
c. 
As variáveis “a” e “b” não precisavam ser ponteiros na 
atribuição de valores. 
d. 
As variáveis “a” e “b” deveriam ser declaradas 
como string e não char. 
e. 
O programa não possui erro. 
Resposta: C 
Comentário: as variáveis “a” e “b” não precisaria ser ponteiros 
na atribuição de valores, tendo dessa forma um erro de 
sintaxe. Uma solução desse problema seria: 
#include <stdio.h> 
#include <string.h> 
 
void main() 
{ 
char *a, *b; 
a = "abacate"; 
b = "uva"; 
if (strcmp(a,b) < 0 ) 
printf ("%s vem antes de %s no dicionário \n", a, b); 
 
 
 
 
else 
printf ("%s vem depois de %s no dicionário \n", a, b); 
}

Continue navegando