Você está na página 1de 3

Algoritmos e Estruturas de Dados

PCO001
Lista de Exercícios
Funções e Ponteiros
Questão 1 - Escreva uma função que receba como argumento o ano e retorne
true se for um ano bissexto e false se não for. Um ano é bissexto se for divisível
por 4, mas não por 100. Um ano também é bissexto se for divisível por 400.
Questão 2 - Escreva uma função que receba um número float como argu-
mento e retorne, em outros dois argumentos passados por referência, a parte
inteira e a parte decimal desse número.
Questão 3 - Faça uma função recursiva e sua versão não recursiva para o
cálculo do MDC.
Questão 4 - Um ponteiro é:
(a) o endereço de uma variável;

(b) uma variável que armazena endereços;

(c) o valor de uma variável;

(d) um indicador da próxima variável a ser acessada.

Questão 5 - A instrução int *p;


(a) cria um ponteiro com valor indefinido;

(b) cria um ponteiro do tipo int;

(c) cria um ponteiro com valor zero;

(d) cria uma ponteiro que aponta para uma variável do tipo int.

Questão 6 - Qual o significado do operador asterisco em cada um dos se-


guintes casos:
(a) int *p;

(b) cout « *p;

(c) *p = x*5;

1
(d) cout « *(p+1);

Questão 7 - Se i e j são variáveis interias e p e q são ponteiro para int,


quais das seguintes expressões de atribuição são incorretas?
(a) p = &i;

(b) *q = &j;

(c) p = &*&i;

(d) i = (*&)j;

(e) i = *&*&j;

(f) q = &p;

(g) i = (*p)++ + *q;

(h) if (p == i) i++;

Questão 8 - Assuma as declarações a seguir e indique qual é o valor das


expressões apresentadas:

int i=3, j=5;


int *p=&i, *q=&j;

(a) p == &i;

(b) *p - *q;

(c) **&p;

(d) 3*-*p/*q+7;

Questão 9 - O que o Código 1 faz? Proponha melhorias para o código.


1 #i n c l u d e <s t d i o . h>
2 #i n c l u d e < s t d l i b . h>
3
4 i n t main ( i n t argc , c h a r ∗ argv [ ] ) {
5 i n t mes ;
6 c h a r ∗nome_mes [ ] = { " J a n e i r o " , " F e v e r e i r o " , " M a r o " , " A b r i l " ,
"Maio" , " Junho " , " J ul ho " , " Agosto " , " Setembro " , " Outubro " , "
Novembro" , "Dezembro" } ;
7

2
8 i f ( a r g c == 4 ) {
9 mes = a t o i ( argv [ 2 ] ) ;
10 i f ( mes<1 | | mes>12)
11 p r i n t f ( " Erro ! " ) ;
12 else
13 p r i n t f ( " \n%s de %s de %s " , argv [ 1 ] , nome_mes [ mes −1] , argv [ 3 ] ) ;
14 }
15 e l s e p r i n t f ( " Erro ! " ) ;
16 return 0;
17 }
Código 1: Exemplo de passagem de parâmetros na função main.

Questão 10 - Simule a execução do Código 2, destacando a sua saída:


1 #i n c l u d e <i o s t r e a m >
2
3 u s i n g namespace s t d ;
4
5 int i ;
6
7 v o i d p1 ( i n t x ) {
8 i ++;
9 x += 2 ;
10 c o u t << x << " \n" ;
11 }
12
13 v o i d p2 ( i n t ∗x ) {
14 i ++;
15 ∗x += 2 ;
16 c o u t << ∗x << " \n" ;
17 }
18
19 i n t main ( ) {
20 i n t a [ 2 ] = {10 , 20};
21 c o u t << a [ 0 ] << " " << a [ 1 ] << " \n" ;
22 i =0;
23 p1 ( a [ i ] ) ;
24 c o u t << a [ 0 ] << " " << a [ 1 ] << " \n" ;
25 i =0;
26 p2(&a [ i ] ) ;
27 c o u t << a [ 0 ] << " " << a [ 1 ] << " \n" ;
28 }
Código 2: Exemplo de passagem de parâmetros por valor e referência.

Questão 11 - Faça uma função que receba uma matriz N xN e retorne a


soma da diagonal principal. (utilizar ponteiros para a declaração da ma-
triz). Faça também uma função para receber duas matrizes de mesma ordem
(N xN ) e retorne a soma entre as matrizes (também utilizando ponteiros).

Você também pode gostar