总时间限制:
1000ms
内存限制:
65536kB
描述
一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。
输入
输入只有一行,共有三个参数,其中第1、2个参数为整数,第3个参数为操作符(+,-,*,/)。
输出
输出只有一行,一个整数,为运算结果。然而:
1. 如果出现除数为0的情况,则输出:Divided by zero!
2. 如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!
样例输入
1 2 +
样例输出
3
现在就是五一假期的最后一天了,之前我们所讲的题实在是太简单了,今天我们来搞一个稍微有一点难度的题“简单计算器”,我看了之后,刚开始以为挺难得,结果只是输入两个数,和一个符号,连括号都不必,而且只输入一个运算符,不愧是“简单”!
真正的计算器,+-*/()......全都可以用,然而就在这几天内,我在上一个关于递归方面的课程,里面就有一个和计算机功能一样的题“表达式求值”,这道题太难了,我想了几天都没有出结果,好了,扯远了,回归正题。
简单计算器这道题我们可以用switch和if来判断,大家对switc可能不太了解,在这里我就跟大家简单介绍一下:
一般形式:
switch(表达式){
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
…
case 常量表达式n: 语句n;
default: 语句n+1;
}
工作原理:
对表达式(通常是变量)进行一次计算。
把表达式的值与结构中 case 的值进行比较。
如果存在匹配,则执行与 case 关联的代码。
代码执行后,break语句阻止代码跳入下一个 case 中继续执行。
如果没有 case 为真,则使用 default 语句。
给大家看一个样例程序:
样例代码:
#include
using namespace std;
int main()
{
int a;
scanf("%d",&a);
switch (a)
{
case 1:printf("Monday\n");
case 2:printf("Tuesday\n");
case 3:printf("Wednesday\n");
case 4:printf("Thursday\n");
case 5:printf("Friday\n");
case 6:printf("Saturday\n");
case 7:printf("Sunday\n");
default:printf("error\n");
}
return 0;
}
你们觉得这样的switvh程序对不对呢?如果有特殊需要的话,这个程序是可以运行的,但是在这个程序里面,这样数不行的,。
假设你输入的a是4,按理来说他只会输出“”Thursday ,但是在这个程序里,他会把“Thursday”后面的全部都输出,这样我们应该怎么办呢?有一个函数“break”,他是用来终止这一小部分程序的。
C++ 中 break 语句有以下两种用法:
所以每次case结束了,记得在之后添加一个break;哦!
正确switch代码:
#include
using namespace std;
int main()
{
int a;
scanf("%d",&a);
switch (a)
{
case 1:printf("Monday\n");break;
case 2:printf("Tuesday\n");break;
case 3:printf("Wednesday\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
case 7:printf("Sunday\n");break;
default:printf("error\n");break;
}
return 0;
}
如果需要大量的判断时, 一些优秀的程序员通常会使用switch语句而不是if语句,因为if语句需要一长串的判断,如果出现错误的话不好找出来,而switch就更简洁及美观一些,可以更好的发现错误。
现在回归正题,数字肯定可以不用switch语句判断,那么需要判断的就只是运算符了(+-*/)。
代码:
#include
#include
using namespace std;
int main()
{
int a,b;
char c;
float x;
cin>>a>>b>>c;
switch(c)
{
case '+':x=a+b;break;
case '-':x=a-b;break;
case '*':x=a*b;break;
case '/':x=a/b;break;
}
cout<
这个代码行不行呢?不行,如果你输入的是‘/’号,并且除数是0,那么程序将会死机,无输出,而且题目上也说了的, 如果出现除数为0的情况,则输出:Divided by zero!如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!
所以我们要判断一下:
修改代码:
#include
#include
using namespace std;
int main()
{
int a,b;
char c;
float x;
cin>>a>>b>>c;
switch(c)
{
case '+':x=a+b;break;
case '-':x=a-b;break;
case '*':x=a*b;break;
case '/':
if(b==0)
{
cout<<"Divided by zero!"<
我们在运算符为‘/’的情况下,再次判断除数是否是0,如果是就输出Divided by zero!,不是就依旧按原来的来,如果出现除数为0的情况我们解决了。
还有如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!没有解决,这个好办,如果没有 case 为真,则使用 default 语句。
最终代码1:
#include
#include
using namespace std;
int main()
{
int a,b;
char c;
float x;
cin>>a>>b>>c;
switch(c)
{
case '+':x=a+b;break;
case '-':x=a-b;break;
case '*':x=a*b;break;
case '/':
if(b==0)
{
cout<<"Divided by zero!"<
将default语句加上后,这道题也算完结了,但是之前我说过,还可以运用if判断来接觉,就给大家看看吧!
最终代码2:
#include
#include
using namespace std;
int main()
{
int a,b;
char c;
float x;
cin>>a>>b>>c;
if(c=='+')
{
x=a+b;
cout<
在if判断中,else if就相当于switch中的case,else就相当于default。