首页 > 试题广场 >

简单计算器

[编程题]简单计算器
  • 热度指数:44475 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
KiKi实现一个简单计算器,实现两个数的“加减乘除”运算,用户从键盘输入算式“操作数1运算符操作数2”,计算并输出表达式的值,如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。如果操作数2等于0.0,则输出“Wrong!Division by zero!”

数据范围:字符串长度满足  ,保证运算符是一个char类型字符。

输入描述:
输入一行字符串,操作数1+运算符+操作数2 (其中合法的运算符包括:+、-、*、/)。


输出描述:
输出为一行。

如果操作数和运算符号均合法,则输出一个表达式,操作数1运算符操作数2=运算结果,各数小数点后均保留4位,数和符号之间没有空格。

如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。

如果操作数2等于0.0,则输出“Wrong!Division by zero!”。
示例1

输入

1.0+3.0

输出

1.0000+3.0000=4.0000
示例2

输入

1.0;4.0

输出

Invalid operation!
示例3

输入

44.0/0.0

输出

Wrong!Division by zero!
#include<stdio.h>
int main(){
    double a=0,c=0,e=0;
    char b;
    scanf("%lf %c %lf",&a,&b,&c);
    if(b=='+'){
        e=a+c;
        printf("%.4lf+%.4lf=%.4lf",a,c,e);
    }else if(b=='-'){
        e=a-c;
        printf("%.4lf-%.4lf=%.4lf",a,c,e);
    }else if(b=='*'){
        e=a*c;
        printf("%.4lf*%.4lf=%.4lf",a,c,e);
    }else if(b=='/'&&c!=0){
        e=a/c;
        printf("%.4lf/%.4lf=%.4lf",a,c,e);
    }
    else if(b=='/'&&c==0){
        printf("Wrong!Division by zero!");
    }
    else{
        printf("Invalid operation!");
    }
    return 0;
}
发表于 2024-10-31 21:00:55 回复(0)
char str[50]={0};//没写完,难道输入的一行"字符串"能自动识别里面的数字?
    char* p1=str;
    int a=0;
    char* p2=NULL;
    int b=0;
    char oper[4]={'+','-','*','/'};
    char* poper=str;
    int i=0;
    while((scanf("%s",str))!=EOF)
    {
        while(*poper!='+'||*poper!='-'||*poper!='*'||*poper!='/')
        {
            poper++;
        }
        while(p1++!=poper)
        {
            
        }
    }

发表于 2024-09-28 15:10:26 回复(0)
为什么我写的会在执行“92.0*22.3”这组参数的时候输出的是2051.5999????
#include <stdio.h>

int main() {
    float a, b;char c;
    scanf("%f%c%f",&a,&c,&b);
    if (c=='/') {
        if (b==0.0) {
            printf("Wrong!Division by zero!");
        }
        else {
            printf("%.4f/%.4f=%.4f",a,b,a/b);
        }
    }
    else {
        if (c=='+') {
            printf("%.4f+%.4f=%.4f",a,b,a+b);
           
        }
        else {
            if (c=='-') {
                printf("%.4f-%.4f=%.4f",a,b,a-b);

            }
            else {
                if (c=='*') {
                    printf("%.4f*%.4f=%.4f",a,b,a*b);
                   
                }
                else {
                    printf("Invalid operation!");
                }
            }
        }
    }
    return 0;
}

发表于 2024-09-09 17:27:22 回复(2)
#include<stdio.h>
//码表+-*/   43 45  42  47
int main()
{
double a=0.0f,b=0.0f;
char c=0;
scanf("%lf%c%lf",&a,&c,&b);
if((c!=43)&&(c!=45)&&(c!=42)&&(c!=47))
    printf("Invalid operation!\n");
else
{
   switch(c)
   {
case 43:printf("%.4f+%.4f=%.4f",a,b,a+b);break;
case 45:printf("%.4f-%.4f=%.4f",a,b,a-b);break;
case 42:printf("%.4f*%.4f=%.4f",a,b,a*b);break;
case 47:
{if(b==0)
{printf("Wrong!Division by zero!");break;}
else
{
printf("%.4f/%.4f=%.4f",a,b,a/b);
}
}
   }
}
    return 0;
}
发表于 2024-08-03 10:45:59 回复(0)
#include <stdio.h>

