Fundamentos de C++
Tipos, expressões, entrada e saída, condições, ciclos e âmbito de variáveis.
Tipos e divisão
| Pergunta | Resposta |
|---|---|
| Que tipo uso? | int inteiro, double aproximado, char unidade de armazenamento, bool lógico |
auto muda em execução? | Não. Deduz em compilação e fixa o tipo |
int n{3.7}; compila? | Não. Chavetas recusam perda de informação. int n = 3.7; guarda 3 |
Tamanho de int? | Depende do sistema. Mede com sizeof, consulta limites em <limits> |
int a = 7, b = 2;
double x = a / b; // 3.0, divisão inteira primeiro
double y = static_cast<double>(a) / b; // 3.5, conversão antes de dividir
- Truncagem em direção a zero:
-7 / 2 == -3,-7 % 2 == -1. - Indefinido: divisão inteira por zero, overflow com sinal.
doubleguarda aproximações. Para resultados calculados, escolhe o teste adequado ao contrato e ao erro numérico, por exemplostd::fabs(a - b) < 1e-9com<cmath>.
Condições e ciclos
- Intervalo:
0 <= nota && nota <= 20.0 <= nota <= 20compara(0 <= nota)com20. - Curto-circuito: em
n != 0 && soma / n > 10, a divisão só corre comn != 0. switch: quando não pretendes continuar no caso seguinte, sai combreakoureturn. Casos agrupados e queda intencional continuam possíveis.defaultcobre o resto.whilepode correr zero vezes.do ... whilecorre pelo menos uma.=atribui.==compara.
| Ciclo | Quando escolher |
|---|---|
for | Número de passos conhecido, com inicialização, condição e avanço juntos |
while | Repetir enquanto uma condição se mantém, podendo ser zero vezes |
do ... while | O corpo tem de correr pelo menos uma vez |
Âmbito é onde o nome é visível. Duração é quando o objeto existe. O i do for morre no fim do ciclo.
Entrada e compilação
- Extrai uma vez e testa o sucesso na mesma expressão:
if (!(cin >> nota))trata entrada ausente ou inválida. - Valida o domínio:
nota < 0 || nota > 20. - Só depois usa o valor.
>>lê até ao espaço.getlinelê a linha com espaços interiores.- Fluxo em condição é falso com
failbitoubadbit. Sóeofbitnão invalida leitura bem sucedida. maintermina comreturn 0implícito. Volta a compilar depois de editar:
g++ -std=c++17 -Wall -Wextra -Wpedantic notas.cpp -o notas
./notas