Universidade Federal de Uberl ˆandia - UFU Faculdade de Computac¸ ˜ao - FACOM
Lista de exerc´ıcios de programac¸ ˜ao em linguagem C
Exerc´ıcios: Arquivos
1. Escreva um programa que:(a) Crie/abra um arquivo texto de nome “arq.txt”
(b) Permita que o usu ´ario grave diversos caracteres nesse arquivo, at ´e que o usu ´ario entre com o caractere ‘0’
(c) Feche o arquivo
Agora, abra e leia o arquivo, caractere por caractere, e escreva na tela todos os caracte-res armazenados.
2. Fac¸a um programa que receba do usu ´ario um arquivo texto e mostre na tela quantas linhas esse arquivo possui.
3. Fac¸a um programa que receba do usu ´ario um arquivo texto e mostre na tela quantas letras s ˜ao vogais.
4. Fac¸a um programa que receba do usu ´ario um arquivo texto e mostre na tela quantas letras s ˜ao vogais e quantas s ˜ao consoantes.
5. Fac¸a um programa que receba do usu ´ario um arquivo texto e um caracter. Mostre na tela quantas vezes aquele caractere ocorre dentro do arquivo.
6. Fac¸a um programa que receba do usu ´ario um arquivo texto e mostre na tela quantas vezes cada letra do alfabeto aparece dentro do arquivo.
7. Fac¸a um programa que receba do usu ´ario um arquivo texto. Crie outro arquivo texto contendo o texto do arquivo de entrada, mas com as vogais substitu´ıdas por ‘*’.
8. Fac¸a um programa que leia o conte ´udo de um arquivo e crie um arquivo com o mesmo conte ´udo, mas com todas as letras min ´usculas convertidas para mai ´usculas. Os no-mes dos arquivos ser ˜ao fornecidos, via teclado, pelo usu ´ario. A func¸ ˜ao que converte mai ´uscula para min ´uscula ´e o toupper(). Ela ´e aplicada em cada caractere da string. 9. Fac¸a um programa que receba dois arquivos do usu ´ario, e crie um terceiro arquivo com
o conte ´udo dos dois primeiros juntos (o conte ´udo do primeiro seguido do conte ´udo do segundo).
10. Fac¸a um programa que receba o nome de um arquivo de entrada e outro de sa´ıda. O arquivo de entrada cont ´em em cada linha o nome de uma cidade (ocupando 40 caracte-res) e o seu n ´umero de habitantes. O programa dever ´a ler o arquivo de entrada e gerar um arquivo de sa´ıda onde aparece o nome da cidade mais populosa seguida pelo seu n ´umero de habitantes.
11. Fac¸a um programa no qual o usu ´ario informa o nome do arquivo e uma palavra, e retorne o n ´umero de vezes que aquela palavra aparece no arquivo.
12. Abra um arquivo texto, calcule e escreva o n ´umero de caracteres, o n ´umero de linhas e o n ´umero de palavras neste arquivo. Escreva tamb ´em quantas vezes cada letra ocorre no arquivo (ignorando letras com acento). Obs.: palavras s ˜ao separadas por um ou mais caracteres espac¸o, tabulac¸ ˜ao ou nova linha.
13. Fac¸a um programa que permita que o usu ´ario entre com diversos nomes e telefone para cadastro, e crie um arquivo com essas informac¸ ˜oes, uma por linha. O usu ´ario finaliza a entrada com ‘0’ para o telefone.
14. Dado um arquivo contendo um conjunto de nome e data de nascimento (DD MM AAAA, isto ´e, 3 inteiros em sequ ˆencia), fac¸a um programa que leia o nome do arquivo e a data de hoje e construa outro arquivo contendo o nome e a idade de cada pessoa do primeiro arquivo.
15. Fac¸a um programa que receba como entrada o ano corrente e o nome de dois arquivos: um de entrada e outro de sa´ıda. Cada linha do arquivo de entrada cont ´em o nome de uma pessoa (ocupando 40 caracteres) e o seu ano de nascimento. O programa dever ´a ler o arquivo de entrada e gerar um arquivo de sa´ıda onde aparece o nome da pessoa seguida por uma string que representa a sua idade.
• Se a idade for menor do que 18 anos, escreva “menor de idade” • Se a idade for maior do que 18 anos, escreva “maior de idade” • Se a idade for igual a 18 anos, escreva “entrando na maior idade”
16. Fac¸a um programa que recebe um vetor de 10 n ´umeros, converta cada um desses n ´umeros para bin ´ario e grave a sequ ˆencia de 0s e 1s em um arquivo texto. Cada n ´umero deve ser gravado em uma linha.
17. Fac¸a um programa que leia um arquivo que contenha as dimens ˜oes de uma matriz (linha e coluna), a quantidade de posic¸ ˜oes que ser ˜ao anuladas, e as posic¸ ˜oes a serem anula-das (linha e coluna). O programa l ˆe esse arquivo e, em seguida, produz um novo arquivo com a matriz com as dimens ˜oes dadas no arquivo lido, e todas as posic¸ ˜oes especifica-das no arquivo ZERADAS e o restante recebendo o valor 1.
Ex: arquivo “matriz.txt”
3 3 2 /*3 e 3 dimens~oes da matriz e 2 posi¸c~oes que ser~ao anuladas*/ 1 0
1 2 /*Posi¸c~oes da matriz que ser~ao anuladas. arquivo “matriz saida.txt”
sa´ıda: 1 1 1 0 1 0 1 1 1
18. Fac¸a um programa que leia um arquivo contendo o nome e o prec¸o de diversos produtos (separados por linha), e calcule o total da compra.
19. Fac¸a um programa que receba do usu ´ario um arquivo que contenha o nome e a nota de diversos alunos (da seguinte forma: NOME: JO ˜AO NOTA: 8), um aluno por linha. Mostre na tela o nome e a nota do aluno que possui a maior nota.
20. Crie um programa que receba como entrada o n ´umero de alunos de uma disciplina. Aloque dinamicamente dois vetores para armazenar as informac¸ ˜oes a respeito desses alunos. O primeiro vetor cont ´em o nome dos alunos e o segundo cont ´em suas notas finais. Crie um arquivo que armazene, a cada linha, o nome do aluno e sua nota final. Use nomes com no m ´aximo 40 caracteres. Se o nome n ˜ao cont ´em 40 caracteres, complete com espac¸o em branco.
21. Crie um programa que receba como entrada o n ´umero de alunos de uma disciplina. Alo-que dinamicamente em uma estrutura para armazenar as informac¸ ˜oes a respeito desses alunos: nome do aluno e sua nota final. Use nomes com no m ´aximo 40 caracteres. Em seguida, salve os dados dos alunos em um arquivo bin ´ario. Por fim, leia o arquivo e mostre o nome do aluno com a maior nota.
22. Fac¸a um programa que recebe como entrada o nome de um arquivo de entrada e o nome de um arquivo de sa´ıda. O arquivo de entrada cont ´em o nome de um aluno ocupando 40 caracteres e tr ˆes inteiros que indicam suas notas. O programa dever ´a ler o arquivo de entrada e gerar um arquivo de sa´ıda onde aparece o nome do aluno e as suas notas em ordem crescente.
23. Escreva um programa que leia a profiss ˜ao e o tempo de servic¸o (em anos) de cada um dos 5 funcion ´arios de uma empresa e armazene-os no arquivo “emp.txt”. Cada linha do arquivo corresponde aos dados de um funcion ´ario. Utilize o comando fprintf(). Em seguida, leia o mesmo arquivo utilizando fscanf(). Apresente os dados na tela.
24. Implemente um controle simples de mercadorias em uma despensa dom ´estica. Para cada produto armazene um c ´odigo num ´erico, descric¸ ˜ao e quantidade atual. O programa deve ter opc¸ ˜oes para entrada e retirada de produtos, bem como um relat ´orio geral e um de produtos n ˜ao dispon´ıveis. Armazene os dados em arquivo bin ´ario.
25. Fac¸a um programa gerenciar uma agenda de contatos. Para cada contato armazene o nome, o telefone e o anivers ´ario (dia e m ˆes). O programa deve permitir
(a) inserir contato (b) remover contato
(c) pesquisar um contato pelo nome (d) listar todos os contatos
(e) listar os contatos cujo nome inicia com uma dada letra (f) imprimir os aniversariantes do m ˆes.
Sempre que o programa for encerrado, os contatos devem ser armazenados em um arquivo bin ´ario. Quando o programa iniciar, os contatos devem ser inicializados com os dados contidos neste arquivo bin ´ario.
26. Crie um programa que declare uma estrutura para o cadastro de alunos.
(a) Dever ˜ao ser armazenados, para cada aluno: matr´ıcula, sobrenome (apenas um), e ano de nascimento.
(b) Ao in´ıcio do programa, o usu ´ario dever ´a informar o n ´umero de alunos que ser ˜ao armazenados
(c) O programa dever ´a alocar dinamicamente a quantidade necess ´aria de mem ´oria para armazenar os registros dos alunos.
(e) Em seguida, essas informac¸ ˜oes dever ˜ao ser gravadas em um arquivo (f) Ao final, mostrar os dados armazenados e liberar a mem ´oria alocada.
Ao iniciar o programa, fornec¸a ao usu ´ario uma opc¸ ˜ao para carregar os registros do ar-quivo para a mem ´oria do computador alocando dinamicamente a quantidade de mem ´oria necess ´aria.
Dica: para que o usu ´ario possa entrar com novos dados, al ´em dos que foram obtidos a
partir do arquivo, use a func¸ ˜ao realloc() para realocar a quantidade de mem ´oria usada. 27. Fac¸a um programa para gerenciar as notas dos alunos de uma turma salva em um
ar-quivo. O programa dever ´a ter um menu contendo as seguintes opc¸ ˜oes: (a) Definir informac¸ ˜oes da turma;
(b) Inserir aluno e notas; (c) Exibir alunos e m ´edias; (d) Exibir alunos aprovados; (e) Exibir alunos reprovados;
(f) Salvar dados em Disco; (g) Sair do programa (fim).
Fac¸a a rotina que gerencia o menu dentro do main, e para cada uma das opc¸ ˜oes deste menu, crie uma func¸ ˜ao espec´ıfica.
28. Fac¸a um programa que recebe como entrada o nome de um arquivo de entrada e o nome de um arquivo de sa´ıda. Cada linha do arquivo de entrada possui colunas de tamanho de 30 caracteres. No arquivo de sa´ıda dever ´a ser escrito o arquivo de entrada de forma inversa. Veja um exemplo:
Arquivo de entrada:
Hoje ´e dia de prova de AP A prova est ´a muito f ´acil Vou tirar uma boa nota
Arquivo de sa´ıda: Aton aob amu rarit uov
Lic ´af otium ´atse avorp A PA ed avorp ed aid ´e ejoH
29. Codifique um programa que manipule um arquivo contendo registros descritos pelos se-guintes campos: codigo vendedor, nome vendedor, valor da venda e mes.
A manipulac¸ ˜ao do arquivo em quest ˜ao ´e feita atrav ´es da execuc¸ ˜ao das operac¸ ˜oes dispo-nibilizadas pelo seguinte menu:
• Criar o arquivo de dados;
• Incluir um determinado registro no arquivo; • Excluir um determinado vendedor no arquivo; • Alterar o valor de uma venda no arquivo; • Imprimir os registros na sa´ıda padr ˜ao; • Excluir o arquivo de dados;
• Finalizar o programa.
Os registros devem estar ordenados no arquivo, de forma crescente, de acordo com as informac¸ ˜oes contidas nos campos codigo vendedor e mes. N ˜ao deve existir mais de um registro no arquivo com mesmos valores nos campos codigo vendedor e m ˆes.
Universidade Federal de Uberl ˆandia - UFU Faculdade de Computac¸ ˜ao - FACOM
Lista de exerc´ıcios de programac¸ ˜ao em linguagem C
Exerc´ıcios: Structs
1. Utilizando estrutura, fazer um programa em C que permita a entrada de nome, enderec¸o e telefone de 5 pessoas e os imprima em ordem alfab ´etica.
2. Fazer um programa para simular uma agenda de telefones. Para cada pessoa devem-se ter os seguintes dados:
• Nome • E-mail
• Enderec¸o (contendo campos para Rua, n ´umero, complemento, bairro, cep, cidade, estado, pa´ıs).
• Telefone (contendo campo para DDD e n ´umero)
• Data de anivers ´ario (contendo campo para dia, m ˆes, ano).
• Observac¸ ˜oes: Uma linha (string) para alguma observac¸ ˜ao especial. (a) Definir a estrutura acima.
(b) Declarar a vari ´avel agenda (vetor) com capacidade de agendar at ´e 100 nomes. (c) Definir um bloco de instruc¸ ˜oes busca por primeiro nome: Imprime os dados da
pessoa com esse nome (se tiver mais de uma pessoa, imprime para todas).
(d) Definir um bloco de instruc¸ ˜oes busca por m ˆes de anivers ´ario: Imprime os dados de todas as pessoas que fazem anivers ´ario nesse m ˆes.
(e) Definir um bloco de instruc¸ ˜oes busca por dia e m ˆes de anivers ´ario: Imprime os dados de todas as pessoas que fazem anivers ´ario nesse dia e m ˆes.
(f) Definir um bloco de instruc¸ ˜oes insere pessoa: Insere por ordem alfab ´etica de nome. (g) Definir um bloco de instruc¸ ˜oes retira pessoa: retira todos os dados dessa pessoa e
desloca todos os elementos seguintes do vetor para a posic¸ ˜ao anterior. (h) Definir um bloco de instruc¸ ˜oes imprime agenda com as opc¸ ˜oes:
• imprime nome, telefone e e-mail. • imprime todos os dados.
(i) O programa deve ter um menu principal oferecendo as opc¸ ˜oes acima. 3. Considerando a estrutura:
struct Ponto{ int x;
int y; };
para representar um ponto em uma grade 2D, implemente um programa que indique se um ponto p est ´a localizado dentro ou fora de um ret ˆangulo. O ret ˆangulo ´e definido por seus v ´ertices inferior esquerdo v1 e superior direito v2. A func¸ ˜ao deve imprimir caso o ponto esteja localizado dentro do ret ˆangulo ou n ˜ao.
4. Considerando a estrutura struct Vetor{ float x; float y; float z; };
para representar um vetor no R3, implemente um programa que calcule a soma de dois
vetores.
5. Construa uma estrutura aluno com nome, n ´umero de matr´ıcula e curso. Leia do usu ´ario a informac¸ ˜ao de 5 alunos, armazene em vetor dessa estrutura e imprima os dados na tela.
6. Crie uma estrutura representando os alunos do curso de Introduc¸ ˜ao a Programac¸ ˜ao de Computadores. A estrutura deve conter a matr´ıcula do aluno, nome, nota da primeira prova, nota da segunda prova e nota da terceira prova.
(a) Permita ao usu ´ario entrar com os dados de 5 alunos. (b) Encontre o aluno com maior nota da primeira prova. (c) Encontre o aluno com maior m ´edia geral.
(d) Encontre o aluno com menor m ´edia geral
(e) Para cada aluno diga se ele foi aprovado ou reprovado, considerando o valor 6 para aprovac¸ ˜ao.
7. Escreva um trecho de c ´odigo em ”C”para fazer a criac¸ ˜ao dos novos tipos de dados con-forme solicitado abaixo:
• Hor ´ario: composto de hora, minutos e segundos. • Data: composto de dia, m ˆes e ano.
• Compromisso: composto de uma data, hor ´ario e texto que descreve o compromisso. • Byte: usado para armazenar 8 bits (definido em func¸ ˜ao dos tipos b ´asicos do ”C”) 8. Fac¸a um programa que armazene em um registro de dados (estrutura composta) os
da-dos de um funcion ´ario de uma empresa, compostos de: Nome, Idade, Sexo (M/F), CPF, Data de Nascimento, C ´odigo do Setor onde trabalha (0-99), Cargo que ocupa (string de at ´e 30 caracteres) e Sal ´ario. Os dados devem ser digitados pelo usu ´ario, armazenados na estrutura e exibidos na tela.
9. Fac¸a um programa que leia os dados de 10 alunos (Nome, matricula, M ´edia Final), arma-zenando em um vetor. Uma vez lidos os dados, divida estes dados em 2 novos vetores, o vetor dos aprovados e o vetor dos reprovados, considerando a m ´edia m´ınima para a aprovac¸ ˜ao como sendo 5.0. Exibir na tela os dados do vetor de aprovados, seguido dos dados do vetor de reprovados.
10. Escolha um jogo de cartas, baseado em um ”baralho tradicional”(cada carta tem seu naipe e seu valor) ou tipo ”super trunfo”(cada carta possui um conjunto de atributos). Implemente a parte de distribuic¸ ˜ao (sorteio) de cartas para 2 jogadores, considerando que cada jogador ir ´a receber 5 cartas. Exiba na tela as cartas que cada um dos jogadores recebeu.
11. Pec¸a ao usu ´ario para digitar seus dados pessoais (Nome, Enderec¸o, Data de Nasci-mento, Cidade, CEP, email), verifique se as informac¸ ˜oes de Data de NasciNasci-mento, CEP e email fazem sentido, e mostre ao usu ´ario as informac¸ ˜oes, se est ˜ao todas corretas, ou mostre que alguma informac¸ ˜ao estava errada.
12. Fac¸a um programa que leia um inteiro n e:
• Crie e leia um vetor com os dados de n carros: marca (m ´aximo 15 letras), ano e prec¸o.
• Leia um valor p e mostre as informac¸ ˜oes de todos os carros com prec¸o menor que p. Repita este processo at ´e que seja lido um valor p = 0.
13. Fac¸a um programa que leia um inteiro n e:
• Crie e leia um vetor com dados de n livros: t´ıtulo (m ´aximo 30 letras), autor (m ´aximo 15 letras) e ano.
• Procure um livro por t´ıtulo, perguntando ao usu ´ario qual t´ıtulo deseja buscar. Mostre os dados de todos os livros encontrados.
14. Fac¸a um programa com N=5 e:
• Crie e leia um vetor de alunos, sendo que cada aluno cont ´em os dados: nome (m ´aximo 15 letras), notas de 3 provas, m ´edia final e n´ıvel (inteiro). Este ´ultimo campo n ˜ao deve ser lido agora.
• Preencha o campo n´ıvel. Seu valor deve ser igual `a parte inteira de (5*m ´edia fi-nal/m ´edia da sala).
Na sua func¸ ˜ao main(), mostre o nome e o n´ıvel de cada aluno. 15. Fac¸a um programa que seja uma agenda de compromissos e:
• Crie e leia um vetor de 5 estruturas de dados com: compromisso (m ´aximo 60 letras) e data. A data deve ser outra estrutura de dados contendo dia, m ˆes e ano.
• Leia dois inteiros m e a e mostre todos os compromissos do m ˆes m do ano a. Repita o procedimento at ´e ler m = 0.
Dica: use fgets(string, tamanho, stdin) para ler uma string, precedido imediatamente por fflush(stdin).
16. Fac¸a um programa que controla o consumo de energia dos eletrodom ´esticos de uma casa e:
• Crie e leia 5 eletrodom ´esticos que cont ´em nome (m ´aximo 15 letras), potencia (real, em kW) e tempo ativo por dia (real, em horas).
• Leia um tempo t (em dias), calcule e mostre o consumo total na casa e o consumo relativo de cada eletrodom ´estico (consumo/consumo total) nesse per´ıodo de tempo. Apresente este ´ultimo dado em porcentagem.
17. Fac¸a um programa que gerencie o estoque de um mercado e:
• Crie e leia um vetor de 5 produtos, com os dados: c ´odigo (inteiro), nome (m ´aximo 15 letras), prec¸o e quantidade.
• Leia um pedido, composto por um c ´odigo de produto e a quantidade. Localize este c ´odigo no vetor e, se houver quantidade suficiente para atender ao pedido integralmente, atualize o estoque e informe o usu ´ario. Repita este processo at ´e ler um c ´odigo igual a zero.
Se por algum motivo n ˜ao for poss´ıvel atender ao pedido, mostre uma mensagem infor-mando qual erro ocorreu.
18. Fac¸a um programa que controle o fluxo de voos nos aeroportos de um pa´ıs. Com v=5 (voos) e a=5 (aeroportos) e:
• Crie e leia um vetor de voos, sendo que cada voo cont ´em um c ´odigo de aeroporto de origem e um de destino.
• Crie um vetor de aeroportos, sendo que cada aeroporto cont ´em seu c ´odigo, quanti-dade de voos que saem e quantiquanti-dade de voos que chegam.
Nota: Cada aeroporto ´e identificado por um c ´odigo inteiro entre 0 e (a-1). N ˜ao aceite aeroportos de c ´odigo inexistente.
19. Fac¸a um programa para armazenar um livro de receitas e:
• Crie um vetor de 5 receitas, que deve ter nome (m ´aximo 25 letras), quantidade de ingredientes e ingredientes.
• Para cada receita, leia seu nome e a quantidade de ingredientes. Ent ˜ao crie e leia o vetor de ingredientes, sendo que cada ingrediente cont ´em nome e quantidade. • Procure receita por nome, mostrando seus ingredientes se encontrar. Se n ˜ao
en-contrar, informe ao usu ´ario. Repita o processo at ´e digitar uma string vazia. 20. Fac¸a um programa que armazena filmes produzidos por v ´arios diretores e:
• Crie e leia um vetor de 5 diretores, cada um contendo nome (m ´aximo 20 letras), quantidade de filmes e filmes. O membro filmes ´e um vetor, que deve ser criado ap ´os ter lido quantidade de filmes. Cada filme ´e composto por nome, ano e durac¸ ˜ao. • Procure um diretor por nome, mostrando todos os filmes que ele j ´a produziu. Repita
o processo at ´e digitar uma string vazia.
21. Crie uma estrutura representando os alunos do curso de M ´etodos e T ´ecnicas de Programac¸ ˜ao. A estrutura deve conter a matr´ıcula do aluno, nome, nota da primeira prova, nota da se-gunda prova e nota da terceira prova.
(a) Permita ao usu ´ario entrar com os dados de 5 alunos (b) Encontre o aluno com maior nota da primeira prova (c) Encontre o aluno com maior m ´edia geral
(d) Encontre o aluno com menor m ´edia geral
(e) Para cada aluno diga se ele foi aprovado ou reprovado, considerando o valor 6 para aprovac¸ ˜ao.
22. Definir a estrutura cuja representac¸ ˜ao gr ´afica ´e dada a seguir, definir os campos com os tipos b ´asicos necess ´arios.
(a) Crie um vetor Cadastro com 5 elementos.
(b) Permita ao usu ´ario entrar com dados para preencher esse 5 cadastros. (c) Encontre a pessoa com maior idade entre os cadastrados
(d) Encontre as pessoas do sexo masculino
(e) Encontre as pessoas com sal ´ario maior que 1000.
(f) Imprima os dados da pessoa cuja identidade seja igual a um valor fornecido pelo usu ´ario
23. Implemente um programa em C que leia o nome, a idade e o enderec¸o de uma pessoa e armazene os dados em uma estrutura.
24. Escreva um programa que receba dois structs do tipo dma, cada um representando uma data v ´alida, e calcule o n ´umero de dias que decorreram entre as duas datas.
struct dma { int dia; int mes; int ano; };
Lista de Exercícios 1 – Struct e Ponteiros
MATERIAL COMPLEMENTAR 1. Crie uma struct chamada ponto2d que tenha como atributos os pontos x,y e z. Crie duas estruturas do tipo ponto2d chamadas ponto_inicial e ponto_final. Faça um menu com as seguintes opções e implemente‐as: [1] ‐ Digitar o valor do primeiro ponto [2] – Digitar os valores do segundo ponto [3] ‐ Mostrar a distância entre os pontos [4] ‐ Sair DICA: Distância entre dois pontos (x1,y1)(x2,y2): raiz quadrada de (x1‐x2)²+(y1‐y2)² 2. Crie uma struct para armazenar os dados (nome, idade, posição, numero_camisa) dos jogadores de vôlei de um time. Crie duas estruturas para armazenar os jogadores principais e os reservas. Desenvolva um programa em que o usuário consiga entrar com os jogadores principais (seis) e reservas(4) e mostre‐os na tela. Para facilitar a entrada de dados, utilize um menu. 3. Faça um programa que declare 3 variáveis, dos tipos inteiro, real e caracter, atribua valores para estas variáveis e mostre seus valores assim como seu tamanho em bytes e seu endereço na memória (inteiro e hexa). 4. Crie um programa que declare duas variáveis (inteiro e real) atribua valores para elas e crie dois ponteiros, cada um apontando para uma destas variáveis. Mostre na tela: O valor e o endereço de memória das variáveis, o valor do ponteiro, o endereço dp ponteiro e o valor apontado pelo ponteiro. Qual destes valore são iguais? Justifique? 5. Explique o que faz o programa a seguir, e quais valores serão mostrados ao final. 6. Modifique o exercício número 2 para a utilização de ponteiros na leitura e apresentação dos dados dos vetores.Universidade Federal de Uberl ˆandia - UFU Faculdade de Computac¸ ˜ao - FACOM
Lista de exerc´ıcios de programac¸ ˜ao em linguagem C
Exerc´ıcios: Alocac¸ ˜ao Din ˆamica
1. Crie um programa que:(a) Aloque dinamicamente um array de 5 n ´umeros inteiros, (b) Pec¸a para o usu ´ario digitar os 5 n ´umeros no espac¸o alocado, (c) Mostre na tela os 5 n ´umeros,
(d) Libere a mem ´oria alocada.
2. Fac¸a um programa que leia do usu ´ario o tamanho de um vetor a ser lido e fac¸a a alocac¸ ˜ao din ˆamica de mem ´oria. Em seguida, leia do usu ´ario seus valores e imprima o vetor lido. 3. Fac¸a um programa que leia do usu ´ario o tamanho de um vetor a ser lido e fac¸a a alocac¸ ˜ao
din ˆamica de mem ´oria. Em seguida, leia do usu ´ario seus valores e mostre quantos dos n ´umeros s ˜ao pares e quantos s ˜ao ´ımpares.
4. Fac¸a um programa que receba do usu ´ario o tamanho de uma string e chame uma func¸ ˜ao para alocar dinamicamente essa string. Em seguida, o usu ´ario dever ´a informar o conte ´udo dessa string. O programa imprime a string sem suas vogais.
5. Fac¸a um programa que leia um n ´umero N e:
• Crie dinamicamente e leia um vetor de inteiro de N posic¸ ˜oes;
• Leia um n ´umero inteiro X e conte e mostre os m ´ultiplos desse n ´umero que existem no vetor.
6. Fac¸a um programa que simule a mem ´oria de um computador: o usu ´ario ir ´a especificar o tamanho da mem ´oria, ou seja, quantos bytes ser ˜ao alocados do tipo inteiro. Para tanto, a mem ´oria solicitada deve ser um valor m ´ultiplo do tamanho do tipo inteiro. Em seguida, o usu ´ario ter ´a 2 opc¸ ˜oes: inserir um valor em uma determinada posic¸ ˜ao ou consultar o valor contido em uma determinada posic¸ ˜ao. A mem ´oria deve iniciar com todos os dados zerados.
7. Escreva um programa que leia primeiro os 6 n ´umeros gerados pela loteria e depois os 6 n ´umeros do seu bilhete. O programa ent ˜ao compara quantos n ´umeros o jogador acertou. Em seguida, ele aloca espac¸o para um vetor de tamanho igual a quantidade de n ´umeros corretos e guarda os n ´umeros corretos nesse vetor. Finalmente, o programa exibe os n ´umeros sorteados e os seus n ´umeros corretos.
8. Fac¸a um programa para armazenar em mem ´oria um vetor de dados contendo 1500 va-lores do tipo int, usando a func¸ ˜ao de alocac¸ ˜ao din ˆamica de mem ´oria CALLOC:
(a) Fac¸a um loop e verifique se o vetor cont ´em realmente os 1500 valores inicializados com zero (conte os 1500 zeros do vetor).
(b) Atribua para cada elemento do vetor o valor do seu ´ındice junto a este vetor. (c) Exibir na tela os 10 primeiros e os 10 ´ultimos elementos do vetor.
9. Fac¸a um programa que leia uma quantidade qualquer de n ´umeros armazenando-os na mem ´oria e pare a leitura quando o usu ´ario entrar um n ´umero negativo. Em seguida, imprima o vetor lido. Use a func¸ ˜ao REALLOC.
10. Fac¸a um programa que pergunte ao usu ´ario quantos valores ele deseja armazenar em um vetor de double, depois use a func¸ ˜ao MALLOC para reservar (alocar) o espac¸o de mem ´oria de acordo com o especificado pelo usu ´ario. Esse vetor deve ter um tamanho maior ou igual a 10 elementos. Use este vetor din ˆamico como um vetor comum, atri-buindo aos 10 primeiros elementos do vetor valores aleat ´orios (usando a func¸ ˜ao rand) entre 0 e 100. Exiba na tela os valores armazenados nos 10 primeiros elementos do vetor.
11. Crie um programa que declare uma estrutura (registro) para o cadastro de alunos. (a) Dever ˜ao ser armazenados, para cada aluno: matr´ıcula, sobrenome (apenas um) e
ano de nascimento.
(b) Ao in´ıcio do programa, o usu ´ario dever ´a informar o n ´umero de alunos que ser ˜ao armazenados
(c) O programa dever ´a alocar dinamicamente a quantidade necess ´aria de mem ´oria para armazenar os registros dos alunos.
(d) O programa dever ´a pedir ao usu ´ario que entre com as informac¸ ˜oes dos alunos. (e) Ao final, mostrar os dados armazenados e liberar a mem ´oria alocada.
12. Considere um cadastro de produtos de um estoque, com as seguintes informac¸ ˜oes para cada produto:
• C ´odigo de identificac¸ ˜ao do produto: representado por um valor inteiro • Nome do produto: com at ´e 50 caracteres
• Quantidade dispon´ıvel no estoque: representado por um n ´umero inteiro • Prec¸o de venda: representado por um valor real
(a) Defina uma estrutura, denominada produto, que tenha os campos apropriados para guardar as informac¸ ˜oes de um produto
(b) Crie um conjunto de N produtos (N ´e um valor fornecido pelo usu ´ario) e pec¸a ao usu ´ario para entrar com as informac¸ ˜oes de cada produto
(c) Encontre o produto com o maior prec¸o de venda
(d) Encontre o produto com a maior quantidade dispon´ıvel no estoque
13. Escreva um programa que aloque dinamicamente uma matriz (de inteiros) de dimens ˜oes definidas pelo usu ´ario e a leia. Em seguida, implemente uma func¸ ˜ao que receba um valor, retorne 1 caso o valor esteja na matriz ou retorne 0 caso n ˜ao esteja na matriz. 14. Construa um programa que leia o n ´umero de linhas e de colunas de uma matriz de
n ´umeros reais, aloque espac¸o dinamicamente para esta e a inicialize com valores forne-cidos pelo usu ´ario. Ao final, o programa dever ´a retornar a matriz na sa´ıda padr ˜ao com layout apropriado.
15. Fac¸a um programa que leia dois n ´umeros N e M e: • Crie e leia uma matriz de inteiros N x M;
• Localize os tr ˆes maiores n ´umeros de uma matriz e mostre a linha e a coluna onde est ˜ao.
16. Fac¸a um programa que leia dois n ´umeros N e M: • Crie e leia uma matriz N x M de inteiros;
• Crie e construa uma matriz transposta M x N de inteiros. • Mostre as duas matrizes.
17. Fac¸a um programa que leia n ´umeros do teclado e os armazene em um vetor alocado dinamicamente. O usu ´ario ir ´a digitar uma sequ ˆencia de n ´umeros, sem limite de quan-tidade. Os n ´umeros ser ˜ao digitados um a um e, sendo que caso ele deseje encerrar a entrada de dados, ele ira digitar o n ´umero ZERO. Os dados devem ser armazenados na mem ´oria deste modo
• Inicie com um vetor de tamanho 10 alocado dinamicamente;
• Ap ´os, caso o vetor alocado esteja cheio, aloque um novo vetor do tamanho do vetor anterior adicionado espac¸o para mais 10 valores (tamanho N+10, onde N inicia com 10);
• Copie os valores j ´a digitados da ´area inicial para esta ´area maior e libere a mem ´oria da ´area inicial;
• Repita este procedimento de expandir dinamicamente com mais 10 valores o vetor alocado cada vez que o mesmo estiver cheio. Assim o vetor ir ´a ser ’expandido’ de 10 em 10 valores.
Ao final, exiba o vetor lido. N ˜ao use a func¸ ˜ao REALLOC.
18. Escreva um programa para fazer a alocac¸ ˜ao din ˆamica dos blocos de dados conforme solicitado abaixo:
(a) Vetor de 1024 Bytes (1 Kbyte).
(b) Matriz de inteiros de dimens ˜ao 10 x 10.
(c) Vetor para armazenar 50 registros contendo: nome do produto (30 caracteres), c ´odigo do produto (inteiro) e prec¸o em reais.
(d) Texto de at ´e 100 linhas com at ´e 80 caracteres em cada linha.
19. Fac¸a um programa para associar nomes as linhas de uma matriz de caracteres. O usu ´ario ir ´a informar o n ´umero m ´aximo de nomes que poder ˜ao ser armazenados. Cada nome poder ´a ter at ´e 30 caracteres com o ’\0’. O usu ´ario poder ´a usar 5 opc¸ ˜oes diferen-tes para manipular a matriz:
(a) Gravar um nome em uma linha da matriz; (b) Apagar o nome contido em uma linha da matriz;
(c) Informar um nome, procurar a linha onde ele se encontra e substituir por outro nome; (d) Informar um nome, procurar a linha onde ele se encontra e apagar;
(e) Pedir para recuperar o nome contido em uma linha da matriz; 20. Fac¸a um programa que:
(a) Pec¸a para o usu ´ario entrar com o nome e a posic¸ ˜ao (coordenadas X e Y) de N cidades e as armazene em um vetor de estruturas (N ´e informado pelo usu ´ario); (b) Crie uma matriz de dist ˆancias entre cidades de tamanho N x N;
(c) Calcule as dist ˆancia entre cada duas cidades e armazene na matriz; (d) Exiba na tela a matriz de dist ˆancias obtida;
(e) Quando o usu ´ario digitar o n ´umero de duas cidades o programa dever ´a retornar a dist ˆancia entre elas.
21. Fac¸a um programa que leia quatro n ´umeros a, b, c e d, que ser ˜ao as dimens ˜oes de duas matrizes, e:
• Crie e leia uma matriz, dadas as dimens ˜oes dela;
• Crie e construa uma matriz que seja o produto de duas matrizes. Na sua func¸ ˜ao main(), imprima as duas matrizes e o produto entre elas, se existir.