Escolar Documentos
Profissional Documentos
Cultura Documentos
3a Lista de Exercı́cios
Matrizes, Ponteiros e Arquivos
14 de Junho de 2012
Matrizes
1. Faça um programa que receba dois números m e n e monte uma matriz mxn de
números inteiros, recebendo um a um cada um de seus valores. Assuma m ≤ 10 e n ≤ 10.
Depois, imprima todos os valores da matriz, em m linhas e n colunas.
2. Implemente a função transpor,
void transpor(float original[2][3], float resultado[3][2]);
cujo intuito é realizar uma jogada para jogador, na casa tabuleiro[i][j]. A função
retorna:
• 0: A jogada não pôde ser realizada, por exemplo, porque a casa já está ocupada.
• 1: A jogada foi realizada mas ainda não conduziu à vitória.
• 2: A jogada foi realizada e conduziu jogador à vitória.
1
Depois, crie um programa que utilize a função jogada e permita a realização de um jogo
entre dois jogadores, os quais alternam suas jogadas a partir do mesmo teclado.
Ponteiros
6. Implemente a função troca,
void troca(int *p, int *q);
cujo objetivo é obter os valores mı́nimo e máximo de vetor, cujo tamanho é n. O resultado
será armazenado através dos ponteiros min e max. Depois, faça um pequeno programa
ilustrando o emprego desta função.
9. Considere o seguinte trecho:
int vet[] = {2, 4, 6, 8, 10};
int *ptr = vet;
Assumindo que cada variável do tipo int ocupa 4 bytes e que o endereço de vet[0] é
55000, qual o resultado de cada uma das expressões a seguir?
• vet + 3
• &vet[0] + 3
• ptr + 3
• ptr[0] + 3
• &ptr[0] + 3
2
• ptr[3]
• *(ptr + 3)
10. Considere o programa a seguir:
#include <stdio.h>
void main(void) {
int vet[] = {2, 4, 6, 8, 10};
int *ptr = vet;
int i;
ptr++;
*(ptr + 1) = 20;
ptr[2] = 30;
for (i = 0; i < 4; i++) printf("%d ", vet[i]);
printf("\n");
for (i = 0; i < 4; i++) printf("%d ", ptr[i]);
}
O que há de diferente nestas novas versões? As implementações anteriores ainda servem
para as novas versões? Por quê? Independentemente das implementações anteriores
funcionarem ou não, ofereça agora novas implementações, usando o conceito de ponteiros
e não mais ı́ndices de vetores. Procure compreender as diferenças e semelhanças entre os
conceitos de vetores e ponteiros.
Arquivos
12. Faça um programa capaz de copiar todo o conteúdo de um arquivo de texto noutro
arquivo de texto. Ou seja, o programa deve abrir um arquivo de texto existente e criar
um segundo arquivo de texto, cujo conteúdo será uma cópia do primeiro.
13. Faça um programa que inverta cada sı́mbolo de um arquivo de texto. Para isso, o
programa deve substituir todo sı́mbolo de código ASCII x por 255−x. Se for o caso, utilize
variáreis do tipo unsigned char ao invés de char para evitar problemas. O resultado da
inversão será gravado num segundo arquivo. Observar que a aplicação deste programa
sobre o arquivo invertido resultará novamente no arquivo original.
14. Faça um programa capaz de arquivar uma lista de alunos da USP. Cada aluno
é identificado por seu número USP e seu nome completo. O programa deve receber, a
partir do teclado, os alunos um a um. Seu número e seu nome vão sendo imediatamente
3
gravados no arquivo. A string "fim", quando fornecida pelo usuário, informa que a lista
terminou. Tal string não deve, contudo, entrar no arquivo. Considere arquivo de texto.
15. Faça um programa que adquira uma matriz proveniente de um arquivo de texto,
transponha essa matriz, e grave o resultado num segundo arquivo de texto. Assuma que
as matrizes sejam de números inteiros e não sejam maiores que 10x10. A convenção para
o arquivo é a seguinte: o primeiro número representa a quantidade de linhas, o segundo a
quantidade de colunas, seguindo-se então os elementos um a um. Por exemplo, o seguinte
arquivo representaria uma matriz 2x3:
2 3
10 20 30
40 50 60