当前课程知识点:基于Linux的C++ > 第二讲 程序控制结构 > 2.2 结构化程序设计基础 > LinuxCPP0202
我们首先从结构化的
程序设计基础开始讲起
整个程序的控制结构
你可以把它理解成一个黑箱
所谓的黑箱
就是我们实际上不知道
这个箱子里面内部是什么东西
但是 我们知道一个输入进去
然后那边就会出来一个结果
我们就称之为一个黑箱
对于整个程序流程来讲
单入口和单出口控制结构是易于理解的
如果是双入口和双出口
整个程序的流程就非常难以理解
为啥呢 是因为整个程序的控制结构
是一种级联的关系
经过级联以后
整个程序的执行路径就会非常非常复杂
所以 我们要特别强调
所有程序流程控制
都要求是单入口和单出口的
结构化程序设计
实际上包括了三种基本控制结构
一种称为顺序结构 一种是分支结构
还有一种是循环结构
关于顺序结构
我们后面会有一个例子
程序中实际上最常见的控制结构
就是分支和循环
当然 架构整个程序本身的那个结构
一定是顺序的
从数学角度上讲
它实际上是一种时间的严格偏序
我们可以证明
任何一个复杂的程序
都可以使用这三种控制结构来完成
我们先来看看这个标准的顺序结构
一个又一个的语句块是级联的
从一个单入口进来然后做语句块A
做完语句块A就做语句块B
语句块B做完了
就从一个单一的出口退出
这就是一个标准的顺序结构
整个程序流程必须严格按照
这样的逻辑来运行
这就叫顺序结构
我们可以看这样一个例子
让同学们写一个程序
接受用户输入的两个整数
输出其中较大的那一个
看我们的实现代码
前面跟我们原来的例子是一样的
我使用#include
然后using namespace std
然后int main()
主函数开始
我定义三个量 a、b、max
然后我用cout在输入部分
输出我们整个程序的提示信息
注意 每个数据在输入之前
要给出一个提示信息
然后得到这个数据
cout << “The first number: ”
接下来cin >> a
我们就拿到数据a 接下来拿到数据b
然后计算
获取两个数较大的那一个
这里有一个很特殊的表达式
我们称之为三元表达式
它叫“?:”表达式
它分成三段 所以带三个操作数
一个是“a>b”条件表达式
后面跟着两个子表达式 a或b
它的意思其实很简单
问a是不是大于b
如果是 那么这个结果就是a
否则结果就是b
这就是这个三元表达式的意义
然后把它的结果赋值给max
max就是a、b两个数中较大的那一个
然后cout输出结果
然后return 0 做完了
这就是一个标准的顺序控制结构
所以从这里面
你看到一个标准的三元表达式
“?:”中间插了三个操作数
其计算过程是先计算表达式1的值
这个主要还是条件表达式
判断它的结果是真或者假
如果条件为真
然后它就做表达式2
把这个表达式2算出来 得到结果
然后把结果就作为三元表达式的结果
如果那个条件表达式1的结果是false
那我们就去做表达式3
把它的结果算出来
然后作为整个三元表达式的结果
这就是我们刚才的例子
“a > b ? a : b”
因为“?:”表达式优先级非常低
它低于“a > b”
所以那个小括号可以不要
它实际上等价于我们后面要讲的if分支结构
就是If (a > b )
然后x赋值为a 否则x赋值为b
这就是我们三元表达式的意义
基本上等价于这个东西
对于一个简单的计算
使用三元表达式
实际上要比if-else语句要方便得多
第二种就是分支结构
分支结构要根据某一个特定的条件判断
去运算 然后得到一个结果
这个结果往往是一个true和false
一个真假值的结果
然后我们根据这个真假值来决定
去做什么样的语句
这里面包括语句块A或语句块B
当条件为真的时候我就做语句块A
当条件为假的时候呢我就做语句块B
这是最基本的二路分支结构
真分支一路 假分支一路
有的时候 真分支这一路是存在的
假分支呢这一路呢 我什么都不需要做
就如果条件为真我就做某件事情
条件为假的话什么都不用管了
那假分支可以省略
接下来就是循环结构
循环结构和分支结构实际上有一些雷同
首先 它肯定会有一个条件表达式
用来决定它的真假条件
但是它和分支结构有一点不一样的地方
就是要根据条件表达式的计算结果
来决定循环体——我们这里面
看到的是语句块A将重复执行多少遍
整个程序从一个单入口进来
去做条件表达式
然后判断条件表达式结果是真还是假
如果是假 结束
如果是真 就做语句块A
做完语句块A以后
重新去做条件表达式
看它的值是真或者假
如果是假 还是退出
如果是真 继续重复做语句块A
按照这样一个过程不断重复
这种循环称它为while循环
-1.1 提纲
-1.2 程序设计的基本概念
-1.3 简单C/C++程序介绍
-1.4 程序设计的基本流程
-1.5 基本语法元素
-1.6 程序设计风格
-1.7 编程实践
-第一讲 C/C++基本语法元素--编程实践提交入口
-2.1 提纲
-2.2 结构化程序设计基础
-2.3 布尔数据
-2.4 分支结构
-2.5 break语句
-2.6 循环结构
-2.7 编程实践
-第二讲 程序控制结构--编程实践提交入口
-3.1 提纲
-3.2 函数声明、调用与定义
-3.3 函数调用栈框架
-3.4 编程实践
-第三讲 函数--编程实践提交入口
-4.1 提纲
-4.2 算法概念与特征
-4.3 算法描述
-4.4 算法设计与实现
-4.5 递归算法(一)
-4.6 递归算法(二)
-4.7 容错与计算复杂度
-4.8 编程实践
-第四讲 算法--编程实践提交入口
-5.1 提纲
-5.2 库与接口
-5.3 随机数库(一)
-5.4 随机数库(二)
-5.5 作用域与生存期
-5.6 典型软件开发流程(一)
-5.7 典型软件开发流程(二)
-5.8 编程实践
-第五讲 程序组织与开发方法--编程实践提交入口
-6.1 提纲
-6.2 字符
-6.3 数组(一)
-6.4 数组(二)
-6.5 结构体
-6.6 编程实践
-第六讲 复合数据类型--编程实践提交入口
-7.1 提纲
-7.2 指针基本概念
-7.3 指针与函数
-7.4 指针与复合数据类型(一)
-7.5 指针与复合数据类型(二)
-7.6 字符串
-7.7 动态存储管理(一)
-7.8 动态存储管理(二)
-7.9 引用
-7.10 编程实践
-第七讲 指针与引用--编程实践提交入口
-8.1 提纲
-8.2 数据抽象(一)
-8.3 数据抽象(二)
-8.4 链表(一)
-8.5 链表(二)
-8.6 链表(三)
-8.7 链表(四)
-8.8 函数指针(一)
-8.9 函数指针(二)
-8.10 抽象链表(一)
-8.11 抽象链表(二)
-8.12 编程实践
-第八讲 链表与程序抽象--编程实践提交入口
-9.1 提纲
-9.2 程序抽象与面向对象
-9.3 类类型
-9.4 对象(一)
-9.5 对象(二)
-9.6 类与对象的成员(一)
-9.7 类与对象的成员(二)
-9.8 类与对象的成员(三)
-9.9 继承(一)
-9.10 继承(二)
-9.11 继承(三)
-9.12 多态(一)
-9.13 多态(二)
-9.14 编程实践
-第九讲 类与对象--编程实践提交入口
-10.1 提纲
-10.2 四则运算符重载(一)
-10.3 四则运算符重载(二)
-10.4 关系与下标操作符重载
-10.5 赋值操作符重载(一)
-10.6 赋值操作符重载(二)
-10.7 赋值操作符重载(三)
-10.8 赋值操作符重载(四)
-10.9 赋值操作符重载(五)
-10.10 流操作符重载(一)
-10.11 流操作符重载(二)
-10.12 流操作符重载(三)
-10.13 操作符重载总结
-10.14 编程实践
-第十讲 操作符重载--编程实践提交入口
-11.1 提纲
-11.2 泛型编程概览
-11.3 异常处理机制(一)
-11.4 异常处理机制(二)
-11.5 运行期型式信息(一)
-11.6 运行期型式信息(二)
-11.7 模板与型式参数化
-11.8 题外话:术语翻译
-11.9 泛型编程实践(一)
-11.10 泛型编程实践(二)
-11.11 泛型编程实践(三)
-11.12 泛型编程实践(四)
-11.13 泛型编程实践(五)
-11.14 泛型编程实践(六)
-11.15 泛型编程实践(七)
-11.16 泛型编程实践(八)
-11.17 泛型编程实践(九)
-11.18 泛型编程实践(十)
-11.19 编程实践
-第十一讲 泛型编程--编程实践提交入口
-12.1 提纲
-12.2 程序执行环境(一)
-12.3 程序执行环境(二)
-12.4 程序执行环境(三)
-12.5 程序执行环境(四)
-12.6 输入输出(一)
-12.7 输入输出(二)
-12.8 文件系统
-12.9 设备
-12.10 库(一)
-12.11 库(二)
-12.12 makefile文件(一)
-12.13 makefile文件(二)
-12.14 makefile文件(三)
-12.15 编程实践
-第十二讲 Linux系统编程基础--编程实践提交入口
-13.01 提纲
-13.02 进程基本概念
-13.03 信号
-13.04 进程管理(一)
-13.05 进程管理(二)
-13.06 进程管理(三)
-13.07 进程间通信(一)
-13.08 进程间通信(二)
-13.09 进程间通信(三)
-13.10 进程间通信(四)
-13.11 进程池
-13.12 编程实践
-第十三讲 进程编程--编程实践提交入口
-14.1 提纲
-14.2 线程基本概念
-14.3 线程管理(一)
-14.4 线程管理(二)
-14.5 线程管理(三)
-14.6 线程管理(四)
-14.7 线程同步机制(一)
-14.8 线程同步机制(二)
-14.9 C++11线程库(一)
-14.10 C++11线程库(二)
-14.11 C++11线程库(三)
-14.12 C++11线程库(四)
-14.13 C++11线程库(五)
-14.14 编程实践
-第十四讲 线程编程--编程实践提交入口
-15.1 提纲
-15.2 Internet网络协议
-15.3 套接字(一)
-15.4 套接字(二)
-15.5 编程实践
-第十五讲 网络编程--编程实践提交入口