Baixe o app para aproveitar ainda mais
Prévia do material em texto
Usuário XXXXXXXXXXXXXXXXXXXXXXXXXX Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead- 17808.01 Teste 20212 - PROVA N2 (A5) Iniciado 04/10/21 10:06 Enviado 04/10/21 11:48 Status Completada Resultado da tentativa 8 em 10 pontos Tempo decorrido 1 hora, 41 minutos Instruções Caso necessite a utilização do "EXCEL" clique no link ao lado ----------- > excel.xlsx PERGUNTA 1 1. 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. https://anhembi.blackboard.com/bbcswebdav/pid-18764853-dt-content-rid-84766551_1/xid-84766551_1 . rb ; sizeof(int) ; fgets ; fgets . . r ; sizeof(int) ; fread ; fread . . wb ; sizeof(int) ; fread ; fread . . rb ; sizeof(int) ; fread ; fread . . rb ; sizeof(int) ; fwrite ; fwrite . PERGUNTA 2 1. Uma das manipulações recorrentes sobre vetores ou outras estruturas para o armazenamento de informações na forma de registros é representada pela ordenação. Ordenar significa organizar as informações de acordo com algum critério, como por exemplo, em ordem alfabética ou ordem numérica crescente. Para essa questão, considere o trecho de código abaixo: #include <stdio.h> #include <string.h> int main() { char vet[11]="hiedagfbjc",aux; int i,j; for(i=0; i<strlen(vet)-1;i++) for( ___ ; ___ ; ___ ) if(vet[i]>vet[j]) { aux = ___; vet[i]=___; vet[j]=aux; } printf("Vetor ordenado: %s",vet); return 0; } Escolha a alternativa que represente a ordem correta dos itens para completar as lacunas do código apresentado. .j=i+1 ; j<i ; j++ ; vet[i] ; aux . .j=i+1 ; j>i ; j++ ; vet[i] ; vet[j] . .j=i+1 ; j<i ; j++ ; vet[i] ; vet[j] . .j=i+1 ; j<strlen(vet) ; j++ ; vet[i] ; vet[j] . .j=i+1 ; j<strlen(vet) ; j++ ; vet[i] ; aux . PERGUNTA 3 1. Pode-se utilizar ponteiros para ponteiros para que uma matriz possa ser implementada. Para isso, a dimensão que representa as linhas consiste em um vetor de ponteiros para ponteiros. Cada item da linha faz referência à um vetor de ponteiros, com a dimensão da quantidade de colunas, para o armazenamento das informações propriamente dito. Para essa questão, analise o código a seguir para a soma de duas matrizes e preencha as lacunas: float ___SomaMatrizes(int n_linhas, int n_colunas , float ___matrizA, float ___matrizB) { float ___matriz_result; int i,j; matriz_result = CriarMatriz(n_linhas,n_colunas); if(matriz_result==NULL) return NULL; for(i=0; i<n_linhas;i++) for(j=0; j<n_colunas;j++) matriz_result[i][j]=matrizA[i][j]+matrizB[i][j]; return matriz_result; } int main() { float **mat1,**mat2, **mat3; int i,j; mat1 = CriarMatriz(5,5); mat2 = CriarMatriz(5,5); if((mat1==NULL)||(mat2==NULL)) { printf("Erro criacao da matriz.\n"); return 0; } for(i=0;i<5;i++) for(j=0;j<5;j++) { mat1[i][j]=i*5+j; mat2[i][j]=i*5+j+20; } mat3 = SomaMatrizes(5,5,mat1,mat2); printf("\nMatriz Resultante\n"); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%.1f ",mat3[i][j]); printf("\n"); } mat1 = RemoveMatriz(5,mat1); mat2 = RemoveMatriz(5,mat2); mat3 = RemoveMatriz(5,mat3); return 0; } Assinale a alternativa que apresenta a sequência correta relativa ao preenchimento das lacunas. .** ; ** ; ** ; **. ** ; ** ; ** ; *. ** ; * ; * ; **. * ; ** ; ** ; *. * ; * ; * ; *. A QUESTÃO ACIMA FOI UM CHUTE COMPLETO!!! PERGUNTA 4 1. 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): . _ ; _ ; _ ; _ ; _ ; _ ; _ ; _ . . * ; * ; _ ; _ ; _ ; _ ; & ; & . . & ; & ; * ; * ; * ; * ; & ; & . . * ; * ; * ; * ; * ; * ; & ; & . . * ; * ; * ; * ; * ; * ; _ ; _ . PERGUNTA 5 1. Laços de repetição são usados para que um conjunto (blocos) de instruções seja executado enquanto uma certa condição esteja sendo satisfeita. Em alguns sistemas, como por exemplo, em sistemas embarcados, o programa consiste em um laço de repetição perpétua que contém as instruções a serem processadas eternamente. Para essa questão, assinale: com “P” a(s) alternativa(s) que represente(m) laço de repetição perpétua; com “N” a(s) alternativa(s) que não represente(m) laço de repetição perpétua; com “E” a(s) alternativa(s) que apresenta(m) erro de sintaxe: (P) for( ; ; ); (N) while(i>=0) { … } (P) while(1); (E) while( ); Agora assinale a alternativa correta. E; N; N; P. N; N; E; P. P; P; E; N. P; N; P; E. P; N; E; E. PERGUNTA 6 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[][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[]) . . 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[]) . PERGUNTA 7 1. Uma string pode ser representada uma estrutura homogênea (vetor) para o armazenamento de uma sequência de caracteres. Em C/C++, as strings são iniciadas na posição 0 do vetor e são finalizadas pelo caractere nulo ('\x0'). Para essa questão, suponha que existe uma string carregada em uma variável denominada “str”. Dadas as sequências de código a seguir, assinale, com “R” aquela (s) que proporciona (m) a remoção do conteúdo de uma certa posição e, com “N”, a (s) que apresentam algum erro de sintaxe ou de lógica. Suponha a posição a ser retirada = 4. ( ) i=4; do { str[i]=str[i+1]; i++; } while(str[i]!='\x0'); ( ) i=4; while(i>=0) { str[i]=str[i+1]; i--; } ( ) for(i=4;i>=0;i--) str[i]=str[i+1]; ( ) i=4; for(;str[i]!='\x0';i++) str[i]=str[i+1]; Assinale a alternativa que apresenta a sequência correta. N; R; R; N. N; R; N; R. R; N; R; N. R; N; N; R. R; R; N; R. PERGUNTA 8 1. 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() ”. .abc. .hgfedcba. abcdefgh. .h. .a. PERGUNTA 9 1. Modularizar um sistema significa dividí-lo em blocos funcionais e, estes subdividí-los em funções. É recomendável que as funções tenham o seu comportamento bem pontual, ou seja, deve ser única a desempenhar uma função específica. Diante da questão sobre modularização, assinale com “V” a(s) afirmativa(s) abaixo que você julgue como verdadeira(s) e, com (F), a(s) falsa(s). ( ) Dificulta o processo de testes pelo fato de que, com a modularização, deve-se testar um número muito maior de funções . ( ) Facilita a reutilização do código pois a funcionalidade de uma função pode fazer parte de uma outra parte do sistema. ( ) O programa fica mais organizado, separado por funcionalidades. ( ) A compreensão do código se torna mais exaustiva devido ao grande número de chamadas de funções na implementação. Escolha a opção correta: .F ; V ; V ; F . .F ; V ; V ; V . .V ; F ; V ; F . .V ; F ; F ; V . .F ; F ; V ; F . PERGUNTA 10 1. Recursividade é uma técnica que permite a escrita de códigos de forma mais sucinta porém faz uso de forma mais massivo da pilha de memória. Para essa questão, analise o código a seguir: #include <stdio.h> int f(int a, int b) { if(!b)return a; return f(b, a % b); } int main() { int x=3, y=10; printf("%d",f(x,y)); } Escolha a opção correta: .O código calcula o MDC (Máximo Divisor Comum) usando o algoritmo de Euclides. .O código calcula o MMC (Mínimo Múltiplo Comum) usando o método da fatoração. .O código calcula a mediana entre os dois números. .O código calcula o número de arranjos estatísticos de Ax,y. .O código calcula o número de combinações estatísticas de xCy.
Compartilhar