3ㅇ Implemente uma calculadora para números inteiros de até 8 bits, com as operações de multiplicação, adição, subtração e divisão. Deve inserir o primeiro operando, depois o segundo operando e após isso a operação desejada.

Passo 1

O enunciado pede para escrever um programa que funcione como uma calculadora de inteiros de até 8 bits, permitindo as operações de adição, subtração, multiplicação e divisão. Para isso vamos precisar:
– de um tipo que represente números de -128 a 127 ( 8 bits com sinal),
– ler dois operandos neste intervalo,
– ler um caractere que indique a operação,
– executar a operação tratando divisão por zero e verificar se o resultado cabe em 8 bits.

Passo 2

Declaramos as variáveis:
\(int8_t\) a, b, res; para os operandos e resultado (vem de <stdint.h>),
char op; para armazenar o símbolo da operação.
Usamos também macros \(INT8_MIN\) e \(INT8_MAX\) para validar o intervalo de entrada.

Passo 3

Fazemos a leitura do primeiro operando com scanf("%hhd", &a); e verificamos
a \ge \text{INT8\_MIN}\quad\text{e}\quad a \le \text{INT8\_MAX}.
Se estiver fora, exibimos erro e encerramos. Repetimos o mesmo para b.

Passo 4

Lemos o caractere da operação com
scanf(" %c", &op);
O espaço antes de %c descarta eventuais quebras de linha na entrada. Verificamos se op é um de '\(+\)','-','*','/'. Se não for, avisamos operação inválida e encerramos.

Passo 5

Usamos um switch(op) para executar cada operação:
– Em case '\(+\)': res \(=\) a \(+\) b; break;
– Em case '-': res \(=\) a - b; break;
– Em case '*': res \(=\) a * b; break;
– Em case '/': antes de dividir, checamos se b \(==0\); se for, imprimimos erro de divisão por zero e encerramos; senão res \(=\) a / b;
Após o cálculo, podemos checar se o resultado ficou fora de [-128,127]. Se sim, indicamos estouro de 8 bits. Caso contrário, seguimos.

Passo 6

Por fim, exibimos o resultado com
printf("Resultado: %hhd\n", res);
e retornamos 0 para indicar término correto.

Resposta

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

int main(void) {
    int8_t a, b, res;
    char op;

    printf("Digite o primeiro operando (-\(128\) a \(127\)): ");
    if (scanf("%hhd", &a) != 1 ||
        a < INT8_MIN || a > INT8_MAX) {
        printf("Erro: operando invalido\n");
        return 1;
    }

    printf("Digite o segundo operando (-\(128\) a \(127\)): ");
    if (scanf("%hhd", &b) != 1 ||
        b < INT8_MIN || b > INT8_MAX) {
        printf("Erro: operando invalido\n");
        return 1;
    }

    printf("Digite a operacao (\(+\), -, *, /): ");
    if (scanf(" %c", &op) != 1) {
        printf("Erro ao ler operacao\n");
        return 1;
    }

    switch (op) {
        case '+':
            res = a + b;
            break;
        case '-':
            res = a - b;
            break;
        case '*':
            res = a * b;
            break;
        case '/':
            if (b == 0) {
                printf("Erro: divisao por zero\n");
                return 1;
            }
            res = a / b;
            break;
        default:
            printf("Operacao invalida\n");
            return 1;
    }

    /* Verificar overflow em \(8\) bits */
    if (res < INT8_MIN || res > INT8_MAX) {
        printf("Erro: resultado fora do intervalo \(8\) bits\n");
        return 1;
    }

    printf("Resultado: %hhd\n", res);
    return 0;
}

Exercícios relacionados