Buscar

Prova N2

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

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

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ê viu 3, do total de 8 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

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

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ê viu 6, do total de 8 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

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

Prévia do material em texto

Pergunta 1
Resposta Selecionada:  
Resposta Correta:  
Comentário
da
resposta:
Em algumas situações, como inversão de vetores, surge a necessidade de
implementar uma função que realiza a troca de dois elementos entre si, ou seja, o
elemento “ vet[i] ” recebe o valor de “ vet[j] ” e “ vet[j] ” recebe o valor de “ vet[i] ”.
Sendo assim, pode-se codificar uma função que realizará exatamente essa
permuta. Para essa questão, considere o código apresentado a seguir:
 
 
#include <stdio.h> 
#include <string.h> 
  
void swap(char __c1, char __c2) 
{ 
  char tmp; 
  tmp = __c1; 
  __c1 = __c2; 
  __c2 = tmp; 
} 
  
void Ordena(char str[]) 
{ 
  for(int i=0; i < strlen(str)-1; i++) 
    for(int j=i+1; j < strlen(str); j++) 
      if(str[i]>str[j]) swap(__str[i],__str[j]); 
} 
  
int main() 
{ 
  char str[11]="icbjdgfeah"; 
  printf("Vetor original: %s\n",str); 
  Ordena(str); 
  printf("Vetor ordenado: %s\n",str); 
  return 0; 
} 
 
Assinale a opção abaixo que contenha os elementos para preencher as lacunas
(nas opções abaixo, o símbolo ”_” significa deixar a lacuna sem preenchimento):
. * ; * ; * ; * ; * ; * ; & ; & .
. * ; * ; * ; * ; * ; * ; & ; & .
Parabéns! Sua resposta foi a correta! Você observou que, apesar da função
“swap” manipular elementos do vetor, foram passadas posições específicas, ou
seja, foram passados apenas caracteres. Sendo assim, é necessário passar as
referências dos itens “ str[i]” e “ str[j]” para que as alterações realizadas
dentro da função “ swap” tenham validade na função “ Ordena”.
Pergunta 2
Em algumas situações, temos a necessidade de contabilizar a quantidade de
certos elementos dentro de uma estrutura do tipo vetor. Para essa questão,
1 em 1 pontos
1 em 1 pontos
Resposta
Selecionada:
Resposta
Correta:
Comentário
da
resposta:
suponha que exista a necessidade de contar a quantidade de vogais para que, em
seguida, as quantidades classificadas por cada vogal sejam impressas na tela.
Para isso, observe o código a seguir:
#include <stdio.h> 
#include <string.h> 
int main() 
{ 
char str[50]="testando a quantidade de vogais na frase."; 
int qtdVogais[5]={0,0,0,0,0}; 
for(int i=0; i<50; i++) 
switch(str[i]) 
{ 
case 'a': qtdVogais[0]=qtdVogais[0]++; 
case 'e': qtdVogais[1]=++; 
case 'i': qtdVogais[2]++; 
case 'o': qtdVogais[3]++; 
case 'u': qtdVogais[4]++; 
} 
printf("A=%d E=%d I=%d O=%d U=%d\n",qtdVogais[0],qtdVogais[1], 
qtdVogais[2],qtdVogais[3],qtdVogais[4]); 
return 0; 
} 
O programa acima apresenta alguns erros. Com base na análise do código,
selecione a opção correta:
No código faltam os comandos “ break” associado a cada caso do “ switch”. O
critério de parada do laço de repetição não atende às expectativas; o correto
seria usar o “ strlen(str)”.
No código faltam os comandos “break” associado a cada caso do “switch”.
O critério de parada do laço de repetição não atende às expectativas; o correto
seria usar o “strlen(str)”.
Parabéns! A sua resposta está correta! Você observou bem que existe uma
diferença entre instanciar uma string (valor a ser atribuído à string delimitado por
aspas) e instanciar um vetor (valor a ser atribuído ao vetor delimitado por
chaves). Você, observou ainda, que para o critério de parada seria melhor usar o
“strlen(str)” e que faltam os “ break´s” nos “ case´s” do “ switch”.
Pergunta 3
Uma das etapas iniciais da implementação das funções consiste na definição de
suas interfaces, ou seja, definição dos tipos de retornos e de suas listas de
parâmetros. Para essa questão, suponha o seguinte enunciado: “Um certa loja
apresenta um programa de incentivo aos seus vendedores atribuindo premiações
àqueles que realizaram mais vendas no mês (independentemente do valor
vendido) e àqueles que conseguiram maiores montantes de venda (maior valor
vendido independentemente do número de vendas efetuadas). As vendas estão
lançadas em uma matriz – cada linha denota um vendedor e as colunas
representam as vendas de cada vendedor. A última posição das colunas de cada
vendedor contém o valor -1 indicando o término dos lançamentos. Os nomes dos
vendedores estão lançados em um vetor de strings – cada vendedor respresenta
um índice do vetor“.
1 em 1 pontos
Resposta
Selecionada:
Resposta
Correta:
Comentário
da
resposta:
 
