Buscar

Prova A5 Tecnicas de programação

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

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

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

PERGUNTA 1
1. 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, 1, 2, 1.
	
	
	2, 1, 1, 2, 2, 1.
	
	
	1, 2, 1, 2, 2, 1.
	
	
	2, 2, 2, 1, 1, 2.
	
	
	1, 1, 1, 2, 2, 1.
1 pontos   
PERGUNTA 2
1. 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“.
 
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[][], char nomes[][],
                                   char nomemaior[]) ;
     float NomeVendedorMaiorValorVendas(float vendas[][], char nomes[][],
                                   char nomemaior[]) .
	
	
	. float NomeVendedorMaiorQtdVendas(float vendas[][30], char nomes[][40],
                                   char nomemaior[]) ;
     int 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[]) .
	
	
	. float NomeVendedorMaiorQtdVendas(float vendas[][], char nomes[][],
                                   char nomemaior[]) ;
     int NomeVendedorMaiorValorVendas(float vendas[][], char nomes[][],
                                   char nomemaior[]) .
1 pontos   
PERGUNTA 3
1. Para essa questão, suponha o seguinte enunciado: “O imposto de renda incidirá sobre o salário de todos os assalariados de modo que o desconto seja proporcional ao seu salário e de acordo com as faixas de valores”. Para esse enunciado foi implementada uma função cuja chamada ocorrerá na forma:
 
. . .
float salarioLiquido;
salarioLiquido = CalculaIRPF(salario_bruto, &imposto_retido);
.  . .
 
Assinale a opção abaixo que represente a interface mais apropriada para a questão:
	
	
	.  int CalculaIRPF(float, float *);  .
	
	
	.  float CalculaIRPF(float *, float *);  .
	
	
	.  float CalculaIRPF(float *, float);  .
	
	
	.  float CalculaIRPF(float, float);  .
	
	
	.  float CalculaIRPF(float, float *);  .
1 pontos   
PERGUNTA 4
1. Ponteiros são aplicáveis a todos os tipos de dados, inclusive aos registros. A manipulação de registros como ponteiros são extremamente úteis na passagem de parâmetros das funções. Com ponteiros, evita-se que todos os campos da estrutura sejam copiados para as variáveis locais inerentes à função. Para essa questão, suponha o seguinte trecho de código e complete as lacunas com o código correspondente para a impressão na tela, da rua e do número:
 
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char rua[30];
char bairro[30];
int num;
} S_Endereco;
int main()
{
S_Endereco *se;
se = (S_Endereco *)malloc(sizeof(S_Endereco));
scanf("%s", _____);
scanf("%d", _____);
free(se);
return 0;
}
 
Assinale a alternativa que contenha a sequência correta relativa ao preenchimento das lacunas.
	
	
	*se->rua ; &(se->num).
	
	
	se->rua ; &(se->num).
	
	
	se->rua ; &(se.num).
	
	
	se->rua ; se->num.
	
	
	se.rua ; &(se->num).
1 pontos   
PERGUNTA 5
1. Ao manipularmos matrizes, faz-se necessário, por exemplo, para a impressão dos valores armazenados, a utilização de laços de repetição aninhados. Dado o código a seguir, complete os espaços corretamente:
. . .
int M[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
. . .
for(i=__;i<__;i++)
{
for(j=__;j<__;j++)
printf("%d\t",M[i][j]);
printf("\n");
}
Assinale a alternativa que você julgue possuir a sequência correta.
	
	
	0; 4; 0; 3.
	
	
	0; 3; 1; 4.
	
	
	0; 3; 0; 4.
	
	
	5; 1; 4; 1.
	
	
	1; 4; 1; 5.
1 pontos   
PERGUNTA 6
1. Para a evocação de uma função, algumas informações deverão ser armazenadas, como o endereço da linha que contém a evocação (registrador PC – Program Counter – Contador de Programa), para que, quando a função for finalizada, o computador saiba voltar ao ponto de chamada. Dentre as afirmativa abaixo, assinale com “V” aquela(s) que você julgar estar correta e, com “F”, a(s) falsa(s).
 
( ) As informações para o retorno, em função da evocação da função, são empilhadas em uma região da memória principal do computador chamada “ stack” (pilha).
( )  Não precisamos nos preocupar com a quantidade de evocações aninhadas (uma função chamando outra e assim por diante, em uma ação de profundidade) independentemente dos dispositivo para o qual estamos implementando nosso código.
( ) Funções recursivas são aquelas que demandam muito recurso da máquina.
( ) O sistema operacional também empilha as informações decorrentes das funções associadas às interrupções do computador.
 
Assinale a alternativa abaixo que contenha a sequência que você julgue ser a correta:
	
	
	.V; F; F; V.
	
	
	.V; V; F; V.
	
	
	.F; F; F; V.
	
	
	.F; V; F; V.
	
	
	.V; F; V; V.
1 pontos   
PERGUNTA 7
1. Os compiladores C/C++, para realizar a verificação de consistência de uso das funções, faz uso dos arquivos de cabeçalhos ( headers ). Nestes arquivos, por exemplo, o protótipo das funções são declarados. Desta forma, o compilador verifica se as chamadas implementadas estão compatíveis com as definições das funções. Para essa questão, suponha a existência de dois arquivos: um contendo o arquivo header e outro contendo a implementação em C .
 
(A) Arquivo header :
 
#ifndef _ARQHEADER
#define _ARQHEADER
 
int func1(int *, int);
float func2(float, char []);
void func3(int *, int *, float);
int func4(char[],int, char);
 
#endif
 
(B) Arquivo de implementação
 
int main()
{
  int a,b,c;             
  float f1,f2;
  char str[20],carac;
  c=func1(a,b);           //Linha 1
  f2=func2(f1,str[0]);    //Linha 2
  c=func3(&a, &b, f1);    //Linha 3
  c=func4(str,a,carac);//Linha 4
  func1(&c,a);            //Linha 5
  return 0;
}
 
Analisando a parte de implementação com o arquivo header, assinale a alternativa que contém os possíveis erros que seriam acusados pelo compilador:
	
	
	.Na linha 2, está sendo passado o caracter da posição 0 e não toda a string “str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.
	
	
	.Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string
“str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); na linha 5, falta uma variável para receber o retorno da função “func1”. A linha 4 está correta.
	
	
	.Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string
