Lista Adicional Ponteiro e Array - UNIOESTE

Propaganda
EXERCÍCIOS DE COMPUTAÇÃO
Prof. Jorge Habib Hanna El Khouri
Aluno: __________________________
Turma: Engenharias
Data: 27/09/2012
UNIOESTE
Os exercícios são baseados em: http://usr.inf.ufsm.br/~pozzer. Implementar as seguintes funções:
1.
Explique o que é:
a)
b)
c)
d)
e)
um ponteiro
um ponteiro para ponteiro
o endereço de um ponteiro
o conteúdo de um ponteiro
o endereço de uma variável
2.
Explique o que acontece quando um ponteiro aponta para uma variável. Usar uma representação gráfica
da memória.
3.
Assuma a seguinte definição:
int a, b;
int *p1, *p2, **p3;
float *p4;
Para cada uma das sentenças abaixo, diga se é válida ou não (justifique) e represente as células de
memória
a)
b)
c)
d)
e)
f)
a = 10;
b = &a;
p1 = a;
a = &p1;
*p1 = &a;
&p1 = &a;
g) p4 = &a;
h)
i)
j)
k)
l)
m)
p4 = p1;
p2 = p1 = &a;
*p1 = 20;
*p2 = *p1;
*p3 = &p1;
p3 = &p2;
n) **p3 = *p1;
4.
Explique a diferença entre passagem de parâmetros por valor e por referência. Implemente algumas
funções de potenciação que usam as duas estratégias.
5.
O que pode acontecer se for atribuído algum valor a um ponteiro que não tenha sido inicializado. Ex:
float *p;
*p = 2000;
6.
Declare vetores de inteiro, char, float, double, long int com 5 posições, da seguinte forma:
int v[5] = {2,5,1,4,0};
char c[5] = {‘a’,’b’,’m’, ‘4’,’-‘};
float v[5] = {2.66, 0.125, 1.0, 4.99, 2.009};
Usando a função printf, com o argumento “%p”, e utilizando a notação de ponteiros para cada um dos
tipos de dados, descubra quantos bytes é alocado pelo seu compilador a cada tipo de dados. Não se
esqueça que para um vetor apontar para um vetor de float, ele deve ser do tipo float. Como se sabe que
em um vetor as posições são contínuas, se for impresso o endereço de duas posições, pela diferença entre
os dois endereços pode-se descobrir quantos bytes são alocados.
7.
Declare um vetor de inteiros com 300 posições, de forma que cada posição possua o valor igual ao índice
da posição (logo, o vetor será ordenado de 0 a 299). Declare um ponteiro que aponte para a quinta
posição deste vetor, ou seja: p = &v[5];
Usando a função printf, e o endereçamento do tipo *(p ± n), imprima o valor de todos os elementos
do vetor, com respectivos endereços.
8.
Explique o que faz o seguinte trecho de código
float f = 10.5;
int i = *(int*)&f;
9.
Em uma disciplina, como resultado final, cada aluno obtém um conceito, que é um número inteiro de
zero até quatro. Fazer um programa modular que leia de um arquivo texto a quantidade de alunos com
conceito zero, com conceito um, com conceito dois, com conceito três e com conceito quatro,
armazenando cada uma destas quantidades em um vetor, e monte um histograma horizontal conforme
exemplo abaixo:
vetor com as quantidades lidas: 03 12 07 16 05
0
1
2
3
4
histograma:
***
************
*******
****************
*****
10. Fazer um programa que leia de um arquivo texto notas (inteiras de 0 a 10) de alunos e monte um
histograma vertical correspondente ao número de ocorrências de cada nota. Exemplo:
notas:
3 6 9 0 0 6 7 8 0 9 8 3 6 6 8 10 9 5 10 2 8 5 8 5
histograma:
*
*
*
*
*
0
1
*
*
*
*
2
*
*
*
3
4
*
*
*
5
*
*
*
6
*
*
7
*
*
8
*
9
*
10
11. Fazer um programa que leia uma matriz (M) de até 20 linhas por 20 colunas e armazene a soma de todas
as diagonais paralelas a principal (inclusive) em um vetor (V) conforme exemplo abaixo para uma matriz
de 4 linhas por 4 colunas.
Download