Para tanto, serão criadas as funções abaixo:
 
NomeVendedorMaiorQtdVendas( ); 
NomeVendedorMaiorValorVendas( ); 
 
Para a questão, suponha que a quantidade máxima de vendas vale 30 e os nomes
têm o tamanho máximo de 40 caracteres. Assinale a opção abaixo que contenha
as interfaces das funções apropriadas ao enunciado:
. int NomeVendedorMaiorQtdVendas(float vendas[]
[30], char nomes[][40], 
 char
nomemaior[]) ; 
 float NomeVendedorMaiorValorVendas(float
vendas[][30], char nomes[][40], 
 char
nomemaior[]) .
. int NomeVendedorMaiorQtdVendas(float vendas[]
[30], char nomes[][40], 
 char
nomemaior[]) ;
 float NomeVendedorMaiorValorVendas(float
vendas[][30], char nomes[][40], 
 char
nomemaior[]) .
Parabéns! Sua resposta foi a correta! Você interpretou bem o enunciado
realizando corretamente o tipo de retorno das funções e seus respectivos
parâmetros. Podemos reforçar o fato da escolha do tipo “ int” para a maior
quantidade de vendas (o número de vendas é um valor inteiro) e do tipo
“ float” para o valor vendido (o montande de valor é uma grandeza que
manipula os centavos, portanto, um valor do tipo real – float). Salientamos o
fato de que, quando passamos matrizes como parâmetros, temos que informar o
tamanho de pelo menos a última dimensão – essa foi o motivo de preenchermos
o tamanho das colunas.
Pergunta 4
Existem duas formas para a criação de vetores: a primeira consiste em uma
definição que não utiliza efetivamente ponteiros (tal como: “ int vet[5]; ”) e a segundo
através da utilização de ponteiros (como por exemplo, “ int *vet; ”). Para essa
questão, assinale com “V” a(s) linha(s) de código que apresentar o acesso correto
à uma posição de um vetor instanciado como ponteiro e, com “F” a(s) linha(s) que
apresentar uma codificação errada. Suponha que se deseja acessar a posição 3:
 
 
( ) y = (*vet)[3] 
( ) y = vet[3] 
( ) y = *(vet+3) 
1 em 1 pontos
Resposta Selecionada:  
Resposta Correta:  
Comentário
da
resposta:
( ) y = *(vet+sizeof(int)*3) 
 
