Buscar

Aula19 Ponteiros2011

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

PonteirosPonteirosPonteirosPonteiros
• com vetores
• com strings
• com funções
ExercExercíciosícios dada aula anterioraula anterior
1. Seja o seguinte trecho de programa:
int i=3,j=5;
int *p, *q;
p = &i;
q = &j;
Qual é o valor das seguintes expressões ?
a) p == &i; b) *p - *q c) **&p d) 3* - *p/(*q)+7
2. Qual será a saída deste programa supondo que i ocupa o endereço 4094 na memória?
main() {
int i=5, *p;, p;
p = &i;
printf(“%x %d %d %d %d \n”, p,*p+2,**&p,3**p,**&p+4);
}}
3. Se i e j são variáveis inteiras e p e q ponteiros para int, quais das seguintes 
expressões de atribuição são ilegais?expressões de atribuição são ilegais?
a) p = &i; b) *q = &j; c) p = &*&i; d) i = (*&)j;
e) i = *&j; f) i = *&*&j; g) q = *p; h) i = (*p)++ + *q
ExercíciosExercícios dada aula aula anterior anterior RR
1. Seja o seguinte trecho de programa:
int i=3,j=5;
int *p, *q;
p = &i;
q = &j;
Qual é o valor das seguintes expressões ?
a) p == &i; b) *p - *q c) **&p d) 3* - *p/(*q)+7
TRUE -2 3 6 
2. Qual será a saída deste programa supondo que i ocupa o endereço 4094 na memória?
main() {
int i=5, *p;, p;
p = &i;
printf(“%x %d %d %d %d \n”, p,*p+2,**&p,3**p,**&p+4);
}}
3. Se i e j são variáveis inteiras e p e q ponteiros para int, quais das seguintes 
expressões de atribuição são ilegais?
4094 7 5 15 9
expressões de atribuição são ilegais?
a) p = &i; b) *q = &j; c) p = &*&i; d) i = (*&)j;
e) i = *&j; f) i = *&*&j; g) q = *p; h) i = (*p)++ + *q
Exercício 1Exercício 1Exercício 1Exercício 1
• Modifique o programa abaixo para imprimir o 
úd d d conteúdo do vetor usando ponteiros.
#include <stdio.h>
#include <stdlib.h>
int main()
{
float v[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};float v[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};
int i;
for (i=0; i<9; i++)for (i=0; i<9; i++) 
printf("%.1f ", v[i]);
t (" ")system("pause");
}
SoluçãoSoluçãoSoluçãoSolução
#include <stdio.h>
#include <stdlib.h>
int main()
{
float v[] = {1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0};float v[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};
int i;
f (i 0 i<9 i++)for (i=0; i<9; i++) 
printf("%.1f ", *(v+i));
system("pause");
}
ExercícioExercício 22
• Modifique o programa de manipulação de • Modifique o programa de manipulação de 
matrizes para a notação de ponteiros.
#define LINHAS 3#define LINHAS 3
#define COLUNAS 4
int main()
{{
float v[LINHAS][COLUNAS] = {{1.0, 2.0, 3.0, 4.0} ,{4.0, 5.0, 6.0, 7.0}, {7.0, 8.0, 9.0, 10.0} };
int i, j;
float val; ;
printf("i="); scanf("%d", &i); // Le o indice da linha 
printf("\n"); 
printf("j="); scanf("%d" &j); // Le o indice da colunaprintf( j= ); scanf( %d , &j); // Le o indice da coluna 
printf("Valor ="); scanf("%f", &val); // Le o valor em float para inserir no arranjo
v[i][j] = val; 
// IMPRIME O ARRANJO 
for (i=0; i<LINHAS; i++) 
for (j= 0 ; j< COLUNAS; j++) 
printf("% 1f " v[i][j]);printf( %.1f , v[i][j]); 
system("pause");
}
SoluçãoSoluçãoSoluçãoSolução
#define LINHAS 3
#define COLUNAS 4#define COLUNAS 4
int main()
{{
float v[LINHAS][COLUNAS] = {{1.0, 2.0, 3.0, 4.0} ,{4.0, 5.0, 6.0, 7.0}, {7.0, 8.0, 9.0, 100.0} };
int i, j;
float val; 
printf("i="); scanf("%d", &i); // Le o indice da linha
printf("\n"); p ( )
printf("j="); scanf("%d", &j); // Le o indice da coluna
printf("Valor ="); scanf("%f", &val); // Le o valor em float para inserir no arranjo
*(v[0]+ i*COLUNAS +j) = val; // Insere no arranjo(v[0]+ i COLUNAS +j) = val; // Insere no arranjo 
for (i=0; i<(LINHAS*COLUNAS); i++) // Imprime arranjo 
printf("i= % 1f " *(v[0]+i));printf( i= %.1f , (v[0]+i)); 
}
Exercício 3Exercício 3Exercício 3Exercício 3
F l i t i • Faça um programa que leia uma string e, 
utilizando ponteiros, conte quantos 
caracteres a string possui (sem utilizar caracteres a string possui (sem utilizar 
strlen).
SoluçãoSoluçãoSoluçãoSolução
int main()
{{
char str[100], *p;
int tam=0;
O t i ã d d i ãputs("digite a string: ");
gets(str);
p = str; //p aponta para o primeiro caractere de str
O ponteiro não muda de posição
p = str; //p aponta para o primeiro caractere de str
while (*p != '\0')
{
ou while (*(p+tam) != '\0')tam++;
p++;
}
ou while ( (p+tam) != \0 )
tam++;
}
printf ("A string tem %d letras.\n\n", tam);
system("pause");
}}
ExercícioExercício 4 : 4 : funçãofunção void, void, parapara leituraleitura de de qualquerqualquer stringstring
Faça uma função le_string que receba como parâmetro a 
variável string a ser preenchida e o número máximo de 
caracteres a serem lidos e armazenados na variável:
// função que lê e consiste uma string texto (por referência implícita) de 
num_char // // (por valor):
caracteres a serem lidos e armazenados na variável:
void le_string(char texto[ ], int num_char) 
{
char dummy[num_char + 2]; // caracteres + \n + \0
do
{
printf(“Digite a informacao (ate %d caracteres):\n“, num_char);
fflush(stdin); 
fgets(dummy, sizeof(dummy), stdin);
if (dummy[strlen(dummy) - 1] != '\n')
printf("\n * Digitar no maximo %d caracteres!\n", num_char); 
} 
while (dummy[strlen(dummy) - 1] != '\n');
( ) \ // \dummy[strlen (dummy) - 1] = '\0'; // substitui \n pelo terminador
strcpy(texto,dummy);
}
ExercícioExercício 5 : 5 : funçãofunção void, com void, com 
parâmetro inverteparâmetro inverte textotextoparâmetro,inverteparâmetro,inverte textotexto
 f l 
// le texto e inverte os caracteres lidos:
• Faça uma função le_inverte_texto 
que receba como parâmetro uma string e 
...
#include <string.h>
#define SIZE_TEXTO 20
void le string(char texto[ ], int num char); //leitura de texto, anteriorq p g
o número máximo de caracteres a serem 
lidos e baseado neste e utilizando a 
void le_string(char texto[ ], int num_char); //leitura de texto, anterior
void le_inverte_texto(char [ ],int); // protótipo: só tipo dos parâmetros
int main( )
{ lidos e, baseado neste e utilizando a 
função anterior le_string, leia um texto 
de no máximo N caracteres e devolva 
{
char texto[SIZE_TEXTO + 1];
le_inverte_texto( texto, SIZE_TEXTO);
printf("\nTexto invertido:\n*%s*\n ", texto);
system("pause >> null");de no máximo N caracteres e devolva 
este texto invertido:
system( pause >> null );
return 0;
}
void le inverte texto (char linha inv[ ], int max char) // declaraçãovoid le_inverte_texto (char linha_inv[ ], int max_char) // declaração
da função void 
{
……
}}
ExercícioExercício 5: 5: funçãofunção void, com void, com parâmetro,inverteparâmetro,inverte textotexto
// declaração da função void
void le_inverte_texto (char linha_inv[ ], int max_char) 
{ char linha[max char + 1];{ char linha[max_char + 1];
int i;
le_string(linha, max_char); // lê, consistindo e protegendo memória
for (i=0; i < strlen(linha); i++)for (i=0; i < strlen(linha); i++)
linha_inv[i] = linha[strlen(linha) – i - 1];
linha_inv[strlen(linha)]= '\0'; // insere teminador
}}
void le_string(char texto[ ], int num_char) //leitura de texto, com consistência
{ char dummy[num_char + 2];
dodo
{ printf(“Digite a informação (ate %d caracteres):\n“, num_char);
fflush(stdin); 
fgets(dummy, sizeof(dummy), stdin);
if (dummy[strlen(dummy) - 1] != '\n')if (dummy[strlen(dummy) 1] ! \n )
printf("\n * Digitar no maximo %d caracteres!\n", num_char); 
} 
while (dummy[strlen(dummy) - 1] != '\n');
dummy[strlen (dummy) - 1] = '\0';y[ ( y) ]
strcpy(texto,dummy);
}
ExercíciosExercíciosExercíciosExercícios
1. função que devolve o maior elemento de um vetor de ç q
inteiros, e sua posição (nome do vetor passado como 
parâmetro, respostas devolvidas através de 
â t )parâmetros);
2. função que multiplica um vetor por um valorinteiro 
(nome do vetor e o valor passados como parâmetros);(nome do vetor e o valor passados como parâmetros);
3. função que recebe um vetor de 15 elementos e 
retorna o vetor invertido, isto é, do fim para o início;retorna o vetor invertido, isto é, do fim para o início;
4. função que recebe dois vetores de 20 inteiros e 
armazene no segundo vetor todos os elementos do 
primeiro, exceto os negativos e 0. As posições vazias 
no final do vetor deverão ser preenchidas com 0.

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

37 pág.
Funções - JavaScript _ MDN

IFRJ - Instituto Federal De Educacao Ciencia E Tecnologia Do Rio De Janeiro Campus Eng Paulo De Frontin

User badge image

Érika

Perguntas Recentes