int main() {
    double a = 0, b = 0;
    char n = 0;
    scanf("%lf%c%lf", &a, &n, &b);
    if (n != '+' && n != '-' && n != '*' && n != '/' )
    {
        printf("Invalid operation!");
    }
    else {
    
    
    if ( n == '/' && b == 0.0 )
    {
        printf("Wrong!Division by zero!");
        return 0;
    }
    switch(n)
    {
        case ('+') : printf("%.4lf+%.4lf=%.4lf", a, b, a + b );  break;
        case ('-') : printf("%.4lf-%.4lf=%.4lf", a, b, a - b );  break;
        case ('*') : printf("%.4lf*%.4lf=%.4lf", a, b, a * b );  break;
        case ('/') : printf("%.4lf/%.4lf=%.4lf", a, b, a / b );  break;
    }
    }
    return 0;
}

发表于 2024-08-02 21:59:32 回复(0)
单双引号要区别!!!
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

//用单引号引出的一个字符本质上代表的就是一个整数
//用双引号引出的字符串本质上代表的是一个指向无名数组起始字符的指针
int main() {
    double a, b;
    char c = 0;
    while (scanf("%lf%c%lf", &a, &c, &b) == 3) {
        switch(c){
        case('+'):
            printf("%.4lf+%.4lf=%.4lf", a, b, a + b);
            break;
        case('-'):
            printf("%.4lf-%.4lf=%.4lf", a, b, a - b);
            break;
        case('*'):
            printf("%.4lf*%.4lf=%.4lf", a, b, a * b);
            break;
        case('/'):
            if (b == 0.0) printf("Wrong!Division by zero!\n");
            else printf("%.4lf/%.4lf=%.4lf", a, b, a / b);
            break;
        default:
            printf("Invalid operation!\n");
            break;
        }
    }
    return 0;
}



发表于 2024-08-02 16:01:21 回复(0)
#include <stdio.h>

int main() {
    double num1, num2, result;
    char operator;

    // 读取输入
    scanf("%lf%c%lf", &num1, &operator, &num2);

    // 根据运算符进行计算
    switch (operator) {
        case '+':
            result = num1 + num2;
            printf("%.4lf%c%.4lf=%.4lf\n", num1, operator, num2, result);
            break;
        case '-':
            result = num1 - num2;
            printf("%.4lf%c%.4lf=%.4lf\n", num1, operator, num2, result);
            break;
        case '*':
            result = num1 * num2;
            printf("%.4lf%c%.4lf=%.4lf\n", num1, operator, num2, result);
            break;
        case '/':
            if (num2 == 0.0) {
                printf("Wrong!Division by zero!\n");
            } else {
                result = num1 / num2;
                printf("%.4lf%c%.4lf=%.4lf\n", num1, operator, num2, result);
            }
            break;
        default:
            printf("Invalid operation!\n");
            break;
    }

    return 0;
}
发表于 2024-06-30 23:39:42 回复(0)
#include <stdio.h>

int main() 
{
    double operand1 =0,operand2= 0; //操作数--operand
    char operator = '0';    //运算符--operator
    scanf("%lf%c%lf",&operand1, &operator, &operand2);
    if(operator =='+' || operator == '-' || operator == '*' || operator == '/') //合法操作符
    {
        if(operator == '+')     //操作符为字符‘+’
            printf("%.4lf+%.4lf=%.4lf\n",operand1,operand2,operand1+operand2);
        if(operator == '-')
            printf("%.4lf-%.4lf=%.4lf\n",operand1,operand2,operand1-operand2);
        if(operator == '*')
            printf("%.4lf*%.4lf=%.4lf\n",operand1,operand2,operand1*operand2);

        if(operator == '/')  //操作数2不为0
        {
            if(operand2 == 0)
                printf("Wrong!Division by zero!\n");
            else
                printf("%.4lf/%.4lf=%.4lf\n",operand1,operand2,operand1/operand2);
        }
    }
    else 
    {
        printf("Invalid operation!\n");
    }
    return 0;
}


编辑于 2024-04-19 22:30:44 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int Validity(char c, int factor)
{
    //判断符号
    if (c != '+' && c != '-' && c != '*' && c != '/')
    {
        printf("Invalid operation!\n");
        return 1;
    }
    //判断除数
    if (factor == 0)
    {
        printf("Wrong!Division by zero!\n");
        return 1;
    }
    //合法
    return 0;
}

double Add(double a, double b)
{
    return a + b;
}

double Sub(double a, double b)
{
    return a - b;
}

double Div(double a, double b)
{
    return a / b;
}

double Mul(double a, double b)
{
    return a * b;
}