“str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.
	
	
	.Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string
“str”; as demais linhas estão corretas.
	
	
	.Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.
1 pontos   
PERGUNTA 8
1. Quando se implementa uma fução, devemos seguir a sintaxe da linguagem de programação utilizada e, também, realizar a definição de sua interface de acordo com as nossas necessidades. Para essa  questão, suponha o trecho de código a seguir para procurar uma sequência dentro de uma cadeia de DNA:
 
#include <stdio.h>
#include <string.h>
 
___ ProcuraDNA(char ___dna[],char ___seq[],int ___ret[])
{
  int indice=0;
  for(int i=0; i<strlen(dna); i++)
    if(!strncmp(&(dna[i]),seq,3)) ret[indice++]=i;
  ret[indice]=-1;   //apenas para marcar o último item adicionado
}
 
int main()
{
  int i=0, pos[19];
  char str[19] = "GATGATCATGTCGTACATC",   //uma sequencia de DNA qualquer
       seq_proc[4] = "ATG";  //Adenina, Timina, Guanina – uma cadeia exemplo
  ProcuraDNA(str,seq_proc,pos);
  printf("posicoes:");
  while(pos[i]!=-1)
    {
      printf("%d ",pos[i]);
      i++;
    }
  return 0;
}
 
Escolha a afirmativa que contém o resultado da impressão pela função “ printf ” e os trechos a serem inseridos nas lacunas:
	
	
	.void ; * ; deixar em branco ; deixar em branco  .
	
	
	.void ; * ; * ; *  .
	
	
	.void ; deixar em branco ; deixar em branco ; deixar em branco  .
	
	
	.int ; deixar em branco ; deixar em branco ; deixar em branco  .
	
	
	.void ; deixar em branco ; * ; deixar em branco  .
1 pontos   
PERGUNTA 9
1. Uma string , em C, também pode ser definida como um ponteiro para o tipo “ char ”. Quando manipulamos ponteiros, alguns cuidados devem ser tomados para que não haja risco de destruir, em função de sobreposição, informações previamente armazenadas em outras variáveis e espaços de endereçamento.
 
Para essa questão, analise os seguintes trechos de código a seguir em relação a algum erro de implementação que pode acarretar na sobreposição de informações:
 
I – char *str;
strcpy(str,”Alo mundo!”);
 
II – char *str;
str = (char *) malloc(15);
strcpy(str, “Alo mundo!”);
 
III – char *str;
char str1[15]=”Alo mundo!”;
str = str1;
 
IV – char *str[10];
strcpy(str, “Alo mundo!”);
 
Com base na sua análise, assinale a alternativa que contenha as afirmativas que você considera corretas.
	
	
	I, IV.
	
	
	I, II.
	
	
	I, III.
	
	
	II, IV.
	
	
	II, III.
1 pontos   
PERGUNTA 10
1. Em certas situações, onde uma certa variável recebe, como valor de instanciação, um dentre dois valores, podemos substituir o comando “ if...else ” pelo comando condicional inline : o “ if ternário ”. Para essa questão, considere os seguintes trechos contendo as estruturas condicionais:
(A) if(a == b)
{
c=d;
}
else
{
c=e;
}
(B) if(a==0)
{
x = x + 1;
}
else
{
x = x * b;
}
(C) if(a!=0)
{
x=0;
}
else
{
x=1;
}
(D) if((a == b)&&(c > d))
{
e = f;
}
else
{
e = g;
}
Associe os trechos com comandos condicionais aos condicionais ternários a seguir:
( ) x = (a) ? 0 : 1;
( ) x = (!a) ? x++ : x*=b;
( ) e=((a==b)&&(c>d)) ? e : f;
( ) c=(a==b)?d:e;
Escolha a opção que contém a sequência que você julgue ser a correta.
	
	
	A; C; D; A.
	
	
	C; D; B; A.
	
	
	C; B; D; A.
	
	
	D; B; C; A.
	
	
	A; B; D; C.

Outros materiais