Introdução à Linguagem C

Estrutura de um programa

  • Um programa em C/C++ é composto por um conjunto de funções

  • Pelo menos uma função deve ser definida: main (indica início do programa)

    #include <...> // inclui cabeçalho de biblioteca
    #include <...> // inclui outro cabeçalho de biblioteca
    
    int main()
    {
      ... instruções ...
    }
    

Estrutura de um programa

Biblioteca C de funções padrão

  • A linguagem C oferece uma biblioteca de funções padrão

  • Deve ser incluído o header (arquivo contendo definições das funções) correspondente

    #include <stdio.h>  // funções de entrada/saída
    #include <math.h>    // funções matemáticas
    #include <stdlib.h> // funções de uso geral
    #include <string.h> // funções para uso de strings
    ...
    
  • Lista completa: clique aqui

Tipos de dados em C

  • char, int, float, double: tipos numéricos básicos

    • char, caractere representado em 1 byte com sinal (-128 a 127) ou sem sinal (0 a 255)

    • Podem ser combinados com modificadores:

      • short: forma curta
      • long: forma longa (às vezes igual ao sem modificador)
      • unsigned: representação sem sinal (somente positivos)
      • signed: representação com sinal (default)
  • Na prática:

    • short int <= int <= long int
    • float <= double <= long double

Tipos de dados em C

TipoBytesBitsIntervalo
short int216-32.768...32.767 (32 Kb)
unsigned short int2160...65.535 (64 Kb)
unsigned int4320...4.294.967.295 (4Gb)
int432-2.147.483.648...2.147.483.647 (2 Gb)
long int432""
signed char18-128...127
unsigned char180...255
float4327 casas de precisão
double86415 casas de precisão
  • O operador sizeof retorna, em tempo de compilação, o tamanho em bytes
  • Tabela completa: clique aqui

Entrada e saída

Padrão C

  • A entrada e saída em C se dá através de funções específicas para isso, descritas no header stdio.h

  • Exemplo de saída com a função printf:

    int i = 5;
    printf("O valor de i é: %d\n", i);
    
  • Método equivalente em Java:

    int i = 5;
    System.out.printf("O valor de i é: %d\n", i);
    // ou: System.out.println("O valor de i é: " + i);
    

Entrada e saída

Padrão C

  • Exemplo de entrada com a função scanf:

    int i;
    scanf("%d", &i);
    
    • Observe a necessidade de usar o operador & e também de indicar o tipo da variável (%d - inteira)
  • Método equivalente em Java:

    int i;
    Scanner sc = new Scanner();
    i = sc.nextInt();
    

Entrada e saída

Exemplo completo em C

#include <stdio.h>

int main()
{
  int valor1, valor2;
  printf("Digite os dois valores: ");
  scanf("%d %d", &valor1, &valor2);
  printf("Você digitou: %d e %d\n", valor1, valor);
}

Entrada e saída

Modificadores de formato para printf/scanf

FormatoSaídaExemplo
dInteiro com sinal127
uInteiro sem sinal258
xHexadecimal sem sinal8af
XHexadecimal sem sinal (maiúsculas)8AF
fReal (float ou double)5.653
cCaractere (apenas um)a
sArray de char (string)Teste

Estruturas de controle

  • Seleção:

    • Simples: if

    • Múltipla: switch

  • Repetição:

    • Por condição: while, do...while

    • Por contagem: for

Estruturas de dados

Vetores e matrizes

  • Estruturas de dados homogêneas

    • Armazenam vários valores, mas todos de um mesmo tipo (ex: todos int, double, float ou char)
  • Declaração de arrays unidimensionais ("vetores") em C:

    int v[10];  // vetor de 10 inteiros (0-9)
    char s[30]; // vetor de 30 caracteres (0-29)
    
  • Declaração de arrays com mais de uma dimensão ("matrizes"):

    int mat[4][4];    // matriz 4x4, 16 inteiros
    float c[6][4][2]; // matriz 6x4x2, 48 reais
    

Estruturas de dados

Vetores e matrizes

  • Acesso é feito através do operador [ ]

    int v[10], i;
    for(i=0; i<10; i++)
      v[i] = i;
    ...
    
  • Idem para matrizes:

    int mat[4][4], i, j;
    for(i=0; i<4; i++)
      for(j=0; j<4; j++)
        v[i][j] = i;
    ...