Você está na página 1de 2

TRABALHO DE ESTRUTURA DE

DADOS I.
1. Rastreie os cdigos a seguir e escreva ao lado o que cada linha est executando.
Ex:
int v = 5; // variavel v recebe o valor do tipo int= 5.
int *pv; //ponteiro do tipo inteiro.
pv = &v; //pv recebe o endereo de v.
printf(%d, *pv); //imprime 5
a) int main ()
{
int u1,u2; //declara as variaveis
int v = 3; //inteiro v recebe 3
int *pv; //declara o ponteiro do tipo inteiro
u1 = 2 * (v + 5); //variavel u1 recebe o resultado do produto
pv = &v; // pv aponta para o endereo de v.
u2 = 2 * (*pv + 5); // variavel u2 recebe o resultado do produto
printf ("%d = %d\n", u1, u2); imprime 16=16.
*pv = 0; // ponteiro PV recebe valor=0
u1 = 2 * (v + 5);
//variavel u1 recebe o resultado do produto
u2 = 2 * (*pv + 5); // variavel u2 recebe o resultado do produto
printf ("%d = %d\n", u1, u2); //imprime 10=10.
b) int main()
{
int x[10] = {10,11,12,13,14,15,16,17,18,19}; //matriz de tipo inteiro.
int i; // declara varivel de tipo inteiro i.
printf ("\n[10 11 12 13 14 15 16 17 18 19]\n\n"); //imprime a matriz.
for (i = 0; i < 10; i++) // percorre as posies de 10~19.
printf("i = %d x[i] = %d *(x+i) = %d &x[i] = %p x+i = %p\n", i, x[i], *(x+i), &x[i], x+i);
}
// imprime i =0,x[i]=10,*(x+1)=10,&x[i]=0022FF40,x+i=0022FF40
i =1,x[i]=11,*(x+1)=11,&x[i]=0022FF44,x+i=0022FF44
i =2,x[i]=12,*(x+1)=12,&x[i]=0022FF48,x+i=0022FF48
i =3,x[i]=13,*(x+1)=13,&x[i]=0022FF4C,x+i=0022FF4C
i =4,x[i]=14,*(x+1)=14,&x[i]=0022FF50,x+i=0022FF50
i =5,x[i]=15,*(x+1)=15,&x[i]=0022FF54,x+i=0022FF54
i =6,x[i]=16,*(x+1)=16,&x[i]=0022FF58,x+i=0022FF58
i =7,x[i]=17,*(x+1)=17,&x[i]=0022FF4C,x+i=0022FF4C
i =8,x[i]=18,*(x+1)=18,&x[i]=0022FF60,x+i=0022FF60
i =9,x[i]=19,*(x+1)=19,&x[i]=0022FF64,x+i=0022FF64
2. Seja o seguinte trecho de programa:
int i = 4, j = 8; // declara variaveis do tipo inteiras
int *p, *q; //declara os ponteiros de tipo inteiros
float k;
// declara variavel do tipo reais.
p = &i; //p recebe o endereo de i.
q = &j; //q recebe o endereo de j.

Qual o valor das expresses?


printf("%p == %p\n", p, &i);
// imprime 0022FF74==0022FF74
printf("*p = %d, *q = %d, (*p *q) = %d\n", *p, *q, (*p *q)); // imprime 4, 8, 48
k = (float)(*p)/(*q);
// K recebe 4 dividido 8 = 0.5.
printf("%f\n", (k+7));
// imprime 7,5.
3. Seja o cdigo abaixo:
int main()
{
int vet[3] = {5, 9 , 11}; // declara vetor de 3 posies.
int *ptr;
// declara um ponteiro do tipo inteiro.
ptr = vet; // ponteiro recebe vetor
printf( %d, *ptr + 1); // imprime 6.
printf( %d, *(ptr + 1)); //imprime 9.
return 0;
}
O que ser impresso? E para o cdigo abaixo?
ptr = vet;
printf( %d, *(ptr)); // imprime 5.
printf( %d, *(ptr + 2)); // imprime 11.
4. Tendo a declarao:
char st[] =
// "Engenharia de Telecomunicaes";
O que imprimiro as instrues seguintes?
printf("%s\n", st);
// Engenharia deTelecomunicaes
printf("%p\n", &st[0]);
// 0022FF50
printf("%p\n", st);
// 0022FF50
printf("%p\n", &st[0] + 1);
// 0022FF51
printf("%s\n", st+6);
// aria deTelecomunicaes
5. 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
6. Se i e j so variveis inteiras e p e q ponteiros para int, quais das seguintes expresses de
atribuio so 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

Você também pode gostar