Exercício 10: Crie um programa que:
Leia um caractere (char) e um número inteiro (int).
Realize as operações a+b e a-b.
Imprima os resultados como números e como caracteres.

Passo 1

O enunciado pede que a gente construa um programa que faça o seguinte: leia um caractere e um número inteiro; calcule as operações a+b e a-b ; e imprima os resultados em duas formas: como número (valor inteiro) e como caractere (o símbolo correspondente ao código inteiro).
Informações fornecidas:
  • Entrada 1: um caractere (vou chamar de a ).
  • Entrada 2: um inteiro (vou chamar de b ).
  • Saídas pedidas: para a+b e para a-b — cada um impresso como número e como caractere.

Passo 2

Entendendo o que é um “caractere” na prática (isso é essencial para saber como somar/subtrair). Um caractere como 'A' ou 'a' tem, por baixo dos panos, um código inteiro (no ASCII comum, por exemplo 'A' = 65 e 'a' = 97 ). Isso significa que operações aritméticas com caracteres acontecem usando esse código inteiro. Exemplo rápido: se a = 'A' e b = 3 , então a+b = 65 + 3 = 68 , que corresponde ao caractere 'D' .

Passo 3

Como modelar as operações matematicamente (para você saber o que calcular na prova): denotando por code(a) o código inteiro do caractere a , definimos
\text{sum} = \text{code}(a) + b
\text{diff} = \text{code}(a) - b
Aqui sum e diff são inteiros. Para obter o caractere correspondente ao resultado, interpretamos esse inteiro como código de caractere (desde que esteja em uma faixa válida).

Passo 4

Como isso é feito em C (comportamento prático e as regras importantes):
  • Em C, quando você soma um char com um int , o char é promovido para int automaticamente; então a soma retorna um int .
  • Para ler os dados do usuário usamos scanf( " %c %d" ), &a, &b). O espaço antes de %c faz com que quebras de linha/espaços anteriores sejam ignorados.
  • Para imprimir: usamos %!d para imprimir número inteiro e %!c para imprimir caractere. Ex.: printf(" %d (%c) \backslashn", sum, (char)sum)) — aqui eu força a conversão para char ao imprimir como %!c .

Passo 5

O que pode dar errado e como tratar isso (coisas que a prova pode cobrar):
  • Se sum ou diff resultarem em códigos fora da faixa imprimível (por exemplo menor que 32 ou maior que 126 para ASCII imprimível), o caractere impresso pode ser estranho (não legível) ou comportamento depende do sistema. Em prova, se for pedido, você pode mencionar que deve checar a faixa antes de converter para caractere.
  • Em C, char pode ser signed ou unsigned dependendo da implementação — para somas simples com inteiros normalmente não dá problema prático, mas é bom saber desse detalhe.

Passo 6

Exemplo concreto com números para deixar firme o raciocínio:
  • Ex.: entrada a = 'A' , b = 3 . Então a+b = 65 + 3 = 68 e a-b = 65 - 3 = 62 . Como caracteres: 68 \mapsto 'D' e 62 \mapsto '>' . Assim imprimimos:
    • a+b como número: 68 e como caractere: 'D' .
    • a-b como número: 62 e como caractere: '>' .

Passo 7

Agora, o programa passo a passo (explicando cada parte sem pular etapas):
  1. Incluímos a biblioteca padrão de entrada/saída: #include <stdio.h>).
  2. Declaramos as variáveis: char a; e int b, sum, diff; a guarda o caractere lido, b o inteiro, sum e diff armazenam os resultados numéricos.
  3. Lemos as entradas com scanf(" %c %d", &a, &b); — o espaço antes de %c evita que um ‘ \backslashn’ anterior seja lido como caractere.
  4. Calculamos sum = a + b; e diff = a - b;) — em C isso promove automaticamente a para inteiro antes da operação.
  5. Imprimimos os resultados duas vezes (uma linha para cada operação), mostrando o valor inteiro e o caractere correspondente:
    • printf("a+b: %d (%c) \backslashn", sum, (char)sum);
    • printf("a-b: %d (%c) \backslashn", diff, (char)diff);
      Aqui eu faço (char)sum para deixar explícito que queremos interpretar o inteiro como caractere ao imprimir com %!c .

Passo 8

Um exemplo de execução passo a passo (simulação):
  • Entrada digitada: 'A' e 3 .
  • Após a leitura: a = 'A' (código 65), b = 3 .
  • Cálculos: sum = 65 + 3 = 68 , diff = 65 - 3 = 62 .
  • Saída impressa:
    • a+b: 68 (D)
    • a-b: 62 (>)

Resposta

#include <stdio.h>
int main(void) {
char a;
int b;
if (scanf(" %c %d", &a, &b) != 2) return 0;
int sum = a + b;
int diff = a - b;

printf("a+b: %d (%c)\n", sum, (char)sum);
printf("a-b: %d (%c)\n", diff, (char)diff);

return 0;
}

Exercícios relacionados