02.程序控制结构
结构化程序设计基础
程序的控制结构(黑箱)
单入口单出口的控制结构易于理解
三种基本控制结构
顺序结构
由一组顺序执行的处理块组成,每个处理块可能包含一条或一组语句,完成一项任务。是最基本的算法结构。
分支结构
根据某一条件的判断结果,确定程序的流程,即选择哪一个程序分支中的处理块去执行。最基本的分支结构是二路分支结构
循环结构
根据某一条件的判断结果,反复执行某一处理块的过程。最基本的循环结构是当型循环。
复杂控制结构
控制结构可以嵌套,以构成更复杂的控制结构
布尔数据
枚举类型
枚举类型的声明
格式:enum 枚举名 {元素名1,元素名2,...,元素名n};
例:enum MONTH{JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC};
枚举类型声明中的元素为枚举文字,不是变量
枚举类型变量的定义
例:MONTH month;
枚举类型的意义
将多个文字组织在一起,表达从属于特定类型的性质
用户自定义类型
自定义类型的格式
格式:typedef 原类型标识 新类型名;
例1:typedef int DWORD;
自定义类型的性质
新类型与愿类型相同,并未产生新类型,重新命名的自定义类型使程序更易理解
若整数可以用来表示两类不同数据对象,使用自定义类型可以区分它们
自定义类型不是简单的类型替换,虽然它们确实等同
布尔类型
bool类型
取值:false、true
bool量的定义
定义:bool modified;
赋值:modified = true;
涉及到操作符的优先级:优先级从高到低排序
逻辑非"!";小于"<"、不小于">="、大于">"、不大于"<="(同级);等于"="、不等于"!="(同级);逻辑与;逻辑或"||"
if分支结构
if分支结构的三种格式
格式一:if(条件表达式) {语句序列}
格式二:if(条件表达式) {语句序列1} else {语句序列2}
格式三:if(条件表达式1) {语句序列1} else if(条件表达式2) {语句序列2} ... else {语句序列n}
switch分支结构
格式:
switch(表达式)
{
case 常数表达式1: 语句序列1
case 常数表达式2: 语句序列2
.
.
.
case 常数表达式n: 语句序列n
default:默认语句序列
}
计算过程
先计算表达式的值,依次与常数表达式比较,若相同则执行该分支(字句),否则转向default分支,最后退出switch语句
特别说明
switch后面的表达式必须为整型、字符型或枚举型;case后面必须为常量表达式,且各个case的值必须不同;若无default分支,且无匹配的case分支,则不执行;case分支中的语句可以有多条,不需要花括号
break语句的目的:终止switch语句的执行。如果没有break语句,则程序会从指定的case分支开始,并在该分支结束后继续执行下去,除非switch语句结束,后面的其他case分支或default分支中的语句都会得到执行。原因是case字句中的常数表达式仅起到语句标号的作用,不是分支之间的分隔标记,case只起到了什么情况开始进入switch分支语句的作用。
while循环结构
while循环格式
while (表达式) 循环体
while循环执行流程
先判断后执行:表达式为真时,执行一遍循环体(迭代一次),返回重新计算表达式的值以确定是否重复执行循环体;若表达式为假,则终止循环。为保证循环终止,循环体内应有能改变表达式值的语句。
for循环结构
递增递减表达式优先级非常高
前缀递增递减
格式:++变量名称;--变量名称;
计算要诀:先递增递减,再参与运算
例:设a为1,b=++a*3等价于a=a+1;b=a*3;
a结果为2,b结果为6
后缀递增递减
格式:变量名称++;变量名称--;
计算要诀:先参与运算,再递增递减
例:设a为1,b=a++*3等价于b=a*3; a=a+1;
a结果为2,b结果为3
注意事项 操作数必须为变量,而不能为其他表达式,不要在复杂表达式中使用递增递减操作符,可能带来错误结果。
for语句
for循环格式
for(初始化表达式;条件表达式;步进表达式) 循环体
for循环执行流程
先判断后执行:先执行初始化表达式,再计算条件表达式,并根据其结果决定是否执行一遍循环体(为真时执行),计算步进表达式的值(循环再次“初始化”),返回重新计算条件表达式的值以确定循环是否终止。初始化表达式只执行一次。