一般的程序设计语言中的执行结构一般有三种,顺序,选择,循环。
选择结构
if else
只存在if
if(表达式)
{
语句;
}
if else结构
if(表达式)
{
语句;
}
else
{
语句;
}
多层嵌套
if(表达式)
{
语句;
}
else if(表达式)
{
语句;
}
..............
else
{
语句;
}
对于 else 来说,总是与前面第一个没有配对的 if 相结合,容易造成混淆。因此多数时候都会将选择结构嵌套在 else 后,写成 else if 的形式。为了防止混乱,也可以使用大括号对齐结构。
switch
if else 能够实现区间的选择,而如果要对具体的点进行选择,也可以使用 switch。
switch(表达式)
{
case 常量 1:
代码块 1;
break; // 此处的 break 不可以省略
case 常量 2:
代码块 2;
break; // 此处的 break 不可以省略
case 常量 3:
代码块 3;
break; // 此处的 break 不可以省略
case 常量 4:
代码块 4;
break; // 此处的 break 不可以省略
default:
代码块;
break; // 此处的 break 可以省略
}
-
switch (表达式) 中的表达式,必须为整型和字符型
-
case 只能为常量表达式
-
case 分支一定要与 break 连用,从而跳出 switch,不然会连续执行后方的语句直到下一个 break。
-
两个 case 块之间,可以不用大括号。
循环结构
循环结构用来重复执行某个代码段。循环结构中存在三个要素:循环初始条件,循环终止条件,循环变量趋向终止条件。
while
while (表达式)
{
语句;
}
do while
do
{
语句;
}while (表达式);
-
while 结构的循环语句在判断表达式为假时,可能一次都不执行
-
do while 结构至少执行一次,之后判断表达式真假,为真时,才继续执行
-
do while 在输入性检查方面还是比较方便的
for
for (表达式 1; 表达式 2; 表达式 3)
{
语句;
}
-
表达式 1 为循环初始条件,如果结构之外已经完成初始化,可以省略
-
表达式 2 为循环终止条件,如果在循环体中存在终止条件,可以省略
-
表达式 3 为循环趋近条件,如果在循环体中存在趋近条件,可以省略
对于所有的循环结构来说:
- 所有循环结构的实质一样,只是实现途径不同,解决具体问题时的方便程度也不相同
- while 一般用于循环次数不确定的情况,for 一般用于循环次数确定的情况,do while 一般用于至少需要执行一次的情况。
- for 和 while 都是先判断再执行,do while 则是先执行再判断
当然,所有的循环都可以实现嵌套,进行嵌套时:
- 从外到内书写循环嵌套
- 循环控制变量可以采用“半开半闭区间”的写法,如 for (i = 0 ; i <= 10 ; i++)
- 嵌套时,应该将最长的循环放在最内层,最短的循环放在最外层,以减少 cpu 跨切循环层的次数
程序跳转
break
用来提前结束循环或者选择(switch),只能跳出当前层循环。
continue
用来结束当前本轮循环,放弃本轮循环的后续语句,转到执行下一次循环。只能用在循环结构中。
return
结束当前函数调用,返回结果。如果当前函数是 main 函数,则该进程结束。
goto
在执行到 goto 语句时,程序会直接跳转到 goto 后紧接的标识语句处,如下所示:
#include <stdio.h>
#include <Windows.h>
int main()
{
int i, j;
for (i = 0; i <= 10; i++)
{
for (j = 0; j <= 10; j++)
{
printf("%d,%d\n", i, j);
if (i >= 5)
goto target;
}
}
target:printf("everying is over;");
system("pause");
return 0;
}
执行结果为:
0,0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
0,10
1,0
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
1,10
2,0
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
2,10
3,0
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
3,10
4,0
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
4,10
5,0
everying is over;
但是 goto 语句在实际使用时用的并不是太多,因为会破坏结构化程序设计流程。但是 goto 跳出多重循环的效率还是挺高的,还有就是能够进行错误集中处理。