🅲 Preparação: Para este conteúdo, o aluno deverá dispor de um computador com acesso à internet, um web browser com suporte a HTML 5 (Google Chrome, Mozilla Firefox, Microsoft Edge, Safari, Opera etc.), um editor de texto ou IDE (VSCode etc.) e o software C/C++, com a versão mais recente, instalado na sua máquina local.
- https://exercism.org/tracks/c
- http://www.dpi.inpe.br/~carlos/Academicos/Cursos/LinguagemC/Cap_1.html
- https://exercism.org/tracks/cpp
- https://cplusplus.com/
Hoje em dia, o desenvolvimento de sistemas se baseia em vários e diferentes paradigmas, tais como os listados a seguir:
- Imperativo (Procedural): Segue sequências de comandos ordenados segundo uma lógica.
- Funcional: Trabalha com a divisão de problemas através de funções, que resolvem separadamente problemas menores e que, ao serem organizados, resolvem o problema como um todo.
- Lógico: Voltado ao desenvolvimento de problemas de lógica e usado em sistemas de inteligência computacional.
- Orientado a Objetos (OO): Define um conjunto de classes para dividir o problema e realiza a interação entre as diferentes classes para também resolver o problema como um todo.
Uma tarefa difícil na área de computação é convencer um estudante que aprender uma nova linguagem de programação, ou usar uma linguagem que não é a preferida dele, é necessário e essencial dentro de uma disciplina. Quando se trata de uma linguagem que para alguns está ultrapassada, como a linguagem C, a tarefa é ainda mais difícil.
Existem muitas razões para o aprendizado de C ser fundamental. Muitos a consideram até a "mãe de todas as linguagens de programação".
Ela foi projetada para implementar o Sistema Operacional Unix, ficando próxima ao sistema operacional, o que a torna uma linguagem eficiente devido ao seu hábil gerenciamento de recursos no nível do sistema.
Outro ponto importante é que essa linguagem não é limitada, mas amplamente utilizada em:
- Sistemas operacionais.
- Compiladores de linguagem.
- Drivers de rede.
- Interpretadores de linguagem.
- Áreas de desenvolvimento de utilitários de sistema.
- Sistemas embarcados (embutidos).
Outras vantagens da linguagem C, incluem:
- Onipresente: Qualquer que seja a plataforma, C provavelmente está disponível.
- Portável: Um programa em C compila com modificações mínimas em outras plataformas − às vezes até funciona de imediato.
- Simples: C é muito simples de aprender e praticamente não requer dependências. Basta um simples PC com o compilador e tudo está pronto para criar programas.
C é uma linguagem considerada de nível intermediário e precisa de um compilador para criar um código executável e para que o programa possa funcionar em uma máquina.
Compilação é processo de tradução do código-fonte escrito para um código de máquina. É feita por um software especial conhecido como compilador, que verifica o código-fonte em busca de qualquer erro sintático ou estrutural e gera um código-objeto com extensão.obj
(no Windows) ou.o
(no Linux), se o código-fonte estiver livre de erros.Iremos utilizar um compilador para o Windows, o MinGW.
Toda a compilação é dividida em quatro etapas:
- Pré-processamento.
- Compilação.
- Montagem (assembler).
- Vinculação (linker).
A figura 1 descreve todo o processo de compilação em C.
Uma IDE, ou Ambiente de Desenvolvimento Integrado (Integrated Development Environment), reúne características e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo, disponibilizando todo o processo de compilação no apertar de um botão.
Podemos detalhar o processo exemplificando a compilação em Linux de um programa em C simples como o abaixo, de nome compilacao.c
, que escreve na tela a frase Hello, World!
:
#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
O comando #include
serve para incluir uma biblioteca e o comando <stdio.h>
serve para a entrada e saída de dados;
A função main ()
e {}
dentro dela o comando printf ("Ola mundo \n");
Necessita do ;
para rodar a função!
Para compilar o programa acima abre-se o prompt de comando e pressiona-se o comando abaixo:
gcc -save-tempscompilacao.c -o compilacao
A opção -save-temps
preservará e salvará todos os arquivos temporários criados durante a compilação em C. Ele gerará quatro arquivos no mesmo diretório:
- compilacao.i (gerado pelo pré-processador).
- compilacao.s (gerado pelo compilador).
- compilacao.o (gerado pelo montador).
- compilacao (no Linux gerado pelo linker) ou (compilacao.exe no Windows)
Agora, entenda o papel de cada elemento do processo de compilaÇão:
O pré-processador é um pequeno software que aceita o arquivo-fonte C e executa as tarefas abaixo.
- Remove comentários do código-fonte.
- Faz a expansão dos arquivos de cabeçalho incluídos.
- Gera um arquivo temporário com a extensão
.i
após o pré-processamento. Ele insere o conteúdo dos arquivos de cabeçalho no arquivo de código-fonte. O arquivo gerado pelo pré-processador é maior do que o arquivo de origem original.
Na próxima fase da compilação C, o compilador entra em ação. Ele aceita o arquivo pré-processado temporário nome_do_arquivo.i gerado pelo pré-processador e executa as seguintes tarefas:
- Verifica o programa C para erros de sintaxe.
- Traduz o arquivo em código intermediário, ou seja, em linguagem assembly.
- Otimiza,opcionalmente, o código traduzido para melhor desempenho.
- Gera um código intermediário na linguagem assembly, após a compilação, como
nome_do_arquivo.s
. É a versão de montagem do código-fonte.
Passando para a próxima fase de compilação, o assembler aceita o código-fonte compilado (nome_do_arquivo.s
) e o traduz em código de máquina de baixo nível. Após a montagem bem-sucedida, gera o arquivo nome_do_arquivo.o
(no Linux) ou nome_do_arquivo.obj
(no Windows) conhecido como arquivo objeto. No nosso caso, gera o arquivo compilacao.o.
Finalmente, o linker entra em ação e executa a tarefa final do processo de compilação. Aceita o arquivo intermediário nome_do_arquivo.o
gerado pelo assembler.
Ele liga todas as chamadas de função com sua definição original. O que significa que a função printf ()
é vinculada à sua definição original. O vinculador gera o arquivo executável final.
Na programação, uma variável é um contêiner (área de armazenamento) para armazenar dados.
Para indicar a área de armazenamento, cada variável deve receber um nome exclusivo (identificador). Os nomes de variáveis são apenas a representação simbólica de um local de memória.
int resultado = 95;
Aqui, resultado é uma variável do tipo inteiro (int
). Para esta variável, é atribuído um valor inteiro, 95
.
O valor de uma variável pode ser alterado, como abaixo. Daí o nome, variável.
char ch = 'a';
// algum código
ch = 'l';
Um nome de variável pode ter letras ( A primeira letra de uma variável deve ser uma letra), dígitos e símbolo "_".
ATENÇÃO! Não há nenhuma regra sobre o tamanho que um nome de variável (identificador) pode ter. No entanto, podemos ter problemas em alguns compiladores se o nome da variável tiver mais de 31 caracteres.
C é uma linguagem fortemente tipada ou tipificada. Isso significa que o tipo da variável não pode ser alterado depois de declarado.
intnumero = 5; // variável inteira
numero = 5.5; // erro
floatnumero ; // erro
Aqui, o tipo de variável numérica é int
. Você não pode atribuir um valor de ponto flutuante (5.5
) a essa variável. Além disso, você não pode redefinir o tipo da variável para float
.
A propósito, para armazenar valores com casas decimais em C, você precisa declarar seu tipo paradouble
oufloat
.
Uma constante é um valor (ou um identificador) cujo valor não pode ser alterado em um programa.
1, 2.5, 'c' etc.Aqui, 1, 2.5 e 'c' são constantes literais. Não se pode atribuir valores diferentes a esses termos.
constfloat PI = 3,14;
Observe que adicionamos a palavra-chave const.
Aqui, PI é uma constante simbólica. Na verdade, é uma variável, no entanto, seu valor não pode ser alterado.
Veja os tipos de constantes que podem ser usadas em C:
- Constantes inteiras.
- Constantes de ponto flutuante.
- Constantes de caracteres.
Uma constante de caractere é criada, colocando-se um único caractere entre aspas simples.
Por exemplo: 'a', 'm', 'F', '2', '}' etc.
- Sequências de escape
Às vezes, é necessário usar caracteres que não podem ser digitados ou que tenham significado especial na programação C. Para usar esses caracteres, a sequência de escape é usada.
Por exemplo: \n
é usado para nova linha. \t
como tabulação horizontal. A barra invertida (\
) faz com que se escape do modo normal, em que os caracteres são manipulados pelo compilador.
- String literal Uma string literal é uma sequência de caracteres entre aspas duplas.
"legal" // constante de string
"" // constante de cadeia nula
" " // constante de seis espaços em branco
"A" // constante de string com caractere único
"Resultado eh\n" // imprime string com nova linha
- Enumerações
A palavra-chave
enum
é usada para definir tipos de enumeração.
enum cor {amarelo, verde, preto, branco};
Aqui, a cor é uma variável e amarelo, verde, preto e branco são as constantes de enumeração com valor 0, 1, 2 e 3, respectivamente.
Pode-se definir constantes simbólicas usando-se também a palavra #define.
São 5 os tipos de dados básicos em C:
char |
Caractere |
|
# include <stdio.h>
int main(void){
printf("Hello, World!\n");
}
Entrada (Input):
make main.c
./main
Saída (Input):
Hello, World!
As áreas de TI e Comunicação trazem, a todo o momento, modificações, inovações, adequações, enfim, apresentam-se de forma cada vez mais interessantes para o usuário e desafiadoras para o profissional que as constrói. Assim, preparar equipes capazes de conceber, planejar e desenvolver soluções que funcionarão nas futuras gerações das áreas de Tecnologia da Informação e Comunicação (TIC) apresenta-se como demanda urgente aos Cursos da área de TI e um desafio às práticas pedagógicas do professor para o ensino da computação.
Circuitos digitais são definidos como circuitos eletrônicos que empregam a utilização de sinais elétricos em apenas dois níveis de corrente (ou tensão) para definir a representação de valores binários. A importância do estudo dos circuitos lógicos como base para o estudo dos sistemas digitais é de grande relevância, uma vez que são a base dos circuitos encontrados nos computadores atuais e em uma enorme quantidade de dispositivos e instrumentos usados em todas as áreas.