2021-4-13 日记 C++(四)

鉴于数据类型如果要讲清楚将要花费大量篇幅,所以俺就不讲那些虚的,只讲实际应用。比如说int类型占几个字节啊,char类型占几个字节啊,signed int和unsigned int有什么区别啊,如果真的要了解建议去参考专业文献。本人的水平还没高到能用比专业文献还简单的方法将这些东西讲清楚,多多见谅!

假定我们现在已经学会如何写一个hello world,知道如何定义变量常量(int n=123),也大概知道循环判断结构(if、for、while…)长啥样,那我们就可以着手准备写我们的简单计算器了!

本来昨天结尾的时候说今天要讲字符串,但是想了想现在好像也暂时不需要用字符串,菜单直接用数字输入就得了。So,字符串以后再讲,我们直接进入主题!

作为一个专业的程序员,我们要学会一种自顶向下的编程思路。什么是自顶向下呢?就是从最直接的应用层面,一步步向下渗透,直到复杂的内核。举个例子:我们现在要去坐飞机,但是坐飞机是一个很复杂的动作,因为它可以被细分为订机票、行李托运、过安检等等等等动作。为了让事情变得简单,我们先从订机票开始,先订机票,然后再去机场,再过安检…

这样,一个复杂的坐飞机动作就被拆分为一个个有序的简单动作,我们也就不至于无从下手,不知道该从哪开始“坐飞机”。

再回到我们即将实现的简单计算器,我们可以直接去参考现有的计算器。我们的电脑、手机基本都自带计算器,而我们第一个想到的事情就是菜单。

我们说过计算器不可能只有加和减,它必须具有多种功能:比如说对结果的存储、对数字的加减乘除取余操作等等。

暂时先不要管具体功能怎么实现,我们先把菜单做出来,进行一个“画饼”,至于“饼”能不能圆上,画完再说!

#include<iostream>
using namespace std;
int main()
{
	return 0;
}

把这个大家应该已经很熟悉的代码默写出来后,我们思考一下如何实现一个菜单。首先想到的是我们的代码肯定不是只执行一次就return 0结束了,因为计算器又不是一次性的,所以想到我们昨天学的循环结构(for和while)。

while结构比较简单,所以我们采用while的循环结构,至于循环表达式,我们可以填入一个常数1,表示while循环无限进行。

#include<iostream>
using namespace std;
int main()
{
	int order,x,y,result;
	while(1)
	{
		cout <<"====Simple计算器===="<< endl;
		cout <<"输入1: 进行加法运算"<< endl;
		cout <<"输入2: 进行减法运算"<< endl;
		cout <<"输入3: 进行乘法运算"<< endl;
		cout <<"输入4: 进行除法运算"<< endl;
		cout <<"===================="<< endl;
		cout <<"请输入你的选择:";
		cin >> order;
	}
	return 0;
}

我们定义四个需要用到的变量,分别是用于选择判断具体进行哪种操作的order、进行运算的操作数x和y以及存储结果的result。

这里注意一下,我们使用了一个cin语句,和学过的cout语句相反,它的作用是输入数据,而且箭头和cout的<<是相反的,这里cin >> order的意思是从键盘向我们只定义而没有初始化的order输入一个自定义的值。

需要注意的是,我们不能乱输入,因为order是int类型的变量,如果我们输入了超过int类型范围内的数,或者输入了其他类型的值,那么程序将会出错! 为了避免出错,我们可以通过异常处理的方法将可能出现的错误进行预处理,不过暂时我们还不用管这些东西。

现在有了一个基本的菜单,接下来就是具体的功能实现了。我们通过输入的order选择相应功能,但具体又让程序根据order判断执行哪一段代码呢?这时候我们就想到了一个好兄弟:switch…case

switch…case是一种能根据表达式的不同,与case中的各种常量表达式比较,并执行结果匹配的语句块的判断结构,这完美符合了我们的期望:输入什么order,就执行输入那个order所希望被执行的代码。

于是在cin >> order;的后面,我们写一个switch…case结构,而switch括号里的表达式,正是我们刚才输入的order,而case所对应的1、2、3、4则分别对应进行加减乘除的代码。

因为具体代码大同小异,我们就不一一实现了,只讲最简单的加法和比较特殊的除法。

加法:

while(1)
	{
		cout <<"====Simple计算器===="<< endl;
		cout <<"输入1: 进行加法运算"<< endl;
		cout <<"输入2: 进行减法运算"<< endl;
		cout <<"输入3: 进行乘法运算"<< endl;
		cout <<"输入4: 进行除法运算"<< endl;
		cout <<"===================="<< endl;
		cout <<"请输入你的选择:";
		cin >> order;
		switch(order)
		{
			case 1:
				cout <<"请输入参与加法运算的两个数:";
				cin >> x >> y;
				result=x+y;
				cout << x <<"+"<< y <<"="<< result << endl;
				break;
			case 2:
				...
			case 3:
				...
			case 4:
				cout <<"请输入参与除法运算的两个数:";
				cin >> x >> y;
				if(y==0)
				{
					cout <<"被除数不能为0!"<< endl;
					break;
				}
				result=x/y;
				cout << x <<"/"<< y <<"="<< result << endl;
				break;
		}
	}

注意一下,cout里面可以直接输入变量名,表示将变量名的数据输出,而加了双引号的则是字符串。比如X为1,那么cout里面输出X和"X"分别得出的结果为1和X。

为什么说除法是特殊的呢?因为它存在一种会让程序崩溃的情况,那就是被除数为0,所以我们需要特地加上一个if判断来进行处理。

至于这个简单计算器的实现代码是相对比较易懂的,如果能够完全看懂每一段代码的用意和设计思路,那么恭喜你,你已经相当于婴儿学会如何爬行了!

但是这个简单计算器还十分粗糙,我们明天将会对它的界面进行美化,并且实现一些额外的功能!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值