A maior rede de estudos do Brasil

Grátis
275 pág.
Apostila C

Pré-visualização | Página 1 de 45

LINGUAGEM C:
DESCOMPLICADA
Prof. Andre´ R. Backes
SUMA´RIO
1 Introduc¸a˜o 2
1.1 A linguagem C . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Influeˆncia da linguagem C . . . . . . . . . . . . . . . . 2
1.2 Utilizando o Code::Blocks para programar em C . . . . . . . 4
1.2.1 Criando um novo projeto no Code::Blocks . . . . . . . 4
1.2.2 Utilizando o debugger do Code::Blocks . . . . . . . . 8
1.3 Esqueleto de um programa em linguagem C . . . . . . . . . 12
1.3.1 Indentac¸a˜o do co´digo . . . . . . . . . . . . . . . . . . 14
1.3.2 Comenta´rios . . . . . . . . . . . . . . . . . . . . . . . 15
1.4 Bibliotecas e func¸o˜es u´teis da linguagem C . . . . . . . . . . 16
1.4.1 O comando include . . . . . . . . . . . . . . . . . . . 16
1.4.2 Func¸o˜es de entrada e saı´da: stdio.h . . . . . . . . . . 17
1.4.3 Func¸o˜es de utilidade padra˜o: stdlib.h . . . . . . . . . 19
1.4.4 Func¸o˜es matema´ticas: math.h . . . . . . . . . . . . . 21
1.4.5 Testes de tipos de caracteres: ctype.h . . . . . . . . . 22
1.4.6 Operac¸o˜es em String: string.h . . . . . . . . . . . . . 22
1.4.7 Func¸o˜es de data e hora: time.h . . . . . . . . . . . . . 23
2 Manipulando dados, varia´veis e expresso˜es em C 25
2.1 Varia´veis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1.1 Nomeando uma varia´vel . . . . . . . . . . . . . . . . . 26
2.1.2 Definindo o tipo de uma varia´vel . . . . . . . . . . . . 28
2.2 Lendo e escrevendo dados . . . . . . . . . . . . . . . . . . . 31
2.2.1 Printf . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1
2.2.2 Putchar . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.2.3 Scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.2.4 Getchar . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.3 Escopo: tempo de vida da varia´vel . . . . . . . . . . . . . . . 39
2.4 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.4.1 Comando #define . . . . . . . . . . . . . . . . . . . . 45
2.4.2 Comando const . . . . . . . . . . . . . . . . . . . . . . 45
2.4.3 sequ¨eˆncias de escape . . . . . . . . . . . . . . . . . . 46
2.5 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.5.1 Operador de atribuic¸a˜o: “=” . . . . . . . . . . . . . . . 47
2.5.2 Operadores aritme´ticos . . . . . . . . . . . . . . . . . 50
2.5.3 Operadores relacionais . . . . . . . . . . . . . . . . . 52
2.5.4 Operadores lo´gicos . . . . . . . . . . . . . . . . . . . 54
2.5.5 Operadores bit-a-bit . . . . . . . . . . . . . . . . . . . 55
2.5.6 Operadores de atribuic¸a˜o simplificada . . . . . . . . . 58
2.5.7 Operadores de Pre´ e Po´s-Incremento . . . . . . . . . 59
2.5.8 Modeladores de Tipos (casts) . . . . . . . . . . . . . . 61
2.5.9 Operador vı´rgula “,” . . . . . . . . . . . . . . . . . . . 62
2.5.10 Precedeˆncia de operadores . . . . . . . . . . . . . . . 62
3 Comandos de Controle Condicional 65
3.1 Comando if . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.1.1 Uso das chaves {} . . . . . . . . . . . . . . . . . . . . 68
3.1.2 Expressa˜o condicional . . . . . . . . . . . . . . . . . . 69
3.2 Comando else . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.3 Aninhamento de if . . . . . . . . . . . . . . . . . . . . . . . . 75
2
3.4 Operador ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.5 Comando switch . . . . . . . . . . . . . . . . . . . . . . . . . 79
4 Comandos de Repetic¸a˜o 85
4.1 Repetic¸a˜o por condic¸a˜o . . . . . . . . . . . . . . . . . . . . . 85
4.2 Lac¸o infinito . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.3 Comando while . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.4 Comando for . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.5 Comando do-while . . . . . . . . . . . . . . . . . . . . . . . . 97
4.6 Comando break . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.7 Comando continue . . . . . . . . . . . . . . . . . . . . . . . . 100
4.8 Goto e label . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
5 Vetores e matrizes - Arrays 105
5.1 Exemplo de uso . . . . . . . . . . . . . . . . . . . . . . . . . 105
5.2 Array com uma dimensa˜o - vetor . . . . . . . . . . . . . . . . 106
5.3 Array com duas dimenso˜es - matriz . . . . . . . . . . . . . . 110
5.4 Arrays multidimensionais . . . . . . . . . . . . . . . . . . . . 111
5.5 Inicializac¸a˜o de arrays . . . . . . . . . . . . . . . . . . . . . . 113
5.5.1 Inicializac¸a˜o sem tamanho . . . . . . . . . . . . . . . 115
5.6 Exemplo de uso de arrays . . . . . . . . . . . . . . . . . . . . 116
6 Arrays de caracteres - Strings 119
6.1 Definic¸a˜o e declarac¸a˜o de strings . . . . . . . . . . . . . . . . 119
6.2 Trabalhando com strings . . . . . . . . . . . . . . . . . . . . . 121
6.2.1 Lendo uma string do teclado . . . . . . . . . . . . . . 122
6.2.2 Escrevendo uma string na tela . . . . . . . . . . . . . 124
3
6.3 Func¸o˜es para manipulac¸a˜o de strings . . . . . . . . . . . . . 126
6.3.1 Tamanho de uma string . . . . . . . . . . . . . . . . . 126
6.3.2 Copiando uma string . . . . . . . . . . . . . . . . . . . 126
6.3.3 Concatenando strings . . . . . . . . . . . . . . . . . . 127
6.3.4 Comparando duas strings . . . . . . . . . . . . . . . . 128
7 Tipos definidos pelo programador 129
7.1 Estruturas: struct . . . . . . . . . . . . . . . . . . . . . . . . . 129
7.1.1 Inicializac¸a˜o de estruturas . . . . . . . . . . . . . . . . 134
7.1.2 Array de estruturas . . . . . . . . . . . . . . . . . . . . 135
7.1.3 Atribuic¸a˜o entre estruturas . . . . . . . . . . . . . . . 137
7.1.4 Estruturas aninhadas . . . . . . . . . . . . . . . . . . 138
7.2 Unio˜es: union . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
7.3 Enumarac¸o˜es: enum . . . . . . . . . . . . . . . . . . . . . . . 143
7.4 Comando typedef . . . . . . . . . . . . . . . . . . . . . . . . 147
8 Func¸o˜es 151
8.1 Definic¸a˜o e estrutura ba´sica . . . . . . . . . . . . . . . . . . . 151
8.1.1 Paraˆmetros de uma func¸a˜o . . . . . . . . . . . . . . . 154
8.1.2 Corpo da func¸a˜o . . . . . . . . . . . . . . . . . . . . . 156
8.1.3 Retorno da func¸a˜o . . . . . . . . . . . . . . . . . . . . 160
8.2 Tipos de passagem de paraˆmetros . . . . . . . . . . . . . . . 165
8.2.1 Passagem por valor . . . . . . . . . . . . . . . . . . . 166
8.2.2 Passagem por refereˆncia . . . . . . . . . . . . . . . . 167
8.2.3 Passagem de arrays como paraˆmetros . . . . . . . . 170
8.2.4 Operador Seta . . . . . . . . . . . . . . . . . . . . . . 174
8.3 Recursa˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
4
9 Ponteiros 181
9.1 Declarac¸a˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
9.2 Manipulando ponteiros . . . . . . . . . . . . . . . . . . . . . . 183
9.2.1 Inicializac¸a˜o e atribuic¸a˜o . . . . . . . . . . . . . . . . . 183
9.2.2 Aritme´tica com ponteiros . . . . . . . . . . . . . . . . 189
9.2.3 Operac¸o˜es relacionais com ponteiros . . . . . . . . . 192
9.3 Ponteiros gene´ricos . . . . . . . . . . . . . . . . . . . . . . . 194
9.4 Ponteiros e arrays . . . . . . . . . . . . . . . . . . . . . . . . 196
9.4.1 Ponteiros e arrays multidimensionais . . . . . . . . . . 200
9.4.2 Array de ponteiros . . . . . . . . . . . . . . . . . . . . 201
9.5 Ponteiro para ponteiro . . . . . . . . . . . . . . . . . . . . . . 202
10 Alocac¸a˜o Dinaˆmica 206
10.1 Func¸o˜es para alocac¸a˜o de memo´ria . . . . . . . . . . . . . . 208
10.1.1 sizeof() . . . . . . . . . . . . . . . . . . . . . . . . . . 208
10.1.2 malloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 209
10.1.3 calloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 212
10.1.4 realloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 214
10.1.5 free() . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
10.2 Alocac¸a˜o de arrays multidimensionais . . . . . . . . . . . . . 220
10.2.1 Soluc¸a˜o 1: usando array unidimensional . . . . . . . . 220
10.2.2 Soluc¸a˜o 2: