Serviços e-commerce |
Você vende na internet______ |
Produtos Software |
Lísias Rapid ______________ |
Lísias Correio Brasil________ |
Lísias Código de Barras______ |
Produtos
Livros técnicos |
Algoritmos______________ |
Linguagem C |
Sobre o autor do livro______ |
C++____________________ |
Delphi__________________ |
Serviços
Cursos pela internet |
Curso de Algoritmos________ |
Curso de Linguagem C______ |
Curso de C++_____________ |
Curso de Delphi____________ |
Livro de Linguagem C | forma de venda
ISBN: 85-87147-02-1 |
Veja o que Bill Gates disse na Folha de S. Paulo de 26/04/95, sobre programação: "Para a maioria das pessoas faz sentido aprender uma linguagem fácil como o Visual Basic. Mas se você quiser escrever programas profissionais, terá que aprender a linguagem de computação C". Detalhe: sem saber programar em C, não tem como programar em C++. |
|
Todos os exemplos do livro tem pouco código | |
Quando você procura aplicar na prática
um determinado tópico em estudo, utilizando
a linguagem C, você não deseja ficar
analisando dezenas de linhas, para depois
se perder em meio a esta análise. Você
deseja um exemplo curto para poder entender
como aquele tópico é aplicado. Observe a seguir que o livro da Lísias
Editora não faz você perder tempo
desnecessariamente.
|
|
Perceba os detalhes que não estão no código | |
Muitas informações de programação são passadas ao
compilador de forma implícita, por exemplo, a posição
ordinal ocupada por cada um dos argumentos é quem
determina a formatação a ser executada. Veja no exemplo
do link
a seguir que o livro mostra este detalhe de forma clara
utilizando-se da cor: o primeiro argumento (em vermelho)
será formatado para a primeira base (também em vermelho)
e assim sucessivamente.
Clique aqui para ver um exemplo de como são explicados os detalhes não escritos no código No próximo exemplo você irá visualizar o contexto em que um tópico do livro está sendo utilizado na prática (no caso, operadores aritméticos unários: incremento/decremento) e além disso tem as explicações dos detalhes que não são descritos explicitamente pelo código programado.
|
|
Visualize graficamente a memória | |
Visualizando o que acontece na memória em termos de variáveis
e ponteiros você
terá mais facilidade em aprender a linguagem.
|
|
Saiba porque conhecer a memória é tão importante na linguagem C | |
Um dos pontos que tem dificultado o aprendizado na
linguagem é o não esclarecimento da diferença entre
endereço físico e endereço lógico e como estes
detalhes afetam a programação. Entendendo estas
diferenças você passará a perceber melhor como
funciona a memória e então irá desenvolver o
programa sabendo exatamente o que faz cada
instrução quando esta estiver executando,
por exemplo, tratamento de ponteiros.
Na figura do tópico anterior já é possível
começar a diferenciar endereço físico
de endereço lógico.
|
|
Saiba porque strings não podem ser atribuídas à variáveis | |
Para aqueles que já programam em outras linguagens,
é uma idéia intuitiva a de atribuir uma string a uma
variável esperando que esta string seja recepcionada
na área de memória disponibilizada à variavel.
Porém, na linguagem C isto não ocorre pois não
existe o tipo string definido no compilador.
Este tipo de detalhe tem criado muita confusão
e a maioria dos livros comuns não o explica
com clareza. O Exemplo colocado no link a seguir demonstra
que uma string é um conjunto de caracteres
atribuídos a uma matriz do tipo caracter.
|
|
Saiba como programar com ponteiros | |
Com este livro você efetivamente aprende a
trabalhar com ponteiros. Ponto nevrálgico
da linguagem. Isto porque será ensinado
como ler além da sintaxe de programação e
também porque você irá visualizar os
ponteiros acontecendo na memória. No final
do livro você dirá: "ponteiros é moleza"
|
|
Entenda o porquê da alocação dinâmica de memória | |
Você irá perceber a importância da alocação
dinâmica na construção de aplicativos competitivos
e que não fazem somente o feijão-com-arroz
pré-programado de outros compiladores/interpretadores.
|
|
Saiba porque estruturas são tão importantes | |
Você aprenderá que criar estruturas significa
criar um novo tipo de dado e quais são as
fantásticas implicações que advém deste fato.
|
|
Não sabendo programar em C, não há como programar em C++ | |
A partir da década de noventa a linguagem C
evoluiu e passou a incorporar a Orientação a
Objetos. Preste atenção nestes dois detalhes:
evoluiu e incorporou. Isto significa que todos
os conceitos da linguagem C são válidos em C++
e que esta é basicamente um acréscimo em termos
de Orientação a Objetos a linguagem C.
Houve aperfeicoamentos sim, mas nada que permita
a você dispensar o entendimento de C. De uma
forma ou de outra você terá que aprender a
linguagem C para aprender C++. E por que
aprender C++? Existem muitos motivos para tal,
porém, o motivo que irá convencê-lo é que a
partir do início desta década somente foram
construídos compiladores C++ e somente estes
estão a venda.O que não impede que você
compile programas C nestes compiladores C++ |
|
Por que aprender a criar programas na Linguagem C parece ser difícil? | |
Primeiro detalhe importante: para poder começar
a programar em C, você deve ter aprendido
como criar algoritmos.
Se você ainda não aprendeu,
veja o
livro de Algoritmos da Lísias Editora.
O código de C, não é um código para ser lido e acompanhado logicamente linha a linha. Não que a lógica não seja linear. Nisto, C é indêntica a qualquer outra linguagem. Porém, o que a diferencia das demais é que muitos detalhes não estão escritos explicitamente. Quando Kernighan e Ritchie (Cientistas dos Laboratórios Bell e criadores da linguagem), 'pensaram o compilador', eles sabiam que o mesmo seria utilizada por programadores profissionais (os construtores do sistema operacional Unix). Estes programadores entendiam perfeitamente como funciona a memória, entre muitos outros detalhes. Portanto, eles criaram uma linguagem sem muitos comandos, que contivesse somente o essencial. E isto para que o compilador economizasse todo byte possível e a execução do seu código fosse extremamente veloz. Observe o seguinte: eles 'pensaram' um compilador para ser utilizado por "Profissionais de Desenvolvimento de Software". Portanto é necessário que você conheça pontos básicos de computação. O livro "Linguagem C" mostra muitos dos fundamentos com uma clareza que você jamais tinha visto. |
|
Por que este livro é bom? | |
Porque a complexidade da linguagem é
levada a você gradualmente. Ou seja,
você começará pelos pontos básicos e que são
faceis de entender e de implementar em pequenos
programas. Não haverá nenhum tópico que fará uso
de conceitos fundamentais quando estes ainda não
tenham sido aprendidos. Você aprenderá conceitos
isolados, porém na prática, aprenderá a
aplicá-los em conjunto. Além da qualidade gráfica da obra, você encontrara outras virtudes, quase todas únicas:
|
|
Sumário do livro de Linguagem C | |
1. Tipos de dados 1.1 Tipos básicos 1.1.1 char 1.1.2 Int 1.1.3 float 1.1.4 double 1.1.5 void 1.2 Modificadores dos dados básicos 1.2.1 signed 1.2.2 unsigned 1.2.2.1 Como unsigned transforma um número para positivo 1.2.2.1.1 unsigned com números positivos 1.2.2.2 unsigned com números negativos 1.2.3 long 1.2.4 short 1.3 Combinação de dados básicos com modificadores 1.4 Abreviando a declaração de tipos de dados com typedef 1.5 Estourando a escala de valores de um tipo de dado 1.6 Variáveis 1.6.1 Nomenclatura Húngara 1.6.1.1 Variáveis começam com prefixo(s) minúsculo(s) 1.6.1.1.1 Descrição de prefixos de variáveis 1.6.1.1.1.1 Prefixo composto 1.6.1.2 Nome da variável propriamente dito 1.6.2 Declarando variáveis 1.6.3 Atribuição de valores à variáveis 1.6.4 Definindo uma variável como de conteúdo inalterável 1.6.5 Explicitando que a variável tem conteúdo modificável 1.7 Conversão de tipos (cast) 1.8 Constantes 1.9 Comentários 2. Definição de Função 2.1 Componentes de uma função 2.1.1 Tipo de dado a ser retornado pela função 2.1.2 Nome de função 2.1.3 Dados que serão recebidos pela função 2.1.4 Determinando o início e o final da função 2.2 Função main() 2.2.1 Estilos de escrita de main() 2.2.2 Função main() retornando void 2.3 Finalização de instrução 2.4 Delimitando blocos de instruções 3. Saída de dados 3.1 Função de saída formatada: printf() 3.1.1 Sintaxe 3.1.1.1 Expressão de Controle 3.1.1.1.1 Tabela de manipuladores de controle 3.1.1.1.2 Tabela de especificação de formatação de tipo 3.1.1.2 Lista de Argumentos 3.1.2 Demonstrando a saída de dados na prática 3.1.2.1 Saída de valores literais e de variáveis 3.1.2.2 Quantidade de caracteres, casas decimais e alinhamento 3.1.2.3 Definindo a quantidade de casas a exibir e o alinhamento 3.1.2.4 Exibir os valores ASCII de um caracter 3.1.2.5 Exibindo o endereço de uma variável 3.2 Saída de dados com a função putchar() 4. Entrada de dados 4.1 Função de entrada formatada: scanf() 4.1.1 Sintaxe 4.1.2 Entrada de dados (leitura) de um caracter 4.1.2.1 Lendo um caracter sem exibí-lo na saída default: getch() 4.1.2.2 Lendo um caracter e exibindo-o na saída default: getche() 4.1.2.3 Lendo um caracter e efetivando a entrada com [Enter]: getchar() 5. Operadores 5.1 Operadores aritméticos (binários) 5.2 Operadores aritméticos unários: incremento/decremento 5.3 Operadores aritméticos binários de atribuição composta 5.4 Operadores relacionais 5.5 Prioridade de avaliação dos operadores aritméticos 6. Comandos de Seleção única 6.1 Avaliação de uma expressão sem alternativa: if 6.1.1 Sintaxe 6.1.2 Exemplo 6.2 Avaliação de uma expressão com alternativa: if-else 6.2.1 Sintaxe 6.2.2 Exemplo 6.3 Avaliação de mais de uma expressão de teste: if-else-if 6.3.1 Sintaxe 6.3.2 Exemplo 6.4 Seleção única com operador ternário: ? : 6.4.1 Sintaxe 6.4.2 Exemplo 7. Comando de Seleção múltipla 7.1 Seleção múltipla com o comando switch...case 7.1.1 Sintaxe 7.1.2 Exemplo 8. Comandos de repetição de blocos 8.1 Repetir blocos conhecendo quantas vezes: for 8.1.1 Sintaxe 8.1.2 Exemplos 8.1.2.1 O comando for na sua utilização mais comum 8.1.2.2 Comando for com mais de uma instrução no bloco subordinado 8.1.2.3 Comando for com duas instruções no corpo de definição 8.1.2.4 Comandos for aninhados 8.1.2.5 Comando for com tipos caracter no corpo de definição 8.1.2.6 Comando for com função e omissão de expressão 8.2 Repetir blocos sem conhecer quantas vezes 8.2.1 Repetir um bloco testando antes do início do bloco: while 8.2.1.1 Exemplos 8.2.1.1.1 while com expressão condicional mais comum 8.2.1.1.2 while com função na expressão condicional 8.2.2 Repetir um bloco testando no final do bloco: do...while 8.2.2.1 Sintaxe 8.2.3 Comandos de desvios de execução 8.2.4 Exemplos 8.2.4.1 Desviando com o comando break e continue 8.2.4.2 Comando continue com for 8.2.4.3 Comando de desvio de aninhamento: goto 9. Encerrar e voltar ao sistema operacional 10. Operadores lógicos 10.1 Exemplos 10.1.1 Utilizando o operador E lógico: && 10.1.2 Utilizando o operador OU lógico: || 10.1.3 Utilizando o operador NãO lógico: ! 11. Definição de função do usuário 11.1 Protótipos de função 11.1.1 Sintaxe 11.2 Retornando um valor para a função chamadora: return 11.3 Exemplo de funções de usuário 11.3.1 Criando e chamando funções dentro de um arquivo fonte 11.4 Variáveis locais 11.5 Variáveis globais 11.5.1 Exemplo da utilização de variável global 11.6 Definindo classes de armazenamento de variáveis 11.6.1 extern 11.6.2 Variáveis static 11.6.2.1 Variáveis estáticas locais 11.6.2.1.1 Exemplo de utilização de variável estática local 11.6.2.2 Variáveis estáticas globais 11.6.2.2.1 Exemplo de utilização de variável estática global 11.6.3 Variável auto 11.6.4 Variável register 11.7 Funções recursivas 11.7.1 Exemplo de função recursiva 11.8 Função com quantidade variável de parâmetros 11.8.1 Sintaxe 11.8.2 Exemplo de função com parâmetros variáveis 12. Pré-processador 12.1 Diretiva #define 12.1.1 Exemplo de utilização da diretiva #define 12.1.2 Exemplo de #define como pseudo-função 12.2 Diretiva #include 12.2.1 Exemplo de utilização da diretiva #include 12.2.2 Incluindo protótipos de funções 12.3 Compilação condicional 12.3.1 Diretivas de compilação condicional #if, #else, #elif e #endif 12.3.1.1 Exemplo de utilização das diretivas #if e #endif 12.3.1.2 Exemplo de compilação condicional com alternativa: #else 12.3.1.3 Exemplo de compilação condicional com alternativas: #elif 12.3.2 Diretivas de compilação condicional #ifdef e #ifndef 12.3.2.1 Exemplo de compilação condicional com #ifdef 12.3.3 Diretiva de compilação condicional #undef 12.3.3.1 Exemplo de utilização da diretiva #undef 12.4 Diretiva #error 12.4.1 Exemplo de utilização da diretiva #error 12.5 Nomes de constantes pré-definidas 12.5.1 Exemplo de utilização de constantes de macro pré definidas 12.6 Diretiva #line 12.6.1 Exemplo de utilização da diretiva #line 12.7 Diretiva #pragma 13. Matrizes 13.1 Matrizes unidimensionais 13.1.1 Exemplos de matrizes unidimensionais 13.1.1.1 Definindo e percorrendo uma matriz unidimensional 13.1.1.2 Matriz unidimensional literal 13.2 Matrizes bidimensionais 13.2.1 Exemplo de matriz bidimensional 13.3 Matrizes tridimensionais 13.3.1 Exemplos de matrizes tridimensionais 13.3.1.1 Declarando e acessando uma matriz tridimensional 13.3.1.2 Matriz tridimensional literal 13.4 Enviando uma matriz a uma função 13.4.1 Exemplos de envio de matrizes a funções 13.4.1.1 Passando uma matriz unidimensional a uma função 13.4.1.2 Passando uma Matriz multidimensional a uma função 13.5 Acessando matriz multidimensional como unidimensional 13.6 Duplicando matrizes 14. Cadeias de caracteres (strings) 14.1 Exemplo de declaração e atribuição de caracteres 14.2 String literal 14.2.1 Exemplo de tratamento de string literal 14.3 Leitura de strings 14.3.1 Exemplo de leitura de string 14.4 Obtendo o tamanho da string 14.4.1 Exemplo de determinação de tamanho de string 14.5 Concatenando strings 14.5.1 Exemplo de concatenação de strings 14.6 Copiando uma string 14.6.1 Exemplo de cópia de string 14.7 Comparando igualdade de strings 14.7.1 Exemplo de comparação entre strings 14.8 Definindo e percorrendo uma matriz de strings 14.8.1 Exemplo de como definir e percorrer uma matriz de strings 15. Ponteiros 15.1 O que são ponteiros 15.2 Declaração de ponteiros 15.3 Significado do operador * em contextos diversos 15.3.1 Operador * em uma declaração de variável 15.3.2 Operador * posicionado antes do operador de atribuição ‘=’ 15.3.2.1 Exemplo de operador * posicionado antes do ‘=’ 15.3.3 Operador * posicionado após o operador de atribuição ‘=’ 15.3.3.1 Exemplo do operador * posicionado após o operador =’ 15.4 Passando a referência de uma variável a uma função 15.4.1 Exemplo de passagem de dados por referência 15.5 Operações aritméticas com ponteiros 15.5.1 Exemplo de aritmética com ponteiros 15.6 Ponteiros em expressões relacionais 15.6.1 Exemplo de ponteiros em expressões relacionais 15.7 Tratando matrizes com ponteiros 15.7.1 Exemplo de tratamento de matriz com ponteiros 15.7.2 Incremento em endereços para percorrer matriz 15.8 Matriz de ponteiros 15.8.1 Exemplo de uma matriz de ponteiros 15.9 Tratamento de strings com ponteiros 15.9.1 Exemplo de tratamento de string com ponteiros 15.9.2 Exemplo de atribuição direta de string à variável ponteiro 15.9.3 Atribuindo conteúdos de strings ponteiros 15.9.4 Exemplo de tratamento de matriz com string e ponteiros 15.9.5 Matriz Bidimensional e ponteiros 15.10 Ponteiros apontando para ponteiros 15.10.1 Exemplo de definição de ponteiros para ponteiros 15.10.2 Exemplo de indireção múltipla com matriz bidimensional 15.11 Recebendo parâmetros (ponteiros) em main() 15.11.1 Exemplo de recebimento de parâmetros em main() 15.11.2 Criando uma função gets melhorada utilizando ponteiros 15.12 Ponteiros para funções 15.12.1 Exemplo de ponteiro para função 15.12.2 Exemplo de matriz de ponteiros para funções 15.13 Ponteiros void 15.13.1 Exemplo de ponteiros void 16. Alocação dinâmica de memória 16.1 Função malloc() 16.1.1 Sintaxe da função malloc() 16.2 Função free() 16.2.1 Sintaxe da função free() 16.3 Exemplos de utilização de malloc() e free() 16.4 Função calloc() 16.4.1 Sintaxe da função calloc() 16.4.2 Exemplo de alocação de memória com calloc() 16.5 Alocando memória da pilha com alloca() 16.5.1 Sintaxe da função alloca 16.5.2 Exemplo de utilização da função alloca() 16.6 Redefinindo o tamanho alocado com realloc() 16.6.1 Sintaxe da função realloc() 16.6.2 Exemplo de utilização da função realloc() 16.7 Alocando memória de um heap fora do segmento atual 16.7.1 Modelos de memória 16.7.1.1 Memória Tiny 16.7.1.2 Memória Small 16.7.1.3 Memória Medium 16.7.1.4 Modelo Compact 16.7.1.5 Modelo Large 16.7.1.6 Modelo Huge 16.7.2 Funções para alocar memória fora do heap atual 16.7.2.1 Sintaxe da função farmalloc() 16.7.2.2 Sintaxe da função farcalloc() 16.7.3 Função para liberar a memória alocada fora do heap atual 16.7.3.1 Sintaxe da função farfree() 16.7.4 Exemplo de alocação no heap far 17. Estruturas 17.1 Sintaxe de definição de uma estrutura 17.2 Exemplo de definição e utilização de uma estrutura 17.3 Definindo instâncias quando da declaração da estrutura 17.3.1 Exemplo de instanciamento na declaração da estrutura 17.4 Evitando a declaração struct na criação de instâncias 17.4.1 Exemplo de declaração de instâncias sem a palavra struct 17.5 Criando estrutura literal e atribuição entre estruturas 17.5.1 Exemplo de definição de estrutura literal e atribuição 17.6 Estruturas aninhadas 17.6.1 Exemplo de estruturas aninhadas 17.7 Enviando estruturas para funções 17.7.1 Exemplo de envio de uma estrutura a uma função 17.8 Matriz de estrutura 17.8.1 Exemplo de uma matriz de estrutura 17.9 Ponteiros para estruturas 17.9.1 Sintaxe de ponteiro para estrutura 17.9.2 Exemplo de ponteiro para estrutura matricial 17.9.3 Acesso a membro com "pointer member" 17.9.3.1 Exemplo de acesso com "pointer member" 17.9.4 Enviando uma estrutura por referência à funções 17.9.4.1 Exemplo de envio de estrutura por referência 17.10 Utilizando uma estrutura para definir um campo de bits 17.10.1 Sintaxe de definição de campo de bits 17.10.2 Exemplo de definição e utilização de campo de bits 17.10.3 Restrições a campos de bits 18. Uniões 18.1 Sintaxe de uniões 18.1.1 Exemplo de definição e utilização de uma união 18.1.2 Exemplo de união de estrutura com dado comum 18.1.3 Exemplo de uma estrutura com os seus membros unidos 19. Lista enumerada 19.1 Sintaxe de definição de lista enumerada 19.2 Exemplo de definição e utilização de lista enumerada. 20. Operadores bit a bit 20.1 Lista de operadores bit a bit 20.1.1 Operador bit a bit & (E) 20.1.1.1 Exemplo de utilização de ‘&’ para desligar bits 20.1.2 Operador bit a bit | (OU) 20.1.3 Exemplo de utilização de ‘|’ para ligar bits 20.1.4 Operador bit a bit ^ (OU exclusivo) 20.1.5 Exemplo de utilização de ‘^’ para ligar bits diferentes 20.1.6 Operador bit a bit ~ (NãO) ou complementar de um 20.1.7 Exemplo de utilização de ‘~’ para inverter bits 20.1.8 Deslocando bits à esquerda com ‘<<‘ 20.1.8.1 Exemplo de deslocamento a esquerda com operador ‘<<‘ 20.1.9 Deslocando bits à direita com ‘>>‘ 20.1.9.1 Exemplo de deslocamento à direita com operador ‘>>’ 21. Entrada e Saída de dados em arquivos 21.1 Funções para manipulação de arquivos 21.2 Criando um ponteiro para um arquivo 21.3 Criando e gravando dados em a um arquivo 21.4 Lendo dados de um arquivo 21.5 Indicador de posição de arquivo 21.6 Removendo um arquivo de disco |