Escolar Documentos
Profissional Documentos
Cultura Documentos
Ponteiros.
Stênio Rocha Silva
02 de Setembro de 2009
∗
Material elaborado para o desenvolvimento de atividades assistidas pelo Computador, na dis-
ciplina Algoritmos e Programação, na Faculdade Assis Gurgacz.
1 Objetivo
Desenvolver a familiaridade com os elementos básicos da Linguagem C através da
reprodução e implementação de códigos de forma orientada.
2 Ponteiros.
1. Ponteiro é um conceito em C que deve ser entendido como um tipo de dado,
de forma semelhante a int, char, float e double, que ao invés de guardar
um valor, aponta para um enderêço. Quando for necessário acessar uma in-
formação aponta-se para o enderêço onde a mesma esteja. A declaração de
um ponteiro é feita da forma contida no código abaixo. Observe que há ne-
cessidade de inicializar o ponteiro, o que diferentemente dos demais tipos não
significa atribuir um valor e sim apontar para um enderêço válido. Verifique
o código.
#include <stdio.h>
void main(void) {
int *num;//Ponteiro para inteiro.
float *soma;//Ponteiro para um ponto flutuante.
char *nome;//Ponteiro para um caracter.
*num=10;
printf("%d",*num);
}
2. Considere que em uma variável, num, exista uma informação a ser acessada.
Inicialize um ponteiro conforme este código abaixo e compare o resultado com
o do código anterior.
#include <stdio.h>
void main(void) {
int num=100;
int *p;
p=#
printf("Endereço:%d",p);
printf("Valor:%d",*p);
}
2
#include <stdio.h>
void main(void) {
int x,y,resultado;
printf("Digite um numero:");
scanf("%d",&x);
printf("Digite um numero:");
scanf("%d",&y);
soma(x,y,&resultado);
printf("Soma=%d",resultado);
}
int soma(int a, int b, int *valor) {
*valor=a+b;
}
\\Protótipo
int soma(int, int, int *);
#include <stdio.h>
void main(void) {
int *p,ip;
char *nome,cnome;
p=&ip;
nome=&cnome;
printf("Enderecos: %d %d\n",p,nome);
p++;
nome++;
printf("Enderecos: %d %d",p,nome);
}
#include <stdio.h>
#define TAM 5
void main(void) {
int mat[TAM]={1,2,3,4,5};
printf("Tamanho da Matriz: [%d]",sizeof(mat));
imprime(mat);
}
3
void imprime(int *vet) {
int i;
for(i=0;i<5;i++){
printf("\nO conteudo da Matriz na posicao %d=%d",i,*vet);
printf("\nO endereco=%d",vet);
vet++;
}
}
//Protótipo
void imprime(int *);
#include <stdio.h>
void main(void) {
char nome[30]="Teste de Programacao";
char *p;
p=&nome;
printf("\ntamanho de cadeia=%d",sizeof(nome));
printf("\nEndereco da 1 posicao=%d\n",p);
while(*p!=NULL){
putchar(*p);
p++;
}
putchar(’\n’);
printf("\nEndereco da ultima posicao=%d",p);
}
#include <stdio.h>
void main(int argc, char *argv[]) {
int i;
printf("Argumentos Digitados:");
for(i=0;i<argc;i++) {
printf("Argumentos %d %s\n",i+1,argv[i]);
}
}
4
8. Elabore um programa que receba pela linha de comando uma senha. Caso a
senha seja incorreta o programa é finalizado.
#include <stdio.h>
void main(void) {
Implemente agora!
}
#include <stdio.h>
void main(void) {
Implemente agora!
}
10. Elabore um programa que receba três números pelo console, como argumen-
tos de main(), e apresente como resultado o maior entre eles. A biblioteca
stdlib.h possui uma função que transforma cadeia de caracteres em inteiros,
atoi(). Observe que o código abaixo serve para uma quantidade de números
qualquer.
#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[]) {//argv[] eh uma cadeia caracter
int i, maior=0;//maior eh uma variável int
for(i=0;i<argc;i++) {
if(atoi(argv[i])>maior) {//Há necessidade de converter string em int
maior=atoi(argv[i]);
}
printf("O maior eh=%d",maior);
}
#include<stdio.h>
#include <stdlib.h>
void main(void) {
Implemente agora!
}
12. Faça o mesmo para o cálculo das raizes de uma equação do segundo grau.
5
#include <stdio.h>
#include <stdlib.h.h>
void main(void) {
Implemente agora!
}
13. Números aleatórios são importantes quando necessita-se fazer escolha não ten-
denciosas. O C possui uma função para a geração de números aleatórios os
randômicos, rand(). Para a geração desses números há necessidade da uti-
lização de uma outra função, srand(), que evita a repetibilidade dos números.
Experimente o código abaixo. Há necessidade da utilização das bibliotecas
stdlib.h e time.h.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(void) {
srand(time(NULL));
int num;
num=rand();
printf("O numero aleatorio =%d",num);
}
14. O código acima pode ser modificado para gerar vários números aleatórios.
Confira se há repetição.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(void) {
srand(time(NULL));
int num[10],i;
for(i=0;i<10;i++){
num[i]=rand();
}
for(i=0;i<10;i++){
printf("O numero aleatorio =%d\n",num[i]);
}
}
6
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(void) {
char *naipe[5]={"Copas","Ouros","Paus","Espadas"};
char *face[14]={"As","Dois","Tres","Quatro","Cinco","Seis","Sete",
"Oito","Nove","Dez","Valete","Dama","Rei"};
int baralho[4][13]={0}, linha,coluna,carta;
srand(time(NULL));
for(carta=1;carta<=52;carta++){
linha=rand()%4;
coluna=rand()%13;
while(baralho[linha][coluna]!=0){
linha=rand()%4;
coluna=rand()%13;
}
baralho[linha][coluna]=carta;
}
for(carta=1;carta<=52;carta++){
for(linha=0;linha<4;linha++){
for(coluna=0;coluna<13;coluna++){
if(baralho[linha][coluna]==carta){
printf("%6s de %-7s%c",face[coluna],naipe[linha],carta%2==0?’\n’:’\t’);
}
}
}
}
}
3 Recomendações
Elabore todos os códigos, mesmo os mais simples. É a simplicidade e não a
complexidade que impulsiona o aprendizado.
Elabore, e entregue no inı́cio da próxima aula, 18/09/2009 (2310) e 22/09/2009
(2311), em uma folha de papel sulfite branca, formato A4, um programa
que receba o nome de um aluno, completo, e uma disciplina, pelo
console e como parâmetros da função principal, e retorne se o mesmo
foi aprovado. Elabore o programa com duas disciplinas e cinco alu-
nos, apenas. Se o nome do aluno não foi encontrado o programa
deve informar a inexistência do mesmo e encerrar.
Programas literalmente copiados da internet não serão validados. Programas
que apresentem variáveis e formatações iguais as contidas em outros trabalhos,
7
serão todos desconsiderados, independente de avaliação da real autoria dos
mesmos. Programas entregues fora do prazo e fora do que esta acima espe-
cificado, não serão recebidos. Bom trabalho. Em caso de dúvidas contactar
stenio@fag.edu.br.
Referências
[1] Algoritmos e Programação.Curso de Linguagem C da UFMG.