Baixe o app para aproveitar ainda mais
Prévia do material em texto
Pergunta 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 = ___; 0 em 1 pontos https://fmu.blackboard.com/bbcswebdav/pid-16230348-dt-content-rid-84766551_1/xid-84766551_1 Resposta Selecionada: Resposta Correta: Comentário da resposta: 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] ; vet[j] . .j=i+1 ; j<strlen(vet) ; j++ ; vet[i] ; vet[j] . Infelizmente a sua resposta está incorreta. Para responder essa questão, pense no fato de que uma ordenação pode ser realizada pela �xação de um elemento do vetor através do índice “ i”, para que se possa compará-lo com todos os demais itens a partir dele. Ao encontrar algum elemento menor, realiza a troca utilizando uma variável temporária. Pergunta 2 Resposta Selecionada: Resposta Correta: Na linguagem C, encontramos dois tipos de arquivos: os arquivos textuais e os arquivos binários. Nos arquivos textuais, as informações são gravadas como strings, independentes de seu tipo; porém, para tal, devemos usar algumas funções especí�cas. Para os comandos abaixo, assinale com (T) aquele(s) que serve(m) unicamente para arquivos textuais, com (B) para arquivos binários e, com (A) aquele(s) que serve(m) para ambos. ( ) fwrite() ( ) fputs() ( ) fputc() ( ) fread() ( ) fopen() Assinale a alternativa cuja ordem você julgue ser correta. B, T, T, B, A. B, T, T, B, A. 1 em 1 pontos Comentário da resposta: Parabéns! Sua resposta foi a correta! As funções “ fputs()” e “ fputc()” são utilizadas exclusivamente nos arquivos textuais para a gravação de strings e de caracter, respectivamente. Para os arquivos binários, utiliza-se “ fwrite()” e “ fread()”. A abertura é realizada por meio da função “ fopen()” independentemente do tipo do arquivo. Pergunta 3 Resposta Selecionada: Um valor binário pode ser representado no padrão conhecido como BCD 8421 ( Binary-coded Decimal – Decimal Codificado em Binário). Nesta codificação, os valores 8421 representam o resultado de 2 i , onde i denota a posição do dígito dentro da palavra. Por exemplo, 1001 (2) = 1*8 + 0*4 + 0*2 +1*1 = 9 (10) . Para essa questão, suponha o seguinte código recursivo: #include <stdio.h> #include <string.h> int Bin2Dec(char bin[],int pos,int exp) { if(____) return 0; return (bin[pos]-48)*exp + Bin2Dec(bin,____,____); } int main() { char binario[9]="10011101"; //valor em decimal = 157 printf("Valor convertido: %d", Bin2Dec(binario,strlen(binario)-1,1)); return 0; } Assinale a opção abaixo que contenha os trechos de código para preencher as lacunas: . pos<0 ; pos-1 ; exp*2 . 1 em 1 pontos Resposta Correta: Comentário da resposta: . pos<0 ; pos-1 ; exp*2 . Parabéns! Sua resposta foi a correta! Realmente o código foi implementado para que a última posição fosse evocada antes para facilitar o cálculo do expoente – à medida que se aproxima da posição 0 (início do vetor – posição mais signi�cativa do número binário), o expoente vai sendo multiplicado por 2. Sendo assim, a posição foi descrementada a cada evocação da função recursiva. A posição 0 do vetor também deveria ser manipulada – essa a razão do ( pos<0). Pergunta 4 Resposta Selecionada: Resposta Correta: Comentário da resposta: 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 �nalizada, o computador saiba voltar ao ponto de chamada. Dentre as a�rmativa 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; F; F; V. Parabéns! Sua resposta foi a correta! Realmente, o sistema operacional deve salvar o endereço da linha na qual ocorreu a evocação da função para que se possa, ao término da função, voltar à linha subsequente à chamada. Esse salvamento ocorre em uma estrutura de pilha ( stack) da memória principal. Essa região de pilha pode ser extremamente limitada em ambientes com pouca memória, tal como nos sistemas embarcados. As interrupções da máquina são tratadas, super�cialmente falando, de forma análoga às funções. 1 em 1 pontos Pergunta 5 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,�oat>. Desta forma, o arquivo consiste em: <qtd_registros><int1><float1><int2><float2>...<intn,�oatn>. Para essa questão, analise o código a seguir e preencha as lacunas de modo a representar o processo de criação de um arquivo novo e gravação de três registros. #include <stdio.h> void GravaArq(FILE *arq, int val_i,�oat val_f) { fwrite(&val_i,sizeof(____),1,arq); fwrite(&val_f,sizeof(____),1,arq); } int main() { FILE *arq; int qtd=3; arq=fopen("exercicio.dat","___"); if(arq==NULL) { printf("Erro de abertura do arquivo (1).\n"); return 0; } fwrite(&qtd,sizeof(int),1,arq); 1 em 1 pontos Resposta Selecionada: Resposta Correta: Comentário da resposta: GravaArq(arq,0,2.1); GravaArq(arq,10,45.21); GravaArq(arq,20,345.87); fclose(arq); return 0; } Assinale a alternativa que você julgue ser a correta. . int ; �oat ; wb . . int ; �oat ; wb . Parabéns! Sua resposta foi a correta! Realmente, para realizar somente operações em um arquivo binário, deve-se usar o modo “ wb”. O processo de gravação ocorre mediante a utilização de “ fwrite()” onde o tamanho do item gravado deve acompanhar o tipo. No caso, foi utilizada a função “ sizeof()” vinculado ao tipo passado como parâmetro para a gravação. Pergunta 6 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. 1 em 1 pontos Resposta Selecionada: Resposta Correta: Comentário da resposta: Marque a opção que tiver a sequência que você julgue ser a correta: .V ; F; V ; V . .V ; F; V ; V . 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 evocadopara 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 Define-se como palíndromo a palavra que tem a mesma grafia e leitura caso seja lida da esquerda para a direita ou da direita para a esquerda. Por exemplo, as palavras “anilina” e “reviver” são palíndromos. Para essa questão, suponha o código apresentado abaixo: #include <stdio.h> #include <string.h> int main() { char str[20]="reviver",palind=1; int tam = strlen(str); int i=0; cont = ____; for(; i ___ cont; i++,cont--) { if(____) { palind=0; break; } cont--; 0 em 1 pontos Resposta Selecionada: Resposta Correta: Comentário da resposta: } if(palind) printf("%s eh palindromo.\n",str); else printf("%s nao eh palindromo.\n",str); return 0; } Escolha a alternativa que tenha a sequência correta de preenchimento das lacunas: . tam-1 ; <= ; str[i]==str[cont] . . tam-1 ; <= ; str[i]!=str[cont] . Infelizmente a sua resposta não está correta. Para essa questão, re�ita sobre o processo de reconhecimento de um palíndromo: temos que testar o primeiro caractere com o último, o segundo com o penúltimo e assim sucessivamente. Pergunta 8 Em algumas situações, surge a necessidade de agrupar informações para melhor representar uma entidade ou algo da vida real que esteja sendo manipulado pelo programa. Para tanto, pode-se utilizar estruturas de dados heterogêneos, denominadas, em C/C++, como “ struct ”. Suponha que se deseja representar uma pessoa cuja data de nascimento é quebrada em outra “ struct ” (separando dia, mês e ano). Em relação à criação da “ struct ”, considere o seguinte trecho de código: . . . typedef struct { char nome[30]; struct { 1 em 1 pontos Resposta Selecionada: Resposta Correta: Comentário da resposta: unsigned char dia, mes; unsigned int ano; } nascimento; } TPessoa; . . . TPessoa tp; . . . Para essa questão, considere as afirmações a seguir: I – não é possível inserir uma estrutura dentro da outra; II – para se instaciar o dia, deve-se fazer: “ tp.nascimento.dia=20; ”; III – existe um erro de sintaxe pois está faltando o “ typedef ” antes da segunda ocorrência da palavra “ struct ”; IV – para se instanciar o mês, deve-se fazer: “ tp.mes=3; ”. Assinale a alternativa que contenha a(s) afirmação(ões) que você julgue correta(s). II, apenas. II, apenas. Parabéns! Sua resposta foi a correta! Realmente é possível criar estruturas dentro de estruturas e, para acessar os campos, deve- se referenciar todo o caminho, passando pelos itens das estruturas. Pergunta 9 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 0 em 1 pontos Resposta Selecionada: Resposta Correta: Comentário da resposta: 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. 2, 1, 3, 5, 4. 2, 1, 5, 3, 4. 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 �nal de processamento. Pergunta 10 Suponha que existe, em um arquivo textual, uma matriz 4x4 que relaciona os custos de um certo produto A (linhas) combinado com um produto B (colunas) como ilustra o exemplo a seguir: 00 03 06 02 03 00 04 07 06 04 00 01 02 07 01 00 O produto não poderá ser combinado com ele mesmo. Por exemplo, combinando-se o produto dois com o produto três, teremos o valor 01. Cada valor de custo é representado, sempre, por dois caracteres e separados por um espaço em branco. Analise o código a seguir que imprima, na tela, o custo da 1 em 1 pontos Resposta Selecionada: combinação solicitada pelo usuário e preencha as lacunas. #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char linha[30],custoStr[3]; int prodA,prodB,i=0; FILE *arq; arq=fopen("matrizcustos.txt","___"); if(arq==NULL) { printf("Erro de abertura de arquivo origem."); return 0; } printf("Produto A (de 0 a 3):"); scanf("%d",&prodA); printf("Produto B:(de 0 a 3): "); scanf("%d",&prodB); for(;i<=prodA;i++) ____(linha,30,arq); printf("linha selecionada: %s\n",linha); strncpy(custoStr,&linha[___],2); custoStr[3]='\x0'; fclose(arq); printf("Custo = %d",atoi(custoStr)); return 0; } Assinale a alternativa que você julgue ser a correta. . r ; fgets ; prodB*3 . Sábado, 26 de Junho de 2021 08h07min37s BRT Resposta Correta: Comentário da resposta: . r ; fgets ; prodB*3 . Parabéns! Sua resposta foi a correta! Você associou corretamente os trechos de código às lacunas observando de maneira certa o modo de abertura do arquivo (“ r”), a função de leitura de uma linha a partir de um arquivo textual (“ fgets()”) e o deslocamento dentro da linha (“ prodB*3”).
Compartilhar