TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Lista de Exercícios de Ponteiros

Exam: Lista de Exercícios de Ponteiros. Pesquise 862.000+ trabalhos acadêmicos

Por:   •  17/11/2014  •  Exam  •  1.768 Palavras (8 Páginas)  •  2.348 Visualizações

Página 1 de 8

Lista de Exercícios de Ponteiros

1. Quais das seguintes instruções é correta para declarar um ponteiro?

a. int _ptr x

b. int *ptr

c. *int ptr

d. *x

2. Qual é a maneira correta de referenciar o conteúdo de ch, assumindo que o endereço de ch foi atribuido ao ponteiro indica?

a. *indica;

b. int *indica

c. ch

d. *ch

3. Na expressão float *fptr, o que é do tipo float ?

a. A variável fptr

b. O endereço de fptr

c. A variável apontada por ftpr

d. Nenhuma das anteriores

4. Assumindo que o endereço da variável var foi atribuído a um ponteiro pointvar, escreva uma expressão que não usa var e divida var por 10.

*pointvar = *pointvar / 10

5. Assumindo que o endereço de vox foi atribuido a um ponteiro variável invox, quais das seguintes expressões são verdadeiras?

a. vox ==&invox

b. vox==*invox

c. invox==*vox

d. invox==&Vox

6. Qual é a instrução que deve ser adicionada ao programa seguinte para que ele trabalhe corretamente?

main( )

{

int j, *ptrj;

ptrj = &j;

*ptrj = 3;

}

7. Assumindo que queremos ler o valor de x e o endereço de x foi atribuído a ptrx, a instrução seguinte é correta? Justique.

scanf("%d",*ptrx);

Não. A correta seria scanf("%d", ptrx);, já que a função scanf espera pelo endereço de memória das variáveis destino.

8. Seja o seguinte trecho de programa:

int i=3, j=5;

int *p, *q;

p= &i;

q= &j;

Qual é o valor das seguintes expressões?

a. p==&i

i. 1 (Verdadeiro)

b. *p-*q

i. -2

c. **&p

i. 3

d. 3*-*p/(*q)+7

i. 6

9. Qual será a saída deste programa supondo que i ocupa o endereço 4094 na memória?

main( )

{

int i=5, *p;

p= &i;

printf(" %u %d %d %d %d \n", p, *p+2, **&p, 3**p, **&p+4);

}

R- Endereço de memória de ‘ï’, 7, 5, 15, 9

10. Se i e j são variáveis inteiras e p e q ponteiros para int, quais das seguintes expressões de atribuições são ilegais ?

a. p= &i;

b. *q= &j;

c. p= &*&i;

d. i= (*&)j

e. i = *&j

f. i= *&*&j;

g. q= &p;

h. i= (*p)++ + *q

11. O seguinte programa tem um erro de conceito. Qual é ?

main( )

{

int *p= 987;

printf("Numero = %d \n", *p);

}

R-O ponteiro “p” não aponta para nenhum endereço, logo não pode referenciar nenhum valor.

12. Implemente um programa em C que defina um registro capaz de armazenar as informações de nome, CPF, identidade, endereço, nome do pai, nome da mãe e salário de um funcionário de uma empresa. Em seguida preencha todos estes dados em uma variável registro deste tipo.

#include <iomanip.h>

#include <string.h>

main(){

struct Cadastro{

char Nome[200];

char Cpf[12];

char Identidade[15];

char Endereco[250];

char NomePai[200];

char NomeMae[200];

float Salario;

}Func;

puts("Digite o nome:");

gets(Func.Nome);

puts("Digite o CPF:");

gets(Func.Cpf);

puts("Digite a Identidade:");

gets(Func.Identidade);

puts("Digite o Endereco:");

gets(Func.Endereco);

puts("Digite o Nome do Pai:");

gets(Func.NomePai);

puts("Digite o Nome da Mae:");

gets(Func.NomeMae);

puts("Digite o Salario:");

cin >> Func.Salario;

system("pause");

}

13. Implemente um programa em C que defina o mesmo registro da questão 1 para um grupo de 5 funcionários (vetor de registros). Em seguida, preencha todos os dados para os cinco funcionários.

#include <iomanip.h>

#include <string.h>

main(){

struct Cadastro{

char Nome[200];

char Cpf[12];

char Identidade[15];

char Endereco[250];

char NomePai[200];

char NomeMae[200];

float Salario;

}Func[5];

int i;

for(i=0;i<5;i++)

{

cout<<endl<<"Funcionario "<<i+1<<endl<<endl;

puts("Digite o nome:");

gets(Func[i].Nome);

puts("Digite o CPF:");

gets(Func[i].Cpf);

puts("Digite a Identidade:");

gets(Func[i].Identidade);

puts("Digite o Endereco:");

gets(Func[i].Endereco);

puts("Digite o Nome do Pai:");

gets(Func[i].NomePai);

puts("Digite o Nome da Mae:");

gets(Func[i].NomeMae);

puts("Digite o Salario:");

cin >> Func[i].Salario;

fflush(stdin);

}

system("pause");

}

