Baixe o app para aproveitar ainda mais
Prévia do material em texto
Usuário Curso TÉCNICAS DE PROGRAMAÇÃO Teste 20211 - PROVA SUBSTITUTIVA (A6) Iniciado Enviado Status Completada Resultado da tentativa 7 em 10 pontos Tempo decorrido Instruções Caso necessite a utilização do "EXCEL" clique no link ao lado -----------> Resultados exibidos Respostas enviadas, Respostas corretas, Comentários • Pergunta 1 0 em 1 pontos Programas devem manipular informações através das instruções. Porém, as informações devem ser escolhidas de acordo com o seu tipo, de modo que a escolha proporcione funcionalidade compatível com o seu objetivo e, também, com o objetivo de otimizar os recursos computacionais. Para essa questão, suponha que você desenvolverá um programa necessitando declarar variáveis cujos limites de valores a serem manipulados são: 0 a 60.000; 'a' até 'z'; ±150.000; ±20.000 e 0 a 230. Dentre as alternativas a seguir, marque aquela que você julgue possuir a sequência correta associando de forma mais otimizada, os tipos de dados às faixas de valores: Resposta Selecionada: unsigned int; char; long int; int; int. Resposta Correta: char; char; long int; int; unsigned char. Comentário da resposta: Infelizmente a sua resposta está incorreta. Para responder essa questão, reveja a faixa de valores abrangidos por cada tipo e reflita sobre o fato de que o modificador de tipo “ unsigned” faz com que a quantidade de valores negativos seja transformada em capacidade de representação de valores positivos. • Pergunta 2 1 em 1 pontos Na programação em C, podemos encontrar duas formas distintas de se abrir um arquivo (textual ou binária) aliadas aos modos que esse arquivo será manipulado. Para essa questão, analise o código a seguir, que manipula um arquivo binário, e preencha a lacuna corretamente. . . . FILE *arq; int codigo; char buffer[35]="algo a ser escrito no arquivo\n"; arq=fopen("exercicio.dat","____"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n"); return 0; } ... if(!fread(&codigo,sizeof(int),1,arq)) //caso o arquivo ainda esteja vazio codigo=0; else codigo++; ... if(!fwrite(&codigo,sizeof(int),1,arq)) printf("erro na gravacao do codigo.\n"); else if(!fwrite(buffer,35,1,arq)) printf("Erro na gravacao do buffer.\n"); fclose(arq); . . . Considerando que, caso o arquivo não exista, será criado um novo e caso exista, os dados deverão ser mantidos, assinale a alternativa que corresponda ao preenchimento da lacuna. Resposta Selecionada: ab+. Resposta Correta: ab+. Comentário da resposta: Parabéns! Sua resposta foi a correta! Você observou corretamente a consideração final: “ caso o arquivo não exista, será criado um novo e caso exista, os dados deverão ser mantidos”. Caso fosse colocado “ r+”, o arquivo deveria existir para ser aberto; caso a abertura fosse “ w+”, o arquivo sempre seria criado. Então, sobra o modo “ a+”. Pelo fato de aparecer “ fwrite()” e “ fread()”, então, o arquivo é binário. Sendo assim, “ ab+”. • Pergunta 3 1 em 1 pontos 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: Resposta Selecionada: . int NomeVendedorMaiorQtdVendas(float vendas[][30], char nomes[][40], char nomemaior[]) ; float NomeVendedorMaiorValorVendas(float vendas[][30], char nomes[][40], char nomemaior[]) . Resposta Correta: . int NomeVendedorMaiorQtdVendas(float vendas[][30], char nomes[][40], char nomemaior[]) ; float NomeVendedorMaiorValorVendas(float vendas[][30], char nomes[][40], char nomemaior[]) . Comentário da resposta: 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 1 em 1 pontos 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. Resposta Selecionada: .* ; *(notas+i) ; i. Resposta Correta: .* ; *(notas+i) ; i. Comentário da resposta: 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). • Pergunta 5 0 em 1 pontos Para que seja realizada uma alocação dinâmica, deve-se utilizar funções para a alocação, realocação e liberação da memória previamente alocada. Para essa questão, analise as afirmativas a seguir assinalando com V para verdadeiro e F para falso. ( ) Pode-se usar a função “ realloc() ” mesmo em ponteiros que não foram previamente iniciados. ( ) Toda a alocação de memória é feita em uma região da memória principal denominada “ heap ”. ( ) Toda memória alocada dinamicamente deverá ser desalocada ao final da função “ main() ” mesmo que ela tenha sido alocada como uma variável local à uma outra função. ( ) Deve-se sempre testar se a alocação foi bem sucedida antes de usar o ponteiro de forma efetiva. Assinale a alternativa que apresenta a sequência assinalada. Resposta Selecionada: F, V, V, V. Resposta Correta: F, V, F, V. Comentário da resposta: Infelizmente a sua resposta está incorreta. Para responder essa questão, pense nas etapas que deverão ser respeitadas para a utilização de alocação dinâmica de memória e o local, na memória principal, na qual ocorreas alocações. • Pergunta 6 1 em 1 pontos Quando construimos aplicações para que sejam executadas a partir do comando de linha (prompt ou console), temos a possibilidade de passarmos informações ao programa. Para tanto, usamos os parâmetros comumente identificados por “ argc ” e “ argv ”. Considerando o trecho: int main(int argc, char *argv[]) Analise as afirmativas a seguir, marcando com “V” a(s) verdadeira(s) e, com “F” a(s) falsa(s): ( ) caso colocarmos, em nosso código “ printf(“%s”,argv[0]) ”, será impresso o nome do próprio programa. ( ) caso não passemos nenhum parâmetro ao programa, “ argv ” assumirá o valor 0. ( ) o parâmetro “ argv ” é uma lista de strings . ( ) o parâmetro “ argc ” sempre será positivo e maior ou igual a 1. Marque a opção que tiver a sequência que você julgue ser a correta: Resposta Selecionada: .V ; F; V ; V . Resposta Correta: .V ; F; V ; V . Comentário da resposta: Parabéns! Sua resposta foi a correta! Realmente, o parâmetro “ argv” sempre conterá pelo menos um item – que é o nome do arquivo executável evocado para a execução, inserido na posição 0 do parâmetro “ argv”. Desta forma, o “ argc” sempre será maior ou igual a 1. • Pergunta 7 1 em 1 pontos Uma variável do tipo “ string ” pode ser representada, também, como um ponteiro para “ char ”. Inicialmente, o ponteiro referencia a posição de memória ocupada pela primeira letra da string . Podemos caminhar pela string através do incremento do ponteiro que a representa. Para essa questão, analise o código apresentado a seguir: #include <stdio.h> #include <string.h> void Imprimir(char *str, int tam) { char *carac; for (carac = str; carac < str + tam; carac++) printf ("%c", *carac); } int main() { char frase[10]="abcdefgh"; Imprimir(frase,strlen(frase)); return 0; } Assinale a alternativa que apresenta a saída da função “ printf() ”. Resposta Selecionada: abcdefgh. Resposta Correta: abcdefgh. Comentário da resposta: Parabéns! Sua resposta foi a correta! Você observou bem que o incremento do ponteiro “ carac” causa a referenciação do próximo caractere dentro da string “ str”. Não se esqueça que “ carac” foi instanciado com o ponteiro “ str”. • Pergunta 8 0 em 1 pontos Uma alocação dinâmica de memória consiste em alocar uma certa região de memória para receber informações de um certo tamanho que poderá variar ao longo do processamento do programa. Para essa questão, enumere as linhas de código a seguir de modo a representar a sequência correta que deverá ser programada: 1 para a primeira linha de código que deverá ocorrer, 2 para a segunda e assim por diante: ( ) vetor = (int *) malloc(sizeof(int)); ( ) int *vetor; ( ) free(vetor); ( ) if(vetor==NULL) return; ( ) *(vetor+i) = 5; Assinale a alternativa que apresenta a sequência correta. Resposta Selecionada: 2, 1, 3, 5, 4. Resposta Correta: 2, 1, 5, 3, 4. Comentário da resposta: Infelizmente a sua resposta está incorreta. Para responder essa questão, pense que apenas pode-se usar um ponteiro após a sua completa criação. Pense, também, que toda região alocada dinamicamente deve ser liberada ao final de processamento. • Pergunta 9 1 em 1 pontos Para essa questão, suponha que um certo arquivo mantém, em sua primeira posição, a quantidade de registros armazenados. Após o indicativo da quantidade, são gravados os valores na forma <int,float>. Desta forma, o arquivo consiste em: <qtd_registros><int1><float1><int2><float2>...<intn,floatn>. Para essa questão, analise o código a seguir e preencha as lacunas de modo a representar o processo listagem de todos os registros armazenados no arquivo. #include <stdio.h> int main() { FILE *arq; int qtd,valor_int,i; float valor_float; arq=fopen("exercicio.dat","___"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n"); return 0; } fread(&qtd,____,1,arq); for(i=0; i<qtd;i++) { ____(&valor_int,sizeof(int),1,arq); ____(&valor_float,sizeof(float),1,arq); printf("[%d] int=%d float=%f\n",i,valor_int,valor_float); } fclose(arq); return 0; } Assinale a alternativa que você julgue ser a correta. Resposta Selecionada: . rb ; sizeof(int) ; fread ; fread . Resposta Correta: . rb ; sizeof(int) ; fread ; fread . Comentário da resposta: Parabéns! Sua resposta foi a correta! Você observou bem o fato de que, para somente a leitura de um arquivo binário, faz-se necessário apenas o modo “ rb” de abertura. Arquivos binários requerem a função “ fread()” para que seja processada a leitura do registro. • Pergunta 10 1 em 1 pontos 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: Resposta Selecionada: . float CalculaIRPF(float, float *); . Resposta Correta: . float CalculaIRPF(float, float *); . Comentário da resposta: Parabéns! Sua resposta foi a correta! Você interpretou corretamente o enunciado observando bem os valores retornados pela função. Os valores retornados devem ser passados como referência usando o símbolo “ *” no protótipo da função e “ &” na chamada da função. Segunda-feira, 28 de Junho de 2021 13h28min04s BRT Pergunta 1 Pergunta 2 Pergunta 3 Pergunta 4 Pergunta 5 Pergunta 6 Pergunta 7 Pergunta 8 Pergunta 9 Pergunta 10
Compartilhar