Assinale a alternativa que apresente a sequência que você julgue ser a correta.
F, V, V, F.
F, V, V, F.
Parabéns! Sua resposta foi a correta! Realmente, os vetores mapeados como
ponteiros poderão ser acessados como um vetor sem o mapeamento por
ponteiro (com em “ vet[3]”) ou através do conteúdo do início do vetor
deslocado N bytes, como é o caso de “ *(vet+3)”.
Pergunta 5
Resposta Selecionada:  
Resposta Correta:  
Comentário
da
resposta:
Uma das vantagens de se passar, como parâmetro de uma função, um vetor
definido como ponteiro, consiste no fato de que a função pode se adequar a
qualquer tamanho de parâmetro. Para essa questão, suponha a implementação
que retornará a média das notas de alunos armazenados em um vetor. A
finalização do vetor ocorre com a presença do valor “-1” posterior à última posição
válida. Analise o código relativo à função e preencha as lacunas corretamente:
#include <stdio.h> 
float Media(float ___notas) 
{ 
float soma = 0.0; 
int i=0; 
while(*(notas+i)!=-1) 
{ 
soma+=___; 
i++; 
} 
if(i==0) return 0; 
return soma / ___; 
} 
int main() 
{ 
float notas1[5]={8.0 , 7.0 , 6.5 , 8.3 , -1.0}; 
float notas2[8]={7.0 , 8.2 , 5.6 , 9.7 , 7.4 , 8.6 , 9.4 , -1.0}; 
printf("Media1 = %.1f\n",Media(notas1)); 
printf("Media2 = %.1f\n",Media(notas2)); 
return 0; 
} 
Assinale a alternativa que apresenta a sequência correta relativa ao
preenchimento das lacunas.
.* ; *(notas+i) ; i.
.* ; *(notas+i) ; i.
Parabéns! Sua resposta foi a correta! Realmente um vetor pode ser
implementado sob a forma de ponteiro. No caso do código da questão, o
conteúdo deste vetor é acessado através do conteúdo do vetor deslocado “ i”
posições(“ i” = índice).
1 em 1 pontos
Pergunta 6
Resposta
Selecionada:
Resposta
Correta:
Comentário
da
resposta:
Para a manipulação de um arquivo, deve-se antes, realizar a sua abertura através do comando
“fopen()”. Tal comando permite associar o nome físico do arquivo assim como a sua forma de
abertura. Para essa questão, analise as linhas de código a seguir: 
FILE *arq; 
arq = fopen(“arquivo.dat”,”wb+”); 
Assinale a alternativa que você julgue ser a correta.
Será aberto um arquivo binário “ arquivo.dat” permitindo-se operações de
leitura e de escrita. Sempre será criado um arquivo novo, destruindo o conteúdo
caso já exista um arquivo com o mesmo nome.
Será aberto um arquivo binário “arquivo.dat” permitindo-se operações de
leitura e de escrita. Sempre será criado um arquivo novo, destruindo o
conteúdo caso já exista um arquivo com o mesmo nome.
Parabéns! Sua resposta foi a correta! Você observou bem que foi incluído o
símbolo ”+”, que indica que operações de escrita poderão ser realizadas além das
operações de escrita do símbolo “w”. O “w” indica ainda, que sempre será criado
um arquivo novo, destruindo o conteúdo do arquivo caso já exista. Além destas
informações, encontramos o símbolo “b” denotando que o arquivo a ser aberto
será do tipo binário.
Pergunta 7
Resposta Selecionada:  
Resposta Correta:  
Comentário
Funções são blocos funcionais modulares presentes nas linguagens de
programação estruturadas. A criação de funções, por exemplo, em C, deve seguir
a sintaxe: <tipo_de_retorno> nome_da_função (lista_de_parâmetros). Para essa
questão, suponha o trecho de código a seguir:
 
int funcao(int a, int *b) 
  { 
     a++; 
     *b = a * 2; 
     return b+5; 
  } 
  
int main() 
{ 
   int x=4,y=8,z; 
   z = funcao(x,&y); 
   printf(“%d    %d    %d\n”,x,y,z); 
   return 0; 
} 
 
Assinale a alternativa que apresenta os valores impressos pela função “ printf ”:
.4    10    15.
.4 10 15.
Parabéns! Sua resposta foi a correta! Você utilizou, com sucesso, os conceitos de
1 em 1 pontos
1 em 1 pontos
da
resposta:
passagem de parâmetros por valor e por referência. No caso, realmente, devido à
passagem por valor, a variável “ a”, apesar da alteração internamente à função,
não influenciará o valor de “ x” - variável de origem.
Pergunta 8
Resposta Selecionada:  
Resposta Correta:  
Comentário
da
resposta:
Uma matriz pode ser criada pela utilização de ponteiros para ponteiros. Para isso,
deve ser criado um vetor, com a dimensão da quantidade de linhas, de ponteiros
para ponteiros. Cada item referenciará um ponteiro que representará um vetor,
com a dimensão da quantidade de colunas, que será responsável por armazenar
os dados da matriz. Para essa questão, analise o código abaixo para a criação de
uma matriz, preenchendo as lacunas com o valor “1” caso seja necessária a
utilização de “**” e, com o valor “2”, caso seja necessária a utilização de “*”:
 
#include <stdio.h> 
#include <stdlib.h> 
  
