Sobre o livro
Certas linguagens de programação vêm e vão. Outras vêm e ficam. A linguagem C pertence a este segundo grupo. Mesmo perante linguagens mais modernas, algumas das quais, como o C++, o Java e o C#, se baseiam no próprio C, o C manterá, certamente, uma posição central no panorama do desenvolvimento de software. Por isso, para um programador que queira estar bem preparado para os desafios da Informática moderna, aprender C é um investimento sensato e seguro.
O livro cobre todos os principais conceitos da linguagem C, de maneira gradual e dando ênfase à resolução de problemas, e ilustra muitas das principais técnicas de programação com C. Esta edição mantém a estrutura das anteriores mas foi quase completamente reescrita, de maneira a modernizar o estilo de programação e a reforçar e aprofundar o estudo dos algoritmos e das estruturas de dados.
Principais Tópicos
Público Alvo
O objectivo deste livro, Elementos de Programação com C, é ensinar a programar com C. O livro está adaptado ao estudo individual, mas também pode ser usado como suporte para cursos de programação com C, no ensino secundário e no ensino superior, para alunos de informática e para estudantes de outras áreas para as quais é importante saber programar, e também em acções de formação profissional em programação.
ÍNDICE
0 - Apresentação
0.1 Aprender C
0.2 A linguagem C
0.3 ANSI C e ISO C99
0.4 Organização do livro
0.5 Origem do livro
0.6 Produção do livro
1 - A Linguagem C
1.1 Panorama
1.2 Breve história do C
2 - Funções
2.1 Introdução
2.2 O problema da Fórmula 1
2.3 O problema dos pontos em cada corrida
2.4 Um programa C completo
2.5 Declaração de variáveis: o tipo int
2.6 Instruções
2.7 As funções printf e scanf
2.8 A instrução if-else
2.9 A instrução return
2.10 A instrução de afectação
2.11 A instrução switch
2.12 Definição de funções
2.13 Reduzindo o número de casos
2.14 A expressão condicional
2.15 Comparando com zero
2.16 Outras possibilidades
3 - Quadros
3.1 Introdução
3.2 Vectores
3.3 As constantes simbólicas
3.4 Preenchimento interactivo de um vector
3.5 A instrução for
3.6 A instrução while
3.7 A instrução break
3.8 Os operadores ++ e ??
3.9 Equivalência entre as instruções for e while
3.10 O problema da volta mais rápida
3.11 Os números reais
3.12 Controlando o fim dos dados
3.13 Escrevendo o vector
3.14 O mínimo de um vector
3.15 Largura de campo e precisão
3.16 Preenchimento dos campos de escrita
3.17 Matrizes
3.18 Funções com parâmetros vectoriais
3.19 Conversões numéricas
3.20 Os inteiros long long
3.21 Funções de teste
3.22 Os tipos inteiros
3.23 O tipo char
3.24 Cadeias de caracteres
3.25 Comparação de cadeias de caracteres
3.26 Analisando a forma dos dados
3.27 Programa completo
4 - Ficheiros
4.1 Introdução
4.2 Os ficheiros stdin e stdout
4.3 O tipo FILE
4.4 Criação interactiva de um ficheiro
4.5 Leitura de um ficheiro
4.6 Leitura e preenchimento sequencial
4.7 Leitura e preenchimento directo
4.8 Escrita de um ficheiro
4.9 Parametrizando as funções que usam ficheiros
4.10 Controlando a abertura dos ficheiros
4.11 O ficheiro stderr
5 - Processamento de Vectores
5.1 Introdução
5.2 Acesso directo
5.3 Busca linear
5.4 Busca dicotómica
5.5 Ordenação de vectores
5.6 Números aleatórios
5.7 Operadores de afectação +=, ?=, *=, /= e %=
5.8 Vectores de cadeias de caracteres
5.9 Vectores paralelos
5.10 Tabelas de dispersão
5.11 Os pontos da Fórmula 1, de novo
6 - Apontadores
6.1 Introdução
6.2 Os operadores & e *
6.3 Os tipos apontador
6.4 Vectores e apontadores
6.5 Aritmética de apontadores
6.6 Percorrendo vectores com apontadores
6.7 Buscas lineares com apontadores
6.8 Parâmetros de saída em funções
6.9 Passagem por valor
6.10 Parâmetros vectoriais
6.11 Funções que devolvem apontadores
6.12 Vectores de apontadores
6.13 Funções sobre cadeias de caracteres
6.14 Compilação separada
6.15 Apontadores para funções
6.16 As funções de biblioteca qsort e bsearch
6.17 Libertando a memória
6.18 Números aleatórios, de novo
6.19 A instrução do
6.20 Programando o quicksort
6.21 A expressão vírgula
6.22 Eliminando as duplicações
7 - Estruturas
7.1 Introdução
7.2 Estruturas
7.3 Apontadores para estruturas
7.4 Vectores de estruturas
7.5 Afectação de estruturas
7.6 Finalizando o programa
7.7 O programa completo
8 - Conjuntos
8.1 Introdução
8.2 Implementação dos conjuntos
8.3 Declaração das operações com conjuntos
8.4 Operações sobre bits
8.5 Acedendo a bits individuais
8.6 Implementação dos conjuntos
8.7 Funções utilitárias sobre conjuntos
8.8 Funções com número variável de argumentos
8.9 Exemplo: escrutinando o Totoloto
8.10 Exemplo: ordenação de um ficheiro de números
8.11 Exemplo: o crivo de Eratóstenes
9 - Jogando Master Mind
9.1 Introdução
9.2 Subproblemas
9.3 Permutações
9.4 Gerando uma permutação aleatória
9.5 Analisando a jogada
9.6 Jogador humano
9.7 O programa adivinha a permutação secreta
9.8 Arranjos
10 - Programação Genérica
10.1 Introdução
10.2 Busca linear genérica
10.3 Busca linear genérica, por valor
10.4 Busca linear genérica, por função
10.5 Máximos e mínimos genéricos
10.6 Ordenação genérica
10.7 Ordenação genérica multicritério
10.8 Vectores de apontadores
11 - Processamento de Texto
11.1 Introdução
11.2 Contar os caracteres
11.3 Contar as linhas
11.4 Contar as palavras
11.5 Contar as palavras diferentes
11.6 Contar as ocorrências das palavras
11.7 Construir um índice
12 - Listas
12.1 Introdução
12.2 Listas ligadas
12.3 Funções sobre listas
12.4 Asserções
12.5 Testes unitários
12.6 Mais funções sobre listas
12.7 Listas ordenadas
12.8 Construir um índice usando listas
12.9 Ordenação topológica
12.10 Busca em largura
12.11 Busca em profundidade
12.12 Encadeamentos separados
12.13 Macros
13 - Árvores
13.1 Introdução
13.2 Árvores gerais
13.3 Árvores binárias
13.4 Funções básicas sobre árvores
13.5 Percursos em árvores
13.6 Árvores de busca
13.7 Contar palavras usando árvores
13.8 Contar ocorrências usando árvores
13.9 Construir um índice usando árvores
A - Outros Assuntos
A.1 Qualificadores de tipo
A.2 Classes de armazenamento
A.3 Instrução goto
A.4 O tipo long double
A.5 Constantes numéricas
A.6 Constantes carácter e constantes cadeia
A.7 Tipos união
A.8 Campos de bits
A.9 Enumerações
A.10 Declaração de funções à moda antiga
B - Funções de Biblioteca
B.1 Apresentação
B.2 Funções de entrada e saída:
B.2.1 Funções sobre ficheiros
B.2.2 Funções de escrita formatada
B.2.3 Funções de leitura formatada
B.2.4 Funções de leitura e escrita de caracteres
B.2.5 Funções de leitura e escrita de blocos
B.2.6 Funções de acesso directo
B.2.7 Funções de erro
B.3 Testes de classe de caracteres:
B.4 Funções sobre cadeias:
B.5 Funções matemáticas:
B.6 Funções utilitárias:
B.7 Listas de argumentos de comprimento variável:
B.8 Funções sobre a data e a hora:
B.9 Limites:
C - Especificadores de Conversão
C.1 Conversões printf
C.2 Conversões scanf
D - Tabela dos operadores
E - Diagramas Sintácticos
F - Mudanças na Norma C99