Exercício 10: Crie um programa que:
Leia um caractere (char) e um número inteiro (int).
Realize as operações
.
Imprima os resultados como números e como caracteres.
Leia um caractere (char) e um número inteiro (int).
Realize as operações
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:
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
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
charcom um int, o charé promovido para intautomaticamente; então a soma retorna um int. - Para ler os dados do usuário usamos
scanf(" %c %d" . 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) ", sum, (char)sum)) — aqui eu força a conversão paran charao 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,
charpode 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):
- Incluímos a biblioteca padrão de entrada/saída:
#include <stdio.h>). - Declaramos as variáveis:
char a;eint b, sum, diff;—a guarda o caractere lido, b o inteiro, sum e diff armazenam os resultados numéricos. - Lemos as entradas com
scanf(" %c %d", &a, &b);— o espaço antes de%c evita que um ‘ n’ anterior seja lido como caractere. - Calculamos
sum = a + b;ediff = a - b;) — em C isso promove automaticamenteapara inteiro antes da operação. - Imprimimos os resultados duas vezes (uma linha para cada operação), mostrando o valor inteiro e o caractere correspondente:
-
printf("a+b: %d (%c)n", sum, (char)sum); -
printf("a-b: %d (%c)n", diff, (char)diff);
Aqui eu faço(char)sumpara 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;
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;
}