int main()
{
    double a = 0.0;
    double b = 0.0;
    double result = 0.0;
    char operator = 0;

    scanf("%lf%c%lf", &a, &operator, &b);

    //合法性判断
    if (Validity(operator, b))
    {
        return 0;
    }

    switch (operator)
    {
    case '+':
        result = Add(a, b);
        break;
    case '-':
        result = Sub(a, b);
        break;
    case '*':
        result = Mul(a, b);
        break;
    case '/':
        result = Div(a, b);
        break;
    //其实这里不需要default,因为前面已经进行过合法性判断
    //但是为了养成良好习惯,还是加上了
    default:
        break;
    }

    printf("%.4lf%c%.4lf=%.4lf\n", a, operator, b, result);

    return 0;
}

发表于 2024-03-19 10:45:57 回复(0)
#include <stdio.h>
int main() {
    double a, b;
    char ch;
    scanf("%lf%c%lf", &a, &ch, &b);
    if ((ch == '+' || ch == '-' || ch == '*' || ch == '/') && b != 0.0) {
        if (ch == '+') {
            printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a + b);
        }
        else if (ch == '-') {
            printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a - b);
        }
        else if (ch == '*') {
            printf("%.4lf%c%.4lf=%.4lf\n", a, ch, b, a * b);
        }
        else
            printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a / b);
    }
    if (ch != '+' && ch != '-' && ch != '*' && ch != '/') {
        printf("Invalid operation!\n");
    }
    if (b == 0.0) {
        printf("Wrong!Division by zero!\n");
    }
    return 0;
}
发表于 2024-02-17 16:50:13 回复(0)
#include <stdio.h>

int main() {
    double a, b;
    char c;
    scanf("%lf%c%lf", &a, &c, &b);
    //printf("%c", c);
   
    if(c!='+' && c!='-' && c!='*' && c!='/'){
        printf("Invalid operation!");
    }else if(c == '/' && b == 0){
        printf("Wrong!Division by zero!");
    }else{
        if(c == '+'){
            printf("%.4lf+%.4lf=%.4lf", a, b, a+b);
        }
        if(c == '-'){
            printf("%.4lf-%.4lf=%.4lf", a, b, a-b);
        }
        if(c == '*'){
            printf("%.4lf*%.4lf=%.4lf", a, b, a*b);
        }
        if(c == '/'){
            printf("%.4lf/%.4lf=%.4lf", a, b, a/b);
        }
    }
    return 0;
}
编辑于 2024-01-19 15:41:19 回复(0)
#include <stdio.h>

int main() {
    double a, b,c;//存两个操作数
    char o;//存操作符
    scanf("%lf%c%lf",&a,&o,&b);
    switch(o){
        case '+':
        c=a+b;
        printf("%.4lf+%.4lf=%.4lf",a,b,c);
        break;
        case'-':
        c=a-b;
        printf("%.4lf-%.4lf=%.4lf",a,b,c);
        break;
        case'*':
        c=a*b;
        printf("%.4lf*%.4lf=%.4lf",a,b,c);
        break;
        case'/':
        if(0==b){
            printf("Wrong!Division by zero!");
        }
        else{
            c=a/b;
            printf("%.4lf/%.4lf=%.4lf",a,b,c);
        }
        break;
        default:
        printf("Invalid operation!");
        break;

    }
   
    return 0;
}
编辑于 2024-01-10 16:55:13 回复(0)
#include<stdio.h>
int main()
{
    char f=0;
    float a=0,b=0;
    scanf("%f%c%f",&a,&f,&b);
    if (f!='+'&&f!='-'&&f!='*'&&f!='/')
        printf("Invalid operation!\n");
    else if(b==0.0&&f=='/')
        printf("Wrong!Division by zero!\n");
    else if(f=='+')
        printf("%.4f+%.4f=%.4f",a,b,a+b);
    else if(f=='-')
        printf("%.4f-%.4f=%.4f",a,b,a-b);
    else if(f=='*')
        printf("%.4f*%.4f=%.4f",a,b,a*b);
    else
        printf("%.4f/%.4f=%.4f",a,b,a/b);
       
    return 0;
}
发表于 2024-01-10 11:47:35 回复(0)
#include <stdio.h>

