Ir ao conteúdo

C como criar uma calculadora ?


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

ja tenho um esbolço sobre a questão, gostaria de auxílio.

Faça um programa para ler dois números reais e um caractere ('+', '-', '*' ou '/'). Seu programa deve imprimir o resultado da operação efetuada sobre os números lidos.

Considere que o segundo número lido nunca será zero quando a operação selecionada for a operação de divisão.

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

float a,b,c;
char op;
int calcula()
{
    if(op=='+'){
                c=(a+b);
                }
    if(op=='-'){
                c=(a-b);
                }
    if(op=='*'){
                c=(a*b);
                }
    if(op=='/'){
                c=(a/b);
                }
    printf("%0.2f %c %0.2f eh igual a: %0.2f\n",a,op,b,c);
}
  
int main()
{
    printf("digite o simbolo da operacao desejada: ");
    scanf("%c",&op);
    printf("digite os numeros: ");
    scanf("%f",&a);
    scanf("%f",&b);
    calcula();
    system("pause");
    return 0;
}

 

  • Curtir 1
Postado

@Caio Fagundes21    você não precisaria de função nesse código , não , mas se quiser pode ser sim ,  e é melhor não usar variáveis Globais e colocar as funções lá em baixo após a função main , e também você não disse que auxilio precisa  nesse código , mas creio que pode ser a Questão de o programa passar direto pelo scanf do tipo de operação desejada ,  e isso é por que quando se usa o comando scanf  para ler char de apenas um caractere ele pegar o que o scanf anterior deixou lá no buffer do teclado ,  que podem ser o newLine , ou outro qq e então use o fgets para limpar o buffer antes de ler esse char

