[Piquete] Introdução ao C++
Introdução ao C++
Do básico à preparação para o Arduino · Ensino Médio Técnico em Desenvolvimento de Sistemas
Introdução ao C++
01O que é C++?
C++ é uma linguagem de programação de propósito geral criada por Bjarne Stroustrup em 1979, como extensão da linguagem C. É compilada — o código que você escreve é traduzido para a linguagem da máquina antes de executar, o que a torna extremamente rápida e eficiente.
Curiosidade: O nome "C++" é uma brincadeira com o operador de incremento da linguagem C (o ++), simbolizando que C++ é um "C melhorado"!
Linguagem Compilada vs Interpretada
Para entender C++, é fundamental saber que existem dois grandes modelos de execução de linguagens de programação: compiladas e interpretadas. Cada uma tem características próprias que definem onde e como são usadas.
Linguagem Compilada
- O código-fonte é traduzido inteiramente para código de máquina antes da execução
- O processo de tradução é feito por um programa chamado compilador
- Gera um arquivo executável independente (
.exe, binário) - Execução muito mais rápida — a tradução já foi feita
- Erros de sintaxe são detectados antes de rodar o programa
Linguagem Interpretada
- O código-fonte é traduzido e executado linha por linha em tempo real
- A tradução é feita por um programa chamado interpretador
- Não gera executável — precisa do interpretador instalado
- Execução mais lenta — traduz enquanto executa
- Facilita testes rápidos e desenvolvimento ágil
Analogia: A linguagem compilada é como traduzir um livro inteiro para o português antes de publicá-lo — a leitura depois é fluida e rápida. A interpretada é como ter um tradutor simultâneo ao lado: funciona, mas há uma pequena demora em cada frase.
┌─────────────────────────────────────────────────────────────────┐ │ FLUXO DE COMPILAÇÃO C++ │ └─────────────────────────────────────────────────────────────────┘ programa.cpp ← você escreve aqui (código-fonte) │ ▼ Compilador (g++) ← verifica erros e traduz tudo │ ▼ programa.exe ← arquivo executável gerado │ ▼ Execução rápida ← CPU roda diretamente, sem tradutor No Arduino: o IDE compila o .ino e grava o binário no chip!
Onde C++ é utilizado?
| Área | Exemplos do mundo real |
|---|---|
| 🎮 Jogos digitais | Unreal Engine, Call of Duty, World of Warcraft |
| 🖥️ Sistemas operacionais | Partes do Windows, Linux, macOS |
| 🏦 Sistemas financeiros | Bolsa de valores, sistemas bancários |
| 🚗 Sistemas embarcados | Automóveis, robótica, IoT |
| 🔬 Ciência e engenharia | Simulações, processamento de imagens |
| 🤖 Arduino / Eletrônica | Microcontroladores, sensores, automação |
Relação entre C++ e Arduino
Quando você programa um Arduino, está usando uma versão simplificada de C++! A linguagem do Arduino foi construída sobre C/C++, portanto tudo que você aprender aqui será aplicado diretamente em projetos com LEDs, sensores, motores e muito mais.
Conexão direta: Estruturas como if, for, funções e variáveis que você aprenderá aqui são exatamente as mesmas usadas no Arduino IDE!
- Cite 3 exemplos de produtos do cotidiano que provavelmente usam C++ no seu funcionamento.
- Por que uma linguagem compilada tende a ser mais rápida do que uma interpretada?
- O que você espera aprender em C++ que poderá aplicar em um projeto com Arduino?
Documentação Oficial e Ambientes Online
🔗Antes de começar a programar, conheça os principais recursos online para consultar a linguagem e testar seus códigos sem precisar instalar nada no computador.
📚 Documentação Oficial
cppreference.com
A referência mais completa e atualizada da linguagem C++. Contém todas as funções, tipos, bibliotecas e exemplos — usada por profissionais do mundo todo.
en.cppreference.comlearncpp.com
Tutorial completo e gratuito de C++ em inglês, com explicações didáticas do básico ao avançado. Ideal para consultar enquanto aprende.
learncpp.com⚡ Sandboxes — Teste seu código online
Estes ambientes permitem escrever, compilar e executar código C++ direto no navegador, sem instalar nada. Perfeito para testar os exemplos desta aula!
OnlineGDB
Compilador online com depurador integrado. Suporta cin, cout e entrada de dados pelo usuário. Recomendado para iniciantes.
Compiler Explorer
Ferramenta avançada que mostra o código de máquina gerado pelo compilador. Excelente para entender como o C++ funciona por baixo dos panos.
godbolt.orgReplit
Ambiente completo de desenvolvimento na nuvem. Permite salvar projetos, compartilhar código com o professor e trabalhar em grupo online.
replit.comDica para a aula: Use o OnlineGDB para testar os exemplos desta apostila em tempo real. Basta copiar o código, colar no editor e clicar em Run. Sem instalação, sem configuração!
No futuro: Para projetos maiores e para programar o Arduino, você utilizará o VS Code com a extensão C/C++ ou o Arduino IDE — ambos gratuitos e instalados no laboratório.
Estrutura Básica de um Programa
02Todo programa em C++ segue uma estrutura básica. Veja o clássico "Olá, Mundo!":
#include <iostream> // Inclui a biblioteca de entrada e saída using namespace std; // Permite usar cout e cin sem o prefixo "std::" int main() { // Função principal — todo programa começa aqui cout << "Olá, Mundo!" << endl; // Exibe texto na tela + quebra de linha return 0; // Indica que o programa terminou com sucesso }
#include <iostream>
O #include é uma diretiva de pré-processamento. Ela diz ao compilador: "inclua o conteúdo desta biblioteca antes de compilar". A biblioteca <iostream> fornece as funções de entrada (cin) e saída (cout) de dados.
int main()
Esta é a função principal do programa. Todo programa em C++ precisa de uma main() — é a partir dela que a execução começa. O int antes indica que ela retorna um número inteiro ao sistema operacional.
cout e endl
O cout ("c-out") é responsável por exibir informações na tela. O operador << envia o conteúdo para a saída. O endl representa uma quebra de linha (equivalente a pressionar Enter).
return 0
Ao final da main(), o return 0 informa ao sistema que o programa terminou corretamente. Um valor diferente de 0 indicaria que houve algum erro.
#include <iostream> using namespace std; int main() { cout << "Bem-vindo à aula de C++!" << endl; cout << "Hoje vamos aprender o básico." << endl; cout << "Vamos lá!" << endl; return 0; }
- Escreva um programa que exiba seu nome, cidade e turma na tela, cada um em uma linha diferente.
- O que aconteceria se removêssemos o
#include <iostream>? Por quê? - Qual a diferença entre
cout << "Olá"ecout << "Olá" << endl?
Variáveis e Tipos de Dados
03Variáveis são espaços na memória onde guardamos informações temporariamente durante a execução do programa. Em C++, toda variável precisa ter um tipo definido.
Tipos Primitivos
| Tipo | Descrição | Exemplo de valor | Tamanho |
|---|---|---|---|
int | Números inteiros | -5, 0, 42, 1000 | 4 bytes |
float | Decimais (precisão simples) | 3.14, -0.5 | 4 bytes |
double | Decimais (dupla precisão) | 3.14159265358 | 8 bytes |
char | Um único caractere | 'A', 'z', '5' | 1 byte |
bool | Verdadeiro ou falso | true, false | 1 byte |
string | Texto (requer <string>) | "Olá, mundo!" | variável |
#include <iostream> #include <string> // Necessário para usar string using namespace std; int main() { // Declaração e atribuição de variáveis int idade = 17; // Número inteiro float altura = 1.75; // Decimal com menos precisão double saldo = 1523.99; // Decimal com mais precisão char inicial = 'A'; // Um único caractere — aspas simples! bool aprovado = true; // Verdadeiro ou falso string nome = "Maria Silva"; // Texto — aspas duplas! // Exibindo os valores cout << "Nome: " << nome << endl; cout << "Idade: " << idade << endl; cout << "Altura: " << altura << " m" << endl; cout << "Saldo: R$ " << saldo << endl; cout << "Inicial: " << inicial << endl; cout << "Aprovado: " << aprovado << endl; // Exibe 1 (true) ou 0 (false) return 0; }
Atenção! char usa aspas simples 'A' e string usa aspas duplas "texto". Trocar um pelo outro causa erro de compilação!
Constantes com const
Quando um valor não deve mudar durante o programa, use a palavra-chave const:
const double PI = 3.14159265; // PI nunca mudará const int MAX_ALUNOS = 40; // Capacidade máxima da sala // PI = 3.14; ← ERRO! Não se pode alterar uma constante
- Declare variáveis para armazenar: nome do produto, preço, quantidade em estoque e se está disponível. Use os tipos corretos para cada uma.
- Qual a diferença prática entre
floatedouble? Quando usar cada um? - Por que usamos
const? Dê um exemplo prático de uso em um sistema escolar. - O que acontece ao exibir um
boolcomcout? Como exibir "Verdadeiro" ou "Falso" em vez de 1 ou 0?
Entrada e Saída de Dados
04Um programa útil precisa receber dados do usuário e mostrar resultados. Em C++, usamos cin para entrada e cout para saída.
cout — Saída de dados
cout << "Texto simples" << endl; // Texto + quebra de linha cout << "Nota: " << nota << endl; // Texto concatenado com variável cout << "A + B = " << (a + b) << endl; // Texto + expressão calculada cout << "\n"; // Quebra de linha alternativa
cin — Entrada de dados
#include <iostream> #include <string> using namespace std; int main() { string nome; int idade; float nota; cout << "Digite seu nome: "; getline(cin, nome); // Lê a linha inteira (incluindo espaços) cout << "Digite sua idade: "; cin >> idade; // Lê até encontrar espaço ou Enter cout << "Digite sua nota: "; cin >> nota; cout << "\n--- Dados cadastrados ---" << endl; cout << "Nome: " << nome << endl; cout << "Idade: " << idade << endl; cout << "Nota: " << nota << endl; return 0; }
cin vs getline: Use cin >> para ler uma palavra ou número. Use getline(cin, variavel) para ler frases completas com espaços.
- Crie um programa que pergunte o nome e a idade e exiba: "Olá, [nome]! Você tem [idade] anos."
- Leia dois números e exiba a soma, a diferença e o produto entre eles.
- Qual a diferença entre
endle"\n"? Em que situação usar cada um?
Operadores
05Operadores Aritméticos
| Operador | Significado | Exemplo | Resultado |
|---|---|---|---|
+ | Adição | 10 + 3 | 13 |
- | Subtração | 10 - 3 | 7 |
* | Multiplicação | 10 * 3 | 30 |
/ | Divisão | 10 / 3 | 3 (inteiro!) |
% | Módulo (resto) | 10 % 3 | 1 |
++ | Incremento | x++ | x = x + 1 |
-- | Decremento | x-- | x = x - 1 |
Atenção: Divisão entre dois inteiros resulta em inteiro! 7 / 2 = 3, não 3.5. Para resultado decimal, pelo menos um número deve ser float: 7.0 / 2 = 3.5.
Operadores Relacionais
| Operador | Significado | Exemplo | Resultado |
|---|---|---|---|
== | Igual a | 5 == 5 | true |
!= | Diferente de | 5 != 3 | true |
> | Maior que | 7 > 3 | true |
< | Menor que | 3 < 7 | true |
>= | Maior ou igual | 7 >= 7 | true |
<= | Menor ou igual | 3 <= 5 | true |
Operadores Lógicos
| Operador | Significado | Exemplo | Resultado |
|---|---|---|---|
&& | E (AND) — ambos verdadeiros | true && false | false |
|| | OU (OR) — ao menos um verdadeiro | true || false | true |
! | NÃO (NOT) — inverte | !true | false |
#include <iostream> using namespace std; int main() { int a = 10, b = 3; // Aritméticos cout << "Soma: " << (a + b) << endl; // 13 cout << "Divisão: " << (a / b) << endl; // 3 (inteiro!) cout << "Resto: " << (a % b) << endl; // 1 // Relacionais cout << "a > b? " << (a > b) << endl; // 1 (true) cout << "a == b? " << (a == b) << endl; // 0 (false) // Lógicos bool ok = (a > 5) && (b < 10); // true AND true = true cout << "Condição: " << ok << endl; // 1 return 0; }
- Calcule mentalmente:
17 % 5e20 % 4. Para que serve o módulo no dia a dia da programação? - Escreva uma expressão lógica que verifique se uma nota está entre 5 e 8 (inclusive).
- Crie um programa que leia dois números e mostre qual é o maior, qual é o menor e o resto da divisão do maior pelo menor.
Estruturas Condicionais
06Estruturas condicionais permitem que o programa tome decisões com base em condições. São a base da lógica de qualquer software.
#include <iostream> using namespace std; int main() { float nota; cout << "Digite sua nota (0 a 10): "; cin >> nota; if (nota >= 7.0) { // Se nota >= 7: aprovado cout << "APROVADO!" << endl; } else if (nota >= 5.0) { // Senão, se >= 5: recuperação cout << "RECUPERAÇÃO" << endl; } else { // Caso nenhuma condição seja verdade cout << "REPROVADO" << endl; } return 0; }
Lembre-se: == (dois iguais) compara valores. = (um igual) atribui um valor. Confundir os dois é um dos erros mais comuns em C++!
#include <iostream> using namespace std; int main() { float temp; cout << "Temperatura atual (°C): "; cin >> temp; if (temp < 0) { cout << "Abaixo de zero! Risco de gelo." << endl; } else if (temp < 15) { cout << "Frio — Vista um casaco." << endl; } else if (temp < 25) { cout << "Temperatura agradável." << endl; } else { cout << "Calor! Hidrate-se." << endl; } return 0; } // No Arduino: ideal para leitura de sensores de temperatura como o LM35 ou DHT11!
- Crie um programa que leia um número inteiro e diga se ele é par ou ímpar. (Dica: use o operador
%) - Leia 3 notas, calcule a média e classifique: Aprovado (≥7), Recuperação (5 a 6,9) ou Reprovado (<5).
- Crie um programa que leia a idade de uma pessoa e informe a faixa: criança (0–11), adolescente (12–17), adulto (18–59) ou idoso (60+).
Estruturas de Repetição
07Laços permitem executar um bloco de código várias vezes sem precisar reescrevê-lo — são indispensáveis em qualquer programa real.
Laço for — quando sabemos quantas vezes repetir
#include <iostream> using namespace std; int main() { int numero; cout << "Tabuada de qual número? "; cin >> numero; // for (início; condição de parada; passo) for (int i = 1; i <= 10; i++) { cout << numero << " x " << i << " = " << (numero * i) << endl; } return 0; }
Laço while — quando repetimos enquanto uma condição for verdadeira
#include <iostream> using namespace std; int main() { const int SENHA = 1234; // Senha correta int tentativa; int tentativas = 0; cout << "Digite a senha: "; cin >> tentativa; // Repete enquanto errar e não atingir 3 tentativas while (tentativa != SENHA && tentativas < 3) { tentativas++; cout << "Senha incorreta! Tentativa " << tentativas << "/3\n"; cout << "Tente novamente: "; cin >> tentativa; } if (tentativa == SENHA) { cout << "Acesso liberado!" << endl; } else { cout << "Conta bloqueada!" << endl; } return 0; } // No Arduino: while é usado para aguardar um sensor atingir certo valor!
Cuidado com loops infinitos! Se a condição do while nunca se tornar falsa, o programa trava. Certifique-se de que a variável de controle é atualizada dentro do laço.
- Use um
forpara exibir todos os números pares de 2 a 20. - Use um
whilepara acumular números digitados pelo usuário. O programa para quando o usuário digitar 0, então exibe a soma total. - Com
for, calcule o fatorial de um número digitado (ex: 5! = 5×4×3×2×1 = 120). - Qual a diferença principal entre
forewhile? Dê um exemplo de situação ideal para cada um.
Funções
08Funções são blocos de código reutilizáveis que executam uma tarefa específica. Elas organizam o programa, evitam repetição e facilitam a manutenção.
Princípio DRY: "Don't Repeat Yourself" — se você escreve o mesmo código em dois lugares, provavelmente deveria criar uma função!
Anatomia de uma função
// tipo_retorno nome_da_funcao(tipo param1, tipo param2, ...) int somar(int a, int b) { return a + b; // Retorna um int para quem chamou a função } // void = sem retorno | int, float, string... = com retorno
#include <iostream> using namespace std; // Função sem retorno e sem parâmetros void saudacao() { cout << "Olá! Bem-vindo ao sistema." << endl; } // Função sem retorno, com parâmetro void saudar(string nome) { cout << "Olá, " << nome << "!" << endl; } // Função com retorno — calcula e devolve o resultado float calcularMedia(float n1, float n2, float n3) { return (n1 + n2 + n3) / 3.0; } int main() { saudacao(); // Chamada sem argumento saudar("Ana"); // Passando um argumento saudar("Carlos"); float media = calcularMedia(8.0, 6.5, 9.0); // Recebe o retorno cout << "Média: " << media << endl; // 7.833... return 0; }
- Crie uma função
maximo(int a, int b)que receba dois inteiros e retorne o maior deles. - Crie uma função
ehPar(int n)que retornetruese o número for par efalsese for ímpar. - Crie uma função
exibirLinha(char c, int qtd)que exiba o caracterecrepetidoqtdvezes. Ex:exibirLinha('-', 10)exibe----------.
Vetores (Arrays)
09Um vetor é uma variável que armazena vários valores do mesmo tipo em sequência. Em vez de criar 10 variáveis separadas para 10 notas, use um único vetor!
Declaração e acesso
#include <iostream> using namespace std; int main() { // Declaração: tipo nome[tamanho] float notas[5]; // 5 posições (índices 0 a 4) // Declaração já com valores iniciais int idades[4] = {17, 16, 18, 15}; // Acesso por índice — começa em 0! cout << "Primeira idade: " << idades[0] << endl; // 17 cout << "Última idade: " << idades[3] << endl; // 15 idades[1] = 19; // Modifica o segundo elemento return 0; }
Atenção! Índices começam em 0. Um vetor de tamanho 5 tem índices de 0 a 4. Acessar o índice 5 é um erro grave — acesso à memória indevida!
Percorrendo vetores com for
#include <iostream> using namespace std; int main() { const int TAM = 5; float notas[TAM]; float soma = 0; // Leitura das notas com laço for (int i = 0; i < TAM; i++) { cout << "Nota do aluno " << (i + 1) << ": "; cin >> notas[i]; soma += notas[i]; // Acumula a soma } cout << "\n--- Resultado ---" << endl; // Exibe todas as notas for (int i = 0; i < TAM; i++) { cout << "Aluno " << (i + 1) << ": " << notas[i] << endl; } cout << "Media da turma: " << (soma / TAM) << endl; return 0; } // No Arduino: vetores guardam múltiplas leituras de sensores ao longo do tempo!
- Crie um vetor com 7 temperaturas e calcule a temperatura média da semana.
- Dado um vetor de 10 números, encontre e exiba o maior e o menor valor.
- Leia 5 nomes e os exiba em ordem inversa (do último para o primeiro).
Boas Práticas de Programação
10Programar bem não é só fazer o código funcionar — é fazer código que outras pessoas (e você no futuro) consigam entender e modificar.
Indentação
Indentação são os recuos (espaços/tabs) que delimitam blocos de código. Código mal indentado é difícil de ler e dar manutenção.
for(int i=0;i<5;i++){if(i%2==0){cout<<i<<endl;}}
for (int i = 0; i < 5; i++) { if (i % 2 == 0) { cout << i << endl; } }
Comentários
// Comentário de linha única — explica o que está na frente int contador = 0; // Começa em zero /* * Comentário de múltiplas linhas * Ideal para documentar funções ou blocos complexos */ float calcularMedia(float n1, float n2, float n3) { return (n1 + n2 + n3) / 3.0; }
Nomes de Variáveis
| ❌ Evite | ✅ Prefira | Motivo |
|---|---|---|
int x | int idadeAluno | Nome claro e descritivo |
float n | float notaFinal | Autoexplicativo |
string str1 | string nomeProduto | Contexto claro |
int a, b, c | int largura, altura, area | Sem ambiguidade |
Convenção camelCase: Em C++, é comum usar camelCase para variáveis e funções — primeira palavra minúscula, demais capitalizadas: mediaFinal, calcularArea(), totalDeAlunos.
- Reescreva aplicando boas práticas:
int a=10;int b=20;int c=a+b;cout<<c; - Liste 5 nomes de variáveis ruins e reescreva-as de forma mais descritiva.
- Por que boas práticas são especialmente importantes em projetos desenvolvidos em equipe?
Exercícios Práticos
11Coloque em prática tudo o que aprendeu. Estes exercícios combinam múltiplos conceitos em um único programa.
- Calculadora simples: Leia dois números e uma operação (
+,-,*,/) e exiba o resultado. Useif/else ifpara tratar cada operação. Trate divisão por zero! - Fibonacci: Exiba os 10 primeiros números da sequência de Fibonacci usando
fore um vetor. - Cadastro de turma: Armazene nomes e notas de 5 alunos em vetores. Exiba uma tabela e indique quem está aprovado (nota ≥ 7).
- IMC: Crie uma função
calcularIMC(float peso, float altura)que retorne o IMC e outraclassificarIMC(float imc)que exiba a classificação (abaixo do peso, normal, sobrepeso, obeso). - Palíndromo: Leia uma palavra e verifique se é um palíndromo (igual de trás para frente). Ex: "arara", "racecar".
Pequenos Desafios
12Para quem quer ir além! Estes desafios são mais elaborados e envolvem criatividade e raciocínio lógico avançado.
- 🎲 Jogo de adivinhação: O computador sorteia um número entre 1 e 100 (
rand() % 100 + 1). O usuário tenta adivinhar; o programa diz "maior" ou "menor". Conte as tentativas. - 📊 Ordenação manual: Leia 5 números, ordene do menor para o maior sem usar funções de biblioteca (use dois
foraninhados — Bubble Sort). - 🔢 Números primos: Crie uma função que retorne
truese um número for primo. Use-a para listar todos os primos até 100. - 💰 Caixa eletrônico: O usuário informa um valor a sacar. O programa informa o menor número de notas de R$100, R$50, R$20, R$10 e R$5 necessárias.
- 🏦 Mini banco: Crie um menu com
while+ifque permita: depositar, sacar, ver saldo e sair. Controle o saldo comdouble.
Preparação para Arduino
Como tudo o que você aprendeu será aplicado em projetos eletrônicos reais
if / else
Verificar leituras de sensores: "Se o sensor ultrapassar 40°C, acione o ventilador."
for / while
O loop() do Arduino funciona como um while(true) infinito, executando continuamente seu código.
Funções
No Arduino, setup() e loop() são funções. Você criará as suas para controlar LEDs, motores e displays.
Variáveis e tipos
Os mesmos tipos (int, float, bool) armazenam leituras de sensores e controlam estados de componentes.
Vetores
Armazenam múltiplas leituras de sensores ao longo do tempo ou mapeiam sequências de LEDs.
Boas práticas
Comentários e nomes claros são essenciais em projetos embarcados, onde o código controla hardware real.
// Veja como os conceitos desta aula aparecem no Arduino IDE! const int LED = 13; // const: pino do LED const int SENSOR = A0; // const: pino do sensor analógico int leituras[10]; // Vetor para 10 leituras (arrays!) void setup() { // Função de inicialização — roda 1 vez pinMode(LED, OUTPUT); Serial.begin(9600); } void loop() { // Função principal — while(true) infinito! int valor = analogRead(SENSOR); // Lê o sensor (variável!) if (valor > 500) { // Estrutura condicional! digitalWrite(LED, HIGH); // Liga o LED } else { digitalWrite(LED, LOW); // Desliga o LED } delay(100); // Aguarda 100 ms }
Você está pronto! Com os conceitos desta aula, você já tem a base para programar o Arduino. Na próxima aula, instalaremos o Arduino IDE e criaremos seu primeiro projeto eletrônico com C++!
✍️ Material produzido para o Ensino Médio Técnico em Desenvolvimento de Sistemas
📚 caderno-ti.blogspot.com · Prof. Elton Alex Silva
Comentários
Postar um comentário
Ficou com alguma dúvida? Quer compartilhar sua experiência? Tem uma sugestão de
melhoria? Seu comentário é muito importante!