文档章节

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

JokerHuang
 JokerHuang
发布于 2016/08/16 22:04
字数 1665
阅读 3
收藏 0
点赞 0
评论 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
苏州
高级程序员
C语言编程学习程序解析:控制语句之while循环语句详解

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

小辰带你看世界 ⋅ 05/28 ⋅ 0

C语言编程学习程序解析:控制语句之goto语句

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

小辰带你看世界 ⋅ 05/29 ⋅ 0

C语言编程入门学习:用C语言输出九九乘法表

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

小辰带你看世界 ⋅ 05/29 ⋅ 0

C语言编程学习程序解析:C循环语句break和continue关键字

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

小辰带你看世界 ⋅ 05/28 ⋅ 0

C语言编程学习程序解析:控制语句之学习前言

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

小辰带你看世界 ⋅ 05/27 ⋅ 0

C语言编程新手学习基础知识点大总结!小白入门必备

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

小辰带你看世界 ⋅ 05/13 ⋅ 0

C语言编程入门学习:C语言实现猜数字小游戏

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

小辰带你看世界 ⋅ 05/30 ⋅ 0

C语言编程入门基础学习:控制语句之switch/case语句

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

小辰带你看世界 ⋅ 05/29 ⋅ 0

C语言编程学习程序解析:控制语句之if/else语句详解

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

小辰带你看世界 ⋅ 05/28 ⋅ 0

C语言编程能用来干嘛,为什么你觉得C语言学了之后没用?

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

小辰带你看世界 ⋅ 05/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决CentOS6、7,/etc/sysconfig/下没有iptables的问题

一、Centos 6版本解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptables服务进行保存: service iptables save 3.重启iptables服务: service ...

寰宇01 ⋅ 19分钟前 ⋅ 2

数据库备份和恢复

备份:mysqldump -u root -p 数据库>磁盘路径 恢复:mysql -u root -p 数据库<sql脚本的磁盘路径

anlve ⋅ 今天 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部