Neste tutorial de nossa Apostila C Progressivo, iremos propor para os leitores de nosso curso uma série de questões que foram criadas pelo Curso de C da UFMG, e presentes em sua apostila, sobre os assuntos de Arquivos, Entrada e Saídas padronizadas em C.
Em seguida, iremos resolver, dar o gabarito e comentar todos os códigos.
Obtenha AQUI seu certificado de Programação C
Apostila de C da UFMG
Questões sobre Arquivos da Apostila de C
1- Alguns compiladores indicam que a função gets(string) é uma função
"perigosa". Qual a razão disto?
a.
A função não pode ler inteiros
b.
Se string for um vetor de caracteres com poucas posições, o usuário
pode digitar mais caracteres do que a string pode armazenar, causando sérios problemas
c.
O usuário pode digitar algo que não seja caracter e o sistema não
perceber
d.
A função não trabalha bem em conjunto com a função scanf
e.
Nenhuma das opções anteriores
2- : O comando printf("%d, %u, %p", i, i, &i); imprimirá:
a.
O endereço de i e o valor de i;
b.
O valor de i, de i sem sinal e um ponteiro para i;
c.
O valor de i, o valor de i e um ponteiro para i
d.
O valor de i, o valor de i sem sinal e o endereço de i
e.
Nenhuma das opções anteriores
3- Seja a variável double f; qual seria a forma de se efetuar a leitura de f
a.
scanf("%f", &f);
b.
scanf("%6f", &f);
c.
scanf("%lf", &f);
d.
scanf("%10.6f", &f);
e.
Nenhuma das opções anteriores
4- O que não se pode especificar com a função fopen?
a.
O nome do arquivo a ser aberto;
b.
Que arquivo será aberto, para acrescentar dados
c.
Que arquivo será aberto, para trabalhar em modo texto
d.
Qual é o ponteiro para o arquivo
e.
Nenhuma das opções anteriores
5- Para ler um caractere por vez de um arquivo, qual das seguintes funções você
usaria?
a.
getch();
b.
getche();
c.
getc();
d.
fgets();
e.
fread();
6- Como todos arquivos precisam ser lidos seqüencialmente, não há como ler dados no
meio do arquivo, sem ter feito a leitura desde o seu início.
a.
Verdadeiro
b.
Falso
c.
Depende do tipo de arquivo
d.
Depende do sistema operacional
e.
Nenhuma das opções anteriores
7- Seja o seguinte trecho de programa
FILE *fp;
fp = fopen("arquivo.txt", "r+");
O que está sendo feito?
a.
O arquivo arquivo.tst está sendo aberto em modo texto e somente pode ser
lido.
b.
O arquivo arquivo.tst está sendo fechado para escrita
c.
O arquivo arquivo.tst está sendo aberto em modo binário, e pode ser lido ou escrito
d.
O arquivo arquivo.tst está sendo aberto em modo binário e somente pode ser lido
e.
O arquivo arquivo.tst está sendo aberto em modo texto e pode ser lido ou escrito
8- Qual a afirmativa errada?
a.
A função fgets() lê uma string de um arquivo, mas também pode ser
utilizada para substituir gets() com segurança
b.
fputs() escreve uma string em um arquivo
c.
fputs(string, stdprn) imprimirá a string na impressora padrão
d.
fseek() pode ser utilizada para procurar um determinado caractere em um
arquivo
e.
Nenhuma das opções anteriores
9- Para gravar várias variáveis de tipos diferentes em um arquivo texto, a função
mais apropriada é::
a.
fwrite()
b.
fprintf()
c.
fputs()
d.
fscanf()
e.
Nenhuma das opções anteriores
10- Seja o seguinte programa:
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("arquivo.txt", "r");
fprintf(fp, "%d", 10);
fclose(fp);
return(0);
}
Qual afirmativa é verdadeira?
a.
Este código compila sem erros
b.
Ao final da execução, o arquivo arquivo.txt conterá uma linha com o
número 10 impresso nela.
c.
A linha #include <stdio.h> não é necessária neste código
d.
Não se deve usar return 0; neste código, pois a função main não e'
int
e.
Nenhuma das opções anteriores
Sua nota é: em um máximo de
100.
Resolução das questões sobre Arquivos da Apostila de C
Questão 1:
Um grande problema da função gets() para pegar uma string do usuário, é que ela não tem nenhuma implementação de segurança, para limitar a quantidade de caracteres digitados pelo usuário.
Por exemplo, se você declarar uma string de 20 elementos, pode usar a gets() para introduzir, 30, 40 ou 1 milhão de caracteres. Ela deixa, o que a torna muito insegura, pois não sabemos que memória ela vai usar para armazenar os caracteres que extrapolaram o tamanho da string (overflow), sendo essa uma vulnerabilidade muito explorada.
Gabarito: b
Questão 2:
%d imprime um inteiro qualquer, %u imprime um número sem sinal (unsigned) e %p é para ponteiros (exibe o endereço de memória de uma variável através do &).
Gabarito: d
Questão 3:
Uma variável do tipo double é usada para armazenar números com alta precisão decimal, assim como o float, porém o double tem mais precisão, podemos chamar de um long float e usar %lf para armazenar valores neste double.
Gabarito: c
Questão 4:
Usamos a função fopen() para abrir arquivos, e para isso passamos o endereço do arquivo na memória do computador, bem como o modo de abertura (para ler, escrever ou adicionar).
Gabarito: d
Questão 5:
A função getc() serve especificamente para capturar um caractere de um arquivo.
Gabarito: c
Questão 6:
Podemos usar, por exemplo, a função fseek() para acessar um determinado ponto do arquivo.
Gabarito: b
Questão 7:
A letra "r" é de read, ou seja, leitura.
Porém, foi adicionado um +, o que permite abrir o arquivo tanto para leitura como escrita.
Gabarito: e
Questão 8:
A fseek() é usada para se posicionar no arquivo, e não para leitura ou escrita, e sim para se localizar.
Gabarito: d
Questão 9:
A função printf() é usada para imprimir na tela (saída padrão), já a fprintf() pode ser redirecionada para qualquer saída, como arquivos.
Questão 10:
Há uma controvérsia nesta questão da apostila.
O curso de C da UFMG diz que a opção correta é a a, que não dá erros ao compilar.
Porém, note que o arquivo foi aberto para leitura ("r"), e não para a escrita (o código usa a fprinf para escrever). Embora o compilar possa não acusar nada, à rigor isto não está certo.
Não foi feito nenhum comentário até agora.
Fechar esta janela