Você está na página 1de 8

Universidade Agostinho Neto Faculdade de Cincias Departamento de Cincias da Computao

Exercicos de Algoritmos e Estrutura de dados-

Ciclos
1. Escreva um programa que leia 10 nmeros reais e escreva a sua mdia, mximo e mnimo. 2. Escreva um programa que leia valores inteiros at ser lido o valor -999. Quando isso acontecer dever escrever a soma dos valores lidos. 3. Escreva um programa que leia um primeiro valor inteiro, que ser uma base, e em seguida um segundo valor (dever ser lido carcter a carcter at aparecer um que indica termino ex. # ) que dever ser interpretado na base lida anteriormente. O programa dever escrever o equivalente decimal do segundo valor. Exemplo:

Entrada 10 1234# 8 77#

Sada 1234 63 15

2 1111#

4. Escreva um programa que leia um inteiro maior ou igual a 1 e calcule a seguinte sequncia: se o valor for par dever dividi-lo por 2, se for mpar dever multiplic-lo por 3 e somar 1. Quando o resultado atingir o valor 1, a sequncia termina. O programa dever escrever todos os valores assim gerados, assim como o tamanho da sequncia. Exemplo:
Valor inicial: 9 Prximo: 28 Prximo: 14 Prximo: 7 Prximo: 22

Prximo: 11 Prximo: 34 Prximo: 17 Prximo: 52 Prximo: 26 Prximo: 13 Prximo: 40 Prximo: 20 Prximo: 10 Prximo: 5 Prximo: 16 Prximo: 8 Prximo: 4 Prximo: 2 Prximo: 1 Gerada uma sequncia de tamanho 20.

Se o valor entrado for menor do que 1 dever indicar a ocorrncia de um erro e terminar com uma mensagem de erro. 5. Escreva um programa que leia uma linha de texto e que conte o nmero de cada vogal existente na linha. O programa dever imprimir o nmero total de caracteres lidos, o nmero de ocorrncias de cada vogal e a respectiva percentagem relativamente ao total de caracteres.

Apontadores
1. O que um ponteiro? E para que serve?
2. Quais sero os valores de x, y e p ao final do trecho de cdigo abaixo? int x, y, *p; y = 0; p = &y; x = *p; x = 4; (*p)++; --x; (*p) += x;

3. Os programas (trechos de cdigo) abaixo possuem erros. Quais so? Como deveriam ser? a) void main() { int x, *p; x = 100; p = x; printf(Valor de p: %d.\n, *p); } b) void troca (int *i, int *j) { int *temp; *temp = *i; *i = *j; *j = *temp; }

4. Quais das seguintes instrues so corretas para declarar um ponteiro? a) int _ptr x; b) int *ptr; c) *int ptr; d) *x; 5. Qual a maneira correta de referenciar ch, assumindo que o endereo de ch foi atribudo ao ponteiro indica ? a) *indica; b) int *indica; c) *indic; d) ch e) *ch; 6. Na expresso float *pont; o que do tipo float? a) a varivel pont. b) o endereo de pont. c) a varivel apontada por pont. d) nenhuma das anteriores. 7. Assumindo que o endereo de num foi atribudo a um ponteiro pnum, quais das seguintes expresses so verdadeiras? a) num == &pnum b) num == *pnum

c) pnum == *num d) pnum == &num 8. Assumindo que queremos ler o valor de x, e o endereo de x foi atribudo a px, a instruo seguinte correta? Por que? scanf ( %d , *px );

9. Qual a instruo que deve ser adicionada ao programa seguinte para que ele trabalhe corretamente? main ( ) { int j, *pj; *pj = 3; } 10. Assumindo que o endereo da varivel x foi atribudo a um ponteiro px, escreva uma expresso que no usa x e divida x por 5.

11. Qual ser a sada deste programa? main ( ) { int i = 5, *p = &i; printf ( %u %d %d %d %d \n , p, *p+2, **&p, 3**p, **&p+4); } 12. Se i e j so variveis inteiras e p e q so ponteiros para inteiros, quais das seguintes expresses de atribuio so ilegais? a) p = &i; b) *q = &j; c) p = &*&i; d) i = (*&)j; e) i = *&*&j; f) q = &p; g) i = (*p) ++ + *q; 13. Seja a seguinte seqncia de instrues em um programa C: int *pti; int i = 10; pti = &i; Qual afirmativa falsa? a) pti armazena o endereo 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 14. Considerando as variveis e ponteiros definidos abaixo; quais so as atribuies permitidas? int x, *ptx, **pp; float a, *pta, **pf; a) x = 100; b) *pta = &a; c) ptx = &a; d) *pf = &a; e) pp = &pta; f) **pf = 7.9; g) *ptx = 20; h) ptx = &x; i) pp = &x; j) pf = &pta;

15. Dadas as declaraes abaixo; qual o valor dos itens: int x = 10, *px = &x, **ppx = &x; float y = 5.9, *py = &y, **ppy = &py; x y px py ppy ppx

