Académique Documents
Professionnel Documents
Culture Documents
Qual a saída produzida pelo programa abaixo? ● Permite a leitura de dados formatados do teclado, após ● A Funcao getche(): Lê e retorna um caracter do teclado sem
pressionar Enter. esperar Enter e permite que o mesmo seja impresso na tela.
/*tabulacao.cpp*/
#include <stdio.h> ● Sintaxe: scanf (“string de controle”, lista-argumentos); ● A Funcao getch(): Lê e retorna um caracter do teclado sem
#include <conio.h> esperar Enter e não permite que o mesmo seja impresso na
● Exemplo: tela.
main(){ printf("Digite a distancia:");
printf("\ncodigo\tquantidade\tpreco"); scanf("%d",¢imetro); ● Protótipos:
printf("\n1\t250\t\t3,55");
printf("\n2\t10\t\t8,00"); ● Os argumentos de scanf devem ser endereços de varíaveis, ou int getch(void)
getch(); seja, o nome da variável precedido pelo símbolo &. int getche(void)
}
● Um endereço é inteiro sem sinal, portanto para mostrar o
endereço de uma variável, seria assim:
printf("centimetro esta no endereco %u\n",¢imetro);
● Codificar um programa que solicite ao usuário dois caracteres do{ ● Escreva um programa que cause uma pausa até que o
em ordem alfabética crescente e imprima o número de instrucoes;
}
usuário digite a letra 'A'. (pausaatea.cpp)
caracteres que estão entre eles. (qtletras.cpp)
while (condicao);
● Faça um programa que solicite caracteres ao usuário e
● As instruções serão executadas enquanto a condição for imprima seus códigos decimais. O programa deve
verdadeira. terminar quando o usuário pressionar a tecla ESC.
(codigodecimais.cpp)
como sendo um caractere mais longo que a maior ● strchr(s1,ch): retorna um ponteiro para a 1a. #include <string.h>
#include <conio.h>
string que elas devem guardar. ocorrência de ch em s1. main(){
char s1[80], s2[80];
● Você não precisa adicionar o nulo no final das ● strstr(s1,s2) retorna um ponteiro para a 1a. gets(s1);
gets(s2);
constantes string manualmente. O compilador C faz ocorrência de s2 em s1. printf("comprimentos: %d %d\n", strlen(s1), strlen(s2));
if (!strcmp(s1,s2)){
isso por você automaticamente.Por exemplo: para printf("As strings são iguais\n");
guardar uma string de 10 caracteres, devemos ● Necessitam da instrução: #include <string.h> }
strcat(s1,s2);
escrever: char str[11]; printf("%s\n",s1);
strcpy(s1,"Isso e um teste.\n");
● Com isso reservamos espaço para o nulo no final da printf(s1);
if (strchr("alo",'o')){printf("o esta em alo\n");}
string. if (strstr("alo aqui","alo")){printf("alo encontrado\n");}
● Embora C não tenha o tipo de dado string, ela permite }
getch();
● Para entender melhor: suponha que a variavel contador usa a posicao de int destino, fonte, *m; int x, *p1, *p2;
memoria 2000 para armazenar seu valor. Tambem assuma que contador fonte = 10; x = 10;
tem o valor 100. m = &fonte; p1 = &x;
destino = *m; p2 = p1;
int *m; /* m e um ponteiro para o tipo int */
m = &contador; /* m recebe o endereco de contador */ printf(“%d”, destino); printf("%d", p2);
q = *m /* q recebe o valor que esta no endereco de m */
● Resposta: mostra o endereço de x, não seu valor
● 1a. instrucao: A variavel m não é do tipo int, mas aponta para um valor do
tipo int.
● Após a 2a. Instrução m terá o valor 2000.
● Após a 3a. Instrução q terá o valor 100.
Exercícios Problemas com Ponteiros – Parte 1 Problemas com Ponteiros – Parte 2
●
Quais as saídas produzidas pelo programa abaixo? ● Analise o código abaixo: ● Analise o código abaixo:
Diferentes Formas de Acessar uma Matriz Diferentes Formas de Acessar uma Matriz Diferentes Formas de Acessar uma Matriz
● C fornece dois métodos para acessar os elementos de matrizes: /* ponteiro1.cpp */ /*
#include <stdio.h> p receberá o endereço do 1o. elemento, então *(p)
indexação de matrizes. #include <conio.h> faz referência ao conteúdo deste endereço.
aritmética de ponteiros. */
main(){ int *p=mat;
● Para acessarmos o 5o. elemento da matriz frase do exemplo int mat[]={10, 20, 30,40,50}; for (int i=0; i < 5; i++){
anterior usamos uma das formas abaixo: printf("%d\n",*(p+i));
/* }
frase[4] Se o nome da matriz sozinho é um ponteiro para o getch();
*(p+4) frase 1o. elemento, então *(mat) faz referência ao
*(frase + 4) 0 conteúdo deste endereço. /*
p[4] 1 */ forma tradicional de se referenciar a um matriz.
2 for (int i=0; i < 5; i++){ */
3 printf("%d\n",*(mat+i)); for (int i=0; i < 5; i++){
4 } printf("%d\n",mat[i]);
... getch(); }
79 getch();
Diferentes Formas de Acessar uma Matriz Exercícios Matrizes de Ponteiros
/* ● Codificar um programa que gere a seguinte matriz: “colegio tecnico ●
Ponteiros podem ser organizados em matrizes como
Em C qualquer ponteiro pode ser indexado como se universitario”. O programa deverá ter duas funções: uma que mostre
fosse uma matriz.
qualquer outro tipo de dado.
todos os elementos da matriz (um de cada vez) utilizando o método
*/ de indexação de matrizes e outra que utiliza aritmética de ponteiros.
● A declaração de uma matriz de 10 ponteiros int: int
for (int i=0; i < 5; i++){ acessavetor.cpp *x[10];
printf("%d\n",p[i]); ● Para atribuir o endereço de uma variável int, chamada
}
getch();
Dica: putchar(): mostra um caractere. num, ao 5o. elemento da matriz de ponteiros: x[4]=#
} ● Para acessar a mesma posição seria: *x[4]
Matrizes como Argumento para uma Função Função Retornando Ponteiro Exercícios
● Quando uma matriz bidimensional é usada como argumento para uma ● Indicamos que uma função retornará um ponteiro ● Codificar um programa que implemente o jogo da forca.
função, apenas um ponteiro para o primeiro elemento é realmente passado.
Porém, uma função que recebe uma matriz bidimensional como parâmetro, inserindo um * antes do nome da função. jogoforca.cpp
deve definir pelo menos o comprimento da 2a. Dimensão. Isto ocorre porque
o compilador C precisa saber o comprimento de cada linha para indexar a int *func(); ● Codificar uma função para receber um caractere como
matriz corretamente.
argumento e, se for uma letra minúscula, retorne-a em
● Exemplo: Uma função que recebe uma matriz bidimensional de inteiros 10 x ● Exercício: Codificar uma função que devolve um maiúscula, caso contrário retorne o próprio caractere.
10 é declarada desta forma: void func (int x[ ] [10]);
ponteiro para a primeira ocorrência de um caracter em funcaomaiuscula.cpp
● É importante entender que, quando uma matriz é usada como um argumento uma string. Mostrar este caractere e todos apartir dele.
para uma função, seu endereço é passado para a função. Portanto existe a
● Codificar um programa que solicite a digitação de 10
possibilidade do conteúdo original da matriz ser alterado.
retornandoponteiro.cpp números e os coloque em uma matriz. Chame uma função
que ordene os valores da lista e mostre os valores
● Você pode gerar um ponteiro para o primeiro elemento de uma matriz
simplesmente especificando o nome da matriz, sem nenhum índice. ordenados. ordenavetor.cpp
int *p;
int teste[10];
p = teste /* p recebe o endereço do 1o. elemento de teste. */
Exercícios Funções Recursivas Funções Recursivas
● Codificar um programa para jogar o jogo da velha. Para o jogo da velha é utilizado uma grade de ● Recursão é o processo de definir algo em termos de si mesmo.
três linhas por três colunas. Os jogadores se alternam nas jogadas e marcam sucessivamente int fatr(int n){
uma posição livre a cada jogada. Um jogador usa como marca um O e o outro um X. Vence o ● A função é recursiva se um comando no corpo da função a
jogo quem conseguir preencher em primeiro lugar uma linha, uma coluna ou uma das diagonais chama. int x;
da grade com a sua marca. O jogo acaba empatado se todos as posições tiverem sido
preenchidas e nenhum dos dois jogadores chegou a satisfazer a condição de vitória. /* fatorial.cpp */
if (n==1){
jogodavelha.cpp #include <stdio.h> return(1);
#include <conio.h>
apresente as instruções do jogo int numero; }
sorteie o jogador que inicia o jogo (jogador O ou jogador X)
enquanto não houver vencedor E existir posição desocupada faça
int fat(int n); x=fatr(n-1)*n;
int fatr(int n);
apresente a grade do jogo para mostrar posições ocupadas e desocupadas return(x);
posiçãoNãoVálida <- verdadeiro main(){
repita printf("\nNumero:");
}
leia a localização da posição selecionada pelo jogador de quem for a vez scanf("%d",&numero);
se posição inválida OU posição já ocupada printf("\nFatorial: %d",fat(numero));
então printf("\nFatorial: %d",fatr(numero));
apresente "Posição inaceitável - Selecione outra: " getch();
senão }
posiçãoNãoVálida <- falso
fim-se int fat(int n){
enquanto posiçãoNãoVálida int x=1;
coloque na posição selecionada da grade a marca apropriada for (int i=1; i<=n; i++){
passe a vez para o outro jogador x=x*i;
fim-enquanto }
apresente o vencedor se existir return(x);
}