什么是流程控制
-
流程控制的分类
顺序、选择、循环。
任意的程序的功能,无论简单或复杂,都可以通过顺序、选择和循环的流程控制来实现。
顺序
程序的正常运行,即执行完这一条指令,再执行下一条指令,为顺序执行;
选择
定义
-
分类
if语句
if 最简单的用法
格式
if(判断表达式) //如果判断表达式为真,执行语句A,否则不执行语句A
{
语句A;
}
if的作用域
if 默认只能控制一个语句的执行或不执行,如果想控制多个语句的执行或不执行,就必须把这些语句用“{}”括起来;
if..else..的用法
-
if..else if..else..的用法
功能
非零为真;
零为假;
空语句问题
if(a > b); //执行了“;”语句,即空语句,导致代码功能异常
a = b;
switch语句
格式
```c switch(表达式) { case 常量表达式1:
语句1;
break;
case 常亮表达式2:
语句2;
break;
case 常亮表达式3:
语句3;
break;
default:
语句4;
break;
}
其中, a. 所有case后面的常量表达式的类型只能是: 1.枚举常量(枚举变量不可用); 2.数值常量; 3.字符常量; 4.常变量(如const int i); 5.宏定义; b. switch后面括号的表达式允许是任何类型,但在Vc++中只允许为int或char类型。
<a name="IAvWb"></a>
##### 执行逻辑
- 执行switch语句时,计算机根据switch(表达式)中表达式的值,找到与之匹配的case语句,然后从该case语句开始执行下去(**若该case语句没有break,则会继续执行下面的case语句**);
- 当执行完一个case语句后,流程控制就转移到下一个case语句继续执行(**若无break**);
- **case常量表达式只是起语句标号的作用,并不是在该处进行条件判断**;
<a name="Z2Fdc"></a>
##### 功能区分
- switch是选择不是循环,switch中出现的break语句是为了跳出switch语句,避免继续往下执行其它语句;
- 在switch中出现continue是错误的,除非switch本身属于for或while循环的一部分。
<a name="ALrj4"></a>
## 循环
<a name="qPNds"></a>
### 定义
- 某些代码会被重复执行。
<a name="moIih"></a>
### 分类
<a name="DiIUS"></a>
#### for循环
<a name="hFzRa"></a>
##### 格式
```c
语法表达式:
for(表达式1;判断表达式;表达式2)
{
语句A;
}
单个for循环语句:
for(1;2;3)
{
语句A;
}
嵌套for循环语句:
for(1,2,3)
{
for(4,5,6)
{
语句A;
}
语句B;
}
其中,嵌套中的执行顺序为:1-->2-->[4-->5-->6]-->3
while循环
格式
while(判断表达式)
{
语句A;
}
与for的相互比较
for和while可以相互转换
for(1,2,3)
{
A;
}
等价于:
1;
while(2)
{
A;
3;
}
do…while循环
格式
do
{
语句A;
}while(判断表达式); //判断表达式为真,程序继续循环执行,否则退出循环
功能
主要用于人机交互。即程序执行一次特定的程序后,请求用户是否继续执行;
char ch;
do
{
语句A;
语句B;
...;
printf("是否继续执行(Y/N):");
scanf(" %c",&ch);
}while(('y'==ch)||('Y'==ch));
break和continue
break的用法
break如果用于循环语句,则是用来终止循环;
- break如果用于switch语句,则是用于终止switch;
break不能直接用于if语句,除非if语句属于循环内的一个子句(终止对象仍是循环);
break的作用域
在循环嵌套中,break只能终止(退出)距离它最近的循环;
在switch嵌套中,break也只能终止(退出)距离它最近的switch语句;
continue的用法
用于跳过本次循环余下的语句,转去判断是否需要继续执行下次循环;
语法规则:
//for语句中的执行
for(1,2,3)
{
语句A;
语句B;
continue; //如果执行该语句,程序会跳过语句C和D,返回执行语句3
语句C;
语句D;
}
//while语句中的执行
while(判断表达式)
{
语句A;
语句B;
continue; //如果执行该语句,程序会跳过语句C和D,返回执行判断表达式
语句C;
语句D;
}
使用技巧
char ch;
while((ch = getchar()) != '\n') //将有效输入后的非法输入清除
{
continue;
}