Linguagem C: Conceitos Básicos

De Aulas

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

Tipos básicos
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

'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

'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
'Operadores de Atribuição
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)