我们首先从结构化的
程序设计基础开始讲起
整个程序的控制结构
你可以把它理解成一个黑箱
所谓的黑箱
就是我们实际上不知道
这个箱子里面内部是什么东西
但是 我们知道一个输入进去
然后那边就会出来一个结果
我们就称之为一个黑箱
对于整个程序流程来讲
单入口和单出口控制结构是易于理解的
如果是双入口和双出口
整个程序的流程就非常难以理解
为啥呢 是因为整个程序的控制结构
是一种级联的关系
经过级联以后
整个程序的执行路径就会非常非常复杂
所以 我们要特别强调
所有程序流程控制
都要求是单入口和单出口的
结构化程序设计
实际上包括了三种基本控制结构
一种称为顺序结构 一种是分支结构
还有一种是循环结构
关于顺序结构
我们后面会有一个例子
程序中实际上最常见的控制结构
就是分支和循环
当然 架构整个程序本身的那个结构
一定是顺序的
从数学角度上讲
它实际上是一种时间的严格偏序
我们可以证明
任何一个复杂的程序
都可以使用这三种控制结构来完成
我们先来看看这个标准的顺序结构
一个又一个的语句块是级联的
从一个单入口进来然后做语句块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循环