Você está na página 1de 14

# UESC

CORREO
Exerccios
Ponteiros com C/C++

Questo 1
1. Seja o seguinte trecho de programa:
int i=3,j=5;
int *p, *q;
p = &i;
q = &j;
Qual o valor das seguintes expresses ? a) p == &i;
*p/(*q)+7

b) *p - *q

c) **&p

d) 3* -

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int i=3,j=5;
float x=0;
int *p, *q, *k;
p = &i;
q = &j;
k = &i;
if (p == &i)
cout << "Item a) VALOR TRUE.." << p << ".." << &i << endl;
*k = *p - *q;
cout << "Item b) VALOR de *k..." << *k << endl;
**&p;
cout << "Item c) VALOR de **&p..." << **&p << " *p.. " << *p << endl;
x = 3* - *p/(*q)+7;
cout << "Item d) VALOR de x.." << x << " 3* - *p.." << 3* - *p << " 3* - *p.. " << (*q)+7 <<
endl;
getch();
}

Questo 1

Questo 2
2.

Qual ser a sada deste programa supondo que i ocupa o endereo 4094 na memria?

#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
int main()
{
int i=5, *p;
p = &i;
printf("%x %d %d %d %d \n", p,*p+2,**&p,3**p,**&p+4);
getch();
}

Questo 3
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int i = 5, j = 6;
int *p, *q;
p = &i;
cout << "Item a).." << p << " .. " << &i << endl;
//*q = &j;
cout << "Item b)..ILEGAL.. " << endl;
p = &*&i;
cout << "Item c).." << p << " .. " << &*&i << endl;
//i = (*&)j;
cout << "Item d)..ILEGAL.. " << endl;
i = *&j;
cout << "Item e).." << i << " .. " << *&j << endl;
i = *&*&j;
cout << "Item f).." << i << " .. " << *&*&j << endl;
//q = *p;
cout << "Item g)..ILEGAL.. " << endl;
//i = (*p)++ + *q;
cout << "Item h)..ILEGAL.. " << endl;
getch();
}

Questo 4
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
int main()
{
int valor; int *p1; float temp; float *p2;
char aux;
char *nome = "Algoritmos";
char *p3; int idade; int vetor[3];
int *p4; int *p5;
/* (a) */
valor = 10;
p1 = &valor;
*p1 = 20;
printf("(a) %d \n", valor);
/* (b) */
temp = 26.5;
p2 = &temp;
*p2 = 29.0;
printf("(b) %.1f \n", temp);
/* (c) */
p3 = &nome[0];
aux = *p3;
printf("(c) %c \n", aux);
/* (d) */
p3 = &nome[4];
aux = *p3;
printf("(d) %c \n", aux);
/* (e) */
p3 = nome;
printf("(e) %c \n", *p3);
// continuao...

/* (f) */
p3 = p3 + 4;
printf("(f) %c \n", *p3);
/* (g) */
p3--;
printf("(g) %c \n", *p3);
/* <h> */
vetor[0] = 31;
vetor[1] = 45;
vetor[2] = 27;
p4 = vetor;
/* (i) */
p5 = p4 + 1;
/* (j) */
p4 = p5 + 1;
/* (l) */
p4 = p4 - 2;
/* (m) */
p5 = &vetor[2] - 1;
printf("(m) %d \n", *p5);
/* (n) */
p5++;
printf("(n) %d \n", *p5);
getch();
}

Questo 5

Questo 5
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
int main()
{
float vet[5] = {1.1,2.2,3.3,4.4,5.5};
float *f;
int i;
f = vet;
for(i = 0 ; i <= 4 ; i++){
printf("\ni = %d",i);
printf(" vet[%d] = %.1f",i, vet[i]);
printf(" *(f + %d) = %.1f",i, *(f+i));
printf(" &vet[%d] = %X",i, &vet[i]);
printf(" (f + %d) = %X",i, f+i);
}
getch();
}

Questo 6
6. Assumindo que pulo[] um vetor do tipo int,
quais das seguintes expresses referenciam o valor do terceiro
elemento da matriz?
a) *(pulo + 2) b) *(pulo + 4) c) pulo + 4 d) pulo + 2

Questo 7
7. Supor a declarao: int mat[4], *p, x; Quais expresses so
vlidas? Justifique:
a) p = mat + 1;
b) p = mat++; c) p = ++mat;
d) x = (*mat)++;
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
int main()
{
int mat[4], *p, x;
p = mat + 1;
cout << "item a) " << p << endl;
//p = mat++;
cout << "item b) ..INVALIDA" << endl;
//p = ++mat;
cout << "item d) ..INVALIDA" << endl;
x = (*mat)++;
cout << "item e) " << x << endl;
getch();
}

Questo 8

Questo 9

fim

Cdigo

Converso/Formato do argumento

%d

Nmero decimal inteiro (int). Tambm pode ser usado %i como equivalente a %d.

%u

## Nmero decimal natural (unsigned int), ou seja, sem sinal.

%o

Nmero inteiro representado na base octal. Exemplo: 41367 (corresponde ao decimal 17143).

%p

## Nmero inteiro representado na base hexadecimal. Exemplo: 42f7 (corresponde ao decimal

17143). Se usarmos %X, as letras sero maisculas: 42F7.
Nmero decimal de ponto flutuante. No caso da funo printf, devido s converses implcitas
da linguagem C, serve tanto para float como para double. No caso da funo scanf, %fserve
para float e %lf serve para double.
Nmero em notao cientfica, por exemplo 5.97e-12. Podemos usar %E para exibir o E
maisculo (5.97E-12).
Nmero em notao cientfica com o "e"maisculo
Escolhe automaticamente o mais apropriado entre %f e %e. Novamente, podemos usar %G
para escolher entre %f e %E.
Ponteiro: exibe o endereo de memria do ponteiro em notao hexadecimal.

%c

Caractere: imprime o caractere que tem o cdigo ASCII correspondente ao valor dado.

%s
%%

Imprime um %

%x
%X
%f
%e
%E
%g