Curso de C

Lista de Exercícios

 Aula 9: Tipos de Dados Avançados

Clique aqui para acessar o Gabarito da Lista 9

Exercício 1:
Considerando o conceito e finalidade dos modificadores de tipo, relacione as afirmativas com as palavras reservadas correspondentes (todas as afirmativas devem ser preenchidas com o número relacionado ao modificador correspondente, e existe pelo menos uma afirmativa para cada modificador):
   (1)const        (3)extern       (5)register     (7)void
   (2)volatile     (4)static       (6)auto         (8)enum

(   ) informa ao compilador que o valor da variável não pode ser alterado por nenhum comando do programa, mas que pode ser inicializado
(   ) associa valores inteiros a uma lista de constantes especificadas
(   ) informa ao compilador que nenhum valor será devolvido pela função
(   ) informa ao compilador que a variável pode ser modificada por algum evento que não está sob o controle do programa
(   ) avisa ao compilador que as variáveis que o seguem já foram declaradas em outro lugar
(   ) torna a variável permanente, mantendo seu valor entre chamadas
(   ) muito utilizada em ROM (Read-Only-Memory, memória só de leitura)
(   ) cria tipos compostos de uma lista de nomes constantes
(   ) útil ao escrever funções generalizadas e funções de biblioteca que podem ser usadas por outros programadores, pois permite esconder porções do programa de outras partes do código, evitando assim o uso de variável global
(   ) permite criar apontadores genéricos (que apontam para qualquer tipo)
(   ) quando apontadores forem passados para a função, garante que nenhum código na função poderá modificar os objetos apontados
(   ) armazena o valor da variável em um registrador da CPU, acelerando operações
(   ) usada para declarar variáveis locais em contraposição as globais, mas muito pouco usada por já ser o padrão (default)
(   ) avisa ao compilador que a variável em questão sera largamente usada e deve permanecer acessível da forma mais eficiente possível
(   ) permite ao compilador conhecer a variável sem criar armazenamento para ela novamente em outro modulo
 

Exercício 2:
Faça um programa que leia uma matriz de pontos flutuantes e a copie em outra área de memória. O programa deverá primeiramente perguntar ao usuário sobre a dimensão da matriz, e alocar a memória. Em seguida deverá ler a matriz (via teclado ou via arquivo) e *copiá-la em outra área de memória. No final apresentar o resultado na tela.
*Existem dois caminhos para se copiar a matriz:
- Fazer um loop que copie cada posição;
- Usar a função memcpy (de string.h), que copia o conteúdo de uma área de memória para uma determinada posição. Veja parte do conteúdo do Manual de Linux para programadores, retirado de um mail desta semana do Cesar Augusto:

MEMCPY(3)           Linux Programmer's Manual           MEMCPY(3)
NAME
       memcpy - copy memory área
SYNOPSIS
       #include <string.h>
       void *memcpy(void *dest, const void *src, size_t n);
DESCRIPTION
       The  memcpy() function copies n bytes from memory área src
       to memory área dest.  The memory areas  may  not  overlap.
       Use memmove(3) if the memory areas do overlap.
RETURN VALUE
       The memcpy() function returns a pointer to dest.
 
 

DESAFIO:

Jogo da Velha:
Simule um "jogo da velha" simples, que utiliza uma matriz 3x3 alocada dinamicamente (semelhante ao exemplo apresentado no curso), contendo os símbolos 'X' e 'O' para marcações. Deverão ser definidas as seguintes funções:
- cria_matriz: aloca e inicializa a matriz com brancos;
- verifica_vencedor: verifica se ha' um vencedor (linhas, colunas ou diagonais preenchidas com o mesmo símbolo);
- mostra_matriz: imprime a matriz na tela;
- obtem_jogada_usuario: obtém a jogada do usuário;
- obtem_jogada_computador: obtém a jogada do computador;
Observações:
- o programa principal deverá inicializar a matriz e entrar em um laço que mostra a matriz, obtém a jogada do usuário, verifica se há vencedor, obtém a jogada do computador e verifica novamente se há vencedor. Ao final, devera' fornecer a matriz resultante e a identificação do ganhador.
- a jogada do computador devera' buscar a primeira posição vazia da matriz e lá colocar o símbolo correspondente ('X' ou 'O').
- este programa não justificaria uma alocação dinâmica, visto que o tamanho da matriz e' previamente conhecido. Sua utilização foi solicitada apenas como exercício.

  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