文档章节

【Essential C++ 学习笔记】第一章 基础编程 - 控制语句

JokerHuang
 JokerHuang
发布于 2016/08/16 22:04
字数 1665
阅读 4
收藏 0

本章导航

初识 C++

运算符

控制语句

数组和向量

初识指针

文件的读写


条件语句

条件语句就是根据一个表达式的真假来判断执行某些语句.

IF 条件语句

IF 基础形式

if 条件语句分为两个部分: 第一部分是条件部分; 第二部分是代码部分, 代码部分可以用花括号括起来用以执行多行代码, 如果不用花括号则为执行紧邻的单行代码`. 代码演示如下:

if (condition)
    // 这里执行单行代码

if (condition) {
    // 使用花括号可以一次执行多行代码
    // 建议都使用花括号将需要执行的代码括起, 容易理解
}

ELSE 子句

当 if 条件判断为假时, 我们比较习惯去执行另一些代码来进行操作, 这个时候 else 子句就显示了功能.

当 if 判断为 false 时, 执行 else 子句. 代码演示如下:

if (condition) {
    // 这里执行 condition 为 true 时的代码片段
} else {
    // 这里执行为 false 时的代码片段
}

ELSE IF 子句

结合 if 与 else 的实际使用情况, 我们可能对某一个值有多种判断, 这时候 else if 子句就派上用场了, 代码演示如下:

if (jokerHuangValue == 1) {
    // 这里执行 jokerHuangValue 等于 1 的情况时的代码
} else if (jokerHuangValue == 2) {
    // 这里执行 jokerHuangValue 等于 2 的情况时的代码
} else {
    // 这里执行 jokerHuangValue 即不等于 1 也不等于 2 的情况的代码
}

ELSE 悬空问题

刚我们提到说需要执行的代码用花括号括起, 加入我们不这么做就有可能产生else 悬空的问题, 既 if 语句多于 else 子句, 实际的代码演示如下:

if (a == 1)
if (b == 2)
	printf("***\n");
else
	printf("###\n");

这里的 else 到底是谁的子句? 判定的规则为else 附加至最近的 if, 但是我们需要极力避免这种情况的产生, 唯一的办法即是将需要执行的代码用花括号括起.

SWITCH 语句

SWITCH 基础形式

如果需要判断的值属于整形类型, 那么可以使用 SWITCH 语句来代替成堆出现的 IF ELSE 语句.

switch 的使用方式为: 在关键字后紧跟一个小括号括住表达式, 其后是一组 case 关键字标签, 每个标签都与表达式相比较, 如果找到与之对应的 case 标签, 则执行其后的所有代码, 如果没有找到相对应的 case 标签, 则执行 default 子句, 如果没有设置 default 子句则不执行任何代码. 用代码演示如下:

switch (jokerHuangValue) {
    case 1:
        std::cout << "Oops! Nice guess but not quite it." << std::endl;
        break;
    case 2:
        std::cout << "Hmm. Sorry, Wrong a second time." << std::endl;
        break;
    case 3:
        std::cout << "Ah, this is harder than it looks, isn't it?" << std::endl;
        break;
    default:
        std::cout << "It must be getting pretty frustrating by now!" << std::endl;
        break;
}

这里出现了一个关键词break, 作用为跳出当前的代码段, switch 有个需要注意的地方, 当表达式符合某一个 case 子句时, 将会执行其后的所有代码, 包括在其后的其他 case 子句和 default 子句代码! 所以需要使用 break 来提前跳出已经完成的部分. 假设我们不加 break, 此时 jokerHuangValue 的值为 2, 将会有如下输出:

Hmm. Sorry, Wrong a second time.
Ah, this is harder than it looks, isn't it?
It must be getting pretty frustrating by now!

循环语句

WHILE 循环语句

WHILE 基本形式

while 循环语句跟 if 有点类似,在开始阶段对条件表达式求值,如果其值为 true 则紧跟在 while 之后的语句或语句块将会被执行,然后重新计算条件表达式的值,直至条件表达式的值为 false,终止 while 循环。

int jokerHuangValue = 0;

while (jokerHuangValue < 10) {
    std::cout << "value : " << jokerHuangValue << std::endl;
    ++jokerHuangValue;
}

CONTINUE 结束单次循环并重新开始

continue 关键字的作用是终止循环的当前迭代,并重新计算条件表达式。

其作用很明显,当程序满足某一条件时,continue 关键字可以帮助我们停止程序执行后续代码并重新计算调剂表达式的值。演示代码如下:

int jokerHuangValue = 0;

while (jokerHuangValue <= 10) {
    // 跳过 jokerHuangValue 为 6 的情况
    if (jokerHuangValue == 6) {
        continue;
    }

    std::cout << "value : " << jokerHuangValue << std::endl;
    ++jokerHuangValue;
}

BREAK 跳出当前循环

之前已经介绍过 break 关键字的用法,和 switch 一样,在 while 循环中,break 的作用也是跳出当前循环。演示代码如下:

int jokerHuangValue = 0;

while (jokerHuangValue <= 10) {
    // 跳过 jokerHuangValue 为 6 的情况
    if (jokerHuangValue == 6) {
        continue;
    }

    // 当 jokerHuangValue 为 9 的时候,跳出当前循环
    if (jokerHuangValue == 9) {
        break;
    }

    std::cout << "value : " << jokerHuangValue << std::endl;
    ++jokerHuangValue;
}

DO...WHILE... 变型

while 循环语句存在一个变型即 do ... while ... 语句。在 Essential C++ 中并没有提到,但是可以简单了解下。

while 的执行顺序是先判断再执行,而 do ... while ... 的执行顺序是先执行后判断,很容易理解,先执行 do 代码块中的语句,然后再判断是否满足 while 的循环条件,如果满足,再执行一遍 do 中的代码块,以此类推直至不满足 while 循环条件。演示代码如下:

int jokerHuangValue = 0;

// 首先执行 do 中的代码块部分
do {
    std::cout << "value : " << jokerHuangValue << std::endl;
    ++jokerHuangValue;
} while (jokerHuangValue <= 10);

FOR 循环语句

FOR 基本形式

for 循环语句通过三组表达式来循环一个代码块,其表现形式可用如下表达:

for (init-statement ; condition ; expression) {
    // 此处为需要循环执行的代码
}

其中需要注意一下几点

  • init-statement 在代码初始阶段被执行一次,常用来初始化循环索引
  • condition 为循环每次开始前需要计算的表达式,如果 condition 为 false 则代码不执行
  • expression 为单次循环结束后执行的表达式

注意init-statement、condition、expression 都可以留空,分号却不能省略


心得体会

第一次这样写学习笔记,有点不太适应,内容也有点乱糟糟,希望通过学习 Essential C++ 这本书,一来让我对 C++ 有个更好的入门体验,二来也提高下自己的文笔。各位大神如果发现有不对的地方请指正,大家一起学习。如果要转请注明出处来自JokerHuang,不过我觉得也没人会转...

© 著作权归作者所有

共有 人打赏支持
JokerHuang
粉丝 3
博文 6
码字总数 7272
作品 0
苏州
高级程序员
私信 提问
重读经典-《Effective C++》Item1:视C++为一个语言联邦

本博客(http://blog.csdn.net/livelylittlefish )贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! C++已经是个多重范型编程语言(multiparadigm programming la...

晨曦之光
2012/03/09
61
0
C语言编程学习程序解析:控制语句之while循环语句详解

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
05/28
0
0
C语言编程学习程序解析:控制语句之goto语句

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
05/29
0
0
【Visual C++】游戏开发笔记之一——API函数、DirectX的关键系统

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7318264 作者:毛星云 邮箱: happylifemxy@qq.com 大家别叫我楼主可以吗- -.请叫我...

长平狐
2012/11/12
138
0
【Visual C++】游戏开发笔记之一——API函数、DirectX的关键系统

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7318264 作者:毛星云 邮箱: happylifemxy@qq.com 大家别叫我楼主可以吗- -.请叫我...

长平狐
2012/11/12
97
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在Chrome浏览器中启动deviceready事件(尝试调试phonegap项目)?

我正在开发PhoneGap应用程序,我希望能够在Chrome中调试它,而不是在电话上调试。但是,我在onGetReady()函数中初始化我的代码,该函数在PhoneGap触发“deviceready”事件时触发。由于Chr...

kisshua
35分钟前
5
0
支付宝客户端架构分析:自动化日志收集及分析

摘要: 《支付宝客户端架构解析》系列将从支付宝客户端的架构设计方案入手,带领大家进一步了解支付宝在客户端架构上的迭代与优化历程。 小蚂蚁说: 《支付宝客户端架构解析》系列将从支付宝...

阿里云官方博客
38分钟前
1
0
nginx中部署vue打包后的静态文件

如何在nginx中部署静态资源就不描述了, 请看我的这篇博客 将vue脚手架项目打包后的静态文件放到nginx上, 发现有个问题, 即url上有#, 怎么去掉这个#呢. 1 项目中router的mode 路由的mode要为h...

克虏伯
55分钟前
11
0
JS容易理解错误的地方

在这端代码执行的末尾,你会不会hi变量回事函数中的hi了?你会不会认为这不是按引用传递了? 对值传递和引用传递产生质疑了? 1 var hi = {};2 function sayHello(hi) { ...

器石_
57分钟前
5
0
Java开发学习--MongoDB

之前只学过sql,第一次使用非关系型数据库。以前对于关系型数据库与非关系型数据库的概念很模糊,通过这次的学习对这两者有了一个清晰的概念。 主键 在MongoDB中,主键名叫"_id",如果在生成...

微笑向暖wx
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部