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.





9 comentários:

Anônimo disse...

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

Gleydson disse...

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!

Anônimo disse...

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;
}

André de Souza disse...

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

Anônimo disse...

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

Unknown disse...

Nao, so tem 19,mesmo pq o ultimo é o /0

Anônimo disse...

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.

Rayane disse...

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

[̲̅м̲̅υ̲̅и̲̅d̲̅σ̲̅ ̲̅d̲̅σ̲̅ร̲̅ ̲̅G̲̅α̲̅м̲̅є̲̅ร̲̅] disse...

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

Gostou desse tutorial de C?
Sabia que o acervo do portal C Progressivo é o mesmo, ou maior que, de um livro ou curso presencial?
E o melhor: totalmente gratuito.

Mas para nosso projeto se manter é preciso divulgação.
Para isso, basta curtir nossa página no Facebook e/ou clicar no botão +1 do Google.
Contamos e precisamos de seu apoio.