我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。
查看源代码

C++ 讲稿 5.条件语句

By 精英王子

CC-BY-NC-SA(署名-非商业性使用-以相同方式共享) 3.0

注:解说在图片下方

原始幻灯片(持续更新):https://docs.google.com/presentation/d/1yA9HuxRrAQJNyucXv2EvosYreR5YxfXmeY3MxqhTQbo/edit

解说写在讲者备注

1

在此之前,我们编写的程序都像是一条直线,一句一句从头执行到位。

这节课我们会介绍条件语句,它可以令你的程序根据不同的输入,选择不同的分支来执行。进而获得不同的结果。

2

关系运算就是比较两个值的大小,或者两个值是否相等。

值得注意的是等于用两个等号表示,因为一个等号是赋值号,这点很容易被忘记。

关系运算的结果是bool类型,即是(true)/否(false).

需要明确这个概念:关系运算是一种普通的运算,和加减法无异,只不过这种运算通过比较来实现。

看右面最后一句,关系运算符的左右,可以是(字面值) ,也可以是表达式,或者变量,甚至函数的返回值。

3

逻辑运算是对bool类型的运算,即对是/否的运算,原理与数学中的逻辑联结词、物理中的逻辑电路相通。

通常逻辑运算用来对关系运算的结果进行加工,对关系运算的结果进行取反(最后一句),或者连接(第四句、第五句)。

C++中的逻辑运算符存在一种“短路效应”.

如右面被标红的那句,||的左面已经为true, 无论右面是何值,结果都将是ture, 所以C++在能够确定整个式子的结果的时候,会跳过右半部分的计算。

在&&运算时也存在类似情况,若左面的值为false,那么无论右面为何值,整个式子都是false, C++会跳过右半部分的计算。

这种短路效应在这个例子中无关紧要,当右半部分是一个(有副作用的表达式,如)函数时,短路效应将导致右半部分不会被计算(函数不会被调用).

4

不做过多解释,参见数学、物理书

5

这是一个简单的if语句的例子。
if语句的功能是根据一定的条件,决定是否要执行一段代码。

if后面跟着一个括号,括号中是一个bool类型的表达式,这个表达式的值决定了if是否执行接下来的代码。

我们之前介绍过,在C++中,花括号表示一个整体。在这里,这对花括号中的语句,就是当括号中的表达式为真时,if要执行的代码。

花括号中可以有任意行代码、一行、多行、没有,都可以。

当花括号中只有一行代码的时候,花括号可以省略。

按照通常的习惯,为了阅读方便,每个花括号中的代码都会向右缩进(比如4个空格), 在编辑器中按Tab可以缩进。

如果我输入了一个负数5, 表达式a<=0的值将会是true, 将会执行if中的代码,输出一行文字。

而如果我输入了一个正数3, 表达式a<=0的值将会是false, 会跳过if中的代码,不会有文字输出。

if是C++的关键字。

6

if else语句是对if语句的扩展,在if的语句块后面可以加上一个else, 并再附加一个语句块,这个语句块会在if语句的条件不成立的时候被执行。

同样,如果语句块(花括号)中只有一行,那么花括号是可以省略的,就像幻灯片上面那样。

if else语句中,无论括号中的表达式是真是假,都会有一个语句块被执行。当表达式为真时,if后的语句块被执行,为假时,else后的语句块被执行。

else也是C++中的关键字。

7

有些人在面对复杂的逻辑流程的时候,喜欢画流程图来帮助理解。

其实流程图可以看作是草稿一样,以比代码更清晰的方式来展现整个程序的逻辑。

而有的人并不喜欢流程图,他们觉得代码比流程图更容易理解。

8

else if 这看起来是一种新的语法,但其实不是,只不过将多个if else组合到了一起,并省略了花括号。

if会与离自己最近的else结合,形成一个if else语句。同时,整个if else语句,被认为是一个语句,单独包含在花括号中时可以省略花括号。

9

?:运算符可以认为是if else语句的简写形式,可以在一行内写完。

不要奇怪,它也是一个运算符,和加号减号一样,只不过它需要三个操作数。

10

但凡你学过一点数学,你应该知道4 + 3 * 2在数学中结果是10, 很高兴地告诉你,在C++里面也一样。

但是为什么是5呢?换成其他运算符又会怎样呢?

决定计算顺序的指标有两个:运算符的优先级,和运算符的结合性。

同时你可以任意添加括号,来改变计算顺序。

11

C++的运算符分为一元、二元、三元运算符,前面的数字代表运算符有几个操作数。

例如负号,它只需要一个操作数,所以叫一元运算符。

而加号需要两个操作数,所以叫二元运算符。

这个表中仅列出了我们学过的运算符,还有很多运算符我们没学过。

记不住优先级怎么办?加括号!

12

因为空间有限,我在一行中写了多个语句,这在C++中是允许的。

switch同样提供了分支的功能,它针对一个表达式可能是多个值之一的情况。

如在这里,月份只可能是1-12中的一个数。

switch后是一个括号,里面是要判断的表达式。再之后是一个大括号。

大括号中有若干个case关键字,后面跟着一个值和一个冒号。

当a的值和任意一个case后的值相等时,程序就会跳到此处执行。

(值得注意)默认情况下,程序会一直执行下去,会跨越多个case, 除非你手动用break语句退出switch.

如果要判断的表达式不和任何一个case匹配,就会执行default后的代码。

switch, case ,break, default都是C++的关键字。

13

14

如果要在屏幕上打印十次同一个字符串,除了把输出语句复制十次还有其他方法么?

撰写评论

如希望撰写评论,请发邮件至 jysperm@gmail.com 并注明文章标题,我会挑选对读者有价值的评论附加到文章末尾。

精子生于 1995 年,英文 ID jysperm.

订阅推送

通过 Telegram Channel 订阅我的博客日志、产品和项目的动态:

王子亭的博客 @ Telegram


通过邮件订阅订阅我的博客日志、产品和项目的动态(历史邮件):

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-ND  授权发布。最后生成于 2024-04-08.