Baixe o app para aproveitar ainda mais
Prévia do material em texto
PERGUNTA 1 1. Uma das vantagens de um arquivo binário consiste na possibilidade do uso direto de registros (estruturas de dados). Sendo assim, pode-se gravar ou recuperar, com apenas uma operação, todos os dados inseridos em tal estrutura de dados. Para essa questão, analise o trecho de código a seguir e preencha as lacunas. TSTRUCT ts; . . . arq=fopen("registros.dat","rb+"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n"); return 0; } ________; //posicionar no início do arquivo printf("Item a ser localizado: "); scanf("%d",&item); while(1) { ________; //ler a estrutura if(________) //testar se foi encontrado o final de arquivo break; if(ts.item==item) { //manipulação do registro encontrado... Assinale a alternativa que você julgue conter a sequência correta do preenchimento das lacunas. rewind(arq) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) . fseek(arq,0,SEEK_END) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) . rewind(arq) ; fwrite(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) . rewind(arq) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; eof(arq) . rewind(arq) ; fgets(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) . 1 pontos PERGUNTA 2 1. 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: .F ; F; V ; F . .V ; F; F ; V . .V ; F; V ; V . .F ; V; F ; F . .V ; V; V ; F . 1 pontos PERGUNTA 3 1. 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: . int CalculaIRPF(float, float *); . . float CalculaIRPF(float, float); . . float CalculaIRPF(float *, float); . . float CalculaIRPF(float, float *); . . float CalculaIRPF(float *, float *); . 1 pontos PERGUNTA 4 1. Os compiladores C/C++, para realizar a verificação de consistência de uso das funções, faz uso dos arquivos de cabeçalhos ( headers ). Nestes arquivos, por exemplo, o protótipo das funções são declarados. Desta forma, o compilador verifica se as chamadas implementadas estão compatíveis com as definições das funções. Para essa questão, suponha a existência de dois arquivos: um contendo o arquivo header e outro contendo a implementação em C . (A) Arquivo header : #ifndef _ARQHEADER #define _ARQHEADER int func1(int *, int); float func2(float, char []); void func3(int *, int *, float); int func4(char[],int, char); #endif (B) Arquivo de implementação int main() { int a,b,c; float f1,f2; char str[20],carac; c=func1(a,b); //Linha 1 f2=func2(f1,str[0]); //Linha 2 c=func3(&a, &b, f1); //Linha 3 c=func4(str,a,carac); //Linha 4 func1(&c,a); //Linha 5 return 0; } Analisando a parte de implementação com o arquivo header, assinale a alternativa que contém os possíveis erros que seriam acusados pelo compilador: .Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string “str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas. .Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string “str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); na linha 5, falta uma variável para receber o retorno da função “func1”. A linha 4 está correta. .Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas. .Na linha 2, está sendo passado o caracter da posição 0 e não toda a string “str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas. .Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string “str”; as demais linhas estão corretas. 1 pontos PERGUNTA 5 1. O armazenamento de informações em uma memória não volátil pode ser feito pelo uso de arquivos. Para tanto, um arquivo deverá ter suas ações realizadas através da manipulação de um descritor de arquivo. Dados os comandos abaixo, enumere-os, utilizando números de um a cinco, de acordo com a ordem que eles deverão aparecer na codificação. ( ) fwrite(buffer,sizeof(buffer),1,arq); ( ) arq = fopen(“arquivo.dat”,”rb+”); ( ) if(arq=NULL) return; ( ) fclose(arq); ( ) FILE *arq; Assinale a alternativa que você julgue ter a sequência de uso correta. 1, 5, 3, 2, 4. 4, 2, 5, 3, 1. 3, 2, 4, 5, 1. 4, 2, 3, 5, 1. 4, 3, 2, 5, 1. 1 pontos PERGUNTA 6 1. Sobre um ponteiro, além as operações de instanciação, podem ser realizadas operações aritméticas, como a soma e a subtração. Aplicar operações de soma ou subtração implicam no deslocamento do ponteiro. Para essa questão, suponha o seguinte código: #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int i=0,max; char *charvet; charvet=(char *)malloc(10*sizeof(char)); if(charvet==NULL) { printf("Erro de alocacao.\n"); return 0; } strcpy(charvet,"abcdefgh"); max=strlen(charvet); for(;i<max; i++) { if(i%2) printf("%c ",*charvet); charvet++; } free(charvet); return 0; } Assinale a alternativa que apresenta os valores impressos pela função “ printf ”. .a c e g. .b d. b d f h. .a b c d e f g h. .a c. 1 pontos PERGUNTA 7 1. 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íficas. 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. T, B, B, T, A. B, T, T, B, T. B, A, A, B, A. B, T, T, B, A. A, T, T, B, A. 1 pontos PERGUNTA 8 1. Ponteiros são aplicáveis a todos os tipos de dados, inclusive aos registros. A manipulação de registros como ponteiros são extremamente úteis na passagem de parâmetros das funções. Com ponteiros, evita-se que todos os campos da estrutura sejam copiados para as variáveis locais inerentes à função. Para essa questão, suponha o seguinte trecho de código e complete as lacunas com o código correspondente para a impressão na tela, da rua e do número: #include <stdio.h> #include <stdlib.h> typedef struct { char rua[30]; char bairro[30]; int num; } S_Endereco; int main() { S_Endereco *se; se= (S_Endereco *)malloc(sizeof(S_Endereco)); scanf("%s", _____); scanf("%d", _____); free(se); return 0; } Assinale a alternativa que contenha a sequência correta relativa ao preenchimento das lacunas. *se->rua ; &(se->num). se->rua ; &(se->num). se.rua ; &(se->num). se->rua ; &(se.num). se->rua ; se->num. 1 pontos PERGUNTA 9 1. Quando se implementa uma fução, devemos seguir a sintaxe da linguagem de programação utilizada e, também, realzar a definição de sua interface de acordo com as nossas necessidades. Para essa questão, suponha o trecho de código a seguir: #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() ___ func1(int ___x, ___ a) { ___x=rand()%a; return ___x*(rand()%5); } int main() { int aleat,ret; int a=10; srand(time(NULL)); //iniciacao do gerador de numeros aleatorios for(int i=0; i<10;i++) { ret=func1(__aleat,a); printf("valor aleatorio gerado %d: %d (limitado %d) - ret funcao: %d.\n", i,aleat,a,ret); } return 0; } Escolha a afirmativa que contém o resultado da impressão pela função “ printf ” e os trechos a serem inseridos nas lacunas: .int ; * ; deixar em branco ; * ; deixar em branco ; & . .int ; * ; deixar em branco ; * ; * ; deixar em branco . .int ; * ; deixar em branco ; * ; * ; & . .int ; * ; * ; * ; * ; & . .int ; deixar em branco ; deixar em branco ; deixar em branco ; deixar em branco ; deixar em branco. 1 pontos PERGUNTA 10 1. 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() ”. .12 10. .11 11. 12 12. .10 12. .10 10.
Compartilhar