float ___CriarMatriz(int n_linhas, int n_colunas) 
{ 
float ___matriz; 
int i; 
matriz = (float ___) calloc(n_linhas, sizeof(float ___)); 
if (matriz == NULL) 
return NULL; 
for (i = 0; i<n_linhas; i++) 
{ 
matriz[i] = (float ___) calloc(n_colunas, sizeof(float)); 
if (matriz[i] == NULL) 
return NULL; 
} 
return matriz; 
} 
  
int main() 
{ 
float ___mat; 
mat = CriarMatriz(5,5); 
if(mat==NULL) 
printf("Erro criacao da matriz.\n"); 
//... 
return 0; 
} 
Assinale a alternativa que apresenta a sequência correta para o preenchimento
das lacunas.
1, 1, 1, 2, 2, 1.
1, 1, 1, 2, 2, 1.
Parabéns! Sua resposta foi a correta! Você observou bem o enunciado da questão
e relacionou corretamente os locais nos quais era necessária a utilização de
1 em 1 pontos
ponteiro para ponteiro (vetor das linhas) e a utilização de ponteiros (vetor das
colunas).
Pergunta 9
Resposta
Selecionada:
Resposta
Correta:
Comentário
da
resposta:
A utilização do mecanismo de alocação dinâmica de memória torna o programa escalável pelo
fato de que ele pode ser adequar à uma nova realidade da quantidade de informações a serem
processadas sem a necessidade de alterações e recompilações de seu código. Para essa questão,
suponha o seguinte cenário: Um profissional de desenvolvimento recebeu para implementar,
um projeto que envolve notas de alunos de uma faculdade. Porém, cada turma tem um número
variável de alunos e cada professor tem o seu próprio método de avaliação, alterando a
quantidade de atividades e os pesos relacionados a elas. Sendo assim, qual a melhor forma de
implementação para esse problema? Assinale a melhor alternativa dentre as apresentadas a
seguir para garantir a escalabilidade do programa.
Cursistas = vetor de ponteiros para ponteiros. Cada ponteiro aponta para um
ponteiro que representa a lista das atividades (estrutura “atividade x peso”). 
  
  
 
Cursistas = vetor de ponteiros para ponteiros. Cada ponteiro aponta para um
ponteiro que representa a lista das atividades (estrutura “atividade x peso”).
 
 
 
Parabéns! Sua resposta foi a correta! Realmente é interessante implementar o
programa com alocação dinâmica tanto para representar os cursistas quanto
representar as atividades com os seus pesos. Desta forma, os cursistas serão
representados por um vetor alocado dinamicamente de ponteiros para ponteiros
devido ao fato de que as atividades também serão alocadas dinamicamente.
Pergunta 10
Arquivos textuais são aqueles cujo conteúdo é formado somente por strings e podem ser
abertos por editores de texto do tipo “bloco de notas”. Para essa questão, analise o código a
seguir: 
#include <stdio.h> 
  
int main() 
{ 
FILE *arq; 
long pos,i; 
char carac; 
1 em 1 pontos
1 em 1 pontos
Resposta
Selecionada:
Resposta
Correta:
Comentário
da
resposta:
arq = fopen("conteudo.txt","r"); 
if(arq==NULL) 
{ 
printf("Erro de aberura do arquivo."); 
return 0; 
} 
fseek(arq,0,SEEK_END); 
pos=ftell(arq); 
printf("Pos = %ld\n",pos); 
for(i=pos-1; i>=0; i--) 
{ 
fseek(arq,i,SEEK_SET); 
carac = fgetc(arq); 
printf("%c",carac); 
} 
return 0; 
} 
Assinale a alternativa que você julgue ser a correta.
O programa faz a impressão do arquivo em ordem inversa. O trecho com as
linhas “ fseek(arq,0,SEEK_END);” e “ pos=ftell(arq);” servem para coletar
o tamanho do arquivo.
O programa faz a impressão do arquivo em ordem inversa. O trecho com as
linhas “fseek(arq,0,SEEK_END);” e “pos=ftell(arq);” servem para
coletar o tamanho do arquivo.
Parabéns! Sua resposta foi a correta! Realmente o programa exibe o conteúdo do
arquivo em ordem reversa. Para posicionar em cada caractere do arquivo, foi
realizado um laço de repetição iniciando-se no penúltimo elemento visto que o
último corresponde, justamente, ao EOF.

Outros materiais