#include<stdio.h>
#include<stdlib.h>
int calcula(float,float,float,char); // prototipo da função , colocada apos a main
int main()
{
    char op,r[21]; // usada para pegar o resto do buffer
    float a,b,c = 0.00;
    printf("digite um numero : ");
    scanf("%f", & a  );
    printf("digite o simbolo da operacao desejada : ");
    fgets(r,20,stdin );  // pegar o resto que estiver no buffer
    op = fgetc(stdin );  // melhor para ler char quando for apenas um caractere
    printf("digite outro numero : ");
    scanf("%f", & b  );

 

Postado

@Caio Fagundes21 Você deveria usar nomes mais significativos nas variáveis, dessa maneira 

    char opcao;
    float numero1, numero2;

 

 é e uma péssima ideia utilizar variáveis globais iguais essas que você declarou, você deve declarar todas dentro do main e utilizar parâmetros nas funções para passar os valores.

 

Exemplo da sua função com parâmetros

void calcula(float numero1, float numero2, char opcao)
{
    float resultado = 0;
    if(opcao == '+') {
        resultado=numero1+numero2;
    } else if(opcao == '-') {
        resultado=numero1-numero2;
    } else if(opcao == '*') {
        resultado=numero1-numero2;
    } else if(opcao == '/') {
        resultado=numero1/numero2;
    }
    
    printf("%0.2f %c %0.2f eh igual a: %0.2f\n", numero1, opcao, numero2, resultado);
}

 

O seu código "consertado" 

#include <stdio.h>


void calcula(float numero1, float numero2, char opcao);


int main(void)
{
    char opcao;
    float numero1, numero2;
    printf("digite o simbolo da opcaoeracao desejada: ");
    scanf("%c%*c",&opcao);    /* coloque o caractere de controle '%*c' para descartar o enter da entrada */
    printf("digite o primeiro numero\n");
    scanf("%f%*c", &numero1);
    printf("digite o segundo numero\n");
    scanf("%f%*c", &numero2);
    calcula(numero1, numero2, opcao);
    getchar();      /* utilize getchar ao invés de system("pause") */
    return 0;
}

void calcula(float numero1, float numero2, char opcao)
{
    float resultado = 0;
    if(opcao == '+') {
        resultado=numero1+numero2;
    } else if(opcao == '-') {
        resultado=numero1-numero2;
    } else if(opcao == '*') {
        resultado=numero1-numero2;
    } else if(opcao == '/') {
        resultado=numero1/numero2;
    }
    
    printf("%0.2f %c %0.2f eh igual a: %0.2f\n", numero1, opcao, numero2, resultado);
}

 

E um exemplo de brinde para gastar um pouco de fosfato do cérebro

Spoiler
/* Algoritmo calculadora */
#include <stdio.h>

enum operacoes
{   ADICAO = 0,
    SUBTRACAO,
    MULTIPLICACAO,
    DIVISAO
};

struct calculadora
{
    float (*operacao[4])(float, float);
};

float adicao(float n1, float n2);

float subtracao(float n1, float n2);

float multiplicacao(float n1, float n2);

float divisao(float n1, float n2);

void inicia_calculadora(struct calculadora *cal);

int main(void)
{
    char opcao;
    struct calculadora cal;
    inicia_calculadora(&cal);
    do {
        float n1, n2;
        puts("Digite o simbolo da operacao desejada");
        scanf("%c%*c", &opcao);
        puts("Digite o primeiro numero");
        scanf("%f%*c", &n1);
        puts("Digite o segundo numero");
        scanf("%f%*c", &n2);
        printf("%.2f%c%.2f=", n1, opcao, n2);
        switch (opcao) {
            case '+':
                printf("%.2f\n", cal.operacao[ADICAO](n1, n2));
                break;

            case '-':
                printf("%.2f\n", cal.operacao[SUBTRACAO](n1, n2));
                break;

            case '*':
                printf("%.2f\n", cal.operacao[MULTIPLICACAO](n1, n2));
                break;

            case '/':
                printf("%.2f\n", cal.operacao[DIVISAO](n1, n2));
                break;

            default:
                puts("Essa operacao não existe nessa calculadora!");
        }

        puts("Continuar calculando?\nS\\N");
        scanf("%c%*c", &opcao);
    } while (opcao == 'S' || opcao == 's');

    return(0);
}

float adicao(float n1, float n2)
{
    return(n1+n2);
}

float subtracao(float n1, float n2)
{
    return(n1-n2);
}

float multiplicacao(float n1, float n2)
{
    return(n1*n2);
}

float divisao(float n1, float n2)
{
    return(n1/n2);
}

void inicia_calculadora(struct calculadora *cal)
{
    cal->operacao[ADICAO] = adicao;
    cal->operacao[SUBTRACAO] = subtracao;
    cal->operacao[MULTIPLICACAO] = multiplicacao;
    cal->operacao[DIVISAO] = divisao;
}

 

 

  • Curtir 1
  • Solução
Postado

@Caio Fagundes21 Evite variáveis globais como comentado. Sua função do cálculo tem retorno int, mas não retorna nada. Como as operações são com números reais ela pode ser float e retornar o resultado. Para entrar com os números e a operação você poderia deixar tudo na mesma linha em vez de mostrar um print e esperar o input para cada um, p.ex,

 

#include<stdio.h>

float calcula(float A, float B, char operacao){
    if(operacao == '+'){return A + B;}
    if(operacao == '-'){return A - B;}
    if(operacao == '*'){return A * B;}
    if(operacao == '/'){return A / B;}
}
  
int main(){
    float A;
    float B;
    char operacao;
    printf("A operacao B: ");
    scanf("%f %c %f", &A, &operacao, &B);
    printf("Resultado = %.2f\n", calcula(A, B, operacao));
    return 0;
}

 

  • 2 anos depois...
Postado

Boa tarde!

 

A calculadora com C.

No teste, noto um último 'probleminha', ela não consegue interagir de fato com o usuário, porque não instrui, não lista suas operações, e essa instrução é de bom senso nesta atividade.

 

Custa um printf 🙂 

 

E não tem o "Divisão por zero!" e sua expressão lógica.

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!