Baixe o app para aproveitar ainda mais
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.
Compartilhar