int main() {
    double n1 = 0.0;
    double n2 = 0.0;
    char op = 0;
    while (~scanf("%lf%c%lf", &n1, &op, &n2)) {
        switch (op) {
            case'+':
                printf("%.4lf+%.4lf=%.4lf\n", n1, n2, n1 + n2);
                break;
            case'-':
                printf("%.4lf-%.4lf=%.4lf\n", n1, n2, n1 - n2);
                break;
            case'*':
                printf("%.4lf*%.4lf=%.4lf\n", n1, n2, n1 * n2);
                break;
            case'/':
                if (0.0 == n2) {
                    printf("Wrong!Division by zero!\n");
                } else {
                    printf("%.4lf/%.4lf=%.4lf\n", n1, n2, n1 / n2);
                }
                break;
            default:
                printf("Invalid operation!\n");
                break;
        }
    }
    return 0;
}

发表于 2024-01-08 12:26:27 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    double a = 0.0;
    double b = 0.0;
    double arr[3] = { 0 };
    char arr1[1] = { '0' };
    double num = 0.0;
    scanf("%lf%c%lf", &arr[0], &arr1[0], &arr[2]);
    a = arr[0];
    b = arr[2];
    if (arr1[0] == '+')
    {
        num = a + b;
        printf("%.4f+%.4f=%.4f",a,b,num);
    }
    else if (arr1[0] == '-')
    {
        num = a - b;
        printf("%.4f-%.4f=%.4f", a, b, num);
    }
    else if (arr1[0] == '/'&&b==0)
    {
        printf("Wrong!Division by zero!");
    }
    else if (arr1[0] == '/')
    {
        num = a / b;
        printf("%.4f/%.4f=%.4f", a, b, num);
    }
    else if (arr1[0] == '*')
    {
        num = a * b;
        printf("%.4f*%.4f=%.4f", a, b, num);
    }
    else
    {
        printf("Invalid operation!");
    }
        return 0;
}

发表于 2023-12-21 11:34:13 回复(0)
这道题有个坑,两个操作数要用double类型,不然精度不够过不了第九组数据,太坑了………………
//BC77 简单计算器
#include "stdio.h"
int main(){
    double a,b;
    char c;
    scanf("%lf%c%lf",&a,&c,&b);

    switch(c){
        case '+':printf("%.4f%c%.4f=%.4f\n",a,c,b,(a+b));break;
        case '-':printf("%.4f%c%.4f=%.4f\n",a,c,b,(a-b));break;
        case '*':printf("%.4f%c%.4f=%.4f\n",a,c,b,(a*b));break;
        case '/':
            if(b==0){
                printf("Wrong!Division by zero!\n");
                break;
            }
            else{
                printf("%.4f%c%.4f=%.4f\n",a,c,b,(a/b));
                break;
            }
        default:printf("Invalid operation!\n");break;
    }

    return 0;
}


发表于 2023-11-12 18:50:40 回复(0)
#include <stdio.h>

int main() {
     double n1=0;
     double n2=0;
     char c=0;
     while(~scanf("%lf %c %lf",&n1,&c,&n2))
     {
        switch(c)
        {
            case'+':
            printf("%.4lf%c%.4lf=%.4lf\n",n1,c,n2,n1+n2);
            break;
            case'-':
            printf("%.4lf%c%.4lf=%.4lf\n",n1,c,n2,n1-n2);
            break;
            case'*':
            printf("%.4lf%c%.4lf=%.4lf\n",n1,c,n2,n1*n2);
            break;
            case'/':
            if(n2==0.0)
            printf("Wrong!Division by zero!\n");
            else
            printf("%.4lf%c%.4lf=%.4lf\n",n1,c,n2,n1/n2);
            break;
            default:
            printf("Invalid operation!\n");
            break;
        }
     }
    return 0;
}
发表于 2023-09-01 10:17:30 回复(0)
#include <stdio.h>

int main() 
{
    double a = 0.0f;
    double b = 0.0f;
    char ch = 0;
    scanf("%lf%c%lf", &a, &ch, &b);
    if(b!=0.0 && ch=='+')
    {
        printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a+b);
    }
    else if(b!=0.0 && ch=='-')
    {
        printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a-b);
    }
    else if(b!=0.0 && ch=='*')
    {
        printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a*b);
    }
    else if(b!=0.0 && ch=='/')
    {
        printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a/b);
    }
    else if(ch!='+' && ch!='-' && ch!='*' && ch!='/')
    {
        printf("Invalid operation!\n");
    }
    else if(b==0.0 && ch=='/')
    {
        printf("Wrong!Division by zero!\n");
    }
    return 0;
}

发表于 2023-08-29 21:22:49 回复(0)
double a,b;
这个地方为啥用float编不过去?
发表于 2023-08-15 21:05:40 回复(0)