C Linguagem C

Last updated: August 14th, 2018

Introdução

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.

Programação em C

Estrutura Básica

Prev Next

Comentários

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
}
                                        

Operadores

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

=

Tipos de Variáveis

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:

  • Lógico (Booleano):
    Usar int, será “falso” quando for zero, e “verdadeiro” quando não for zero.
  • String (Sequência de caracteres):
    char nome[tamanho]
    ex: char endereco[30]

Declaração de Variáveis e Constantes

Declaramos constantes e variáveis quase da mesma maneira:

  • Variáveis: <tipo> <nome 1>, ..., <nome n>;
  • Constantes: <const> <tipo> <nome 1> = <valor ou expressão>

Exemplo:

/* 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';
                                            

Declaração de Macros

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.

Exemplo:

#define FALSE 0
#define TRUE 1
#define MSG "Digite S para sair."
                                        

O Comando printf

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.

Exemplos:

/* 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
*/
  • Note que, após a string de mensagem, há uma lista de variáveis a serem mostradas, na mesma ordem em que seus modificadores foram inseridos, e que o tipo da variável deve ser compatível com o tipo indicado pelo modificador, como veremos a seguir.

Modificadores

Os modificadores para os tipos básicos de C estão listados abaixo. Existem outros modificadores e opções de formatação para printf (e scanf como veremos em seguida) que podem ser vistos aqui. No entanto vale dizer que a lista é longa e esses modificadores serão pouco utilizados.
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

O comando scanf é uma função disponível na biblioteca stdio.h do C. Ele é utilizado para receber input do usuário.

  • Ele armazena o que o usuário digitou em uma variável no programa.
  • Segue a mesma lógica de modificadores que o printf (usando os mesmos modificadores), porém, exige que seja passado o ENDEREÇO da variável, ou seja, colocando um & antes do nome da variável.

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

Estrutura Sequencial

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.

Exemplo:

Prev Next

A ferramenta acima é o C Tutor. Uma ferramenta muito útil para visualização de código que estaremos usando ao longo do semestre.

Materiais Extras

Tipos em C

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)