Linguagem C: Conceitos Básicos
Links relativos: Programação em C
Histórico
Ao ponto de vista técnico, o surgimento do C iniciou com a linguagem ALGOL 60, definida em 1960. ALGOL era uma linguagem de alto nível, que permitia ao programador trabalhar longe da máquina, sem se preocupar com os aspectos de como cada comando ou dado era armazenado ou processado. Foi criado para substituir o FORTRAN. ALGOL não teve sucesso, talvez por tentar ser de muito alto nível em uma época em que a maioria dos sistemas operacionais exigiam do usuário um grande conhecimento de hardware.
1967
Surgimento da CPL (Combined Programming Language) nas universidades de Londres e Cambridge. Assim como o ALGOL, a CPL não foi muito bem aceita por ser considerada pelos projetistas de Sistemas Operacionais como difícil de se implementar.
Ainda nesse ano, Martin Richards criou o BCPL (Basic CPL) na universidade de Cambridge. Esta era uma simplificação da CPL com apenas as "coisas boas do CPL";
1970
Ken Thompson, chefe da equipe que projetou o UNIXU para PDP11 da Bell Labs, implementou um compilador para uma versão mais reduzida do CPL e batizou a linguagem de B.
Contudo:
- Tanto BCPL quanto B mostravam-se muito limitadas, prestando-se apenas para certas classes de problemas;
- O grupo responsável pelo UNIX precisava reescrevê-lo em uma linguagem de alto nível. Contudo, a linguagem B era considerada lenta;
1972
O projetista Dennis Ritchie da Bell Labs criou a linguagem C (início em 1971 e término em 1972).
- Por 10 anos a sintaxe tida como padrão da linguagem C foi aquela fornecida com o UNIX versão 5.0 da Bell Labs.
- A principal documentação deste padrão encontra-se na publicação The C Programming Language, de Brian Kernighan e Dennis Ritchie (K&R), tida como a "bíblia da linguagem C".
- O mais ponto forte desta versão de C era que os programas-fonte criados para rodar em um tipo de computador podiam ser transportados e recompilados em outros sem grandes problemas. A esta característica dá-se o nome de portabilidade. Com ela, uma empresa que desenvolve um programa pode fazê-lo rodar em diferentes computadores sem ter um elevado custo a cada vez que isto for feito.
1985
O Instituto ANSI (American National Standards Institute) estabeleceu um padrão oficial de C o chamado C ANSI.
Estrutura de um Programa em C
1/*
2 Diretivas para o pré-processador começam com #
3 Obs: Isto é um comentário com mais de uma linha
4*/
5
6// Importação de bibliotecas
7#include <stdio.h>
8
9// Define uma macro (no caso é uma constante global)
10#define text "Hello world!"
11
12// Declaração de variáveis globais
13int a = 1;
14
15// Protótipos de funções
16int soma(int, int);
17
18// Função principal de um programa C (main)
19int main() {
20 // Declaração de variáveis
21 int b = 2;
22 int c = soma(a, b);
23
24 // comandos da função main
25 printf("%s - %d\n", text, c);
26}
27
28// Implementação de funções
29int soma(int input01, int input02) {
30 int output = input01 + input02;
31 return output;
32}
Tipos Básicos de Variáveis
Nome | Descrição | Tamanho | Abrangência |
---|---|---|---|
char | byte/caracter | 1 byte | signed: -128 to 127 unsigned: 0 to 255 |
short int (short) |
inteiro curto | 2 bytes | signed: -32768 to 32767 unsigned: 0 to 65535 |
int | inteiro | 4 bytes | signed: -2147483648 to 2147483647 unsigned: 0 to 4294967295 |
long int (long) |
inteiro longo | 4 bytes | signed: -2147483648 to 2147483647 unsigned: 0 to 4294967295 |
bool | Booleano, podendo ter dois valores: verdadeiro ou falso. | 1 byte | true ou false |
float | valor de ponto flutuante | 4 bytes | +/- 3.4e +/- 38 (~7 dígitos) |
double | valor de ponto flutuante com precisão dupla | 8 bytes | +/- 1.7e +/- 308 (~15 dígitos) |
long double | valor de ponto flutuante com long double | 8 bytes | +/- 1.7e +/- 308 (~15 dígitos) |
Exemplos de bibliotecas C
#include <stdio.h> // Funções de entrada e saída
#include <stdlib.h> // Funções padrão
#include <math.h> // Funções matemáticas
#include <string.h> // Funções para operações com strings
Programa Hello world
#include <stdio.h>
int main() {
printf("Hello world!\n");
}
Compilar:
gcc helloworld.c -o helloworld
Executar:
./helloworld
Observações:
- Sempre termine os comandos com ponto e vírgula ;
- Quando ocorrer um erro de compilação, verifique também a linha anterior
Declaração de variáveis
- Ao declarar as variáveis, é necessário informar seu tipo
- Os nomes das variáveis devem conter apenas letras, dígitos e o símbolo _ e iniciar com letra ou _
- Os principais tipos são: int, float, double e char
- A linguagem C diferencia letras maiúsculas de minúsculas
Exemplos:
int n, N; // n é diferente de N;
int quantidade_valores;
float x, y, somaValores;
char sexo;
char nome[40];
Atribuição de valores
- Atribui o valor da direita à variável da esquerda
- O valor pode ser:
- uma constante,
- uma variável ou
- uma expressão
Exemplos:
x = 4; // lemos: x recebe 4
y = x + 2; // lemos: y recebe (x mais 2)
y = y + 4; // lemos: y recebe (y mais 4)
valor = 2.5;
nome = "Saulo" // ERRADO: note que o compilador vai dar um erro aqui
strcpy(nome, "Saulo"); // Utilizar operações com strings para atribuição
Operadores Matemáticos
Operador | Exemplo | Comentário |
---|---|---|
+ | x + y | soma x e y |
- | x - y | subtrai y de x |
* | x * y | multiplica x com y |
/ | x / y | divide x por y |
% | x % y | resto da divisão de x por y |
++ | x++ | incrementa em 1 o valor de x |
-- | x-- | decrementa em 1 o valor de x |
Observação: o operador “/” (divisão) terá um resultado inteiro se os dois operandos forem inteiros. Para um resultado real, um dos dois operandos devem ser real (ou os dois)
Operadores de Atribuição
Operador | Exemplo | Comentário |
---|---|---|
= | x = 10 | atribui o valor 10 à x |
+= | x += 10 | acrescenta 10 à x |
-= | x -= 10 | incrementa x em 10 |
*= | x *= 2 | multiplica x por 2 |
/= | x /= 2 | divide x por 2 |
%= | x %/ y | equivalente à x = x % y |
Funções Matemáticas
- incluir a biblioteca math.h
Função | Exemplo | Comentário |
---|---|---|
ceil | ceil(x) | Arredonda um número real para cima: ceil(3.2) é 4 |
cos | cos(x) | cosseno de x (x em radianos) |
exp | exp(x) | e elevado à potência x |
fabs | fabs(x) | valor absoluto de x |
floor | floor(x) | arredonda um número real para baixo: floor(3.2) é 3 |
log | log(x) | Logaritmo natural de x |
log10 | log10(x) | logaritmo decimal de x |
pow | pow(x, y) | x elevado à potência y |
sin | sin(x) | seno de x (x em radianos) |
sqrt | sqrt(x) | raiz quadrada de x |
tan | tan(x) | tangente de x (x em radianos) |