A linguagem C foi criada em 1972 por Dennis Ritchie no Bell Laboratories. O foco da linguagem C inicialmente foi o desenvolvimento de sistemas operacionais e compiladores. C foi usada com grande êxito na construção de uma nova versão do sistema operacional Unix, que inicialmente foi escrito em Assembly. O grande sucesso obtido no mundo do Unix fez com que a linguagem ganhasse mais e mais adeptos e atualmente, quase todos os grandes sistemas operacionais são construídos em C/C++.
É uma linguagem de propósito geral, o que quer dizer que se adapta a praticamente qualquer tipo de projeto, altamente portável e extremamente rápida em tempo de execução.
Em nosso curso estaremos usando o padrão ANSI da linguagem C para fazer nossos programas. Na aula de hoje conheceremos os elementos básicos da linguagem e expandiremos esse conhecimento ao longo do semestre.
Comentários são uma parte importante de qualquer código. Conforme os códigos vão crescendo, é importante comentá-los para explicar o funcionamento dele para alguém que poderá lê-lo depois. Além disso eles são usados como forma simplificada de documentação.
Na linguagem C os comentários são delimitados por /*
e */
. Tudo que estiver entre esses delimitadores será ignorado pelo compilador.
#include <stdio.h> /* Isto eh um comentario, ele serah ignorado pelo compilador. Nao use acentos ou caracteres especiais, pois nao sao C ANSI! */ /* Programa que calcula a media de dois numeros. */ int main () { float media; /* declara uma variavel chamada media */ media = (4 + 5) / 2.0; /* fim do programa normal */ return 0 }
Abaixo temos uma tabela com os operadores lógicos e aritméticos da linguagem C. Existem outros operadores, os operadores bitwise, mas eles não são menos utilizados então não foram incluídos. Lembre-se que essa tabela pode não ser a mesma para outras linguagens.
Operador | Operação | Linguagem C |
---|---|---|
= |
Igualdade |
== |
≠ |
Desigualdade |
!= |
< |
Menor que |
< |
≤ |
Menor ou igual |
<= |
> |
Maior que |
> |
≥ |
Maior ou igual |
>= |
OR |
Disjunção |
|| |
NOT |
Negação |
! |
AND |
Conjunção |
&& |
× |
Multiplicação |
* |
÷ |
Divisão |
/ |
₊ |
Adição |
₊ |
− |
Subtração |
− |
Resto ou Mod |
Resto de Divisão Inteira |
% |
← |
Atribuição |
= |
Toda variável em C precisa de um tipo. Essa informação diz ao compilador quanto espaço alocar para aquela variável e como o conteúdo dela deve ser interpretado no programa.
O tamanho da variável também define uma faixa de valores que podem ser armazenados corretamente dentro da variável (sem causar overflow).
Abaixo temos os tipos essenciais da linguagem C. Para ver todos os tipos básicos veja a seção Materiais Extras.
Tipo | linguagem C | Bytes | Faixa de Valores |
---|---|---|---|
Inteiro | int | 4 | -2.147.483.648 a 2.147.483.647 |
Real | float | 4 | ±3.4028234e±38 |
Caractere | char | 1 | -128 a 127 |
Os 2 tipos abaixo não são "nativos" da linguagem C, mas são muito utilizados:
Declaramos constantes e variáveis quase da mesma maneira:
<tipo> <nome 1>, ..., <nome n>;
<const> <tipo> <nome 1> = <valor ou expressão>
/* Variaveis */ int a, b, c; float media, p1, p2; char sexo, est_civil; /* Constantes */ const int VALOR = 10; const float PI = 3.1415; const char COD = 'x';
A diretiva #define associa um identificador a um valor. É utilizado para definir constantes, vincular uma determinada informação a um identificador, ou criar macros.
#define <nome da macro> <valor ou expressão>
Macros são diferentes de constantes pois nenhum espaço de memória é alocado para elas. Durante a compilação o compilador troca o identificador da macro em todas as ocorrências dele no código pelo valor associado.
Além disso, macros podem ser bastante poderosas, se o programador souber usá-las corretamente. É possível, por exemplo, construir funções usando macros.
#define FALSE 0 #define TRUE 1 #define MSG "Digite S para sair."
O comando printf é uma função disponível na biblioteca stdio.h do C. Ele é utilizado para mostrar informação na tela do usuário, ou seja, produzir output.
O printf pode ser usado para mostrar conteúdo de constantes, variáveis do programa ou uma combinação dessas. Para mostrar o conteúdo de variáveis existem modificadores que devem ser utilizados.
Além disso, ele pode ser usado com caracteres especiais, dos quais o mais utilizado é o caractere '\n', que gera uma quebra de linha.
/* mostrar mensagem constante */ printf("1. Ola mundo!\n"); /* mostrar conteudo de variaveis na mensagem */ int idade = 37; printf("2. Idade do funcionario: %d\n", idade); int cod = 2340; float prix = 1.59; printf("3. Codigo do produto: %d\nValor do Produto: %f\n", cod, prix); /* Os comandos acima geram os seguintes outputs: */ /* 1. Ola mundo! 2. Idade do funcionario: 37 3. Codigo do produto: 2340 Valor do Produto: 1.59 */
Tipo | Modificador |
---|---|
int | %d |
float | %f |
float | %.nf Onde n é o número de casas decimais ex: %.2f para duas casas decimais |
char | %c |
string | %s |
O comando scanf é uma função disponível na biblioteca stdio.h do C. Ele é utilizado para receber input do usuário.
Exemplos:
Algoritmo para ler o nome e idade de uma pessoa (em anos, meses e dias) e mostrar sua idade expressa apenas em dias.
Versão em C:
int idade_dias, anos, meses, dias; char nome[30]; printf("Digite seu nome: "); /* atencao! em caso de strings nao eh necessário o & antes da variavel */ scanf("%s", nome); /* nao utiliza & */ printf("Digite sua idade em anos, meses e dias: "); scanf("%d %d %d", &anos, &meses, &dias); /* le 3 valores inteiros digitados e atribui para as variáveis anos, meses e dias */ idade_dias = ((anos * 365) + (meses * 30) + dias); printf("A idade de %s é de %d dias\n", nome, idade_dias); return 0;
Versão em Pseudocódigo:
Variáveis idade_dias, anos, meses, dias: inteiro Início Escreva (“Digite seu nome: ”) Leia (nome) Escreva (“Digite sua idade em anos, meses e dias: ”) Leia (anos, meses, dias) idade_dias ← ((anos * 365) + (meses * 30) + dias) Escreva (“A sua idade é de ”, idade_dias, “dias.”) Fim
C é uma linguagem de programação sequencial. Isso significa que os comandos são executados linha por linha, em sequência até o final do programa. A maior parte das linguagens de programação é sequencial.
O ponto de entrada de um programa em C é a função main, que deve existir em todo programa obrigatoriamente. Isso significa que a primeira linha a ser executada em qualquer programa C é a primeira linha da função main, seguida pela linha abaixo dela, e assim por diante.
Ao longo do curso, estudaremos estruturas de controle de fluxo do programa, que alteram a ordem de execução do programa, no entanto a execução do programa é sempre sequencial, uma linha por vez.
A ferramenta acima é o C Tutor. Uma ferramenta muito útil para visualização de código que estaremos usando ao longo do semestre.
Tipo | Tamanho (bytes) | Faixa de Valores |
---|---|---|
char | 1 byte | -128 to 127 or 0 to 255 |
unsigned char | 1 byte | 0 to 255 |
signed char | 1 byte | -128 to 127 |
int | 4 bytes | -2.147.483.648 to 2.147.483.647 |
unsigned int | 4 bytes | 0 to 4.294.967.295 |
short | 2 bytes | -32,768 to 32,767 |
long | 4 bytes | -2,147,483,648 to 2,147,483,647 |
unsigned long | 4 bytes | 0 to 4,294,967,295 |
float | 4 bytes | 1.2E-38 to 3.4E+38 (6 decimal places) |
double | 8 bytes | 2.3E-308 to 1.7E+308 (15 decimal places) |
long double | 10 bytes | 3.4E-4932 to 1.1E+4932 (19 decimal places) |