Você está na página 1de 5

Exerccios da Apostila de C (Listas 4 e 5)

1- Seja um vetor declarado por


int vet[10];
Qual elemento deste vetor acessado quando se escreve vet[2] ?
a.

Primeiro elemento

b.

Segundo elemento

c.

Terceiro elemento

d.

Quarto elemento

e.

Nenhuma das opes anteriores

Respostas 1:
Em vetores, o primeiro elemento sempre o 0.
Assim, temos: vet[0], vet[1], vet[2], ..., vet[9]
Logo, o vet[2] um terceiro elemento do vetor.
Gabarito: c
2- Se declararmos um vetor como:

int vet[30]

a instruo abaixo acessa corretamente os elementos deste vetor?


for (j=0; j <= 30; j++)
vet[j] = j*j;
a.

Sim

b.

No

Respostas 2:
Se voc declaram um vetor de 30 elementos, eles so: vet[0], vet[1], ..., vet[29]
Ou seja, no existe: vet[30]
Gabarito: b
3-

Seja

matriz

matrx

declarada

inicializada

por:

int

matrx[][4]

{1,2,3,4,5,6,7,8,9,10,11,12};
O que conter o elemento matrx[1][2] ?
a.

b.

c.

d.

e.

Nenhuma das opes anteriores

Respostas 3:
Temos um vetor bidimensional, ou matriz, com 12 elementos.
No foi especificado na declarao dela o tanto de linhas que ela possui, somente o nmero
de elementos existentes em cada linha, que 4.
Ou seja, temos 12 elementos, agrupados de 4 em 4. Logo, temos 3 linhas:
matrx[0][], matrx[1] e matrx[2]
Desenhando nossa matriz para resolver esta Respostas da apostila, temos:
matrx[][0]

matrx[][1]

matrx[][2] matrx[][3]

matrx[0] ->

matrx[1] ->

matrx[2] ->

10

11

12

Gabarito: d
4- Se uma string for declarada como:

char str[20];

o nmero mximo de caracteres que podero ser lidos e armazenados nela :


a.

18

b.

19

c.

20

d.

21

Respostas 4:
Embora as strings sejam comumente vistas como um vetor de caracteres, esta informao
no est totalmente correta, pois o que caracteriza uma string que o ltimo elemento do
vetor o caractere '\0', e no um caractere visvel.
Assim, se declaramos uma string com 20 elementos, s podemos usar 19, pois o ltimo o
\0.
Gabarito: b
5- Qual funo pode ser usada para determinar o comprimento de uma string?
a.

gets

b.

strcpy

c.

strcat

d.

strlen

e.

strcmp

Respostas 5:
strlen vem de string length, que significa tamanho da string.
Gabarito: d
6- Qual das instrues abaixo correta para declarar um ponteiro para inteiro?
a.

*int pti;

b.

*pti;

c.

&i;

d.

int_pti pti;

e.

int *pti;

Respostas 6:
A sintaxe para declarao de um ponteiro :
tipo_do_ponteiro

* nome_do_ponteiro;

Gabarito: e
7- Seja a seguinte seqncia de instrues em um programa C:
int i = 10;

int *pti;

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

Respostas 7:
pti no igual a 10, pois pti armazena um endereo de memria, um tipo de dado especial,
diferente de um inteiro comum.
Gabarito: e
8- Se i e j so variveis inteiras e pi e pj so ponteiros para inteiro, qual atribuio ilegal?
a.

pi = &i;

b.

*pj = &j;

c.

pj = &*&j;

d.

i = *&*&j;

e.

i = (*pi)+++*pj;

Respostas 8:
Como dissemos, o endereo de memria um tipo especial de dado, no exatamente igual
a inteiro.
Sabemos que *pj vai mudar o local na qual o ponteiro pj aponta.
Por exemplo, vamos fazer pj apontar para a varivel j: pj = &j;
Assim, fazer: j=10
o mesmo que: *pj = 10
Pois pj aponta para j.
Ento, *pj um nmero inteiro, e ele deve receber um inteiro, e nessa opo ele recebe
dado do tipo endereo de memria: *pj = &j
Gabarito: e

9- Seja a seguinte seqncia de instrues em um programa C:

int *pti;

int veti[]={10,7,2,6,3};
pti = veti;
Qual afirmativa falsa?
a.

*pti igual a 10

b.

*(pti+2) igual a 2

c.

pti[4] igual a 3

d.

pti[1] igual a 10

e.

*(veti+3) igual a 6

Respostas 9:
Um vetor, na verdade, um ponteiro, um ponteiro que aponta para seu primeiro elemento.

Por isso que fazemos: pti = veti , em vez de pti = &veti


Assim, ao fazer "pti = veti", fazer o ponteiro pti apontar para o primeiro elemento do
vetor.
Logo, pti[0] = veti[0] = 10
E, pti[1] = veti[1] = 7
Gabarito: d
10- Na seqncia de instrues abaixo:

float f;

float *pf;
pf = &f;
scanf("%f", pf);
a.

Efetuamos a leitura de f

b.

No efetuamos a leitura de f

c.

Temos um erro de sintaxe

d.

Deveramos estar usando &pf no scanf

e.

Nenhuma das opes anteriores

Respostas 10:
Para usarmos a funo scanf para a leitura de um nmero do teclado, devemos fornecer
para ela um endereo de memria, de onde essa varivel vai ser armazenada.
E como fornecemos um endereo de memria? Atravs do operador & antes de uma
varivel, ou atravs de um ponteiro, pois este ponteiro armazena um endereo de memria.
Gabarito: a
11- Seja a seguinte seqncia de instrues

int i=10, j=20;

int *pti, *ptj;


pti = &i;
ptj = &j;
Qual expresso no vlida?
a.

j = pti == ptj;

b.

i = pti-ptj;

c.

pti += ptj;

d.

pti++;

e.

i = pti || ptj;

Respostas 11:
O resultado da operao de soma ou subtrao de ponteiros, um inteiro.
Por isso, verdadeira a instruo: i = pti - ptj;
Assim, (pti + ptj) tambm seria um inteiro, logo fazer: pti += ptj errado, pois fazer com
que pti receba (pti + ptj) que um inteiro.
Gabarito: c
12- Seja a declarao:
Qual afirmativa falsa?

int matr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}

a.

**matr igual a 1

b.

*(*(matr+1)+2) igual a 7

c.

*(matr[2]+3) igual a 12

d.

(*(matr+2))[2] igual a 11

e.

*((*matr)+1) igual a 5

Respostas 12:
Desenhando a matriz:
matrx[][0]

matrx[][1]

matrx[][2] matrx[][3]

matr[0] ->

matr[1] ->

matr[2] ->

10

11

12

Sabemos que um vetor , na verdade, um ponteiro.


Assim, uma matriz um conjunto de ponteiros, ou um ponteiro de ponteiros.
tanto que podemos representar essa matriz por: **matr (um ponteiro que aponta para
ponteiros), desenhando:
matr[0] ->

*ptr

matr[1] ->

*ptr

matr[2] ->

*ptr

Assim, **matr aponta para o primeiro elemento, 1.


Para apontarmos para a segunda linha: *( *(ptr+1) ) ou *( ptr[1] )
Para apontar para a segunda coluna: *( *(ptr) + 1 ) ou *( *ptr)[1]
Para apontar para a segunda linha e terceira coluna: *( *(ptr+1) + 2 )
Portanto, fcil ver que *((*matr)+1) aponta para a primeira linha e segunda coluna, o
elemento 6 (e no 5).
Gabarito: e

Você também pode gostar