Linguagem C
Apontadores, memória dinâmica e listas ligadas
- Se i é uma variável do tipo int e
p e q são apontadores para int, quais
das seguintes atribuições são legais?
- p = i;
- *p = &i;
- &p = q;
- p = &q;
- p = *&q;
- p = q;
- p = *q;
- *p = q;
- *p = *q;
[Resolução]
- Considere o seguinte exemplo:
int i, *p;
i = 5;
p = &i;
Qual é o valor de i depois da execução
deste segmento de código?
- Quais são os valores de p e q após
a execução do código seguinte?
int i, *p, *q;
i = 5;
p = &i;
q = p;
i = 10;
- Escreva uma função void maximo(int *n1, int *n2,
int *max) que devolve o máximo entre *n1 e *n2 em
*max.
- Escreva uma função que receba o endereço
de dois inteiros e troque o seu valor.
- Consegue encontrar algum erro no código seguinte?
int num(int *n){
int i;
for(i=0;i<n;i++)
i += n;
return i;
}
- Dadas as seguintes declarações:
int a[] = {5, 15, 34, 54, 14, 2, 52, 72};
int *p = &a[1], *q = &a[5];
- Qual é o valor de *(p+3)?
- Qual é o valor de *(q-3)?
- Qual é o valor de q - p?
- A condição p < q é verdadeira ou falsa?
- A condição *p < *q é verdadeira ou
falsa?
[Resolução]
- Qual será o conteúdo do vector depois da execução
deste pedaço de código:
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *p = &a[0], *q = &a[9], temp;
while(p < q) {
temp = *p;
*p++ = *q;
*q-- = temp;
}
- Reescreva o programa seguinte usando apontadores. Elimine todo
o uso de [].
int soma_vector(int a[], int n){
int i, soma;
soma = 0;
for(i=0; i <n; i++)
soma += a[i];
return soma;
}
- Crie um programa que, usando ponteiros, leia 10 inteiros e os
imprima na ordem inversa.
[Resolução]
- Crie um programa que, usando memória dinâmica, armazene
dois conjuntos de inteiros (em dois vectores) e determine a sua intersecção.
- Por questões de segurança, a recepção
dum edifício dum banco mantém o registo de todas as pessoas
que entram e saem do mesmo. Sobre cada pessoa são armazenadas as
seguintes informações:
Elabore um programa que permita gerir a informação das
entradas sobre a forma duma lista ligada. Sempre que alguém entra,
os seus dados são adicionados à lista. Sempre que alguém
sai são apagados. Deve ser possível listar as pessoas que
se encontram no edifício. Para aumentar o nível de segurança
sempre que alguém sai do edifício é registado num ficheiro
texto o seu nome, BI, hora de entrada e hora de saída. Este ficheiro
de texto deverá ter como nome a data a que diz respeito.[Resolução]
- Escreva um programa que leia do teclado palavras de no máximo
30 caracteres e as insira numa lista simplesmente ligada por ordem alfabética.
Na lista não são admitidas palavras repetidas pelo que, para
cada palavra deve ser contabilizada o número de vezes que ocorreu.
Para maior facilidade considere que as palavras são separadas por
<enter> e que a introdução das mesmas termina com a
palavra <end>. Dado um comprimento imprima todas as palavras
encontradas, com esse número de caracteres.
- Escreva um programa que crie duas listas de inteiros e construa:
- a união das listas
- a intersecção das listas.
Voltar
Complementos de Programação -
ISEP 2003