Exercício 9: Crie um programa em C++ que:
Declare uma variável float a e uma int b.
Atribua o valor 3.7 a a.
Some \mathrm{a}+10 \mathrm{e} armazene em b (observe a conversão implícita).
Imprima o resultado e discuta o que aconteceu.

Passo 1

O enunciado pede que eu faça três coisas concretas:
  • Declarar uma variável do tipo float chamada a e uma variável do tipo int chamada b.
  • Atribuir o valor 3,7 a a.
  • Somar a+10 e armazenar o resultado em b (observando a conversão implícita do tipo float para int).
  • Imprimir o resultado e explicar o que aconteceu.
Informações relevantes dadas pelo enunciado:
  • Valor inicial de a é 3,7.
  • b é do tipo inteiro ( int) e receberá o resultado da soma entre a e 10.
  • Há uma conversão implícita envolvida ao atribuir um valor em ponto flutuante para uma variável inteira.

Passo 2

Aqui está um programa C++ mínimo que faz exatamente o pedido (vou comentar linha a linha depois):
#include <iostream>

int main() {
    float a;
    int b;

    a = 3.7f;
    b = a + 10;
    std::cout << b << std::endl;

    return 0;
}

Passo 3

Explicando cada linha do programa, devagarinho:
  • #include <iostream> — traz a biblioteca que permite impressão no terminal com std::cout.
  • int main() { ... } — função principal do programa, onde o código é executado.
  • float a; — declara a variável a do tipo ponto flutuante. No enunciado a era do tipo float.
  • int b; — declara a variável b do tipo inteiro. No enunciado b era int.
  • a = 3.7f; — atribui o valor literal 3.7 à variável a. Usei o sufixo f para indicar literal float (não é obrigatório, mas é bom estilo).
    • Em termos do enunciado, aqui foi feita a atribuição a = 3,7.
  • b = a + 10; — calcula a expressão a + 10 e atribui o resultado a b. É aqui que entra a conversão implícita que o enunciado quer que observemos.
  • std::cout << b << std::endl; — imprime o valor de b seguido de nova linha.
  • return 0; — indica que o programa terminou normalmente.

Passo 4

Vou explicar o que ocorre na expressão b = a + 10; passo a passo, com calma:
  1. Temos os operandos a e 10. a é do tipo float e contém 3,7. 10 é um literal inteiro (int).
  2. Na expressão aritmética entre float e int, o compilador converte implicitamente o int para float para que os dois operandos tenham o mesmo tipo — isso se chama promoção (ou conversão usual). Então 10 é tratado como 10,0 em ponto flutuante.
  3. A soma é feita em ponto flutuante: a + 10 vira 3,7 + 10,0 = 13,7.
  4. Agora ocorre a atribuição para b, que é do tipo int. Converter um valor em ponto flutuante para um inteiro faz com que a parte fracionária seja descartada (ou seja, a conversão truncada). Em C++ isso resulta em truncamento em direção a zero.
    • Assim, ao converter 13,7 para int, o valor fica 13 — a parte ,7 é simplesmente removida.
  5. Portanto, depois de b = a + 10;, temos b = 13.

Passo 5

Demonstração prática / teste mental:
  • a = 3,7.
  • a + 10 = 13,7 (soma em ponto flutuante).
  • Ao atribuir a b (inteiro), 13,7 vira 13 (truncamento).
  • O std::cout << b imprime então o número 13.
Se você quiser ver também o valor da soma antes da conversão (para confirmar que a soma foi 13,7), pode inserir:
std::cout << (a + 10) << std::endl; // imprime 13.7 (ou parecido, dependendo do formato)
Isso mostra que a soma em ponto flutuante realmente é 13,7, e a diferença só aparece quando atribuímos ao int.

Passo 6

Observações importantes para a prova (coisas que frequentemente caem e valem anotar):
  • Quando operar float com int, o int é convertido para float antes da operação.
  • Quando atribuir um float a um int, a parte fracionária é descartada (truncamento). Não há arredondamento automático.
  • Para evitar perda de informação, se você precisa do valor com casas decimais, mantenha a variável destino em float ou double.
  • Se você quiser arredondar antes de converter, use funções como std::round, por exemplo b = static_cast<int>(std::round(a + 10));.

Resposta

13
A soma a+10 = 13,7 foi feita em ponto flutuante; ao atribuir para b (tipo int) a parte fracionária foi descartada, resultando em b = 13.

Exercícios relacionados