程序语言中的控制流语句用于控制各计算操作执行的次序
1、语句与程序块
在C语言中,分号是语句结束符
用一对花括号把一组声明和语句括在一起就构成了一个复合语句
(也叫做程序块
),复合语句在语法上等价于单条语句。在任何程序块中都可以声明变量
。右花括号用于结束程序块,其后不需要分号
2、if-else语句
将每个else与最近的前一个没有else配对的if进行匹配
建议在有if语句嵌套
的情况下使用花括号
3、else-if语句
多路判定
:一旦某个表达式结果为真,则执行与之相关的语句,并终止整个语句序列的执行
int binsearch(int x, int v[], int n)
{
int low, high, mid;
low = 0;
high = n - 1;
while(low <= high)
{
mid = (low + high) / 2;
if(x < v[mid])
high = mid - 1;
else if(x > v[mid])
low = mid + 1;
else
return mid;
}
return -1;
}
4、switch语句
switch语句是一种多路判定
语句,它测试表达式是否与一些常量整数值
中的某一个值匹配,并执行相应的分支动作
每一个分支都由一个或多个整数值常量或常量表达式
标记。如果某个分支与表达式的值匹配,则从该分支开始执行。default分支是可选的
break语句将导致程序的执行立即从switch语句中退出。跳出switch语句最常用的方法是使用break语句与return语句
正常情况下,为了防止直接进入下一个分支执行,每个分支后必须以一个break语句结束。除了一个计算需要多个标号的情况外,应尽量减少从一个分支直接进入下一个分支执行的这种用法
,在不得不使用的情况下应该加上适当的程序注释
作为一种良好的程序设计风格,在switch语句最后一个分支(即default)的后面也加上一个break语句
5、while循环与for循环
for循环语句的3个组成部分可以是任何表达式
。最常见的情况是,表达式1与表达式3是赋值表达式或函数调用,
表达式2是关系表达式
。这3个组成部分中的任何部分都可以省略,但分号必须保留
在设计程序的时候到底选用while还是for循环语句,主要取决于程序设计人员的个人偏好
当for循环终止后,循环变量的值仍然可以保留(前提是该变量是在循环外定义的)
for语句的各组成部分可以是任何表达式
,所以for语句并不限于通过算术级数
进行循环控制
void shellsort(int v[], int n)
{
int gap, i, j, temp;
for(gap = n / 2; gap > 0; gap /= 2)
{
for(i = gap; i < n; i++)
{
for(j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap)
{
temp = v[j];
v[j] =v[j + gap];
v[j + gap] = temp;
}
}
}
}
逗号运算符
是C语言优先级最低的运算符
,被逗号分隔表达式按照从左到右
的顺序进行求值,最右边表达式的结果的类型和值为其结果的类型和值
某些情况下的逗号并不是逗号运算符,这种情况下逗号并不保证各表达式按从左至右的顺序求值
逗号运算符最适用于关系紧密的结构中
,譬如需要在单个表达式中进行多步计算的宏
6、do-while循环
该循环在循环体执行后测试终止条件
7、break语句与continue语句
break可以用于for、while与do-while循环
break语句能使程序从switch语句或最内层循环中
立即跳出(直跳一层而已)
continue语句用于使for、while或do-while语句开始下一次循环的执行
。在while与do-while语句中,continue语句的执行意味着立即执行测试部分
;在for循环中,则意味着使控制转移到递增循环变量部分
continue语句只用于循环语句
,不用于switch语句
8、goto语句与标号
C语言提供了可随意滥用的goto语句
以及标记跳转位置的标号
。从理论上讲,goto语句是没有必要的,实践中不使用goto语句也可以很容易地写出代码
goto最常见的用法是终止程序在某些深度嵌套
的结构中的处理过程
标号的命名同变量命名的形式相同,标号的后面要紧跟一个冒号。标号可以位于对应的goto语句所在函数
的任何语句的前面。标号的作用域是整个函数
(顺序不重要)
建议尽可能少地使用goto语句