SlideShare une entreprise Scribd logo
1  sur  6
Télécharger pour lire hors ligne
P á g i n a 1 | 6
Linguagem C – Prof. Wellington Telles
Definições
Linguagem
Método padronizado para comunicar com um computador. O computador trabalha com lógica de bits e bytes e na
sua arquitetura o seu processamento é através de microinstruções.
Baixo nível
Mais próxima do computador, duas gerações 1GL códigos em hexadecimal e 2GL é a linguagem Assembly
(mnemônicos)
Alto nível
Mais próxima da linguagem humana.
Exemplo em Cobol:
DECIMAL-POINT IS COMMA.
Ponto decimal é vírgula.
Microcontrolador
É um computador reduzido com processor, memória, entradas e saídas agrupados em apenas um circuito integrado.
Exemplo disso é um Z80, 8051, Arduino, PIC, ESP8266, ESP32 entre outros.
Por que a linguagem C para esse curso?
A linguagem C é chamada de “médio nível”.
A linguagem C não é das mais elegantes, mas vários sistemas suportam os seus programas, para a disciplina de
programação de computadores será dada a ênfase para programação de microcontroladores.
Histórico
Criada entre 1969 e 1973 por Denis Ritchie (AT&T Bell Labs) para desenvolver o sistema operacional UNIX. Sucessora
da linguagem B, da versão BCPL - Basic Combined Programming Language (Linguagem de Programação Básica
Combinada).
Algol 60 (ALGOrithmic Language - Linguagem Algorítmica) - 1957 – Projetado por um comitê internacional.
CPL – Combined Programming Language. Desenvolvida em Cambridge e na Universidade de Londres em 1963.
BCPL – Basic Combined Programming Language. Desenvolvida em Cambridge por Martin Richards em 1967.
B – Desenvolvida por Ken Thompson, nos Laboratórios Bell em 1970, a partir da linguagem BCPL.
C – Desenvolvida por Dennis Ritchie, nos Laboratórios Bell em 1972. Aparece também a figura de Brian Kernighan
como colaborador.
ANSI C – O comitê ANSI (American National Standards Institute) foi reunido com a finalidade de padronizar a
linguagem C em 1983.
C++ - A linguagem C se torna ponto de concordância entre teóricos do desenvolvimento da teoria de Object Oriented
Programming (programação orientada a objetos): surge a linguagem C++ com alternativa para a implementação de
grandes sistemas. Essa linguagem consegue interpretar linhas de código escritas em C.
Memória
A memória armazena valores como 0 e 1 (bits), que combinados em conjuntos de 8 bits forma o byte que pode ser
256 combinações diferentes (0 até 255).
O computador divide a memória entre memória de programa e memória de dados.
A memória pode ser RAM (Random Access Memory – Memória de acesso aleatório) ou ROM (Read Only Memor –
Memória somente de leitura).
Outros tipos: EPROM (Erasable programmable read-only memory - memória programável apagável somente de
leitura), EEPROM (Electrically-Erasable Programmable Read-Only Memory – Eletricamente memória programável
apagável somente de leitura).
Barramentos (BUS)
Conjunto de fios paralelos que interconecta os dispositivos de hardware como CPU, memória, entradas e saídas.
Três tipos de barramentos:
• Barramento de controle que controla o funcionamento dos componentes do sistema;
• Barramento de endereços, onde é colocada a informação de origem ou destino para a informação a ser
enviada ou recuperada;
• Barramento de dados, onde trafegam os dados.
P á g i n a 2 | 6
O Microcontrolador 8051 tem 16 linhas de endereços e pode endereçar no máximo 216
=65536, um barramento de
32 bits pode endereçar 232
= 4294967296.
Programas de Computador
O programa é uma lista de instruções que o computador irá executar.
Normalmente o programa pode ser escrito através de um editor de texto simples como notepad++.
No formato de texto não é interpretado pelo computador, uma vez que estamos programando em alto nível e o
computador requer baixo nível, então será necessária uma “tradução” de um formato para o outro.
O texto será transformado em um formato binário e quem faz isso é chamado de compilador.
Algoritmos
É um procedimento para nós ajudar a resolver problemas independente da linguagem de programação, sintetizando
processos matemáticos e lógicos.
Os algoritmos podem ser representados através de fluxogramas.
Organização de Dados
Bits: representado por 0 e 1
Nibbles: conjunto de 4 bits, para representar números BCD ou hexadecimais.
Bytes: conjunto de 8 bits que pode representar 256 valores diferentes (0 a 255 ou -128 a +127 ou caracteres ASCII).
Word: conjunto de n bits que pode ter 8, 16, 32, 64, 128 e etc.
Double Word: compostos por duas words.
Ponto Flutuante (float): números reais.
P á g i n a 3 | 6
Tabela ASCII
Metodologia
Top Down
Estilo
Projete de cima para baixo (top for down): O projeto começa com a especificação do sistema completo de forma
suficientemente compacta para que uma pessoa possa rapidamente compreendê-la.
O projeto procede pela divisão do sistema em subsistemas e subunidades com as suas inter-relações bem definidas.
Depois disso, cada subsistema poderá ser descrito em detalhes mantendo a capacidade de compreender os detalhes
da unidade e do sistema como um todo. Esse processo continua até o sistema ter sido especificado de forma
completa e detalhada, podendo prosseguir com a elaboração do cronograma.
Sempre se devem utilizar técnicas que mantenham o projetista no caminho correto, dentro do processo da
implementação (técnicas foolproof – contra erros bobos). O hardware permite um alto grau de flexibilidade no
projeto. Essa excessiva flexibilidade permite aos projetistas utilizar rotinas e circuitos complexos e pouco comuns. O
uso incontrolado dessa flexibilidade promove a implementação de forma indisciplinada, não-inteligente e incorreta.
Esse fenômeno tem a contrapartida (de forma menos severa) em software de computadores, onde a linguagem
assembly permite o acesso a todo o poder do computador. A experiência na solução de problemas de software e
hardware tem mostrado que se deve restringir as ferramentas e técnicas de projeto que mostrem uma capacidade
funcional e interpretativa, sobre uma variedade de circunstâncias.
Usar técnicas de documentação para o nível de sistema e para nível dos circuitos ou rotinas de software (descrições
de software e hardware) que mostrem claramente o que o projetista estava pensando, quando o problema foi
primeiramente abstraído e depois para a implementação do software e do hardware. A violação deste preceito atua
contra o princípio da “cortesia comum”.
Durante a documentação o projetista deve-se colocar no lugar do usuário ou mantenedor do seu projeto, mantendo
uma documentação clara e completa.
Abstração
Neste contexto, a abstração permite encarar o problema num nível conceptual. O conceito de memória é um
exemplo de abstração. Quando o projeto começar, é necessário encará-lo com elementos conceituais a as suas inter-
relações. Somente mais tarde, durante o processo de implementação, será necessário trabalhar com conceitos reais.
Essa liberdade é absolutamente essencial para um começo apropriado de um projeto de complexidade considerável.
Começa-se de cima e continua-se reduzindo o problema, até seus elementos conceituais básicos. Por exemplo, um
computador precisará de uma memória, um sistema de entrada e saída, uma unidade aritmética e outros
subsistemas.
Comumente começa-se o projeto neste nível de abstração, e prossegue-se descendo a níveis inferiores, um por um,
sempre no ponto de vista conceitual. Desta forma, no próximo nível será desenhado um diagrama de blocos de uma
unidade aritmética, pela interconexão das suas unidades funcionais, tais como registradores, unidades de controle, e
barramento de dados. A abstração inicial é a parte crítica de qualquer projeto, desde que, um planejamento errado
P á g i n a 4 | 6
nas suas fases iniciais, levará inevitavelmente a implementações erradas. Normalmente não há forma de resgatar
um projeto mal planejado utilizando circuitos exóticos ou rotinas de ajuste.
Formalismo
O formalismo é a teoria do comportamento do sistema. Em um projeto, o formalismo ajuda a estabelecer regras e
procedimentos sistemáticos com características conhecidas. Os formalismos são importantes em todos os níveis do
projeto. Os formalismos de “alto nível” não são de grande importância para o bom desenvolvimento do projeto e
servem somente para adotar métodos sistemáticos em todos os níveis nos quais se espera a transformação correta
dos conceitos em hardware ou software. No nível de implementação, o formalismo é extremamente necessário e
deve ser rígido o suficiente para evitar erros na implementação.
Duas naves espaciais destinadas a mapear o planeta Marte foram perdidas no espaço em 1999 porque alguns dos
algoritmos projetados utilizavam unidades do sistema inglês, enquanto que outros utilizavam unidades no sistema
internacional. Como o erro era muito pequeno para ser detectado nos testes, resultou em um dos erros de
formalismo mais caros da história.
O Projeto em Top Down
O projeto começa com o estudo cuidadoso do problema geral. Deliberadamente, devem ser ignorados os detalhes
neste estágio, e devem ser feitas perguntas como:
• O problema está claramente definido?
• É possível remodelar o problema para obter mais clareza ou simplificá-lo?
• Se estivesse trabalhando com um subsistema de um sistema maior; quais seriam as relações com o
subsistema de hierarquia maior? Poderá um particionamento diferente do sistema inteiro simplificar a
estrutura?
Neste estágio, o entendimento é global e deve permanecer neste nível até ter esmiuçado e digerido o problema,
chegando ao ponto onde haja o convencimento de que este pode ser resolvido. Isto é essencial, desde que qualquer
dificuldade neste nível é séria e pode ser insolúvel.
Após ter especificado claramente o problema em nível global, procede-se ao particionamento racional do problema
em pequenas peças com inter-relações claramente definidas. O objetivo é de escolher as peças “naturais”, de tal
forma que, cada peça possa ser compreendida como uma unidade e sejam bem compreendidas as interações entre
as unidades. Esse processo de particionamento continua para níveis inferiores, até a escolha final das funções a
serem utilizadas, circuitos integrados a serem empregados, etc.
Componentes Básicos de um Programa
Um programa de computador é baseado no fluxograma do algoritmo e implementa a solução de software para o
problema.
Um programa em qualquer linguagem normalmente é composto pelos seguintes itens:
• Os programas devem obter informação de alguma fonte de entrada.
• Os programadores devem decidir a forma em que os dados de entradas serão armazenados e dispostos.
• Os programas devem utilizar uma série de instruções para manipular as entradas. Estas instruções são do
tipo simples, condicionais, laços e funções ou sub-rotinas.
• Os programas devem apresentar os resultados da manipulação dos dados das entradas.
• Uma aplicação correta incorpora os fundamentos acima listados, expressos através da utilização de um
projeto modular, incluindo uma especificação completa, uma codificação devidamente documentada e um
esquema de apresentação apropriado.
Fundamentos de Linguagem C
Características da Linguagem C
É uma linguagem de “alto nível” de sintaxe estruturada e flexível, tornando sua programação bastante simplificada.
Os programas em C são compilados, gerando programas executáveis depois de montados (linker).
A linguagem C compartilha recursos de alto e de baixo nível, pois permite acesso e programação direta do hardware
do computador. Assim, as rotinas cuja dependência de tempo seja crítica, podem ser facilmente implementadas
usando instruções em Assembly. Por essa razão, a linguagem C, é a preferida dos engenheiros programadores de
aplicativos.
A linguagem C é estruturalmente simples e portável. O compilador C gera códigos menores e mais velozes do que
outras linguagens de programação.
P á g i n a 5 | 6
Embora, estruturalmente simples (poucas funções intrínsecas), a linguagem C não perde funcionalidade, pois
permite a inclusão de uma farta quantidade de rotinas do usuário. Os fabricantes de compiladores fornecem uma
ampla variedade de rotinas pré-compiladas em bibliotecas.
Pontos Positivos
Tamanho Pequeno: A linguagem C possui poucas regras de sintaxe, quando comparada com outras linguagens. Um
compilador C pode ser implementado com apenas 256 KB de memória.
Poucos Comandos: A linguagem C é extremamente pequena. O número total de palavras-chave é de 43. Isto faz dela
uma linguagem extremamente simples de aprender.
Velocidade: A combinação de uma linguagem pequena com regras de sintaxe simples; a falta de verificação durante
a execução; e uma linguagem parecida com o assembly faz com que o código gerado seja executado em velocidades
próximas a do assembler.
Linguagem Estruturada: Contém todas as estruturas de controle utilizadas nas linguagens de programação mais
modernas. Tem recursos de escopo utilizando variáveis locais.
Não Fortemente Figurada: Os dados são tratados de maneira muito flexível, o que permite uma grande versatilidade.
Suporte de Programação Modular: Suporta a compilação e montagem (linker) separadas, o que permite recompilar
somente as partes de um programa que tenham sido alteradas durante o desenvolvimento.
Manipulação de Bits: Uma vez que a linguagem foi criada para a implementação de sistemas operacionais, esta
linguagem foi dotada de uma vasta série de operadores para a manipulação direta de bits.
Interface para Rotinas em Assembly: Suporta a inclusão de rotinas em assembly diretamente no mesmo código fonte
em C.
Variáveis Ponteiros: Um sistema operacional deve ser capaz de endereçar áreas específicas da memória ou
dispositivos de I/O. A linguagem C utiliza variáveis do tipo ponteiro permitindo manipulá-los aritmeticamente. Uma
variável do tipo ponteiro guarda no seu conteúdo uma informação de endereço da informação.
Estruturas Flexíveis: Os arranjos de dados são unidimensionais. Os arranjos multidimensionais são construídos a
partir de arranjos unidimensionais.
Bibliotecas de Funções: Existem vastas bibliotecas de funções prontas que podem ser anexadas aos executáveis
durante a montagem (linker).
Uso Eficiente da Memória: Os programas em C tendem a ser mais eficientes em termos de memória devido à falta
de funções embutidas que não são necessárias à aplicação.
Portabilidade: A portabilidade indica a facilidade de se converter um programa feito para um hardware específico e
sistema operacional, em um equivalente que possa ser executado em outro hardware ou sistema operacional.
Atualmente, ainda pode ser considerada como uma das linguagens mais portáveis.
Pontos Negativos
Não fortemente figurada: Este fato é também um ponto negativo da linguagem. Trata-se do processamento dos
dados de acordo com a sua natureza ou tipo de dado. Este processamento é chamado comumente de tipagem que
indica o quanto a linguagem permite a troca de dados entre duas variáveis de tipos diferentes. O uso acidental de
misturas de tipos de dados pode gerar erros de execução no programa.
Verificação em Tempo de Execução: A linguagem C não possui verificação em tempo de execução, de forma que
podem acontecer problemas cujas origens são muito difíceis de detectar.
O Padrão ANSI C
O comitê ANSI (American National Standards Institute) desenvolveu padrões para a linguagem C. Anteriormente, a
única referência da linguagem era o livro The C Programming Language (V. Kernighan e D. Ritchie, Laboratórios Bell,
1988) entre os fabricantes de compiladores, prejudicando a portabilidade. O padrão ANSI surgiu para remover
ambiguidades, embora, nem todas tenham sido corrigidas, ele permanece como a melhor alternativa para produzir
um código C portátil.
O comitê ANSI adotou como norma três frases que foram denominadas “o espírito da linguagem C”, dentre elas:
“Não impeça que o programador faça aquilo que precisa ser feito”.
“Confie no programador”.
“Mantenha a linguagem pequena e simples”.
Além disso, a comunidade internacional foi consultada para garantir que o padrão ANSI C americano seria idêntico à
versão do padrão ISO (International Standards Organization)
Palavras Reservadas
Todas as linguagens de programação têm palavras reservadas. As palavras reservadas não podem ser usadas a não
ser para seus propósitos originais, i.e., não podem ser declaradas funções nem variáveis com os mesmos nomes.
P á g i n a 6 | 6
Como a linguagem C é "case sensitive" (sensível a maiúsculas e minúsculas) pode-se declarar uma variável chamada
For, apesar de haver uma palavra reservada for. Porém, isso não é recomendável, pois gera confusão no código.
A seguir são listadas as palavras reservadas do ANSI C, ao todo 32 palavras. Veremos o significado destas palavras-
chave, à medida que os demais conceitos forem apresentados.
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while

