Resumo Básico de C - DEV Community
Resumo Básico de C - DEV Community
Resumo Básico de C - DEV Community
6
Esse texto é para você que acabou de entrar na faculdade e está começando na matéria de lógica de
programação, ou que é autodidata e está estudando o assunto. Este é um resumo básico da linguagem C e
não contempla todos os seus aspectos, apenas o necessário para que você possa começar a escrever seus
primeiros algoritmos.
A proposta aqui é ser um guia rápido, com código, significado, erros comuns e boas práticas, para que você
perca menos tempo se preocupando com sintaxe (como “falar” em C por si só) e mais com a lógica e o
raciocínio para resolver o problema.
Observações: não copie os códigos, escreva linha por linha para treinar. Se encontrar um erro não se
desespere. Leia o erro, tente entendê-lo, depois copie e pesquise na internet, caso já não tenha encontrado a
solução.
Como no final das contas o computador só entende em binário, 1 e 0, ele precisa traduzir e/ou interpretar a
linguagem que estamos usando. No caso da linguagem C, ele será compilada para que o computador possa
nos entender.
A linguagem C foi criada em 1972 por Dennis Ritchie e é bastante influente até hoje. Para saber mais sobre
ela dê uma lida na página do Wikipédia sobre a linguagem.
#include <stdio.h>
int main()
{
A diretiva #include está dizendo que queremos incluir algo pronto no programa e o <stdio.h> é uma
biblioteca padrão do C, que significa standard input/output (“entrada/saída padrão”). Uma biblioteca é como
uma coleção de recursos prontos que podemos adicionar ao nosso código.
Erro comum: para fazer qualquer coisa básica no C você precisa colocar #include <stdio.h> no início do seu
programa, senão dará erro de compilação.
O int é um indicativo de inteiro (pode pensar em números mesmo), e o main quer dizer função principal. O
main será executado primeiro depois que o programa for compilado.
O que estamos expressando nas linhas de 3 a 6 é que queremos iniciar o programa com a função principal e
que essa função tem um retorno inteiro. Os () indicam que o main é uma função, e as {} indicam o corpo
da função: é onde você, inicialmente, colocará seus códigos.
Erro comum: nunca se esqueça de fechar parênteses, colchetes e chaves nos programas, sempre fazendo os
pares.
Sempre que for iniciar um exercício de lógica de programação aproveite e escreva logo essa estrutura básica,
para não se esquecer.
Para fazer comentários no programa utilize // comentário e escreva numa linha, ou então utilize o bloco de
comentário /* comentário */ .
Obs: é possível que seu professor utilize algo como int main(int argc, char *argv[]){} , mas essa estrutura vai
mais a fundo na linguagem.
Tipos de dados
Para lidar com diferentes dados, como números ou letras, precisaremos utilizar diferentes tipos de dados.
Basicamente você irá lidar com:
No geral esses são os tipos mais comuns, mas você pode consultar essa tabela de tipos mais completa da
linguagem C.
Erro comum: se você declarar uma variável de um tipo e guardar, escrever ou ler um dado de outro tipo tem
grande chances de dar erro de compilação.
Atribuição
O sinal de igual = é um sinal de atribuição. Isso quer dizer que estamos atribuindo algum dado a uma
variável ou constante no nosso programa, ou seja, guardaremos um dado na memória.
Exemplo:
#include <stdio.h>
int main()
{
int numero = 10;
}
Declaramos o tipo da nossa variável, demos o nome de número a ela e atribuímos o valor 10, que agora está
guardado.
#include <stdio.h>
int main()
{
char sexo = 'M';
}
Não é necessário atribuir um valor logo que declaramos a variável ou constante, você pode apenas inicializá-
la, como em int idade; .
#include <stdio.h>
int main()
{
printf("Olá, mundo");
}
O printf é uma função que temos acesso por causa do <stdio.h> . Ela indica que algo será apresentado na
tela para o usuário, e para mostrar a frase nós utilizamos aspas duplas.
Erro comum: se você se esquecer do ponto e vírgula ao final dará erro de compilação.
#include <stdio.h>
int main()
{
int numero = 10;
printf("%d", numero);
}
Veja como utilizamos o símbolo %d no printf para indicar que estamos printando um inteiro, fechamos as
aspas duplas para representar o fim da frase, usamos uma vírgula e colocamos o nome da variável (iremos
entender mais de variáveis depois). Cada tipo de dado, para ser printado ou lido, tem um indicador diferente.
Veja:
int : use %d
float : use %f
double : use %lf
char : use %c
Se estiver printando um número de ponto flutuante e quiser definir o número de casas decimais, pode usar
%.2f , por exemplo, para limitar para duas casas decimais.
#include <stdio.h>
int main()
{
int idade;
Inicializamos uma variável e a deixamos pronta para receber um dado do tipo inteiro, perguntamos a idade
com o printf , utilizamos a função scanf para “escanear” o que o usuário digitar, que deve ser um %d , e
guardamos na variável idade utilizando o & (“e” comercial ou ampersand).
Erro comum: se você se esquecer de colocar o & o dado não será lido e dará erro.
Obs: para guardar uma string (uma sequência de caracteres, como “Olá”) você pode utilizar um vetor de char
com o número de elementos que precisa, como, por exemplo char ola[3] .
Sequências de escape
Em algum momento você verá que um print final está “colado” ao terminal, ou então precisará dar um espaço
na margem, ou então tentará imprimir aspas duplas dentro de aspas duplas. Para resolver essas situações
utilizamos o caracter de escape (backslash): \ .
#include <stdio.h>
int main()
{
int idade;
printf("\tOlá! Bem-vindo.\n\n");
Faça um teste: remova todos os \t , \n e \” , salve o código, compile e rode novamente para ver a diferença.
Erro comum: verifique se você está usando a barra invertida mesmo ou se por engano usou a barra comum
( / ).
Variáveis e constantes
Como já falamos aqui, utilizamos variáveis para guardar um dado no nosso programa. Como o nome já diz,
esses dados podem mudar. Para guardar um dado que não deve mudar no seu código utilize constantes.
Variáveis e constantes são guardadas na memória do nosso computador, podendo ser declaradas de
imediato (atribuindo um dado) ou apenas inicializadas (sem valor pronto, aguardando serem utilizadas).
Exemplos de variáveis:
#include <stdio.h>
int main()
{
int idade;
float area_do_quadrado;
char sexo = 'M';
double numero_double = 1222223.999999;
}
Para declarar constantes, coloque-as logo após a declaração de bibliotecas e utilize a diretiva #define :
#include <stdio.h>
int main()
{
int idade;
float area_do_quadrado;
}
Erro comum: não coloque ponto e vírgula ao final da declaração das constantes e não coloque a diretiva
dentro da função main .
Obs: utilize nomes descritivos para as variáveis e constantes. Não é pecado usar um i numa estrutura
for , por exemplo, mas sempre que possível tente dar nomes autoexplicativos. O código fica mais fácil de ler,
para os outros e também para você mesmo.
#include <stdio.h>
int main()
{
int resultado;
// soma
resultado = 10 + 5;
printf("%d\n", resultado);
// subtração
resultado = 10 - 5;
printf("%d\n", resultado);
// multiplicação
resultado = 10 * 5;
printf("%d\n", resultado);
// divisão
resultado = 10 / 5;
printf("%d\n", resultado);
// resto da divisão
resultado = 10 % 5;
printf("%d\n", resultado);
}
Erro comum: assim como na matemática, na linguagem C temos precedência de operadores, então utilize
parênteses para indicar que alguma expressão deve ser calculada antes.
Quando quiser incrementar ou decrementar uma variável de forma automática, faça o seguinte:
i++ : significa i = i + 1
i-- : significa i = i - 1
Essas estruturas são muito úteis principalmente em estruturas de repetição. Repare que, como i é uma
variável, ela pode ter seu valor atualizado.
Estruturas de decisão
Quando precisamos tomar uma decisão no nosso código utilizamos estruturas de decisão. Alguns exemplos
do que isso significa:
#include <stdio.h>
int main()
{
int numero = 10;
if (numero == 10)
{
print("O número é igual a 10");
}
else
{
print("O número não é igual a 10");
}
}
O programa acima vai printar “O número é igual a 10”, pois a variável numero é igual a 10. Leia da seguinte
forma: “se a variável numero for igual a 10, print que o número é igual a 10, senão, print que não é igual a 10”.
Observe que você pode utilizar somente if sem else , exemplo: “se isso, faça aquilo”. Mas não pode utilizar
o else sem um if antes, até porque não faz sentido. Podemos aninhar quantos ifs e elses forem necessários
para nossa lógica.
Temos também o else if , onde podemos adicionar mais uma opção para o caso de não cair no 1º if .
Observe:
#include <stdio.h>
int main()
{
int numero = 12;
if (numero == 10)
{
numero++;
}
else if (numero == 12)
{
printf("Igual a 12.\n");
}
else
{
printf("Não é igual a nenhuma das opções!\n");
}
}
Como aqui o numero é igual a 12, irá cair no else if e irá printar “Igual a 12” na tela.
Por fim, temos a estrutura de decisão switch...case , onde pré-determinamos todas as opções que podem
ocorrer:
#include <stdio.h>
int main ()
{
int numero;
switch (numero)
{
case 1 :
printf ("Digitou 1\n");
break;
case 2 :
printf ("Digitou 2\n");
break;
case 3 :
printf ("Digitou 3\n");
break;
default :
printf ("Número inválido!\n");
}
}
Obs: preste atenção na indentação do seu código. Indentar é dar aquele espacinho entre a margem
esquerda e o começo do código, de modo a deixar a estrutura mais legível. Para o C é muito comum usar 4
espaços (spaces), e basta dar um “Tab” para ajustar. Sempre que você estiver aninhando uma estrutura dentro
de outra, por exemplo, é interessante utilizar um recuo.
Veja o exemplo:
#include <stdio.h>
int main()
{
int idade = 17;
Como 17 não é maior que 18, o else entra em ação e printa a mensagem adequada.
Exemplo:
#include <stdio.h>
int main()
{
int idade;
Repare que na expressão idade < 18 && idade >= 16 estamos relacionando para ver se a idade é menor que
18 E se também é maior ou igual a 16.
O && só retorna verdadeiro se ambas expressões forem verdadeiras, o || só precisa que uma seja verdadeira
para retornar verdadeiro e o ! inverte a expressão (se for falsa, vira verdadeiro, se for verdadeiro, vira falso).
Você pode ler um pouco mais sobre tabelas-verdade aqui.
Erro comum: para evitar confusão em quais expressões lógicas serão verificadas primeiro, adicione
parênteses, por exemplo, (idade < 18 && idade >= 16) || (idade > 70) .
Estruturas de repetição
Quando precisamos repetir alguma lógica utilizamos as seguintes estruturas:
#include <stdio.h>
int main()
{
int numero;
O programa acima pede para você digitar um número, e enquanto esse número for positivo, ele continuará te
perguntando e lendo os números que você digitar. Ou seja, só vai sair da estrutura while quando você digitar
um número negativo.
#include <stdio.h>
int main()
{
int soma = 0;
int contador;
Nesse programa nós declaramos que a soma inicial é 0 e inicializamos a variável contador . No for ,
começamos com o contador em 1, e enquanto o contador for menor que ou igual a 5 ele irá atualizar o valor
da soma, somando o que já tinha com o valor atual do contador. No final das contas teremos “Soma: 15”
printado na tela, que é a soma de 1 + 2 + 3 + 4 + 5.
Repare que:
#include <stdio.h>
int main()
{
int numero = 1;
do
{
printf("Numero: %d\n", numero);
numero++;
}while (numero <= 3);
}
No exemplo acima iremos printar o numero atual, incrementar 1 a variável numero e continuar fazendo isso
enquanto ela seja menor ou igual a 3. A diferença do do...while para o while é que no do...while nós
iremos entrar no bloco independente se a condição no while do final é verdadeira ou falsa. No while se
a condição não for satisfeita inicialmente nem vamos entrar no bloco.
Erro comum: analise bem se você está utilizando a estrutura correta para resolver o problema.
Vetores
Usamos vetores para armazenar uma quantidade certa de dados do mesmo tipo. Declaramos assim:
#include <stdio.h>
int main()
{
int tabuada[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
char sexo[2];
char iniciais = {"F", "G", "V"};
}
No código acima nós declaramos um vetor do tipo inteiro chamado tabuada , sendo que o [10] expressa a
quantidade de elementos que temos no vetor, que são os números de 1 a 10. Se o vetor tivesse 5 elementos
teríamos [5] .
Para identificar cada elemento do vetor usamos o seu índice, que começa a ser contado no 0. Exemplo: cada
elemento {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} do exemplo acima poderá ser acessado com tabuada[0] que
corresponde ao 1, tabuada[1] que corresponde ao 2, tabuada[2] que corresponde ao 3 e por aí vai.
Erro comum: lembre-se de verificar se você está olhando o número correto a partir do seu índice, ou se está
contando erroneamente a partir do 1 ao invés de 0.
Por hora é isso. Acompanhe as aulas ou tutoriais que esteja fazendo e acompanhe com esse artigo para se
lembrar da sintaxe. Para aprofundar seu conhecimento na linguagem C recomendo fortemente o livro
Linguagem C: Completa e descomplicada, do professor André Backes.
Fontes:
Photo by CDC on Unsplash
C data types
Truth table Wikipedia
Esse texto não tem intenção de esgotar o tema. Acrescente nos comentários, e também aponte erros quando os
identificar.
Natália Oliveira
LOCATION
Salvador, Bahia.
PRONOUNS
She/her
WORK
Software Engineer at Jusbrasil
JOINED
25 de fev. de 2018