14. Defina qual o registro para a estrutura definida abaixo:

2.3 ´A´ 45 -387 -56.5 “XYQ” 0

A B C D E F G

Onde, A, B, C, D, E, F e G são os campos do registro;

R-

struct Reg{

float A;

char B;

int C;

int D;

float E;

char F[100];

int G;

};

15. Qual é o resultado do seguinte programa?

#include <stdio.h>

void main(){

float vet[5] = {1.1,2.2,3.3,4.4,5.5};

float *f;

int i;

f = vet;

printf("contador/valor/valor/endereco/endereco");

for(i = 0 ; i <= 4 ; i++){

printf("\ni = %d",i);

// Escreve o valor de i

printf(" vet[%d] = %.1f",i, vet[i]);

// Escreve o valor de i e da posição i de vet

printf(" *(f + %d) = %.1f",i, *(f+i));

// Escreve o valor de i e da posição i de vet através

// do ponteiro f

printf(" &vet[%d] = %X",i, &vet[i]);

// Escreve o endereço em hexadecimal de cada

// elemento em cada posição i de vet

printf(" (f + %d) = %X",i, f+i);

// Escreve o endereço em hexadecimal de cada

//elemento em cada posição i de vet através do //ponteiro f

}

}

16. Assumindo que pulo[] é um vetor do tipo int, quais das seguintes expressões referenciam o valor do terceiro elemento do vetor?

a. *(pulo + 2)

b. *(pulo + 4)

c. pulo + 4

d. pulo + 2

17. Supor a declaração: int mat[4], *p, x; Quais expressões são válidas? Justifique.

a. p = mat + 1;

i. Um ponteiro recebendo um endereço de memória do mesmo tipo dele

b. p = mat++;

i. Não é permitido o incremento de endereços de vetores

c. p = ++mat;

i. Não é permitido o incremento de endereços de vetores

d. x = (*mat)++;

i. Uma variável inteirax recebendo o valor que está na primeira posição do vetor “mat”, que depois é incrementado

18. O que fazem os seguintes programas?

#include <stdlib.h>

#include <stdio.h>

void main(){

int vet[] = {4,9,13};

int i;

for(i=0;i<3;i++){

printf("%d ",*(vet+i));

}

}

#include <stdlib.h>

#include <stdio.h>

void main(){

int vet[] = {4,9,13};

int i;

for(i=0;i<3;i++){

printf("%x ",vet+i);

}

}

#include <stdlib.h>

#include <stdio.h>

void main(){

int vet[] = {4,9,13};

int i;

for(i=0;i<3;i++){

printf("%x ",vet+i);

}

}

Lista os valores do vetor “vet” utilizando o conceito de ponteiros

Lista em hexadecimal os endereços de memória de cada um dos elementos do vetor “vet”

Lista em hexadecimal os endereços de memória de cada um dos elementos do vetor “vet”

19. O que fazem os seguintes programas?

#include <stdlib.h>

#include <stdio.h>

void main() {

int vet[] = {4,9,12};

int i,*ptr;

ptr = vet;

for(i = 0 ; i < 3 ; i++) {

printf("%d ",*ptr++);

}

} #include <stdlib.h>

#include <stdio.h>

void main(){

int vet[] = {4,9,12};

int i,*ptr;

ptr = vet;

for(i = 0 ; i < 3 ; i++) {

printf("%d ",(*ptr)++);

}

}

Lista na tela os elementos do vetor “vet” através do ponteiro “ptr” Escreve e incrementa de uma unidade o valor da primeira posição do vetor “vet”

20. Seja vet um vetor de 4 elementos: TIPO vet[4]. Supor que depois da declaração, vet esteja armazenado no endereço de memória 4092 (ou seja, o endereço de vet[0]). Supor também que na máquina usada uma variável do tipo char ocupa 1 byte, do tipo int ocupa 2 bytes, do tipo float ocupa 4 bytes e do tipo double ocupa 8 bytes. Qual o valor de vet+1, vet+2 e vet+3 se:

a) vet for declarado como char?

• 4093, 4094, 4095

b) vet for declarado como int?

• 4094, 4096, 4098

c) vet for declarado como float?

• 4096, 4100, 4104

d) vet for declarado como double?

• 4100, 4108, 4116

...

Baixar como  txt (8.3 Kb)  
Continuar por mais 7 páginas »