Contenu connexe

Tendances

Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1Pedro Augusto
 
Aula 3 - Lógica de Programação
Aula 3 - Lógica de ProgramaçãoAula 3 - Lógica de Programação
Aula 3 - Lógica de ProgramaçãoInstituto CENTEC
 
Aula 2 - Introdução à programação de computadores - parte1
Aula 2 - Introdução à programação de computadores - parte1Aula 2 - Introdução à programação de computadores - parte1
Aula 2 - Introdução à programação de computadores - parte1Pacc UAB
 
ICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentários
ICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentáriosICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentários
ICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentáriosFelipe J. R. Vieira
 
mod1-algoritmia
mod1-algoritmiamod1-algoritmia
mod1-algoritmiadiogoa21
 
Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1Pacc UAB
 
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...tdc-globalcode
 
Livro aed capitulos-1-2-3-introdpascal
Livro aed capitulos-1-2-3-introdpascalLivro aed capitulos-1-2-3-introdpascal
Livro aed capitulos-1-2-3-introdpascalDeby Bastos
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de ProgramaçãoRicardo Terra
 
Introdução a Deep Learning
Introdução a Deep LearningIntrodução a Deep Learning
Introdução a Deep LearningCristian Muñoz
 
Lógica de Programção - Módulo 1 - algoritmos-introdução
Lógica de Programção - Módulo 1 - algoritmos-introduçãoLógica de Programção - Módulo 1 - algoritmos-introdução
Lógica de Programção - Módulo 1 - algoritmos-introduçãoProfessor-David Remigio
 