FFA0 a) x = b) *py = c) px = d) &y = e) *px = f) y = g) *ppx = h) py = i) &x = j) py++ = k) *px-- = l) **ppy = m) &ppy = n) *&px = o) **ppx++ = p) px++ = q) &ppx =

FFB4

FFF0

FFC6

FFA6

FFD4

16. Escreva um programa que percorra um array de qualquer tipo, escrevendo o seu contedo, utilizando apenas apontadores. Como alternativa procure um valor particular no array (usando apenas apontadores). 17. Escreva um programa que conte o nmero de vezes que uma palavra (um pequeno string) ocorre num texto (um string grande). Leia uma palavra numa nica linha. Leia de seguida o texto at aparecer um carcter EOF. No esquecer os zeros terminais dos strings. 18. Escreva uma funo (e o respectivo programa de teste) que rode os seus 3 argumentos. Se estes se chamarem a, b e c, o valor de a vai para b, o valor de b vai para c e o valor de c vai para a.

Listas
1. Para que serve uma lista? 2. Quais operaes podem ser realizadas com uma lista? 3 . Quando aconselhvel o uso de lista? 4. Quais so as formas de representao de listas?

Listas Sequnciais

1. Quais as vantagens de utilizar listas sequnciais? 2. Quais as desvantagens de utilizar listas sequnciais? 3. Escreva a estrutura necessria para implementao de uma lista sequncial. 4. Escreva as funes utilizadas para operar sobre as listas sequnciais. 5. Utilizando a implementao de listas com alocao sequencial (arranjos), implemente um procedimento para inserir um item em uma determinada posio da lista. 6. Escreva um procedimento para remover de uma lista sequencial um elemento com uma chave especfica (passada como parmetro): Remove(TipoLista *Lista, TipoChave c).

7. Uma determinada escola pretende guardar a seguinte informao acerca dos seus alunos: nmero de inscrio nome sexo (masculino, feminino) idade a) Defina estruturas de dados que permitam: i) Guardar a informao acerca de um aluno. ii) Guardar a informao acerca de 1000 alunos. b) Elabore um programa que permita as seguintes opes: Inserir aluno Listar dados acerca de todos os alunos Listar dados acerca de um aluno Eliminar aluno Sair Para tal elabore funes que permitam: i) Ler dados acerca de um aluno. ii) Escrever no cran toda a informao acerca de um aluno. iii) Listar no cran a informao acerca de todos os alunos. iv) Eliminar um aluno. 8. Faa um programa que: a) crie uma lista L; b) exiba o seguinte menu de opes: EDITOR DE LISTAS 1 EXIBIR LISTA 2 INSERIR 3 REMOVER 4 EXIBIR ELEMENTO 5 EXIBIR POSIO 6 ESVAZIAR ESC SAIR DIGITE SUA OPO:

c) leia a opo do usurio; d) execute a opo escolhida pelo usurio; e) implemente a estrutura de dados LISTA com implementao seqencial e usando o inteiro como tipo base, contendo apenas as operaes bsicas de listas (citadas anteriormente); f) na opo de exibir lista, devem ser exibidos o tamanho da lista e os seus elementos; g) na opo de insero, deve ser lido o valor do elemento a ser inserido e a posio onde ser efetuada a insero; h) na opo de remoo, deve ser lida a posio do elemento a ser removido; i) na opo de exibir elemento, deve ser lida a posio do elemento; j) na opo de exibir posio, deve ser lido o valor do elemento; k) as operaes de exibir e esvaziar a lista devem estar inseridas no programa principal; l) aps a execuo de cada opo, o programa deve retornar ao menu para nova opo do usurio ou o encerramento do programa (atravs da tecla ESC). 8. Inclua as funes abaixo especificadas (obs: no faa uso das funes j implementadas). a) inserir um dado elemento na primeira posio de uma lista; b) inserir um dado elemento na ltima posio de uma lista; c) modificar um elemento de uma lista, sendo dado a sua posio e o novo valor; d) remover o primeiro elemento de uma lista; e) remover o ltimo elemento de uma lista; f) remover um elemento dado o seu valor.

Listas Ligadas

1. Quais as vantagens de utilizar listas ligadas? 2. Quais as desvantagens de utilizar listas ligadas? 3. Escreva a estrutura necessria para implementao de uma lista ligada. 4. Escreva as funes utilizadas para operar sobre as listas ligadas. 5. Escreva uma funo que copie um vetor para uma lista encadeada 6. Escreva uma funo que copie uma lista encadeada para um vetor 7. Escreva uma funo que conta o nmero de clulas de uma lista encadeada

8. Escreva uma funo que verifica se duas listas dadas so iguais, ou melhor, se tm o mesmo contedo. 9. Escreva uma funo que inverte a ordem das clulas de uma lista encadeada (a primeira passa a ser a ltima, a segunda passa a ser a penltima etc.). Faa isso sem usar espao auxiliar; apenas altere os ponteiros. 11. Escreve uma funo que insere um novo elemento no fim da lista. 10. Escreve uma funo que insere um novo elemento no incio da lista.