Buscar

Resolução da Lista de Exercícios de Ponteiros e Registros

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Lista de Exercícios de Ponteiros
Quais das seguintes instruções é correta para declarar um ponteiro?
int _ptr x
int *ptr
*int ptr
*x
Qual é a maneira correta de referenciar o conteúdo de ch, assumindo que o endereço de ch foi atribuido ao ponteiro indica? 
*indica;     
int *indica     
ch
*ch
Na expressão float *fptr, o que é do tipo float ? 
A variável fptr                              
O endereço de fptr
A variável apontada por ftpr     
Nenhuma das anteriores
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
Assumindo que o endereço de vox foi atribuido a um ponteiro variável invox, quais das seguintes expressões são verdadeiras? 
vox ==&invox     
vox==*invox     
invox==*vox         
invox==&Vox
Qual é a instrução que deve ser adicionada ao programa seguinte para que ele trabalhe corretamente?
main( )
{ 
int j, *ptrj; 
ptrj = &j;
*ptrj = 3; 
} 
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.
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? 
p==&i                  
1 (Verdadeiro)
*p-*q                  
-2
**&p        
3          
3*-*p/(*q)+7
6
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
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 ?
p= &i;         
*q= &j;          
p= &*&i;          
i= (*&)j 
i = *&j         
i= *&*&j;          
q= &p;          
i= (*p)++ + *q
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.
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"); 
}
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"); 
}
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;
		};
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
	}
}
Assumindo que pulo[] é um vetor do tipo int, quais das seguintes expressões referenciam o valor do terceiro elemento do vetor?
*(pulo + 2)
*(pulo + 4)
pulo + 4
pulo + 2
Supor a declaração: int mat[4], *p, x; Quais expressões são válidas? Justifique.
p = mat + 1;
Um ponteiro recebendo um endereço de memória do mesmo tipo dele
p = mat++;
Não é permitido o incremento de endereços de vetores
p = ++mat;	
Não é permitido o incremento de endereços de vetores
x = (*mat)++;
Uma variável inteirax recebendo o valor que está na primeira posição do vetor “mat”, que depois é incrementado
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”
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”
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:
vet for declarado como char?
4093, 4094, 4095
vet for declarado como int?
4094, 4096, 4098
vet for declarado como float?
4096, 4100, 4104
vet for declarado como double?
4100, 4108, 4116

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

Perguntas Recentes