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
     