牛客网刷题 | BC77 简单计算器

2024-05-06 07:52

本文主要是介绍牛客网刷题 | BC77 简单计算器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

KiKi实现一个简单计算器,实现两个数的“加减乘除”运算,用户从键盘输入算式“操作数1运算符操作数2”,计算并输出表达式的值,如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。如果操作数2等于0.0,则输出“Wrong!Division by zero!”

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

输入描述:

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

输出描述:

输出为一行。

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

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

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


思路 : 

这道题我想复杂了

想先用数组判断是不是  + - * /  这四个符号

然后再进去计算

搞了半天没有看见成效

看了下评论区

用一个switch 语句就可以了

我想多了,唉......

读取输入:首先,我们需要从用户那里读取一行输入,这行输入包含了两个操作数和一个运算符。

解析输入:将输入的字符串按照运算符分割成两部分,前半部分是操作数1,后半部分是操作数2。同时,识别出运算符。

验证运算符:检查运算符是否为合法的运算符(+、-、*、/)。如果不是合法的运算符,则输出“Invalid operation!”。

处理除法:如果运算符是除法(/),需要检查操作数2是否为0.0。如果是0.0,则输出“Wrong!Division by zero!”。

执行运算:如果通过以上检查,根据运算符对两个操作数进行相应的数学运算。

格式化输出:将运算结果保留四位小数,并按照题目要求的格式输出表达式和结果,即操作数1运算符操作数2=运算结果。


代码 1:

# include <stdio.h>
int main (){double a,b;char c;//char类型字符scanf("%lf%c%lf",&a,&c,&b);switch (c) {case '+'://add = a+bprintf("%.4lf+%.4lf=%.4lf",a,b,a+b);break;case '-'://sub=a-bprintf("%.4lf-%.4lf=%.4lf",a,b,a-b);break;case '*'://mul=a*bprintf("%.4lf*%.4lf=%.4lf",a,b,a*b);break;case '/':if (b==0.0) {printf("Wrong!Division by zero!\n");}else {//div = a/bprintf("%.4lf/%.4lf=%.4lf",a,b,a/b);}break;default:printf("Invalid operation!\n");break;}return 0;
}

代码 2 :

#include<stdio.h>
int main(){
double a, b;
char ch;
while ((scanf("%lf%c%lf", &a, &ch, &b)) != EOF)
{if (ch == '+' || ch == '-' || ch == '*' || ch == '/'){switch (ch){case '+':printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a + b); break;case '-':printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a - b); break;case '*':printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a * b); break;case '/':if (b == 0.0){printf("Wrong!Division by zero!"); break;}else{printf("%.4lf%c%.4lf=%.4lf", a, ch, b, a / b); break;}}}elseprintf("Invalid operation!");
}
return 0;
}

代码 3 :

if...else 来判断的

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

代码 4 :

使用指针来写的

#include <stdio.h>
//加
double add(double a, double b) {return a + b;
}
//减
double sub(double a, double b) {return a - b;
}
//乘
double mul(double a, double b) {return a * b;
}
//除
double div(double a, double b) {return a / b;
}
int main() {double a, b;  //操作数1和2char opt;    //运算方式//函数指针数组double (*pf[8])(double, double) = {NULL, NULL, mul, add, NULL, sub, NULL, div};scanf("%lf%c%lf", &a, &opt, &b);if (opt == '+' || opt == '-' || opt == '*' || opt == '/') //判断运算符是否合法{if (opt == '/' && b == 0) //判断是否符合分母不为零{printf("Wrong!Division by zero!\n");}else {printf("%.4lf%c%.4lf=%.4lf", a, opt, b, (*pf[opt % 40])(a, b)); //输出}} else {printf("Invalid operation!\n");}}

扩展 :switch语句

switch语句是一种多分支选择结构,允许根据变量的值执行不同的代码块。以下是关于switch语句的一些关键知识点:

基本语法

switch (expression) {case constant_expression:// 代码块1break;case constant_expression:// 代码块2break;// ...default:// 默认代码块,当没有匹配的case时执行
}

要点

  1. switch语句的主体是一个圆括号内的表达式(通常是一个变量或常量),这个表达式的结果将与每个case标签中的常量表达式进行比较。
  2. 如果找到匹配的case,程序将从该case下的代码块开始执行,直到遇到break语句。如果没有break,程序将继续执行下一个case的代码,这称为“穿透”或“瀑布”效应。
  3. case标签中的常量表达式必须是整数或枚举类型。
  4. default标签是可选的,用于处理没有匹配case的情况。如果没有匹配的case且没有default,程序将跳过整个switch语句继续执行。
  5. switch语句通常用于替代多个if-else语句,使代码更加清晰。

示例

#include <stdio.h>int main() {int day = 4;switch (day) {case 1:printf("Monday");break;case 2:printf("Tuesday");break;// ...case 5:printf("Friday");break;default:printf("Not a typical workday");}return 0;
}

在这个例子中,根据变量day的值,程序将打印出对应的星期名称。由于day被初始化为4,程序将执行case 2下的代码块,并打印出"Tuesday"。

注意事项

  • 确保每个希望终止的case后面都有break语句,以防止穿透效应。
  • switch语句的表达式结果和case标签中的常量表达式都不进行类型转换。
  • 在某些情况下,使用if-else可能比switch更灵活,特别是当涉及到非整数类型或更复杂的逻辑时。

switch语句是C语言中处理多条件分支选择的有用工具,正确使用它可以提高代码的可读性和效率。

  

这篇关于牛客网刷题 | BC77 简单计算器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963817

相关文章

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示