Baixe o app para aproveitar ainda mais
Prévia do material em texto
• Pergunta 1 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 de criação de um arquivo novo e gravação de três registros. #include <stdio.h> void GravaArq(FILE *arq, int val_i,float 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); 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. Resposta Selecionada: . int ; float ; wb . Resposta Correta: . int ; float ; wb . Comentário da resposta: 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 2 1 em 1 pontos 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) ( ) y = *(vet+sizeof(int)*3) Assinale a alternativa que apresente a sequência que você julgue ser a correta. Resposta Selecionada: F, V, V, F. Resposta Correta: F, V, V, F. Comentário da resposta: 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 3 1 em 1 pontos Na definição do protótipo da função, em sua interface, temos que definir o tipo de retorno da função e, também, a lista de parâmetros. Para essa questão, suponha o trecho de código a seguir: #include <stdio.h> #include <stdlib.h> int func(int a, int __b, char __c[]) { a +=++__b; itoa(a,c,10); return a; } int main() { char c[10]; int x=5, y=6; printf("%d %s %d %d",func(x,&y,c),c,x,y); } Escolha a afirmativa que contém o resultado da impressão pela função “ printf” e os trechos a serem inseridos nas lacunas: Resposta Selecionada: .12 12 ; * ; deixar em branco ; * . Resposta Correta: .12 12 ; * ; deixar em branco ; * . Comentário da resposta: Parabéns! Sua resposta foi a correta! Você observou bem o fato de que a chamada da função, dentro do programa principal, requer uma passagem por valor para a variável “x” e uma passagem por referência para a variável “y”. Isso implica em “ int func(int a, int *b, char __c[])“ e, consequentemente, “ a +=++(*b);”. Uma string sempre é passada por referência – sendo assim, não necessita o uso de “ *”. • Pergunta 4 0 em 1 pontos A manipulação de ponteiros, apesar de extremamente útil para diversas situações, requer um cuidado especial para que não sejam acessadas posições indevidas de memória. Para essa questão, suponha o seguinte código: #include <stdio.h> int main() { int a, b, *p; b = 0; p = &b; a = *p; a = 10; (*p)++; --a; (*p) += a; printf("a = %d\tb = %d\tp = %d",a,b,*p); return 0; } Assinale a alternativa que contém os valores de “ a ”, “ b ” e do conteúdo de “ p ”, respectivamente. Resposta Selecionada: 10, 10, 10. Resposta Correta: 9, 10, 10. Comentário da resposta: Infelizmente a sua resposta está incorreta. Para responder essa questão, analise melhor a posição de memória referenciada pelo ponteiro “ p”. Verifique a sua correlação com as demais variáveis, assim você obterá o valor correto delas. • Pergunta 5 0 em 1 pontos Uma matriz esparsa é aquela formada com a maioria de suas células tendo o valor 0. Sendo assim, não é necessário o armazenamento de toda a estrutura da matriz e, sim, somente das células que contém valores não nulos. Para essa questão, analise o código a seguir e preencha as lacunas: typedef struct { int coluna; float valor; } ESPARSA; . . . int **matriz; matriz = (____)malloc(sizeof(____)*QtdLinhas); for(i=0; i<QtdLinhas; i++) { matriz[i] = (____)malloc(sizeof(____)*QtdElementos); AdicionaElementosLinha(matriz[i],ListaElementos); } Assinale a alternativa que apresenta a sequência correta para o preenchimento das lacunas. Resposta Selecionada: int * ; int ; int * ; int. Resposta Correta: int ** ; int ; int * ; int. Comentário da resposta: Infelizmente a sua resposta está incorreta. Para responder essa questão, reflita sobre o fato do número de elementos ser variável. Sendo assim, compensa ter uma coluna com um tamanho fixo, pré- determinado? • Pergunta 6 1 em 1 pontos Um ponteiro para ponteiro denota uma variável que armazena um valor através de uma dupla indireção. Sendo assim, um ponteiro referência um outro ponteiro que, por sua vez, aponta para um valor específico. Para essa questão, analise o código a seguir: #include <stdio.h> int main() { int a = 10, *pont, **pontpont; pont = &a; pontpont = &pont; a = 12; printf("pont = %d\t pontpont: %d\n", *pont,**pontpont); return 0; } Assinale a alternativa que apresenta os valores impressos pela função “ printf() ”. Resposta Selecionada: 12 12. Resposta Correta: 12 12. Comentário da resposta: Parabéns! Sua resposta foi a correta! Você observou bem que as variáveis “ a”, “ pontpont” e “ pont” referenciam a mesma posição de memória. Sendo assim, o valor a ser impresso corresponde ao próprio valor de “ a”. • Pergunta 7 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 sempreseria criado. Então, sobra o modo “ a+”. Pelo fato de aparecer “ fwrite()” e “ fread()”, então, o arquivo é binário. Sendo assim, “ ab+”. • Pergunta 8 1 em 1 pontos 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 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. Resposta Selecionada: . r ; fgets ; prodB*3 . Resposta Correta: . r ; fgets ; prodB*3 . Comentário da resposta: 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”). • Pergunta 9 1 em 1 pontos Gerar números aleatórios tem a sua serventia em diversas situações, tais como geração de sequências para testes de softwares, solução inicial em problemas de otimização e definição do intervalo de tempo para o reenvio de informações em redes de computadores. Para o teste, imaginemos um cenário onde dois jogares disputam uma partida de lançamento de dados – ganha aquele que obtiver maior pontuação no dado lançado. Para simular esse cenário, imaginemos o código abaixo: #include <stdio.h> //arquivo header para a funcao printf() #include <stdlib.h> //arquivo header para as funcoes srand() e rand() #include <time.h> //arquivo header para a funcao time() void Compara(int __jog1, int __jog2) { if(jog1 > jog2) printf("Jogador 1 vencedor (1=%d x 2=%d)\n",jog1,jog2); else if (jog1 < jog2) printf("Jogador 2 vencedor!(1=%d x 2=%d)\n",jog1,jog2); else printf("Empate (%d)\n",jog1); } ___ Dado() { return ____; } int main() { srand(time(NULL)); Compara(Dado(),Dado()); return 0; } Assinale a opção abaixo que contenha os trechos de código para preencher as lacunas (o caracter “_” significa para deixar a lacuna vazia): Resposta Selecionada: . __ ; __ ; int ; (rand()%6)+1 . Resposta Correta: . __ ; __ ; int ; (rand()%6)+1 . Comentário da resposta: Parabéns! Sua resposta foi a correta! Realmente nenhuma função requer passagem de parâmetros por referência pois o único valor retornado é feito através do retorno da função “ Dado()”. A geração do número aleatório segue a forma “ (rand()%6)+1” pois a soma por um impede a geração do valor 0 e o resto da divisão define o valor limite superior do número gerado. • Pergunta 10 1 em 1 pontos Em arquivos textuais, quando desejamos substituir uma informação com o mesmo tamanho da nova informação, podemos realizar sobrescrita sem a necessidade de criação de arquivo temporário para receber a nova versão do conteúdo. Para essa questão, analise o código a seguir, que realiza a troca do caractere “i” pelo caractere “y” na primeira linha do arquivo. Em sua análise preencha as lacunas. #include <stdio.h> #include <string.h> int main() { FILE *arq; char linha[40]; long pos; int i; arq=fopen("atividade.txt","___"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n"); return 0; } pos=_____; //armazenar a posicao corrente do ponteiro de arquivo. fgets(linha,40,arq); for(i=0;i<strlen(linha);i++) if(linha[i]=='i') linha[i]='y'; _____; //reposicionar no ponto anterior aa leitura _____; //gravacao da linha. fclose(arq); return 0; } Assinale a alternativa que você julgue ser a correta. Resposta Selecionada: . r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) . Resposta Correta: . r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) . Comentário da resposta: Parabéns! Sua resposta foi a correta! Você deve ter notado que podemos salvar a posição do ponteiro do arquivo para que possamos restaurar a posição e sobrescrever o conteúdo. Para isso, foram usadas as funções “ ftell()” e “ fseek()”, respectivamente. Sexta-feira, 10 de Dezembro de 2021 18h23min11s BRT
Compartilhar