+ curso de c/c++ aula 2 instrutor: luiz felipe sotero material por: allan lima
TRANSCRIPT
![Page 1: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/1.jpg)
+
Curso de C/C++
Aula 2
Instrutor: Luiz Felipe Sotero
Material por: Allan Lima
http://allanlima.wordpress.com/
![Page 2: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/2.jpg)
Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra
Sob as seguintes condições: Atribuição. Você deve dar crédito ao autor original, da forma
especificada pelo autor ou licenciante. Compartilhamento pela mesma Licença. Se você alterar, transformar, ou
criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta.
Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra.
Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor.
Veja aqui a licença completa
![Page 3: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/3.jpg)
+Roteiro
Vetores
Strings
Introdução aos Ponteiros
![Page 4: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/4.jpg)
+Vetores
São Matrizes com uma única dimensão
Declaração
tipo nome[tamanho]; Exemplo:
int array1[3];
Representação: ? ? ?
![Page 5: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/5.jpg)
+Inicialização
Vetores podem ser inicializados na sua declaração:
int array2[4]={-1,20,3}; int array3[]={1,0,3};
1 0 3-1 20 3
?
![Page 6: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/6.jpg)
+Inicialização
Podemos ter vetores de qualquer tipo:
char array1[4] = { ‘A’, ‘B’, ‘C’ };
float array2[] = { 10.0, 5.4, 6.33 };
double array3[] = { -0.2, 4.3, 3.14 };
unsigned int array4[10];
...
![Page 7: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/7.jpg)
+Acessando um vetor
int array[3] = { 1, 2, 3 };
array[1] = -5;
array[0] = array[0] + 2;
printf("%d\n", array[0]);
array =
Console: 3
1 2 31 2 3-5-533
![Page 8: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/8.jpg)
+Exemplo#include <stdio.h>
int main() {
int numeros[10] = {1, 1};
int i;
for (i = 2; i < 10; i++) {
numeros[i] = numeros[i-1] + numeros[i-2];
}
for (i = 0; i < 10; i++) {
printf("%d\n", numeros[i]);
}
return 0;
}
![Page 9: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/9.jpg)
+Vetores
Cuidados importantes ao utilizar vetores
O compilador não verifica se o índice é válido: int a[10];
int b = a[32];
int b = a[-32];
// converte o char 'F' para int
int c = a['F'];O código acima compila sem problemas, mas o que
irá acontecer quando ele for rodado?Ninguém sabe!!!
![Page 10: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/10.jpg)
+Strings
Uma string é vetor de caracteres terminado pelo caractere nulo ‘\0’
Sintaxe:char nomeDaString[] = "conteudo";
Exemplos:
char frase[] = "Eu adoro C";char centro[4] = "CIn";char faculdade[10] =
{'U','F','P','E','\0'};
![Page 11: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/11.jpg)
+Cuidados Importantes
Lembre-se sempre do '\0'O tamanho do vetor deve ser o número de
caracteres que ele irá armazenar + 1Erro comum:
char faculdade[] =
{'U', 'F', 'P', 'E'}; faculdade não é uma string!
![Page 12: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/12.jpg)
+O arquivo string.h
Principais funções:
int strlen(str)int strcmp(str1, str2)string strcpy(destino, origem)string strcat(destino, origem)
Existem diversas outras que veremos mais adiante
![Page 13: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/13.jpg)
+strlen
int strlen(str);
Retorna o tamanho da string passada como parâmetro
Exemplo:
char string[50] = "Linguagem";
// imprime 9
printf("%d", strlen(string));
Obs.: O caractere ‘\0’ não é contado.
![Page 14: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/14.jpg)
+strcmp
int strcmp(str1, str2)
Compara duas strings
A ordem lexicográfica é utilizada para a comparação
Condição Retorno
<0 Se str1 é menor que str2
0 Se str1 é igual à str2
>0 Se str1 é maior que str2
![Page 15: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/15.jpg)
+Exemplo#include <stdio.h>
#include <string.h>
int main() {
char pergunta[] = "qual é a sua linguagem favorita? ";
char resposta[15];
do {
printf("%s", pergunta);
scanf("%s", resposta);
} while (strcmp(resposta, "C"));
return 0;
}
![Page 16: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/16.jpg)
+strcpy
string strcpy(destino, origem)
Copia o segundo parâmetro no primeiro
Exemplo:
char ori[] = "ABC";
char dest[12] = "";
strcpy(dest, ori);
// dest = "ABC";
![Page 17: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/17.jpg)
+strcat
string strcat(destino, origem)
Concatena o segundo parâmetro no primeiro
Exemplo:
char ori[] = "DEF";
// Não esqueça de inicializar: char dest[12] = "ABC";
// dest = "ABCDEF" strcat(dest, ori);
![Page 18: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/18.jpg)
+Obtendo mais detalhes
www.cplusplus.com
![Page 19: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/19.jpg)
+Outras funções
string gets(string)
Lê uma string do dispositivo de entrada padrãoTambém lê espaçosNão verifica o tamanho máximo da string
int puts(string)
Imprime uma string no dispositivo de saída padrão
Ambas estão definidas no header stdio.h
![Page 20: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/20.jpg)
+Matrizes Multidimensionais Sintaxe:
tipo nomeDaMatriz[dim1][dim2]...[dimN];
Exemplos:
// Matriz Bidimensional int m1[2][2] = { 1, 2, 3, 4 };
// Outra maneira int m2[2][2] = { { 1, 2 }, { 3, 4 } };
// Matriz Tridimensional int m3[2][2][2] = { 1, 2, 3, 4, 5, 6, 7, 8 };
printf("%d\n", m1[1][1]); printf("%d\n", m3[1][0][0]);
![Page 21: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/21.jpg)
+Ponteiros
Guardam o endereço de uma variável
Sintaxe:
tipo *nomeDoPonteiro; Exemplos:
int *a;
char *b;
float *c;
double *d;
![Page 22: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/22.jpg)
+Ponteiros
‘A’ ? 80 10.0
Ponteiro
![Page 23: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/23.jpg)
+Ponteiros
Ponteiros precisam ser inicializados
Para isto basta usarmos o operador &
Ele retorna o endereço de uma variável
Exemplo:
int a = 10, *p;
// p aponta para o endereço de a
p = &a;
![Page 24: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/24.jpg)
+Ponteiros
O operador * é usado para termos acesso ao valor do endereço de memória para o qual um ponteiro aponta
Exemplo:
int a, b = 10, *p;
p = &b; // p aponta para o endereço de b
a = *p; // a = 10
*p = 15; // b = 15, mas a ainda é 10
![Page 25: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/25.jpg)
+Ponteiros
Operações aritméticas:
Igualdade// p1 aponta para o endereço de p2p1 = p2;
*p1 = *p2; // copia o conteúdoIncremento e decrementop++; // p = p + sizeof(tipo_de_p)
p--; // p = p - sizeof(tipo_de_p)
![Page 26: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/26.jpg)
+Ponteiros
Operações aritméticas:
incrementop = p + 10;
*p = *p + 10;Comparaçãop1 == p2;
p1 > p2;
p1 >= p2;
![Page 27: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/27.jpg)
+Exemplo
exemploPonteiro.c
![Page 28: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/28.jpg)
+Exercícios
1) Escreva um programa que lê strings do teclado até que duas strings iguais sejam digitadas consecutivamente. A saída é a concatenação de todas as strings lidas e os tamanhos da maior e da menor.
2) Faça um programa que calcula o determinante de uma matriz 2*2. O usuário entra com a matriz e o programa imprime o determinante na tela
3) Qual a diferença entre:
p++; (*p)++; *(p++);
![Page 29: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/29.jpg)
+Exercícios
4) Qual os valores de x e de y no final do programa?int main() { int y, *p, x; y = 0; p = &y; x = *p; x = 4; (*p)++; x--; (*p) += x; printf ("y = %d\n", y); return 0; }
5) Crie uma função chamada swap que recebe os dois ponteiros para inteiros como parâmetros e inverte seus conteúdos.
![Page 30: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/30.jpg)
+Referências
Curso de C da UFMG
http://ead1.eee.ufmg.br/cursos/C/ cplusplus resources
http://www.cplusplus.com Slides de Gustavo ([email protected]) do Curso de C/C++
![Page 31: + Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero Material por: Allan Lima](https://reader036.vdocuments.net/reader036/viewer/2022081516/552fc142497959413d8df73b/html5/thumbnails/31.jpg)
+Agradecimentos
Allan Lima, Breno do Vale e Francisco Magalhães
Pelo material cedido para o curso