O C é uma linguagem de programação incontornável no estudo e aprendizagem das linguagens de programação. É um precursor das linguagens de programação estruturadas e a sua sintaxe foi reutilizada em muitas linguagens posteriores, mesmo de paradigmas diferentes, entre as quais se contam o Java, o Javascript, o Actionscript, o PHP, o Perl, o C# e o C++.
Este livro apresenta a sintaxe da linguagem C tal como especificada pelas normas C89, C99 e C11, da responsabilidade do grupo de trabalho ISO/IEC JTC1/SC22/WG14.
É, por isso, uma ferramenta indispensável para:
• Professores;
• Estudantes;
• Programadores;
• Web designers;
• Autodidatas.
Para além da sintaxe da linguagem C, são também apresentados conceitos e aplicações práticas de estruturas de dados e algoritmos, nomeadamente:
• Vetores, listas e árvores;
• Inserção, remoção, pesquisa, impressão de estruturas;
• Diversos algoritmos de ordenação de estruturas;
• Eficiência temporal e espacial dos diversos algoritmos apresentados.
Capítulo 1
Introdução
1.1. Breve sinopse 11
1.2. Ambientes de desenvolvimento 12
1.2.1. Dev C++ 13
1.2.2. gcc 17
Capítulo 2
Linguagem C
2.1. Estruturas básicas 19
2.1.1. Expressão 19
2.1.2. Instrução 20
2.1.3. Função 21
2.1.4. Comentário 21
2.1.5. Programa 22
2.2. Tipos de dados, variáveis e constantes 24
2.2.1. Variáveis 24
2.2.2. Constantes 26
2.2.3. Tipos escalares 27
2.2.4. Conversão de tipos 40
2.2.5. void 42 2.3. Operadores 43
2.3.1. Precedência dos operadores 43
2.3.2. Operadores aritméticos 45
2.3.3. Operadores relacionais e de igualdade 46
2.3.4. Operadores lógicos 46
2.3.5. Operadores bit a bit 47
2.3.6. Operadores de atribuição 53
2.3.7. Operadores unários 54
2.3.8. Operadores primários 58
2.3.9. Outros operadores 59
2.4. Instruções de controlo de fluxo 60
2.4.1. if 61
2.4.2. switch 62
2.4.3. while 63
2.4.4. do-while 64
2.4.5. for 65
2.4.6. break e continue 66
2.4.7. goto 67
2.5. Apontadores e vetores 68
2.5.1. Apontadores 68
2.5.2. Aritmética de apontadores 72
2.5.3. Parâmetros de funções e apontadores 74
2.5.4. Vetores 76
2.5.5. Apontadores e vetores 79
2.5.6. Apontadores, vetores e funções 80
2.5.7. Cadeias de carateres 81
2.5.8. Funções de manipulação de cadeias 84
2.5.9. Vetores multidimensionais 86
2.5.10. Vetores de apontadores 88
2.5.11. Apontadores para apontadores 89
2.6. Acesso à memória 90
2.7. Visibilidade e longevidade 92
2.7.1. Variáveis externas 92
2.7.2. Variáveis internas 93
2.7.3. Visibilidade e longevidade de variáveis 93
2.7.4. Qualificador extern 94 2.7.5. Qualificador static 94
2.7.6. Qualificador register 96
2.7.7. Qualificadores auto e volatile 97
2.8. Estruturas, uniões e typedef 97
2.8.1. Estruturas 98
2.8.2. Inicialização de estruturas 100
2.8.3. Acesso a estruturas 100
2.8.4. Vetores de estruturas 102
2.8.5. Uniões 102
2.8.6. Nomes de tipos 104
2.9. Funções 105
2.9.1. Recursividade 106
2.9.2. Apontadores para funções 107
2.9.3. Argumentos para a função main 109
2.10. Entradas e saídas 110
2.10.1. Manipulação de carateres 110
2.10.2. Manipulação de linhas 113
2.10.3. printf 115
2.10.4. scanf 117
2.10.5. Ficheiros 120
2.10.6. Escrita em ficheiros 122
2.10.7. Leitura de ficheiros 124
2.10.8. Outras operações sobre ficheiros 127
2.11. Pré-processador 128
2.11.1. Processamento de macroinstruções 129
2.11.2. Inclusão de ficheiros 132
2.11.3. Compilação condicional 133
2.11.4. Controlo de erros 135
2.11.5. Controlo do compilador 136
2.12. Bibliotecas de funções 137
2.12.1. ctype.h 138
2.12.2. string.h 138
2.12.3. stdio.h 139
2.12.4. stdlib.h 141
2.12.5. math.h 141 2.13. Normas da linguagem C 142
2.13.1. C89 142
2.13.2. C99 143
2.13.3. C11 150Capítulo 3
Estruturas de dados e algoritmos
3.1. Eficiência dos algoritmos 157
3.1.1. Notação O-grande 158
3.2. Vetores de tamanho fixo 159
3.2.1. Acesso linear 160
3.2.2. Pesquisa linear 161
3.2.3. Pesquisa binária 163
3.2.4. Inversão 166
3.2.5. Bubblesort 168
3.2.6. Ordenação por inserção 174
3.2.7. Shellsort 176
3.2.8. Quicksort 180
3.3. Listas 185
3.3.1. Elementos de uma lista 185
3.3.2. Gestão de uma lista 187
3.3.3. Inserção no início da lista 187
3.3.4. Impressão da lista 191
3.3.5. Inserção no fim da lista 193
3.3.6. Múltiplas listas 195
3.4. Listas genéricas 197
3.4.1. Pesquisa genérica 201
3.4.2 Remoção 203
3.4.3. Bubblesort 205
3.4.4. Quicksort 207
3.5. Filas e pilhas 211 3.6. Vetores dinâmicos 212
3.6.1. Gestão de um vetor dinâmico 213
3.6.2. Inserção 214
3.6.3. Impressão 215
3.6.4. Pesquisa 216
3.6.5. Ordenação 218
3.6.6. Remoção 219
3.7. Árvores 221
3.7.1. Árvores AVL 222
3.7.2. Árvores B 229
3.8. Resumo da eficiência dos algoritmos 234
Bibliografia 237
Anexo 239
Lista de tabelas 241
Lista de quadros 243
Lista de figuras 247
Lista de códigos fonte 249
Índice remissivo 255