一、顺序结构
顺序结构的程序设计是最简单的,起包含的语句按照书写的顺序执行,且每条语句都将被执行。其他的结构可以包括顺序结构,也可以作为顺序结构的组成部分。
它的执行顺序是自上而下,依次执行。
二、选择结构
1、if(…) {…}
-
- 一般形式:
if (表达式) { 语句; }
表达式:
-
-
- 用非 0 值表示真,用 0 表示假;
- if(flag) 相当于 if(flag!=0);
- 浮点数无法与 0 比较,只能用近似的值比较;例: 1e-6 等于1x10的-6次方可以看成0来使用;
-
-
- 用于单分支选择结构;
- 如含有交叉关系,使用并列的if语句;
请写出 float x 与“零值”比较的 if 语句:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
EPSINON应该是一个很小的值吧 因为计算机在处理浮点数的时候是有误差的,所以判断两个浮点数是不是相同,是要判断是不是落在同一个区间的,这个区间就是 [-EPSINON,EPSINON] EPSINON一般很小,10的-6次方以下吧,具体的好像不确定的,和机器有关
不可将浮点变量用“==”或“!=”与任何数字比较。
千万要留意,
无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
假设浮点变量的名字为x,应当将
if (x == 0.0) // 隐含错误的比较
转化为
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON是允许的误差(即精度)。
2、if(…) {…} else {…}
-
- 一般形式:
if(表达式) { 语句1; } else { 语句2; }
-
- 用于双分支控制的条件语句;
- 用于非此即彼的关系时;
3、if(…) {…} else if(…) {…} … else if(…) {…} else {…}
-
- 一般形式:
if(表达式1) { 语句1; } else if(表达式2) { 语句2; } … else if(表达式n) { 语句n; } else { 语句n+1; }
-
- 用于多分支的控制的条件语句;
- 如果当前语句只有1条,则{}可以忽略,但是从编码规范的角度要求必须书写
- 如果是多条语句,则必须加{}
- 分支结构的条件注意不要出现重合部分,理应相互互补
- 一般情况,执行几率大的条件靠前书写
4、switch() {case …: …; case …: …; … default: …;}
- 条件:只能是整型变量或整型表达式(不允许出现浮点类型)
- case后面跟的条件只能是常量或者是常量表达式
-
- 一般形式:
switch(表达式) { case 常量1:语句1; case 常量2:语句2; … case 常量n:语句n; default: 语句n+1; }
-
- 用于多路选择的语句;
switch语句相当于多个if-else语句;
(表达式)只能是char型或者int型;
case 后面至少要有一个空格,常量后面是冒号
(表达式)与 常量类型要保持一致;
记得记得记得 在需要跳出的时候,在语句后面加上break;
- switch使用bread跳出分支结构
- 单纯的if语句不允许使用break
- if和switch之间可以相互嵌套
循环:for、do...while、while、goto...loop、递归
无限循环:一般会用在系统机制上
有限循环:当前循环具有规定的次数
三、循环结构定义
定义:从 main() 函数开始执行,从上往下,使得某些语句重复执行。
循环结构的程序:在顺序结构中,加入循环控制语句后的程序,比如循环控制语句 while、do … while、for等常用的循环控制语句。
循环三要素:循环变量的初值、循环变量的判断、循环变量的更新。
循环体结束标志:循环判断条件为假时跳出循环;break 语句存在,跳出循环。
循环控制语句:
1、for 循环
for(表达式1;表达式2;表达式3) { 语句; }
- for( 表达式1 ; 表达式2 ; 表达式3 )。
- 表达式 1 通常是为循环变量赋初值,只执行一次。可省略。
- 表达式 2 通常为循环条件,表示是否继续执行循环体,该判断条件若恒真,则会进入死循环。可省略。
- 表达式 3 通常为更新循环变量的值,可省略。
for循环的执行过程: 1 2 3 2 3 2 3 2......
for(循环变量赋初值;循环条件;循环变量增值) { 语句; }
for 循环常见问题
- 忘记定义循环变量或对循环变量进行初始化
- 循环条件的缺少时会造成死循环
- 循环变量不更新也可能会造成死循环
- for 循环语句中的分号不可省略
2、while循环;
表达式1; while(表达式2) { 语句; 表达式3; }
- while后面的语句称为循环体;
- 循环体执行的次数由循环条件表达式(表达式2)来确定;
- 当循环条件表达式为真值时就执行循环体;
- while(1)//是一个死循环
注意:
一定要给i赋初值;
如果没有i++那么这个while循环就是个死循环;
3、do...while循环
表达式1; do { 语句; } while(表达式2);
先执行一次指定的循环体语句,再判别表达式是否为真,若为真返回重新执行循环体语句。
注意while后的()后是有;的
while与do...while两者的区别:
- while循环先判断再执行;
- do...while循环先执行再判断:
- 只要第一次进入循环的条件就不满足,那么这两种循环的结果可能不同;
break 语句
- 格式:break ;(跳出)
- 功能:终止退出。
- 常用范围:循环体中和switch
作用:可以使流程跳到循环之外(结束整个循环过程),接着执行循环体下面的语句。
注意:break语句只能用于循环语句和switch语句,不能单独使用;
continue 语句
- 格式:continue ;
- 功能:结束当前循环,继续进行下一次循环,没有跳出循环体,还在当前循环体中,只是进行了下一次循环中。
- 范围:循环体中。
作用:并不是终止整个循环,只是提前结束本次循环,继续执行下次循环;