Apostila UFMG: Questões sobre ponteiros com gabarito

Clique aqui e saiba como obter o certificado de programação C!

Apostila de C - Exercícios

O seguinte material era um curso ofertado pela UFMG (Universidade Federal de Minas Gerais) até 2005.
Devido a qualidade e grande uso da apostila, até hoje eles deixam seu material para quem desejar estudar, consultar ou divulgar, por isso iremos usar seus exercícios aqui em nossa apostila de C.

Indicamos, pois a apostila é uma excelente fonte de estudo, e como programador C você estudar o máximo possível por diversas fontes.
Apostila de linguagem C da UFMG

O seguinte material é uma coletânea de questões sobre ponteiros, assunto que já foi ensinado em nosso curso C Progressivo:
Ponteiros (ou apontadores) em C
--

 
Responda as perguntas abaixo, escolhendo a alternativa adequada para cada questão. Ao terminar, aperte o botão "Verifica  nota" no final do formulário. Você pode fazer quantas tentativas quiser até atingir a nota 100. Se quiser recomeçar, basta apertar o botão "Limpa" no final do formulário.

1- Seja um vetor declarado por
        int vet[10];
    Qual elemento deste vetor é acessado quando se escreve vet[2] ?
     
     
    a. Primeiro elemento 
    b. Segundo elemento 
    c. Terceiro elemento 
    d. Quarto elemento 
    e. Nenhuma das opções anteriores 

     
2- Se declararmos um vetor como:     int vet[30]
    a instrução abaixo acessa corretamente os elementos deste vetor?
    for (j=0; j <= 30; j++)
      vet[j] = j*j;
     
     
    a. Sim
    b. Não 

     
3- Seja a matriz matrx declarada e inicializada por:     int matrx[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
O que conterá o elemento matrx[1][2] ?
     
     
    a. 2
    b.
    c.
    d.
    e. Nenhuma das opções anteriores 

     
4- Se uma string for declarada como:     char str[20];
o número máximo de caracteres que poderão ser lidos e armazenados nela é:
     
     
    a. 18 
    b. 19 
    c. 20
    d. 21 

     
5- Qual função pode ser usada para determinar o comprimento de uma string?
     
     
    a. gets
    b. strcpy
    c. strcat
    d. strlen
    e. strcmp

     
6- Qual das instruções abaixo é correta para declarar um ponteiro para inteiro?
     
     
    a. *int pti; 
    b. *pti;
    c. &i; 
    d. int_pti pti; 
    e. int *pti; 

     
7-  Seja a seguinte seqüência de instruções em um programa C:     int *pti;
    int i = 10;
    pti = &i;
    Qual afirmativa é falsa?
     
     
    a.  pti armazena o endereço de i 
    b. *pti é igual a 10 
    c. ao se executar *pti = 20; i passará a ter o valor 20
    d. ao se alterar o valor de i, *pti será modificado
    e. pti é igual a 10

     
8- Se i e j são variáveis inteiras e pi e pj são ponteiros para inteiro, qual atribuição é ilegal?
     
     
    a. pi = &i; 
    b. *pj = &j; 
    c. pj = &*&j; 
    d. i = *&*&j; 
    e. i = (*pi)+++*pj; 

     
9- Seja a seguinte seqüência de instruções em um programa C:         int *pti;
        int veti[]={10,7,2,6,3};
        pti = veti;
Qual afirmativa é falsa?
     
     
    a. *pti é igual a 10 
    b. *(pti+2) é igual a 2 
    c. pti[4] é igual a 3
    d. pti[1] é igual a 10 
    e. *(veti+3) é igual a 6

     
10- Na seqüência de instruções abaixo:     float f;
    float *pf;
    pf = &f;
    scanf("%f", pf);
     
     
    a. Efetuamos a leitura de f
    b. Não efetuamos a leitura de f
    c. Temos um erro de sintaxe 
    d. Deveríamos estar usando &pf no scanf 
    e. Nenhuma das opções anteriores 

     
11- Seja a seguinte seqüência de instruções     int i=10, j=20;
    int *pti, *ptj;
    pti = &i;
    ptj = &j;
Qual expressão não é válida?
     
    a. j = pti == ptj;
    b. i = pti-ptj; 
    c. pti += ptj;
    d. pti++; 
    e. i = pti || ptj; 

     
12- Seja a declaração:     int matr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}
Qual afirmativa é falsa?
     
    a. **matr é igual a 1
    b. *(*(matr+1)+2) é igual a 7 
    c. *(matr[2]+3) é igual a 12
    d. (*(matr+2))[2] é igual a 11
    e. *((*matr)+1) é igual a 5
Sua nota é: em um máximo de 100.





13 comentários:

  1. numa matriz matr[][4], porque quando imprimo -matr- é o mesmo que -*matr-

    ResponderExcluir
  2. Nossa! pensei que sabia pelo menos o básico sobre ponteiros, estou no 2ª Período de Sistemas da Informação.

    Sobre os exercícios, seria interessante mostrar quais respostas estão erradas.

    Excelente site, parabéns a todos!

    ResponderExcluir
  3. Na questão 4 o resultado que está dando como correto é b. 19. Porém, se vc cria um array com 20 posições str[20], vc tem 20 posições disponíveis para armazenamento e leitura.

    int main(void) {

    char str[20];
    int cont = 0;

    while (cont < sizeof(str)) {

    str[cont] = cont;
    printf("str[%d]\n", str[cont]);
    cont++;

    }

    return 0;
    }

    ResponderExcluir
  4. errei questao 4,11 e 12... alguem sabe explicar?

    ResponderExcluir
  5. Na questão 4, são 19 caracteres e o '\0' para finalizar a cadeia de caracteres (string).

    ResponderExcluir
  6. Lista de exercício boa, não faço faculdade, apenas estudei em parte a apostilha, e acertei 8 questões, resultado que considero bom.

    ResponderExcluir
  7. Na questao 4, é muito importante lembrar que nao é um vetor simples mas sim uma string e em toda string o ultimo espaço é reservado para a constante nula \0 ou NULL, portanto somente 19 posicoes para inserir caracteres.

    ResponderExcluir
  8. Site muito bom! Está me ajudando muito na faculdade. Gostaria do gabarito deste exercício. Se alguém puder me enviar ficarei muito agradecida!

    ray.araujom@gmail.com

    ResponderExcluir
  9. Nossa esperava acertar uns 80%, e acertei menos de 60% e nem sei o que errei

    ResponderExcluir
  10. 1- terceiro elemento
    2- Não
    3- 7
    4- 19
    5- strlen
    6- int *pti
    7- pti = 10
    8- *pj = &j
    9- pti[1] = 10
    10- leitura de f
    11- pti += ptj
    12- E

    ResponderExcluir
  11. Gabarito:
    1-c, 2-b, 3-d, 4-b, 5-d, 6-e, 7-e, 8-b, 9-d, 10-a, 11-c, 12-e

    ResponderExcluir
  12. 1c
    2b
    3d
    4c
    5d
    6e
    7e
    8e
    9d
    10a
    11d
    12

    75%

    ResponderExcluir

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.