Вы находитесь на странице: 1из 5

ETAPA 1:

Resolva o seguinte exerccio:


Vamos supor que um nmero real seja representado por uma estrutura
em C, como esta:
struct realtype {
int left;
int right;}
onde left e right representam os dgitos posicionados esquerda e direita do ponto
decimal, respectivamente. Se left for um inteiro negativo, o nmero real representado ser
negativo.
a. Implemente um programa em C para criar uma estrutura representando esse nmero
e para ler um nmero real nesta estrutura.
b. Neste mesmo programa, faa a leitura de um nmero real em uma nova varivel
desta mesma estrutura.

(Referncia: exerccio 1.3.2, pag 83 do PLT)


O programa dever ser entregue impresso
CUIDADO com programas iguais a outros grupos. Caso exista, o exerccio desta
etapa receber 0 pontos.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct realtype
{
int left;
int right;
}real;
int main(int argc, char *argv[]) {
int aux;
printf("\n-------------Entre com os numeros---------- \n");
printf("\n Digite a parte inteira: ");
scanf("%d", &real.left);
printf("\n Digite a parte decimal: ");
scanf("%d", &real.right);
//funo para no imprimir numeros negativos na parte decimal
if (real.right < 0)
real.right = real.right * (-1);
printf("\n# Numero digitado: %d.%d\n",real.left,real.right);
return 0;
}

ETAPA 2:
Resolva o seguinte exerccio:
Suponha que um inteiro precise de quatro bytes, um nmero real precise de oito
bytes e um caractere precise de um byte. Pressuponha as seguintes definies e
declaraes:
struct nametype {
char first[10];
char midinit;
char last[20];
};
struct person {
struct nametype name;
int birthday[2];
struct nametype parents[2];
int income;
int numchildren;
char address[20];
char city[10];
char state[2];
};
s t r u c t person p [ 1 0 0 ] ;
Se o endereo inicial dep for 100, quais sero os endereos iniciais (em
bytes) de cada um dos seguintes?
a. p[10]
b. p [200] . name. midinit
c. p[ 20] .income
d. p[20] .address[5]
e. p [ 5 ] . parents [ 1 ] . l a s t [ 1 0 ]
(Referncia: exerccio 1.3.3, pag 83 do PLT)
Reposta:
a= 1510
b= 28311
c= 3022
d= 3035
e= 896

ETAPA 3:
Responda as seguintes questes sobre ponteiros:
1. O que um ponteiro? E para que serve um ponteiro?
Em programao, um ponteiro ou apontador um tipo de dado de uma linguagem
de programao cujo valor se refere diretamente a um outro valor alocado em outra
rea da memria, atravs de seu endereo. Um ponteiro uma simples
implementao do tipo referncia que serve para indicar, ou armazenar, um
endereo de memria.
Ponteiro no um int, float, double ou char e sim um tipo de dado que armazena o
endereo em que esses esto alocado.

2. Quais das seguintes instrues so corretas para declarar um ponteiro?


a. int _ptr x;
b. int *ptr;
c. *int ptr;
d. *x;
Resposta: letra b
3. Qual a maneira correta de referenciar ch, assumindo que o endereo de ch foi
atribudo ao ponteiro indica?
a. *indica;
b. int *indica;
c. *indic;
d. ch
e. *ch;
Resposta: letra a

4. 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.
Resposta: letra c

5. Assumindo que o endereo de num foi atribudo a um ponteiro pnum, qual


expresso verdadeira?
a. num = &pnum
b. num = *pnum
c. pnum = *num
d. pnum = &num
Resposta: letra d

6. Assumindo que queremos ler o valor de x, e o endereo de x foi atribudo a px, a


instruo seguinte correta? Por que?
cin >> *px;
Resposta: correto afirmar, pois para ler o contedo do ponteiro px temos
que utilizar o * .

7. Qual a instruo que deve ser adicionada ao programa seguinte para que ele
funcione corretamente?
main ( ) {
int j, *pj;
*pj = 3;
}

Resposta: temos que indicar para o ponteiro *pj o endereo de


memria de j ou seja pj = &j;.

main ( ) {
int j, *pj;
pj = &j;
*pj = 3;
}

8. Assumindo que o endereo da varivel x foi atribudo a um ponteiro px, escreva


uma expresso que no usa x e divida x por 5.
main() {
int x,*px;
px = &x;
printf("%d",*px/5);
return(0);
}
9. Considerando o seguinte trecho do programa:
int i = 3, j = 5;
int *p;
p = &i;
int *q;
q = &j;
Quais sero os valores das seguintes expresses:
a. (*p)++; o valor de *p =3 depois do incremento passa ser 4
b. *p - *q; *p=4 - *q=5 = -1
c. (*q)+j; *q=5 + j+5 = 10
10. Seja a seguinte sequncia de instrues em um programa C:
int *pti;
int i = 10;
pti = &i;
Qual afirmativa falsa?
a. pti armazena o endereo de i
b. *pti igual a 10
c. ao se executar *pti = 20; i passar a ter o valor 20
d. ao se alterar o valor de i, *pti ser modificado
e. pti igual a 10
Resposta: a alternativa falsa e a letra c