Curso de C

Lista de Exercícios

 Aula 5: Ponteiros

Clique aqui para acessar o Gabarito da Lista 5

Exercício 1:
Aprendemos, pelo curso, que o valor de uma variável ou expressão do tipo vetor é o endereço do elemento zero do vetor. Seja a[] um vetor qualquer, independente de tipo e tamanho, e pa um ponteiro para o mesmo tipo de a[]. Responda V ou F, justificando as que forem falsas:

( ) Qualquer expressão de vetor e índice é equivalente a uma outra expressão escrita com um apontador e um deslocamento
( ) Após a atribuição  pa=&a[0]pa e a possuem valores idênticos
( ) A atribuição  pa=&a[0];  pode ser escrita como pa=a;
( ) Uma referencia a a[i] pode ser escrita como *(a+i)
( ) &a[i] e a+i são idênticos
( ) a+i e' o endereço do i-ésimo elemento após a
( ) pa[i] e' idêntico a *(pa+i)
( ) pa=a e' uma operação valida
( ) pa++ e' uma operação valida
( ) a=pa e' uma operação valida
( ) a++  e' uma operação valida
 

Exercício 2:
O que está errado com os programas abaixo? Descubra e indique a solução para consertá-los. Execute-os no computador para ver se o erro foi resolvido.
a)
  void main(void) /*esse programa esta errado */
     {
        int x, *p;
        x = 10;
        *p = x;
     }
Obs: por se tratar de um programa muito pequeno, talvez a execução deste não mostrará de imediato o erro. Mas ele existe e e' serio.

b)
     void main(void) /* esse programa esta errado */
        {
           int x, *p;
           x = 10;
           p = x;
           printf ("%d", *p);
        }
 

Exercício 3:
Qual o valor de y no final do programa? Tente primeiro descobrir fazendo um teste de mesa e depois verifique no computador o resultado. A seguir, escreva um /* comentário */ em cada comando de atribuição explicando o que ele faz e o valor da variável à esquerda do '=' após sua execução.

        main()
        {
           int y, *p, x;
           y = 0;
           p = &y;
           x = *p;
           x = 4;
           (*p)++;
           x--;
           (*p) += x;
           printf ("y = %d\n", y);
        }
 

Exercício 4:
Verifique o programa abaixo. Encontre o seu erro e corrija-o para que escreva o numero 10 na tela.

#include <stdio.h>
main()
{
int x, *p, **q;
p = &x;
q = &p;
x = 10;
printf("\n%d\n", &q);
}
 

Exercício 5:
Rescreva o exemplo da página c510.html alterando a forma de varrer o loop. Ao invés de você usar os índices do array, você deverá usar um ponteiro e ir incrementando o ponteiro para atingir cada posição.
 

Exercício 6:
Refaça o programa da multiplicação entre duas matrizes (lista4). A implementação deverá ser feita usando-se a aritmética de ponteiros.
 

Exercício 7:
Refaça o programa que ordena um vetor de inteiros de N posições (lista4). Para isto você precisará usar um loop. Verifique o número de iterações até que o programa consiga finalmente ordenar o vetor (sugestões: use valores superiores para N = 25 ou 35).
 

Exercício 8:
Faça um programa que leia uma string do teclado e em seguida verifica se a string corresponde a um número (como "-987.234"). Se sim, o programa deverá calcular o valor que a string representa (inclusive negativo) e apresentá-lo na tela como float. Se não (caso a string não seja correspondente a um número) o número apresentado deverá ser zero. Utilize-se de ponteiros para percorrer a string.

Obs: Sobre bibliotecas, para quem conhece outras bibliotecas que não estão sendo usadas com freqüência no nosso curso: Você deverá fazer este exercício apenas com as bibliotecas stdio.h, string.h e ctype.h. As funções da biblioteca stdlib.h não deverão ser usadas.
 

Exercício 4:
Refaça o programa da página c530.html ordenando as strings lidas por tamanho (menores primeiro, maiores depois). Use um vetor auxiliar com um ponteiro para cada string.
 

  Sumário

Dúvidas? Dê uma olhadinha em nosso FAQ

Perguntas para a lista do Curso de C
Curso de C do CPDEE/UFMG - 1996-1998