Pi - aula inaugural
Pi - aula inauguralPi - aula inaugural
Pi - aula inauguralPacc UAB
 
Aula 3 - Algoritmos computacionais - parte 2
Aula 3 - Algoritmos computacionais - parte 2Aula 3 - Algoritmos computacionais - parte 2
Aula 3 - Algoritmos computacionais - parte 2Pacc UAB
 
Apostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o VisualgApostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o VisualgRegis Magalhães
 
[Pereira ic'2011] explorando o paralelismo no nível de threads
[Pereira ic'2011] explorando o paralelismo no nível de threads[Pereira ic'2011] explorando o paralelismo no nível de threads
[Pereira ic'2011] explorando o paralelismo no nível de threadsMarcio Machado Pereira
 

Tendances (20)

Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1
 
Aula 3 - Lógica de Programação
Aula 3 - Lógica de ProgramaçãoAula 3 - Lógica de Programação
Aula 3 - Lógica de Programação
 
Aula 2 - Introdução à programação de computadores - parte1
Aula 2 - Introdução à programação de computadores - parte1Aula 2 - Introdução à programação de computadores - parte1
Aula 2 - Introdução à programação de computadores - parte1
 
ICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentários
ICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentáriosICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentários
ICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentários
 
mod1-algoritmia
mod1-algoritmiamod1-algoritmia
mod1-algoritmia
 
Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1
 
Mudelo osi
Mudelo osiMudelo osi
Mudelo osi
 
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
 
Livro aed capitulos-1-2-3-introdpascal
Livro aed capitulos-1-2-3-introdpascalLivro aed capitulos-1-2-3-introdpascal
Livro aed capitulos-1-2-3-introdpascal
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de Programação
 
joane
joane joane
joane
 
Introdução a Deep Learning
Introdução a Deep LearningIntrodução a Deep Learning
Introdução a Deep Learning
 
Lógica de Programção - Módulo 1 - algoritmos-introdução
Lógica de Programção - Módulo 1 - algoritmos-introduçãoLógica de Programção - Módulo 1 - algoritmos-introdução
Lógica de Programção - Módulo 1 - algoritmos-introdução
 
Pi - aula inaugural
Pi - aula inauguralPi - aula inaugural
Pi - aula inaugural
 
Aula 3 - Algoritmos computacionais - parte 2
Aula 3 - Algoritmos computacionais - parte 2Aula 3 - Algoritmos computacionais - parte 2
Aula 3 - Algoritmos computacionais - parte 2
 
Apostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o VisualgApostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o Visualg
 
[Pereira ic'2011] explorando o paralelismo no nível de threads
[Pereira ic'2011] explorando o paralelismo no nível de threads[Pereira ic'2011] explorando o paralelismo no nível de threads
[Pereira ic'2011] explorando o paralelismo no nível de threads
 
Deep Learning
Deep LearningDeep Learning
Deep Learning
 
ICC: Modelo osi
ICC: Modelo osiICC: Modelo osi
ICC: Modelo osi
 
C:\Fakepath\TCPvsOsi
C:\Fakepath\TCPvsOsiC:\Fakepath\TCPvsOsi
C:\Fakepath\TCPvsOsi
 

Similaire à Linguagem c wellington telles - aula 01

Similaire à Linguagem c wellington telles - aula 01 (20)

Apostila chardwere
Apostila chardwereApostila chardwere
Apostila chardwere
 
C hardware
C hardwareC hardware
C hardware
 
AC nova-aula 1.pptx
AC nova-aula 1.pptxAC nova-aula 1.pptx
AC nova-aula 1.pptx
 
Conceitos de linguagens de programação
Conceitos de linguagens de programação Conceitos de linguagens de programação
Conceitos de linguagens de programação
 
Apostila SO
Apostila SOApostila SO
Apostila SO
 
Uma introdução à Computação Quântica com Q#
Uma introdução à Computação Quântica com Q#Uma introdução à Computação Quântica com Q#
Uma introdução à Computação Quântica com Q#
 
Lista exercicios algoritmos
Lista exercicios algoritmosLista exercicios algoritmos
Lista exercicios algoritmos
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
apostila de dev.pdf
apostila de dev.pdfapostila de dev.pdf
apostila de dev.pdf
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
LP002 - AULA 1.potx
LP002 - AULA 1.potxLP002 - AULA 1.potx
LP002 - AULA 1.potx
 
LP003 - AULA 2.potx
LP003 - AULA 2.potxLP003 - AULA 2.potx
LP003 - AULA 2.potx
 
Aula de C para Linux
Aula de C para LinuxAula de C para Linux
Aula de C para Linux
 
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
 
Apostila c++ básico
Apostila c++ básicoApostila c++ básico
Apostila c++ básico
 
Apostila c++ básico (1)
Apostila c++ básico (1)Apostila c++ básico (1)
Apostila c++ básico (1)
 
Hierarquia de níveis
Hierarquia de níveisHierarquia de níveis
Hierarquia de níveis
 
Apostila de devc++ novo
Apostila de devc++ novoApostila de devc++ novo
Apostila de devc++ novo
 
C curso - notas de aula
C   curso - notas de aulaC   curso - notas de aula
C curso - notas de aula
 

Plus de profwtelles

Arduino - Parte 3.pdf
Arduino - Parte 3.pdfArduino - Parte 3.pdf
Arduino - Parte 3.pdfprofwtelles
 
Arduino - Parte 2.pdf
Arduino - Parte 2.pdfArduino - Parte 2.pdf
Arduino - Parte 2.pdfprofwtelles
 
Arduino - Parte 1.pdf
Arduino - Parte 1.pdfArduino - Parte 1.pdf
Arduino - Parte 1.pdfprofwtelles
 
Aula teoria semicondutor
Aula teoria semicondutorAula teoria semicondutor
Aula teoria semicondutorprofwtelles
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
2 controle fluxo
2 controle fluxo2 controle fluxo
2 controle fluxoprofwtelles
 
Flip flops,+registradores+e+contadores
Flip flops,+registradores+e+contadoresFlip flops,+registradores+e+contadores
Flip flops,+registradores+e+contadoresprofwtelles
 
Linguagem c wellington telles - aula 08
Linguagem c   wellington telles - aula 08Linguagem c   wellington telles - aula 08
Linguagem c wellington telles - aula 08profwtelles
 
Linguagem c wellington telles - aula 07
Linguagem c   wellington telles - aula 07Linguagem c   wellington telles - aula 07
Linguagem c wellington telles - aula 07profwtelles
 
Linguagem c wellington telles - aula 06
Linguagem c   wellington telles - aula 06Linguagem c   wellington telles - aula 06
Linguagem c wellington telles - aula 06profwtelles
 
Linguagem c wellington telles - aula 04
Linguagem c   wellington telles - aula 04Linguagem c   wellington telles - aula 04
Linguagem c wellington telles - aula 04profwtelles
 
Linguagem c wellington telles - aula 03
Linguagem c   wellington telles - aula 03Linguagem c   wellington telles - aula 03
Linguagem c wellington telles - aula 03profwtelles
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02profwtelles
 
Linguagem c wellington telles - aula 05
Linguagem c   wellington telles - aula 05Linguagem c   wellington telles - aula 05
Linguagem c wellington telles - aula 05profwtelles
 
Componentes importantes para Delphi
Componentes importantes para DelphiComponentes importantes para Delphi
Componentes importantes para Delphiprofwtelles
 
Lista coseno seno
Lista coseno senoLista coseno seno
Lista coseno senoprofwtelles
 

Plus de profwtelles (20)

Arduino - Parte 3.pdf
Arduino - Parte 3.pdfArduino - Parte 3.pdf
Arduino - Parte 3.pdf
 
Arduino - Parte 2.pdf
Arduino - Parte 2.pdfArduino - Parte 2.pdf
Arduino - Parte 2.pdf
 
Arduino - Parte 1.pdf
Arduino - Parte 1.pdfArduino - Parte 1.pdf
Arduino - Parte 1.pdf
 
Aula teoria semicondutor
Aula teoria semicondutorAula teoria semicondutor
Aula teoria semicondutor
 
Ccp
CcpCcp
Ccp
 
C 1
C 1C 1
C 1
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
3 vetor.matriz
3 vetor.matriz3 vetor.matriz
3 vetor.matriz
 
2 controle fluxo
2 controle fluxo2 controle fluxo
2 controle fluxo
 
Pic aula1
Pic   aula1Pic   aula1
Pic aula1
 
Flip flops,+registradores+e+contadores
Flip flops,+registradores+e+contadoresFlip flops,+registradores+e+contadores
Flip flops,+registradores+e+contadores
 
Linguagem c wellington telles - aula 08
Linguagem c   wellington telles - aula 08Linguagem c   wellington telles - aula 08
Linguagem c wellington telles - aula 08
 
Linguagem c wellington telles - aula 07
Linguagem c   wellington telles - aula 07Linguagem c   wellington telles - aula 07
Linguagem c wellington telles - aula 07
 
Linguagem c wellington telles - aula 06
Linguagem c   wellington telles - aula 06Linguagem c   wellington telles - aula 06
Linguagem c wellington telles - aula 06
 
Linguagem c wellington telles - aula 04
Linguagem c   wellington telles - aula 04Linguagem c   wellington telles - aula 04
Linguagem c wellington telles - aula 04
 
Linguagem c wellington telles - aula 03
Linguagem c   wellington telles - aula 03Linguagem c   wellington telles - aula 03
Linguagem c wellington telles - aula 03
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
 
Linguagem c wellington telles - aula 05
Linguagem c   wellington telles - aula 05Linguagem c   wellington telles - aula 05
Linguagem c wellington telles - aula 05
 
Componentes importantes para Delphi
Componentes importantes para DelphiComponentes importantes para Delphi
Componentes importantes para Delphi
 
Lista coseno seno
Lista coseno senoLista coseno seno
Lista coseno seno
 

Linguagem c wellington telles - aula 01

  • 1. P á g i n a 1 | 6 Linguagem C – Prof. Wellington Telles Definições Linguagem Método padronizado para comunicar com um computador. O computador trabalha com lógica de bits e bytes e na sua arquitetura o seu processamento é através de microinstruções. Baixo nível Mais próxima do computador, duas gerações 1GL códigos em hexadecimal e 2GL é a linguagem Assembly (mnemônicos) Alto nível Mais próxima da linguagem humana. Exemplo em Cobol: DECIMAL-POINT IS COMMA. Ponto decimal é vírgula. Microcontrolador É um computador reduzido com processor, memória, entradas e saídas agrupados em apenas um circuito integrado. Exemplo disso é um Z80, 8051, Arduino, PIC, ESP8266, ESP32 entre outros. Por que a linguagem C para esse curso? A linguagem C é chamada de “médio nível”. A linguagem C não é das mais elegantes, mas vários sistemas suportam os seus programas, para a disciplina de programação de computadores será dada a ênfase para programação de microcontroladores. Histórico Criada entre 1969 e 1973 por Denis Ritchie (AT&T Bell Labs) para desenvolver o sistema operacional UNIX. Sucessora da linguagem B, da versão BCPL - Basic Combined Programming Language (Linguagem de Programação Básica Combinada). Algol 60 (ALGOrithmic Language - Linguagem Algorítmica) - 1957 – Projetado por um comitê internacional. CPL – Combined Programming Language. Desenvolvida em Cambridge e na Universidade de Londres em 1963. BCPL – Basic Combined Programming Language. Desenvolvida em Cambridge por Martin Richards em 1967. B – Desenvolvida por Ken Thompson, nos Laboratórios Bell em 1970, a partir da linguagem BCPL. C – Desenvolvida por Dennis Ritchie, nos Laboratórios Bell em 1972. Aparece também a figura de Brian Kernighan como colaborador. ANSI C – O comitê ANSI (American National Standards Institute) foi reunido com a finalidade de padronizar a linguagem C em 1983. C++ - A linguagem C se torna ponto de concordância entre teóricos do desenvolvimento da teoria de Object Oriented Programming (programação orientada a objetos): surge a linguagem C++ com alternativa para a implementação de grandes sistemas. Essa linguagem consegue interpretar linhas de código escritas em C. Memória A memória armazena valores como 0 e 1 (bits), que combinados em conjuntos de 8 bits forma o byte que pode ser 256 combinações diferentes (0 até 255). O computador divide a memória entre memória de programa e memória de dados. A memória pode ser RAM (Random Access Memory – Memória de acesso aleatório) ou ROM (Read Only Memor – Memória somente de leitura). Outros tipos: EPROM (Erasable programmable read-only memory - memória programável apagável somente de leitura), EEPROM (Electrically-Erasable Programmable Read-Only Memory – Eletricamente memória programável apagável somente de leitura). Barramentos (BUS) Conjunto de fios paralelos que interconecta os dispositivos de hardware como CPU, memória, entradas e saídas. Três tipos de barramentos: • Barramento de controle que controla o funcionamento dos componentes do sistema; • Barramento de endereços, onde é colocada a informação de origem ou destino para a informação a ser enviada ou recuperada; • Barramento de dados, onde trafegam os dados.
  • 2. P á g i n a 2 | 6 O Microcontrolador 8051 tem 16 linhas de endereços e pode endereçar no máximo 216 =65536, um barramento de 32 bits pode endereçar 232 = 4294967296. Programas de Computador O programa é uma lista de instruções que o computador irá executar. Normalmente o programa pode ser escrito através de um editor de texto simples como notepad++. No formato de texto não é interpretado pelo computador, uma vez que estamos programando em alto nível e o computador requer baixo nível, então será necessária uma “tradução” de um formato para o outro. O texto será transformado em um formato binário e quem faz isso é chamado de compilador. Algoritmos É um procedimento para nós ajudar a resolver problemas independente da linguagem de programação, sintetizando processos matemáticos e lógicos. Os algoritmos podem ser representados através de fluxogramas. Organização de Dados Bits: representado por 0 e 1 Nibbles: conjunto de 4 bits, para representar números BCD ou hexadecimais. Bytes: conjunto de 8 bits que pode representar 256 valores diferentes (0 a 255 ou -128 a +127 ou caracteres ASCII). Word: conjunto de n bits que pode ter 8, 16, 32, 64, 128 e etc. Double Word: compostos por duas words. Ponto Flutuante (float): números reais.
  • 3. P á g i n a 3 | 6 Tabela ASCII Metodologia Top Down Estilo Projete de cima para baixo (top for down): O projeto começa com a especificação do sistema completo de forma suficientemente compacta para que uma pessoa possa rapidamente compreendê-la. O projeto procede pela divisão do sistema em subsistemas e subunidades com as suas inter-relações bem definidas. Depois disso, cada subsistema poderá ser descrito em detalhes mantendo a capacidade de compreender os detalhes da unidade e do sistema como um todo. Esse processo continua até o sistema ter sido especificado de forma completa e detalhada, podendo prosseguir com a elaboração do cronograma. Sempre se devem utilizar técnicas que mantenham o projetista no caminho correto, dentro do processo da implementação (técnicas foolproof – contra erros bobos). O hardware permite um alto grau de flexibilidade no projeto. Essa excessiva flexibilidade permite aos projetistas utilizar rotinas e circuitos complexos e pouco comuns. O uso incontrolado dessa flexibilidade promove a implementação de forma indisciplinada, não-inteligente e incorreta. Esse fenômeno tem a contrapartida (de forma menos severa) em software de computadores, onde a linguagem assembly permite o acesso a todo o poder do computador. A experiência na solução de problemas de software e hardware tem mostrado que se deve restringir as ferramentas e técnicas de projeto que mostrem uma capacidade funcional e interpretativa, sobre uma variedade de circunstâncias. Usar técnicas de documentação para o nível de sistema e para nível dos circuitos ou rotinas de software (descrições de software e hardware) que mostrem claramente o que o projetista estava pensando, quando o problema foi primeiramente abstraído e depois para a implementação do software e do hardware. A violação deste preceito atua contra o princípio da “cortesia comum”. Durante a documentação o projetista deve-se colocar no lugar do usuário ou mantenedor do seu projeto, mantendo uma documentação clara e completa. Abstração Neste contexto, a abstração permite encarar o problema num nível conceptual. O conceito de memória é um exemplo de abstração. Quando o projeto começar, é necessário encará-lo com elementos conceituais a as suas inter- relações. Somente mais tarde, durante o processo de implementação, será necessário trabalhar com conceitos reais. Essa liberdade é absolutamente essencial para um começo apropriado de um projeto de complexidade considerável. Começa-se de cima e continua-se reduzindo o problema, até seus elementos conceituais básicos. Por exemplo, um computador precisará de uma memória, um sistema de entrada e saída, uma unidade aritmética e outros subsistemas. Comumente começa-se o projeto neste nível de abstração, e prossegue-se descendo a níveis inferiores, um por um, sempre no ponto de vista conceitual. Desta forma, no próximo nível será desenhado um diagrama de blocos de uma unidade aritmética, pela interconexão das suas unidades funcionais, tais como registradores, unidades de controle, e barramento de dados. A abstração inicial é a parte crítica de qualquer projeto, desde que, um planejamento errado
  • 4. P á g i n a 4 | 6 nas suas fases iniciais, levará inevitavelmente a implementações erradas. Normalmente não há forma de resgatar um projeto mal planejado utilizando circuitos exóticos ou rotinas de ajuste. Formalismo O formalismo é a teoria do comportamento do sistema. Em um projeto, o formalismo ajuda a estabelecer regras e procedimentos sistemáticos com características conhecidas. Os formalismos são importantes em todos os níveis do projeto. Os formalismos de “alto nível” não são de grande importância para o bom desenvolvimento do projeto e servem somente para adotar métodos sistemáticos em todos os níveis nos quais se espera a transformação correta dos conceitos em hardware ou software. No nível de implementação, o formalismo é extremamente necessário e deve ser rígido o suficiente para evitar erros na implementação. Duas naves espaciais destinadas a mapear o planeta Marte foram perdidas no espaço em 1999 porque alguns dos algoritmos projetados utilizavam unidades do sistema inglês, enquanto que outros utilizavam unidades no sistema internacional. Como o erro era muito pequeno para ser detectado nos testes, resultou em um dos erros de formalismo mais caros da história. O Projeto em Top Down O projeto começa com o estudo cuidadoso do problema geral. Deliberadamente, devem ser ignorados os detalhes neste estágio, e devem ser feitas perguntas como: • O problema está claramente definido? • É possível remodelar o problema para obter mais clareza ou simplificá-lo? • Se estivesse trabalhando com um subsistema de um sistema maior; quais seriam as relações com o subsistema de hierarquia maior? Poderá um particionamento diferente do sistema inteiro simplificar a estrutura? Neste estágio, o entendimento é global e deve permanecer neste nível até ter esmiuçado e digerido o problema, chegando ao ponto onde haja o convencimento de que este pode ser resolvido. Isto é essencial, desde que qualquer dificuldade neste nível é séria e pode ser insolúvel. Após ter especificado claramente o problema em nível global, procede-se ao particionamento racional do problema em pequenas peças com inter-relações claramente definidas. O objetivo é de escolher as peças “naturais”, de tal forma que, cada peça possa ser compreendida como uma unidade e sejam bem compreendidas as interações entre as unidades. Esse processo de particionamento continua para níveis inferiores, até a escolha final das funções a serem utilizadas, circuitos integrados a serem empregados, etc. Componentes Básicos de um Programa Um programa de computador é baseado no fluxograma do algoritmo e implementa a solução de software para o problema. Um programa em qualquer linguagem normalmente é composto pelos seguintes itens: • Os programas devem obter informação de alguma fonte de entrada. • Os programadores devem decidir a forma em que os dados de entradas serão armazenados e dispostos. • Os programas devem utilizar uma série de instruções para manipular as entradas. Estas instruções são do tipo simples, condicionais, laços e funções ou sub-rotinas. • Os programas devem apresentar os resultados da manipulação dos dados das entradas. • Uma aplicação correta incorpora os fundamentos acima listados, expressos através da utilização de um projeto modular, incluindo uma especificação completa, uma codificação devidamente documentada e um esquema de apresentação apropriado. Fundamentos de Linguagem C Características da Linguagem C É uma linguagem de “alto nível” de sintaxe estruturada e flexível, tornando sua programação bastante simplificada. Os programas em C são compilados, gerando programas executáveis depois de montados (linker). A linguagem C compartilha recursos de alto e de baixo nível, pois permite acesso e programação direta do hardware do computador. Assim, as rotinas cuja dependência de tempo seja crítica, podem ser facilmente implementadas usando instruções em Assembly. Por essa razão, a linguagem C, é a preferida dos engenheiros programadores de aplicativos. A linguagem C é estruturalmente simples e portável. O compilador C gera códigos menores e mais velozes do que outras linguagens de programação.
  • 5. P á g i n a 5 | 6 Embora, estruturalmente simples (poucas funções intrínsecas), a linguagem C não perde funcionalidade, pois permite a inclusão de uma farta quantidade de rotinas do usuário. Os fabricantes de compiladores fornecem uma ampla variedade de rotinas pré-compiladas em bibliotecas. Pontos Positivos Tamanho Pequeno: A linguagem C possui poucas regras de sintaxe, quando comparada com outras linguagens. Um compilador C pode ser implementado com apenas 256 KB de memória. Poucos Comandos: A linguagem C é extremamente pequena. O número total de palavras-chave é de 43. Isto faz dela uma linguagem extremamente simples de aprender. Velocidade: A combinação de uma linguagem pequena com regras de sintaxe simples; a falta de verificação durante a execução; e uma linguagem parecida com o assembly faz com que o código gerado seja executado em velocidades próximas a do assembler. Linguagem Estruturada: Contém todas as estruturas de controle utilizadas nas linguagens de programação mais modernas. Tem recursos de escopo utilizando variáveis locais. Não Fortemente Figurada: Os dados são tratados de maneira muito flexível, o que permite uma grande versatilidade. Suporte de Programação Modular: Suporta a compilação e montagem (linker) separadas, o que permite recompilar somente as partes de um programa que tenham sido alteradas durante o desenvolvimento. Manipulação de Bits: Uma vez que a linguagem foi criada para a implementação de sistemas operacionais, esta linguagem foi dotada de uma vasta série de operadores para a manipulação direta de bits. Interface para Rotinas em Assembly: Suporta a inclusão de rotinas em assembly diretamente no mesmo código fonte em C. Variáveis Ponteiros: Um sistema operacional deve ser capaz de endereçar áreas específicas da memória ou dispositivos de I/O. A linguagem C utiliza variáveis do tipo ponteiro permitindo manipulá-los aritmeticamente. Uma variável do tipo ponteiro guarda no seu conteúdo uma informação de endereço da informação. Estruturas Flexíveis: Os arranjos de dados são unidimensionais. Os arranjos multidimensionais são construídos a partir de arranjos unidimensionais. Bibliotecas de Funções: Existem vastas bibliotecas de funções prontas que podem ser anexadas aos executáveis durante a montagem (linker). Uso Eficiente da Memória: Os programas em C tendem a ser mais eficientes em termos de memória devido à falta de funções embutidas que não são necessárias à aplicação. Portabilidade: A portabilidade indica a facilidade de se converter um programa feito para um hardware específico e sistema operacional, em um equivalente que possa ser executado em outro hardware ou sistema operacional. Atualmente, ainda pode ser considerada como uma das linguagens mais portáveis. Pontos Negativos Não fortemente figurada: Este fato é também um ponto negativo da linguagem. Trata-se do processamento dos dados de acordo com a sua natureza ou tipo de dado. Este processamento é chamado comumente de tipagem que indica o quanto a linguagem permite a troca de dados entre duas variáveis de tipos diferentes. O uso acidental de misturas de tipos de dados pode gerar erros de execução no programa. Verificação em Tempo de Execução: A linguagem C não possui verificação em tempo de execução, de forma que podem acontecer problemas cujas origens são muito difíceis de detectar. O Padrão ANSI C O comitê ANSI (American National Standards Institute) desenvolveu padrões para a linguagem C. Anteriormente, a única referência da linguagem era o livro The C Programming Language (V. Kernighan e D. Ritchie, Laboratórios Bell, 1988) entre os fabricantes de compiladores, prejudicando a portabilidade. O padrão ANSI surgiu para remover ambiguidades, embora, nem todas tenham sido corrigidas, ele permanece como a melhor alternativa para produzir um código C portátil. O comitê ANSI adotou como norma três frases que foram denominadas “o espírito da linguagem C”, dentre elas: “Não impeça que o programador faça aquilo que precisa ser feito”. “Confie no programador”. “Mantenha a linguagem pequena e simples”. Além disso, a comunidade internacional foi consultada para garantir que o padrão ANSI C americano seria idêntico à versão do padrão ISO (International Standards Organization) Palavras Reservadas Todas as linguagens de programação têm palavras reservadas. As palavras reservadas não podem ser usadas a não ser para seus propósitos originais, i.e., não podem ser declaradas funções nem variáveis com os mesmos nomes.
  • 6. P á g i n a 6 | 6 Como a linguagem C é "case sensitive" (sensível a maiúsculas e minúsculas) pode-se declarar uma variável chamada For, apesar de haver uma palavra reservada for. Porém, isso não é recomendável, pois gera confusão no código. A seguir são listadas as palavras reservadas do ANSI C, ao todo 32 palavras. Veremos o significado destas palavras- chave, à medida que os demais conceitos forem apresentados. auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while